参数化接口标识符技术的制作方法

文档序号:6443677阅读:276来源:国知局

专利名称::参数化接口标识符技术的制作方法参数化接口标识符技术
背景技术
:用于标识计算语言中的接口(例如,组件对象模型(COM))的传统技术依赖于编程人员为每个接口人工地创建全局唯一标识符(⑶ID)。一般地,创建并实现接口标识符以使得组件可在二进制级上互操作。然而,因为这些传统的技术依赖于编程人员来创建标识符,两个编程人员将不能独立地计算相同接口的相同接口标识符,使得他们不能设计可以彼此互操作的组件。
发明内容描述了参数化接口标识符技术。在一个或多个实现方式中,获得以编程模型的二进制标准表示的参数类型(parametrictype)的文本描述,以及至少部分地基于所获得的参数类型的文本描述来生成接口标识符。在一个或多个实现方式中,接收对实例化接口的请求。获得描述接口的参数列表的、用于该接口的参数化接口定义。向接口分配接口标识符,该接口标识符至少部分地基于参数列表。在一个或多个实现方式中,一个或多个计算机可读存储介质包括计算机可执行指令,其响应于计算设备的执行,使得计算设备执行操作,包括根据组件对象模型(COM),基于用于接口的参数类型的定义来自动地生成文本描述;至少部分地基于该文本描述生成全局唯一标识符(⑶ID);并将⑶ID分配为接口的接口标识符。提出本
发明内容,来以简化形式介绍了以下在具体实施方式中进一步描述的概念选集。本
发明内容既不意图标识所要求主题的关键或重要特征,也不意图被用于辅助确定所要求主题的范围。参照附图描述了具体实施方式。在图中,附图标记的最左侧数字(多个)标识了附图标记首次出现的图。相同的附图标记在说明书及图中的不同实例中的使用可指示相似或相同的项目。图1是可操作为采用此处描述的参数化法技术的示例实现方式中的环境的说明。图2是示例实现方式中的系统的说明,其中更详细地将图1的IID生成模块示为生成兼容互操作语言的二进制标准的、用于对象的示例IID。图3是描绘了其中示出了生成参数化接口标识符的示例实例方式中的过程的流程图。图4是描绘了其中生成兼容互操作语言的二进制标准的接口标识符的示例实现方式中的过程的流程图,。图5是描绘了描述示例实例算法的示例实现方式中的过程的流程图。图6是可操作来执行图4的过程的系统的例示。具体实施例方式概述对支持在二进制级(例如,COM等)使用的接口进行编码的传统技术依赖于编程人员人工生成由每个接口使用的标识符。因此,当多个编程人员期望在相同和/或有关接口上工作时,这导致编码更加复杂化。描述了涉及接口标识符参数化法技术的技术。在一个或多个实现方式中,这些技术可用于影响由例如集合和委托(delegate)的领域使用的共用设计范例。例如,参数类型可被指定为充当表达这些范例的基础,同时维护类型安全并提升易用性。例如,为了表达COM内的参数类型,为每个参数化的接口自动生成GUID。然后,将该⑶ID映射到接口,就好像其被“压平”到操作的COM接口中那样。自动⑶ID生成和参数化接口表达之间的连接使得知道C0M(C0M-aWare)的编程语言能使用基于COM的参数类型。这些技术适合于依赖于二进制标准进行通信的各种各样的其他语言。因此,虽然在以下讨论中给出COM作为示例,但是应容易地清楚,可由各种各样的不同类型的语言、系统和体系架构采用这些技术。示例环境图1是可操作来采用此处描述的参数化法技术的示例实现方式中的环境100的例示。例示的环境100包括计算设备102,其可以以各种方式配置。例如,计算设备102可被配置为能够通过网络104进行通信的计算机,诸如台式计算机、移动台、娱乐家用电器、与显示设备通信耦连的机顶盒、无线电话、游戏控制台等。另外,虽然示出了单个计算设备102,但是计算设备102可以代表多个不同设备,如由企业利用来执行操作的多个服务器。因此,此处描述的操作可以跨越机器边界。计算设备102还可包括实体(例如,软件),其使得计算设备102的硬件(例如,处理器、功能块等)执行各操作。例如,计算设备102可包括被配置为保持指令的计算机可读介质,该指令使得计算设备,并且更具体地,使得计算设备102的硬件执行各操作。因此,指令用于配置硬件以执行各操作,并以这种方式导致硬件的变换来执行各功能。可由计算机可读介质通过各种不同的配置向计算设备102提供指令。一个这样的计算机可读介质的配置是信号承载介质,并且因此被配置为诸如经由网络104向计算设备的硬件传输指令(例如,作为载波)。计算机可读介质还可被配置为计算机可读存储介质,并且因此不是信号承载介质。计算机可读存储介质的示例包括随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存、硬盘存储器,以及可使用磁、光学和其他技术来存储指令和其他数据的其他存储器设备。虽然网络104被例示为因特网,但可假设网络是各种各样的配置。例如,网络104包括广域网(WAN)、局域网(LAN)、无线网络、公共电话网络、内联网等等。而且,虽然示出了单个网络104,但是网络104可被配置为包括多个网络。计算设备102还被例示为实现互操作语言106。互操作语言106可用于支持用于通信的语言中立技术,其可包括在计算设备102自身内以及跨越机器边界(例如,经由网络104与另一计算设备)的进程间通信。一个类型的互操作语言涉及允许共享数据的二进制接口的使用。例如,互操作语言106可包括对象108,其兼容组件对象模型(COM)是可重用的,并4且因此可从其他对象继承等。这些对象108可提供各种各样的功能性。为了访问这个功能性,对象108包括接口110,以与对象108的各方法112(即,功能性)进行交互。因此,可调用接口110来访问对应的方法112。像对象一样,接口也可从其他接口继承。在COM的示例实现方式中,接口112的接口标识符(IID)114被形成为具有128比特的全局唯一标识符(GUID),但是还可预期其他的实现方式。然而,如前所述,传统的接口标识符由编程人员自身人工地指定。因此,在多个编程人员将要在相同对象108上工作,在对象108的相同或不同接口110或方法112等上工作的情况下,由编程人员执行的、涉及使用具有这样的接口标识符的互操作语言的编码可能变得复杂。在一个或多个实现方式中,采用参数化技术来向接口(诸如,兼容互操作语言106的对象108的接口110)分配接口标识符。例如,可采用参数化技术分配作为全局唯一标识符(⑶ID)来工作的二进制标识符,以使用参数来彼此唯一地标识各接口。其也可被用于发现针对接口和对应方法等的封送器(marshaler)。在各种示例之一中,当利用类型语境(如方法参数位置)中的类型的变元列表调用参数化接口时,进行参数化接口的实例化。例如,“HRESULTfoo(X<Y>X)”利用名为“Y”的类型变元实例化名为“X”的参数化接口。应注意到,一些变元可能不具有类型。例如,验证或约束变元乃至可执行程序代码的数字、串和其他值可改变涉及将要如何生成“压平”的接口定义的各种因素。因此,在图1的环境100中例示了接口标识符(IID)生成模块116。IID生成模块116代表使用参数化技术生成IID114的功能性。例如,IID生成模块116可作为由编译器118执行的编译的一部分来操作以根据此处描述的参数化技术来生成IID114。例如,IID生成模块116可通过使用参数类型表达由诸如集合和委托之类的领域使用的共用设计范例。以此方式,可维护类型安全和易用性,可参照附图找到其进一步讨论。图2描绘了示例实现方式中的系统200,其中更详细地将IID生成模块116示出为以互操作语言106中生成对象108的示例IID114。在例示的示例中,IID生成模块116被例示为影响参数化接口定义202。例如,参数化接口定义202可指定参数206的列表204,其可被用作生成参数化接口标识符的基础,在以下讨论中,其还可被称为接口标识符。参数化接口定义202还可为接口指定名称208、com继承条款(com-inheritanceclause)210、可选的接口需求条款212和接口主体214。在com继承条款210、接口需求条款212和接口主体214中,任何类型语境可附加地命名由参数化接口定义202中的列表204指定的类型,或用参数化接口定义202的列表204指定的类型实例化其他参数化接口。而且,在一个或多个实现方式中,参数化接口定义202可指定参数206要被用于创建接口标识符114的顺序,可采用逻辑(例如,布尔连接器)等等。当以高级语言(例如,通过IDL)产生用于消耗(consumption)的输出时,其确保输出将完全地定义在该输入中被实例化的每个参数化接口。例如,如果输入实例化“X<int>”及其输出是“foo.h”,则导入“foo.h”的高级语言能够实现X<int>。然后,如果输入未实例化X<float>,则可能不能让“foo.h”的用户实现X<float>,相反用户也将编辑输入以实例化X<float>。IID生成模块116采用的算法可包括以下特征a)当利用匹配的变元实例化參数化类型两次吋,两个实例被分配了相同接ロ或委托主体以及相同的IID114。b)如果实例化两个不同的參数化类型,即使利用相同的变元,则统计学上不太可能向两个实例分配相同的IID114。C)如果实例化參数化类型两次,但利用不同的变元进行,则统计学上不太可能向两个实例分配匹配的IID114。在一个或多个实现方式中,不允许利用与变元或者与可能出现在变元列表中的其他參数化类型的变元相同的实例(即,循环实例)来实例化參数化类型。例如,如果X=Foo<Y>,并且Y=Foo<X>,则已违反非循环性。然而,如果X=Foo<Y>并且Y=Foo<int>,则已维持非循环性。然而,在其他实现方式中,由系统解决循环性。可參照附图找到參数化技术的进一歩讨论。一般地,可使用软件、固件、硬件(例如,固定的逻辑电路)、人工处理或这些实现方式的組合来实现此处描述的任何功能。一般地,此处使用的术语“模块”和“功能性”表示硬件、软件、固件或其組合。在软件实现方式的情况下,模块、功能性或逻辑表示指令和执行由硬件指定的操作的硬件(例如,一个或多个处理器和/或功能块)。指令可被存储在一个或多个计算机可读介质中。如上所述,ー个这样的计算机可读介质的配置是信号承载介质,并且因此被配置为诸如经由网络104向计算设备的硬件传输指令(例如,作为载波)。计算机可读介质还可被配置为计算机可读存储介质,并且因此不是信号承载介质。计算机可读存储介质的示例包括随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存、硬盘存储器,以及可使用磁、光学和其他技术来存储指令和其他数据的其他存储器设备。以下描述的技术的特征是独立于平台的,意味着可在具有各种硬件配置的各种商业计算平台上实现各技木。示例过程以下讨论描述了可利用先前描述的系统和设备实现的接ロ标识符參数化技木。每个过程的各方面可以以硬件、固件、或软件、或其组件实现。过程被示出为指定由ー个或多个设备执行的操作的一組块,并可不必限于用于由各自块执行的操作示出的順序。在以下讨论的部分中,将參考图1的环境100和图2的系统200。图3描绘了其中示出了生成參数化接ロ标识符的示例实例方式中的过程300。接收实例化接ロ的请求(块302)。例如,如前所述,可接收请求以实例化參数化接ロ。获得接ロ的參数化接ロ定义,其描述接ロ的參数列表(块304)。例如,列表204可描述将要被用作生成IID的基础的參数206,如与正被实例化的接ロ有关的參数。将接ロ标识符分配给接ロ,接ロ标识符至少部分地基于參数列表(块306)。以该方式,可至少部分地基于正被标识的接ロ的參数的值,来生成接ロ标识符。可采用各种不同的技木,可參照附图找到其进ー步讨论。图4描绘了其中使用參数类型的文本描述来生成接ロ标识符的示例实现方式中的过程400。获得以编程模型的ニ进制标准表示的參数类型的文本描述(块402)。例如,给定參数类型(例如,像IVectoKint〉),可自动地生成(例如,无需用户介入)參数类型的文本fajdio然后,至少部分地基于所获得的參数类型的文本描述,生成接ロ标识符(块404)。继续先前的示例,然后,接ロ标识符可被用于生成GUID,从而“压平”以ニ进制标准(例如,COM、C++、JAVA、Python等)使用的參数类型。然后,将IID映射到接ロ(块406)。在该示例中,在自动⑶ID生成和參数化接ロ表达之间的连接使得知道COM的编程语言能使用基于COM的參数类型,但是如前所述,还可预期针对互操作语言的其他ニ进制标准,而不脱离其精神和范围。此外,可执行⑶ID的生成,以自动遵循现有COMIID修订规则。因此,当接ロ被修订并被分配新的GUID时,该接ロ的參数化实例也可自动地修订对应的IID。当两个独立方具有接ロ的命名冲突(但是选择唯一的IID)等吋,即使存在接ロ的多个修订,这也允许继续使用參数化接ロ。图5描绘了描述示例实例算法的示例实现方式中的过程500,并且图6描绘了可操作来实现过程500的系统600。因此,以下讨论将參照两个附图。从图6开始,IID生成模块116被例示为接收參数化接ロ实例请求602和描述接ロ、结构、内置定义等的数据604。因此,IID生成模块116可首先采用签名生成模块606,其代表生成可被用作IID的基础的签名的功能性。例如,每个參数化类型可由其作者分配參数化接ロID(块502),其在以下讨论中被縮写为PIID。应注意,PIID不是IID,并不作为变元被传递至QI等等。在一个或多个实现方式中,依赖作者(例如,通过与用户接ロ的交互)以确保PIID对于该P类型(p-type)是唯一的。用于基础类型的类型签名是ASCII八位串,以下出现的表格中示出了其示例,例如,Int32是“i4”。用于非參数化接ロ实例的接ロ的类型签名是以短线形式并被包围在花括号中的、以ASCII进行编码的各个IID,例如,“{00000000-0000-0000-0000-000000000000}”。用于非P委托(p-delegate)实例的委托的类型签名是串“delegate”,并且IID与接ロ一祥。具体语法如下。根据被采用为參数化接ロ定义的部分的语法,来计算參数化类型的IID(块504)。例如,可以根据以下语法来计算參数化类型的GUIDsignature_octets=>guid_to_octetsvwrt—pinterface—namespaceノascii_to_octets(ptype_instance_signature)wrt—pinterface—namespace=>"Ilf47ad5-7b73-42c0-abae_878blel6adee,,ptype_instance_signature=>pinterface_instance_signature|pdelegate_instance—signaturepinterface_instance—signature=>“pinterface(“piid—guid“;,,args“),,pdelegate—instance—signature=>"pdelegate(“piid—guid“;,,args“),,piid—guid=>guidargs=>arg|arg“;,argsarg=>type—signaturetype_signatureニ〉base_type_identifer|com—interface_signature|interface—signature|delegate_signature|interface_group_signature|runtime_class_signature|struct_signature|enum—signature|pinterface_instance_signature|pdelegate_instance_signaturecominterfacesignature=>"cinterface(IInspectable),,base_type_identifier如卜足义interface—signature=>guidinterface—group—signature=>Ig(“interface—group—name“;',default—interface")”runtime_class_signature=ノ"rc(“runtime_class_name“;”default_interface“)”default—interface=>type_signaturestruct—signature=>"struct(“struct—name“;,,args")"enum_signature=>“enum(“enum_name”;,,enum_underlying_type“),,9enum_underlymg_type=ノtype—signaturedelegate—signature=>"delegate(“guid”)"guid=>“{“dashed_hex“},,dashed_hex是当没有传递变元时uuidgen写入的格式dashed_hex=>hex{8}“-,,hex{4}“-,,hex{4}“-,,hex{4}“-,,hex{12}hex=>。然后,计算签名八位位组的哈希(块506)。例如,可根据UUIDRFC4122,计算signature_octets的由sha_l第5版本生成的哈希。在这个示例中,哈希生成模块608使用单个winrtpinterface/pintergroupGUID610作为如RFC4122/4.3中所述的命名空间,并使用由签名生成模块606接收的、用来实例化的pinterface/pintergroup的签名和变元作为名称串。向參数化接ロ实例分配⑶ID以及根据语法计算的签名(块508)。例如,IID生成模块116可将哈希生成模块608计算的值映射到相应的接ロ。因此,根据需要,当将ρ类型实例作为变元传递至另ー參数化接ロ吋,根据类型签名计算的签名用作在语法元素<pinterface_instance_signature"gk,<pdelegate_instance_signature"中。当遇到吋,以下名称可被用于基础类型UInt8映射为“ul,,Int32映射为“i4,,UInt映射为“u4,,Int64映射为“i8,,UInt64映射为“u8,,Single映射为“f4,,Double映射为“f8,,Boolean映射为“bl,,Char16映射为“c2,,String映射为"stringGuid映射为“gl6,,。在实现方式中,上述名称是区分大小写的。除了针对串,类型名称使用单个字母以暗示数据的种类,并续之以以字节为单位的尺寸。这些示例名称可被选择为是简洁的(例如,以避免结构类型签名的大尺寸),以免混淆地表现为类似于WinRT名称、RIDL名称,或者针对任何类型的语言规划名称,并仍保持人类可读。而且,在针对enum_type_signature的一个或多个实现方式中,接下来的type_signature是enum白勺石出类型。对于struct_type_signature,args:针对子段struct白勺type_signatures的按顺序列表。Struct_name和enum_name可以是合格的命名空间,使用句点“·”作为定界符,例如,“namespaceX{structA{int;};}”变为“struct(X.A;i4)”。结论虽然已以特定于结构特征和/或方法动作的语言描述了本发明,但是将理解,在所附权利要求中定义的本发明不必限于描述的特定特征或动作。相反,特定特征和动作被公开为实现所要求的发明的样例。权利要求1.一种由计算设备实现的方法,所述方法包括获得以编程模型的二进制标准表示的参数类型的描述;以及至少部分地基于所获得的参数类型的描述,生成接口标识符。2.如权利要求1所述的方法,其中根据组件对象模型(COM)配置所述二进制标准。3.如权利要求1所述的方法,其中所述描述是所述参数类型的文本描述或二进制元数据表示。4.如权利要求1所述的方法,其中所述二进制标准指定用于由所述计算设备编译的结构,以及各对象如何在所述计算设备的存储器中组织。5.如权利要求1所述的方法,其中自动地遵循修订规则来执行所述生成,使得当对接口作出修订时,自动地修订用作生成所述接口标识符的基础的文本描述。6.如权利要求1所述的方法,其中在运行时间期间,不执行所述接口标识符的生成。7.如权利要求1所述的方法,其中使用参数化接口定义执行所述接口标识符的生成,所述参数化接口定义包括用于生成所述接口标识符的参数列表。8.如权利要求1所述的方法,其中所述生成包括计算对应接口的类型签名和根据所述类型签名计算哈希。9.一种由一个或多个计算设备实现的方法,所述方法包括接收对于实例化接口的请求;获得所述接口的参数化接口定义,其描述所述接口的参数列表;以及为所述接口分配接口标识符,所述接口标识符至少部分地基于所述参数列表生成。10.如权利要求9所述的方法,其中所述参数化接口定义还描述接口的名称、继承条款和接口主体。11.一种计算设备,包括接口标识符生成模块(116),所述接口标识符生成模块被配置为根据如权利要求1-10中的任一个所述的方法进行操作。全文摘要描述了接口标识符参数化技术。在一个或多个实现方式中,获得以编程模型的二进制标准表示的参数类型的文本描述,以及至少部分地基于所获得的参数类型的文本描述生成接口标识符。文档编号G06F9/44GK102567023SQ201110446858公开日2012年7月11日申请日期2011年12月28日优先权日2010年12月28日发明者A.R.拉曼,B.库恩,H.D.威尔逊,J.G.冈萨尔韦斯,K.W.塞克斯,L.W.奥斯特曼申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1