类型推理和类型导向的后期绑定的制作方法

文档序号:6568774阅读:135来源:国知局
专利名称:类型推理和类型导向的后期绑定的制作方法
类型推理和类型导向的后期绑定背景随着编程方法和基础的发展,业己开发出各种应用编程接口 (API)和编程模式来将先前多变型且相对不兼容的编程方法进行标准化和统一化。因此,现代编程经常是将各种API和模式与可再用库联用。此类编程语言持续不断地演进以便于 程序员做指定并便于程序的高效率执行。编译器和/或解释器承担着将高级逻辑翻译成可执行机器代码的重任。 一般而 言,编译器和/或解释器是接收以源代码编程语言(例如,C、 C#、 Visual Basic、 Java等)指定的程序并且将由此提供的逻辑转换成可由硬件设备执行的机器语言的 组件。然而,这种转换无需逐字进行。实际上,常规编译器和/或解释器对源代码 进行分析并且生成非常高效率的代码。例如,程序员写的代码阐述对人类而言直观 且易于理解的操作逻辑流,但是这些代码就计算机执行而言通常效率低下。编译器 和/或解释器能够标识出效率低下之处并且能通过消除不必要的操作和/或在仍实 现预期结果的同时重新编排指令的执行从而在硬件层面上改善程序性能。以此方 式,程序员就能够创建出强健且高效率的软件程序。编程语言包括静态语言和动态语言。静态语言要求在编译之时大多数程序结 构一诸如变量和函数自变量的类型一是确定的。编译器能够以运行时灵活性为代价 检测差错并优化性能。另一方面,动态语言允许用户对程序结构进行更多的运行时 更改,诸如将不同类型的自变量传递给同一函数、以及在某些语言中还可定义新的 类型或类。动态环境能够使运行时定义和链接得以进行。一般而言,类型推理是方便程序员写出正确地归类的应用程序的语言机制。请考虑Dim X = "Hello"作为一个Visual Basic语句的情形,该语句既宣示了变量X还将其值初始化为字符 串"Hello"。编译器知晓右手侧的类型是String (字符串)。因此,编译器能够推理 出变量的类型应该是X。当前,编译器将X的类型设置为该语言中最普通的类型 "Object (对象)",并且利用后期绑定来解析后面仅对类型String合法的像"X丄ength()"这样的代码。后期绑定"指的是其中编译器在运行时插入代码以査找方法"Length (长度)"的操作。对后绑定成员名的这种能力对于其中不能静态获知数据结构的数据密集型 程序、以及对于编写通用解释代码而言尤为重要。然而,后期绑定尽管非常灵活, 但有时候也会引入运行时开销并降低用户界面内的设计时提示(例如,当利用诸如 Intdlisense⑧之类的援助提供者时)。这会妨碍程序语言的灵活性。 因此,需要克服与常规系统和设备相关联的前述示例性缺陷。概述以下呈现了简化概述,以提供对权利要求主题的某些方面的基本理解。本概 述不是广范的纵览。它并非意在标识关键/重要元素,亦非意欲描绘权利要求主题 的范围。这一概述的唯一目的是以一种简化的形式来介绍一些概念,作为稍后呈现 的更为详细的描述的前序。本发明提供了通过供给可选择进入(或选择退出)后期绑定的选项组件来平 衡编程语言中后期绑定和前期绑定的系统和方法,其中后期绑定是基于变量的静态 类型(例如,对象或类型/字符串)而触发的。类型推理组件以编程语言实现,并 且可以调用合适的后绑定助手(例如,用于XML类型的值的XML后绑定助手、 对象的反射后绑定助手等)来以类型导引后期绑定。由此,可基于为变量指定的类 型来触发后期绑定。选项组件可以包括智能标签或类似的重构机制,这能够让用户 选择"作为字符串"或"作为对象",且不仅指定是否期望后期绑定,还指定例如 后期绑定的类型。后期绑定可以是有关该编程语言的默认场景,并且用户能够选择 退出。或者,编程语言可以包括非后期绑定作为默认,其中用户可选择进入。此外, 在VisualBasic (VB)句法的上下文中,智能标签在被点击时能够展开,以显式地 指示类型,其中变量声明即已可用。根据本发明的另一方面,变量可以在编程语言的不同区域(例如,程序段) 具有不同的静态类型。此外,可以执行分析来标识变量在程序的不同段处的类型, 或者为该变量标识一组可能的类型。这能够减轻类型的早期束缚,而如果类型是可 接受的,则可在稍后的时间提供校验。还可以向用户提供有关变量类型变化的反馈 警告(相对于差错而言)。这能够为向户提供灵活性,于是例如相同的变量名就能 在整个编程代码中的若干场合使用。在一相关方法中,用户能够首先选择是否期望后期绑定。随后,用户可指定期望的后期绑定类型。此外,可以根据变量的静态类型提供后期绑定的不同类型(例 如,从其用法中推理)。因此,就能够建立起前期绑定和后期绑定之间的平衡,其中校验在运行时可以放松,而有关静态类型的可用信息可以在编译时加以利用。为实现上述及相关目的,在此结合下列说明和附图描述所要求保护的主题的 特定示例性的方面。这些方面表示了可以实践发明主题的各种方式,它们均落在所 要求保护的主题的范围之内。结合附图阅读下面的详细描述则本发明的其他优点和 新颖特征将变得很清楚。


图1示出了作为本发明增强型编程环境一部分的选项组件。 图2示出了用于类型推理和类型导向的后期绑定的编程环境。 图3示出了根据本发明的变量的静态类型表示的示意图,以及与传统方法的 比较。图4示出了根据本发明一个示例性方面的智能标签的实现。图5示出了基于后期绑定类型采用合适助手的编程环境。 图6示出了在其中变量可以在不同区域具有不同静态类型(例如,作为一组 类型)的代码片段。图7示出了根据本发明一个方面的类型导向的后期绑定的示例性方法。 图8示出了根据本发明的另一个示例性方法。图9用支持具有类型推理和类型导向的后期绑定功能的编程语言的源程序示 出了一种编程环境。图10是描绘可被用于实现本发明的类型导向的后期绑定的编译器环境的框图。图11示出了用于实现本发明各方面的示例性环境。图12是可用于实现本发明的的其它计算环境的示意性框图。详细说明现在参考附图描述本发明的各个方面,其中始终用相同的附图标记来指代相 同的或相应的元素。然而应该了解,附图以及与其相关的详细描述并非旨在把所要 求保护的主题局限于所揭示的特定形式。相反,其意图是覆盖落在权利要求书的精 神和范围之内的所有修改、等效和替换的方案。在此所用的术语"组件"、"系统"等等意指与计算机相关的实体,可以是硬件、 硬件和软件的组合、软件、或执行中的软件。例如,组件可以是但不限于是,在处 理器上运行的进程、处理器、对象、可执行(程序)、执行的线程、程序和/或计 算机。作为例示,运行在计算机上的应用程序和计算机本身都可以是计算机组件。 一个或多个组件可以驻留在进程和/或执行的线程中,而组件可以位于一个计算机 内和/或分布在两个或更多的计算机之间。同样,在此使用词语"示例性的"意指 用作例子、实例或例示。在此被描述为"示例性的"的任何方面或设计并不一定被解 释为比其他方面或设计优先或有利。此外,所揭示的主题可以使用产生软件、固件、硬件或其任意组合的标准编 程和/或工程技术实现为用于控制基于计算机或处理器的设备以实现在此所详述的 诸方面的系统、方法、装置或制品。此处所用的术语"计算机程序"旨在包括可以 从任何的计算机可读设备、载波或介质访问的计算机程序。例如,计算机可读介质 可以包括但不限于磁存储设备(例如,硬盘、软盘、磁条等)、光盘(例如,激光盘(CD)、数字通用盘(DVD)等)、智能卡和闪速存储器设备(例如,闪存卡、 记忆棒)。另外应该明白,载波可以被用于承载计算机可读电子数据,例如那些被 用于传送和接收电子邮件方面或被用于访问网络如因特网或局域网(LAN)的数 据。当然,本领域的技术人员将会认识到,可以对这一配置进行许多修改而不会背 离权利要求书中的范围或精神。首先转向图1,示出了编程环境100,并且编程语言110 (例如,VisualBasic) 通过采用选项组件130而增强。选项组件130能让用户选择进入(或者选择退出) 后期绑定108,其中后期绑定基于为变量(例如,变量可以被赋值为特定静态类型 115或对象120)指定的静态类型而被触发。类型推理组件125用编程语言实现, 其中此种类型组件能够在得到通常不可避免的不完整的类型信息的情况下指定表 达式和变量的类型。这样就在编程语言中提供了一种在后期绑定和前期绑定之间的 平衡,其中可以调用适当的后绑定助手(例如,用于XML的XML后绑定助手、 用于对象的反射后绑定助手等)来对后期绑定进行类型导向。如图所示,类型推理组件125可以基于输入数据流的上下文信息向编译器(未 示出)提供缺失的类型信息。选项组件130还可包括智能标签或类似的重构机制, 这些将在下文中详细描述的标签或机制能够让用户在精确推理的类型或对象之间 选择,并且不仅指定是否期望后期绑定,还指定例如后期绑定的类型。后期绑定可 以是有关该编程语言110的默认场景,并且用户能够选择退出。或者,编程语言110可以包括非后期绑定作为默认,其中用户可选择进入。此外,在Visual Basic (VB)句法的上下文中,智能标签在被点击时能够展开,以显式地指示类型,其中变量声明例如已经可用。首先参考图2,示出了用于类型推理和类型导向的后期绑定的编程环境200, 这些都将在下文中详述。系统200包括由集成开发环境(IDE)开发、设计或编辑 的源程序210。 IDE可与诸如开发人员工作室应用程序之类的更为精密的编程站相 关联,或者与诸如代码文本编辑器之类的更为基础的工具相关联。 一般而言,选项 组件能够让用户选择进入(或选择退出)后期绑定,并且其中变量的静态类型可被 赋值为精确推理的类型或对象。编译器250根据众所周知的编译技术并考虑类型导 向的后期绑定来处理该源代码,从而在260处为计算机生成可执行代码。典型地,对后绑定成员名的这种能力对于其中不能静态获知数据结构的数据 密集型程序、以及编写范型解释代码而言尤为重要。 一般而言,绑定指的是诸如 Visual Basic代码的编程代码进行访问的方法。存在两种Visual Basic使用的绑定类 型,即前期绑定和后期绑定。一般而言,在表达式的目标可以被延迟至运行时的情况下,这一延迟处理被 称为后期绑定。后期绑定允许以无类型的方式使用Object (对象)变量,其中各成 员的所有解析皆基于变量中的值在实际运行时的类型。如果编译环境指定了严格语 义,则后期绑定会引起编译时差错。非公共成员在执行后期绑定时会被忽略,包括 出于重载解析的目的。此外,与前期绑定的情况不同,调用或访问共享成员后绑定 会引起调用目标在运行时被评估。图3示出了根据本发明的变量的静态类型表示在与传统方法比较时的比较结 果示意图。例如,在由区域310表示的传统静态编程语言中,变量在整个编程语 言中都具有相同的静态类型。因而,在传统的静态编程语言中,需要确定变量的用法并且要指定与变量用法相一致的类型(例如,超类型)。.类似地,区域320表示传统的动态语言的方法,其中所有值的类型都被定为 对象。在这些动态语言中,动态语言不具有与变量的静态类型有关的知识。本发明在一个示例性方面涉及中间场330,其中根据值的静态类型提供选择进 入和选择退出(例如,区310和320)以及不同形式的后期绑定。于是,变量能够 在程序的不同区域接受不同的静态类型(例如,静态类型可变的变量)、以及基于 变量的使用而推理的类型。由此,不同的程序片段可以包含同一变量的不同静态类 型(或组)。例如在编译时, 一个变量可以接受整数或按钮(button)的静态类型作为一组可能性。这与传统的静态编程语言形成对照,在传统的静态编程语言中, 变量通常在编程语言的任何地方都只接受一种静态类型。图4示出了根据本发明一个示例性方面的基于智能标签的重构(refactoring)。 考虑图4所示的示例400,其中用户将下列声明键入一 VB程序 Dim X = E其中编译器已知表达式E的类型为T。根据本发明的一个方面,VB可以在例如 VS IDE内的X下显示"智能标签"410。智能标签410可以起到交互图形元素的 作用。因此,如果用户点击或停在智能标签410上,就会出现选项420的下拉菜单。 在本例中示出的两个选项是"T"和"Object"。一般而言,如果用户选择T,则用户是在选择进入静态类型推理,意味着在后 面的代码中,变量X的类型将会是T。具体地,写为"X."的对X的点操作符的 辅助提供者Intellisense⑧将显示类型T已知的字段和方法列表。或者,从智能标签 的下拉菜单中选择"Object"意味着用户正在选择进入对Object的标准VB后期绑 定。这样,编译器和IDE将不会知道有关X的字段和方法的特定列表,所以点操 作符将不会显示辅助提供者(例如,Intellisense )提示,编译器必须生成代码以 在运行时选择字段和方法(经由通过反射实现的元对象协议)。典型地,辅助提供者(未示出)为具体的编程语言(例如,VisualBasic、 C#、 C++、 Java、 J#)提供智能程序辅助(例如,Intellisense )。因此,此类辅助提供 者组件可由特定的语言开发实体(例如,软件公司、大学、个人)提供。辅助提供 者组件可以简化编码,例如通过提供基于程序性上下文的建议,而在语句、类和函 数完成方面为程序员提供帮助。这些建议能够经弹出窗口或框、下拉窗口等来提供。 例如,可以基于同一或另一编译单元中的在前指定来为对部分指定的字或语句的完 成提出建议。应当认识到,后期绑定通常不应被解释为是静态归类的相反面。静态上已知 的类型T可以要求在它的域上做后期绑定。例如,当用户键入Dim X = <book> <title> "Lions, Tigers, and Bears" </title> </book>X的静态类型可以是"XElement",这为XML中的实际项提供了一种后期绑 定。具体地,"X.book.title"将会是合法的代码,并且一般而言将只会在运行时方 被完全解析。于是,Intellisense⑧就能够在用户键入"X."时显示提示(如果范围 内存在XSD模式),但是对"book"和"title"的绑定则稍后进行,即仅在运行 时完成。这种静态己知类型(XElement)和动态己知绑定(X.book、 X.book.title)的混合可称为类型导向的后期绑定(Type-Directed Late Binding)。此外,当用户选择进入对Object的静态类型或后期绑定时,贝UIDE就能够使 用IDE优质列表程序来重写代码,以指示选定的类型。例如,如果用户选择进入T, 则IDE能够用Dim X As T = E替换Dim X = E而如果用户选择进入Object,贝IJIDE能够用 Dim X As Object = E替换Dim X = E在这一优质列表之后,有关选择进入的智能标签可以消失。 此外,在下列代码的上下文中Dim X = "Hello" X = 5并且假设用户在声明时选择进入类型String而非Object,则随后该优质列表程序会 将上述组合重写为Dim X As String = "Hello"X = Ctype(5, String)其中,对内建类型转换函数的显式调用能够依据推理的类型而被插入。此外,因为 不是所有的类型转换皆为合法或有意义,所以类型推理能够帮助编译器和运行时标识无意义的代码。例如Dim X As Integer = 5X = Ctype("Hello",Integer) 是没有意义的,而X = IntegerHash("Hello")或X = Ctype("37",Integer)有意义。此外,如果"Option Strict (选项严格)"为ON (开启),则一般而言要求 用户在编译进行之前选择进入。或者,如果"Option Strict"为OFF (关闭),则 将会为用户尚未选择进入的每一情况选择对Object的后期绑定作为默认。此外,在某些情况下,没有必要在采用每个变量之前对其进行声明。例如, 如果变量X在程序内首次出现是赋值"X = 5",则编译器就可推理变量X的类型 为Integer (整数)。类似地,IDE可以显示带有下拉菜单的智能标签,其中下拉菜 单提供选项"Integer"和"Object"。下列代码可视作一个示例 IF someBooleanExpression THENX = 5 ELSEX = "Hello" END IF对于这个例子,假设该代码是变量X在程序中的首次出现。编译器中的标准 流分析知晓控制可以走分支的任一方向,所以它可以告知类型推理X的类型可以 是Integer、 String或Object中的任一种。为了用户便利,带有这三个选项的智能标 签可以在分支内首个X之下出现。此外,优质列表可以与选择进入的类型相一致 地插入对内建类型转换函数的显式调用。随后,如果用户选择上述String,则优质 列表程序将重写该组合为IF someBooleanExpression THENX = Ctype(5, String) ELSEX = "Hello" END IF未声明变量的默认类型可以是Object,于是若变量X的首次使用不是在可推 理的上下文中,则其类型应被推理为Object。图5示出了根据本发明一个示例性方面的编程环境500。根据本发明的一个方 面,基于对object 520或string 515的选择,将调用合适的助手(诸如,用于XML 的XML后绑定助手510;用于object的反射后绑定助手520)对后期绑定进行类 型导向处理。现参考图6,示出了在其中变量可以在不同区域具有不同静态类型(例如,作 为一组类型)的代码片段。这可以给不同的区域提供灵活性,而无需在早期就束缚 于具体类型。如果类型是可接受的,则准许采用该类型并且稍后的校验再对精确性 加以检验。相反地,传统的静态编程语言在此情况下会报错。如图所示,在610处,假设变量X的静态类型为字符串string,其中还可以提供Intellisense⑧检验。 随后在620处,X可以是数字integer,并且采用有关该X类型的本地知识。可以 用警告625的形式向用户提供有关这一变化的反馈。其后在630处,假设X为按 钮button。在640处,并且在End If之后,X可以是integer或button(但不是string)。 编译器可以跟踪该类型,因为它知道X是integer或button,并且可以假设X是其 中的任一种。或者,可以将X指定为object,而非更为精确的跟踪。这样就能够标 识程序中变量类型已知(或精确规定(preciseprescription))的区域。 作为又一个示例,考虑下列代码Dim X = "Hello" X = 5在语句"X = 5"处,IDE可以显示另一个智能标签以许可用户选择进入来进 行类型切换。在上述方案之下,该代码可被自动重写为Dim X As String = "Hello" — statement 1, declaration...region 1 , X has type String ...X = Ctype(5, String) — statement 2...region 2, X has type String ... IDE通常可以在statement 2处的X下维持一个智能标签,从而允许用户在区域2 选择进入类型Integer、 String或Object。图7示出了根据本发明一个方面的示例性方法700。虽然在此将该示例性方法 图示并描述为代表各种事件和/或动作的一系列框,但是本发明不受这些框的图出 次序的限制。例如,根据本发明,除了在此示出的次序之外,某些动作或事件可以 按不同的次序发生和/或与其他动作或事件同时发生。此外,不是所有示出的框、 事件或动作都是实施根据本发明的方法所必需的。此外,将会认识到根据本发明的 该示例性方法和其他方法可以与在此图示并描述的方法相关联地实现,也可与未示 出或描述的其他方法和装置相关联地实现。首先在710处,可以为变量指定一静态 类型。随后在720处,向用户呈现用于选择进入后期绑定的选项。如果在730处选方法700行进至740,其中可基于选定的静态类型触发后期 绑定。或者,如果用户未选择后期绑定选项,则方法在735处结束。图8示出了根据本发明的另一个示例性方法。首先在810处,可以为在编程 代码第一区域内的变量指定静态类型。随后在820处,该变量可在该代码的第一区 域内使用。在830处,变量的静态类型可以改变为不同的类型,例如一个静态类型 可变的变量。在840处,可以向用户提供有关这一变化的反馈。在850处,随后可 以在编程代码的第二区域内采用该静态类型。这样,代码中就可以存在其中变量可 以在不同区域具有不同静态类型(例如,作为一组类型)的片段。这可以为不同的 区域提供灵活性,而无需在前期就束缚于变量具体类型。图9示出了一种编程环境900,其中的源程序910支持具有类型推理和类型导 向的后期绑定功能的编程语言。这能通过提供后期绑定的选择进入(或选择退出) 来平衡编程语言内的后期绑定和前期绑定。系统900包括可由集成开发环境(IDE) 开发、设计或编辑的源程序910。 IDE可与诸如开发人员工作室应用程序之类的更 为精密的编程站相关联,或者与诸如代码文本编辑器之类的更为基础的工具相关 联。编译器920根据已知的编译技术处理源代码,从而生成用于计算机的可执行代 码930。图IO是描绘可被用于实现本发明的后期绑定选项的编译器环境1000的框图。 编译器环境1000包括编译器1010,而编译器1014包括映射组件1020、前端组件 920、转换器组件1030、后端组件1040、差错校验器组件1050、符号表1060、语 法分析树1070和状态1080。编译器1010接受源代码作为输入并且能够产生执行 代码作为输出。输入可以包括但不限于在此描述的程序性的表达式。编译器环境的 各组件和模块间的关系示出了数据的主要流向。为了简明起见没有示出其他的组件 和关系。取决于实现,组件可以增添、省略、拆分成多个模块、与其他模块和/或 其他模块的配置相组合。编译器1010可以接受具有与处理元素序列相关联的源代码的文件作为输入。 源代码可以包括各种表达式和关联函数、方法和/或其他程序性构造。编译器IOIO 可以协同一个或多个组件来对源代码进行处理以分析构造并生成或注入代码。前端组件1020读取源代码并对其执行词法分析。实质上,前端组件1020读 取源代码中的字符(例如,字母数字式)序列并将其翻译成句法元素或令牌,指示 常量、标识符、运算符号、关键字、和标点等。转换器组件1030将令牌通过语法分析变成中间表示。例如,转换器组件1030能够检查句法并将令牌分组为表达式或其他的句法结构,后者进而接合成语句树。概念上,这些树形成语法分析树1070。此外并且在适当情况下,转换器模块1030 可以将条目放入符号表1030中,符号表930将在源代码中使用的符号名和类型信 息连同相关特性一起列出。状态1080可用于跟踪编译器910在处理接收到或检索到的源代码并形成语法 分析树1070时的进度。例如,不同的状态值指示编译器1010是在类定义或函数的 开始、是刚声明了类成员、还是己经完成了表达式。随着编译器的进展,它不断地 更新状态1080。编译器1010可部分地或者完全地将状态1080曝露给外界实体, 外界实体随之可向编译器1010提供输入。基于源代码内的构造或其他信号(或者以其他方式识别出此机会),转换器 组件1030或另一组件可注入对应于促进高效率及正确执行的代码。编码在转换器 组件1030或其他组件中的规则指示为能实现期望的功能性并识别要注入代码的位 置或要实行其他操作的位置所必须完成的动作。注入的代码通常包括在一个或多个 位置处添加的语句、元数据、或其他元素,但是该术语也可以包括改变、删除、或 以其他方式修改现有的源代码。注入的代码可以作为一个或多个模板或以某种其他 形式来存储。此外,应该认识到可能发生符号表的操纵以及语法分析树的转化。基于符号表1060和语法分析树1070,后端组件1040可将中间表示翻译成输 出代码。后端组件940将中间表示转换成可在目标处理器中执行的或由其执行的指 令,转换成对变量的存储器分配,等等。输出代码可以由真实的处理器执行,但是 也能提供可由虚拟处理器执行的输出代码。此外,前端组件1020和后端组件1040能够执行另外的功能,诸如代码优化, 并且能够将所描述的操作作为单个阶段或分多个阶段执行。编译器1010诸组件的 各个其他方面在本质上是常规的,并且可由执行等效功能的组件代替。另外,在源 代码处理过程中的各个阶段,差错校验器组件1050可以检验差错,诸如词法结构 中的差错、句法差错、甚至是语义差错。 一旦检测到差错,校验器组件1050就暂 停编译并生成指示此差错的消息。为给所揭示的主题的各方面提供上下文,图11和12以及下列讨论旨在提供 可以在其中实现所揭示主题的各方面的合适的计算环境的简要、概括的描述。尽管 前面已经在运行在一个或多个计算机上的计算机程序的计算机可执行指令的一般 上下文中描述了本发明,然而本领域内的技术人员将认识到,本发明也可以和其他 程序模块结合实现。 一般地,程序模块包括执行特定任务和/或实现特定抽象数据类型的例程、程序、对象、数据结构等等。而且,本领域内的技术人员将会理解, 本发明的方法可以在其他计算机系统配置中实施,包括单处理器或多处理器计算机 系统、小型计算设备、大型计算机以及个人计算机、手持式计算设备(例如,个人 数字助理(PDA)、电话、手表等)、基于微处理器的或可编程的消费性或工业电 子产品等等。也可以在分布式计算环境中实践所例示的方面,在分布式计算环境中, 任务是由通过通信网络连接的远程处理设备执行的。然而,即使不是本发明的全部 方面,至少也本发明的部分方面可以在独立计算机上实现。在分布式计算环境中, 程序模块可被置于本地或远程的存储器设备中。参考图11,用来实施本发明各个方面的示例性环境1110包括计算机1112。 计算机1112包括处理器单元1114,系统存储器1116,以及系统总线1118。系统 总线1118把包括但不限于系统存储器1116的系统部件连接到处理单元1114。处 理单元1114可以是各种可用处理器中的任意一种。双微处理器和其它多处理器结 构也可用作处理单元1114。系统总线1118可以是几种类型的总线结构中的任意一种,包括存储器总线或 存储器控制器,外围总线或外部总线,和/或利用下述可用总线结构中的任意一种 的本地总线,包括但不限于,11位总线,工业标准结构(ISA),微通道结构(MCA), 扩展工业标准结构(EISA),智能化驱动器电子接口 (IDE), VESA本地总线(VLB), 外围部件互连(PCI),通用串行总线(USB),高级图形端口 (AGP),个人计 算机内存卡国际联合会总线(PCMCIA),以及小型计算机系统接口 (SCSI)。系统存储器1116包括易失性存储器1120以及非易失性存储器1122。基本输 入/输出系统(BIOS)包含诸如在启动期间在计算机1112的元件之间传送信息的 基本例程,其存储在非易失性存储器1122中。作为例子而不是限制,非易失性存 储器1122可以包括只读存储器(ROM),可编程ROM (PROM),电可编程ROM (EPROM),电可擦除ROM (EEPROM),或者闪存。易失性存储器1120包括 用作外部高速缓存的随机存取存储器(RAM)。作为例子而不是限制,RAM可以 是很多形式,诸如同步RAM( SRAM),动态RAM(DRAM),同步DRAM( SDRAM), 双速SDRAM (DDR SDRAM),增强型SDRAM (ESDRAM),同步链接DRAM (SLDRAM),以及直接存储器总线RAM (DRRAM)。计算机1112还包括可移动/不可移动,易失性/非易失性计算机存储介质。例 如,图11示出了磁盘存储器1124。磁盘存储器1124包括但不限于诸如磁盘驱动 器、软盘驱动器、磁带驱动器、Jaz驱动器、Zip驱动器、LS-100驱动器、闪存卡、或者内存条之类的设备。此外,磁盘存储器1124可以包括独立的或者与其它存储 介质结合的存储介质,包括但不限于诸如加密盘ROM驱动器(CD-ROM)、可记 录CD驱动器(CD-R驱动器)、可重写CD驱动器(CD-RW驱动器)或者数字 视频盘ROM驱动器(DVD-ROM)这样的光盘驱动器。为了便于把磁盘存储装置 1124连接到系统总线1118,通常把可移动或不可移动的接口用作诸如接口 1126。应该明白,图11描述了在合适的操作环境1110中描述的基础计算机资源和 用户之间起到中间人作用的软件。这些软件包括操作系统1128。存储在磁盘存储 器1128上的操作系统1124,在运行时控制并分配计算机系统1112的资源。系统 应用程序1130通过存储在系统内存1128或磁盘存储器1132中的程序模块1134 和程序数据1116,利用操作系统1124对资源进行管理。应该明白,在此描述的各 个组件可以用各种操作系统或操作系统的组合来实施。用户通过输入装置1136把命令或信息输入到计算机1112中。输入装置1136 包括但不限于诸如光标、轨迹球、指示笔、触摸板、键盘、麦克风、操纵杆、游戏 手柄、卫星反射器、扫描仪、TV调谐卡、数码相机、数字摄像机、网页照相机等 等。这些以及其它输入装置通过系统总线1114经由接口端口 1138连至处理单元 1118。接口端口 1138包括,例如串行端口、并行端口、游戏端口、以及通用串行 总线(USB)。输出装置1140利用和输入装置1136相同类型的端口。因此,例如, USB端口可以用来向计算机1112提供输入,以及把来自计算机1112的信息输出 到输出装置1140。输出适配器1142是用来举例说明除了输出装置1140之外还有 些象监视器、扬声器、以及打印机这样的输出装置需要专用适配器。输出适配器 1142包括,作为例子而不是限制,视频和声频卡,其在输出装置1140和系统总线 1118之间提供了连接装置。应该注意到,其它装置和/或系统提供了诸如远程计算 机1144这样的输入和输出能力。计算机1112可以利用到诸如远程计算机1144这样的一个或多个远程计算机 的逻辑连接在联网的环境中操作。远程计算机1144可以是个人计算机、服务器、 路由器、网络PC、工作站、基于电器的微处理器,同等装置或者其它普通网络节 点等,通常包括所描述的有关于计算机1112中的很多或者全部元件。为了简明, 只举例说明了远程计算机1146的存储器存储设备1144。远程计算机1144经由网 络接口 1148被逻辑地连接到计算机1112然后经由通信连接1150被物理连接。网 络接口 1148包括诸如局域网(LAN)和广域网(WAN)这样的通信网络。LAN 技术包括光纤分布式数据接口 (FDDI)、铜线分布式数据接口、以太网/IEEE 802.3、令牌环/IEEE 802.3等。WAN技术包括但不限于,点对点链接,象综合业务数字网 (ISDN)和其各种变形这样的线路交换网,分组交换网,以及数字用户专线(DSL)。通信连接1150指的是把网络接口 1148连接到总线1118的硬件/软件。虽然为 了清楚地举例说明,通信连接1150显示在计算机1112的内部,但其也可以在计算 机1112的外部。连接到网络接口 1148所需要的硬件/软件包括,仅为了举例说明, 内部和外部技术,诸如调制解调器包括常规电话级别的调制解调器、电缆调制解调 器以及DSL调制解调器、ISDN适配器、以太网卡。图12是根据本发明一个方面用于可任选的后期绑定的示例计算环境1200的 示意性框图。系统1200包括一个或多个客户端1210。(诸)客户端1210可以是 硬件和/或软件(例如,线程、进程、计算设备)。系统1200也包括一个或多个服 务器1230。(诸)服务器1230可以是硬件和/或软件(例如,线程、进程、计算设 备)。服务器1230可以容纳各线程以通过例如利用在此描述的各组件执行转换。 在客户端1210和服务器1230之间的一种可能的通信能够以适合在两个或多个计算 机进程之间传输的数据分组的形式进行。系统1200包括可以用来使(诸)客户端 1210和(诸)服务器1230之间通信更容易的通信框架1250。(诸)客户端1210 工作时被连接到一个或多个可以用来存储(诸)客户端1210的本地信息的客户端 数据存储1260。同样地,(诸)服务器1230工作时被连接到一个或多个可以用来 存储(诸)服务器1240的本地信息的服务器存储1230。以上描述的内容包括各个示例性方面。当然,出于描绘这些方面的目的而描 述每一个可以想到的组件或方法的组合是不可能的,但本领域内的普通技术人员应该认识到,许多进一步的组合和排列都是可能的。因此,在此描述的各方面旨在包 括所有这些属于所附权利要求书的精神和范围内的改变、修改和变动。此外,至于 术语"包括"可在详细说明书或权利要求书中使用,该术语与术语"包含"在权利要求 中用作过渡词时所被解释的那样的方式相类似,也可以是包括性的。
权利要求
1.一种计算机实现的系统,包括下列计算机可执行组件带有选项组件的编程语言,所述选项组件供应以下之一后期绑定的选择进入和选择退出,以及促进所述后期绑定的助手,所述后期绑定基于为所述编程语言的变量所指定或推理的类型。
2. 如权利要求1所述的计算机实现的系统,其特征在于,所述变量带有在所 述编程语言中可变的静态类型。
3. 如权利要求2所述的计算机实现的系统,其特征在于,所述可变的静态类 型基于所述变量在所述编程语言的代码区域内的位置。
4. 如权利要求l所述的计算机实现的系统,其特征在于,所述可变的静态类 型基于所述变量的使用而被推理。
5. 如权利要求1所述的计算机实现的系统,其特征在于,所述助手是针对表示XML对象模型的类型的XML后绑定助手。
6. 如权利要求1所述的计算机实现的系统,其特征在于,所述助手是针对对 象的反射后绑定助手。
7. 如权利要求1所述的计算机实现的系统,其特征在于,所述选项组件带有 重构机制,为所述变量指派精确的推理类型或对象。
8. 如权利要求7所述的计算机实现的系统,其特征在于,所述重构机制展开 声明,显式地指示类型。
9. 如权利要求7所述的计算机实现的系统,其特征在于,所述重构机制采用 下拉菜单指示对象和类型。
10. 如权利要求9所述的计算机实现的系统,其特征在于,对象的选择指示 对关于对象的标准Visual Basic后期绑定的选择。
11. 一种计算机实现的系统,包括下列计算机可执行组件 向用户提供以下选项之一后期绑定和非后期绑定一编程语言; 推理变量的类型,以及改变作为所述编程语言一部分的变量的静态类型。
12. 如权利要求ll所述的计算机实现的系统,其特征在于,还包括基于所述变量的使用推理可变的静态类型。
13. 如权利要求ll所述的计算机实现的系统,其特征在于,还包括基于变量 在所述编程语言内的位置改变所述静态类型。
14. 如权利要求ll所述的计算机实现的系统,其特征在于,还包括为所述编 程语言指定后期绑定的类型。
15. 如权利要求ll所述的计算机实现的系统,其特征在于,还包括在改变所 述静态类型时向用户提供反馈。
16. 如权利要求ll所述的计算机实现的系统,其特征在于,还包括经由编译 器跟踪变量类型。
17. 如权利要求ll所述的计算机实现的系统,其特征在于,还包括基于选定 的静态类型触发后期绑定。
18. 如权利要求ll所述的计算机实现的系统,其特征在于,还包括采用重构 机制,所述重构机制展开以显式地指定类型。
19. 如权利要求ll所述的计算机实现的系统,其特征在于,还包括标识所述 编程语言的代码中具有类型的精确规定的区域。
20. —种计算机实现的系统,其包括下列计算机可执行组件 用于编程语言的后期绑定的选择进入和选择退出之一的装置, 用于推理变量类型的装置,以及 用于改变所述编程语言中的变量的静态类型的装置。
全文摘要
提供了通过供应选择进入(或选择退出)后期绑定来平衡编程语言内后期绑定和早期绑定的系统和方法,其中后期绑定是基于该变量的静态类型(例如,对象或类型/字符串)而触发的。此外,可以允许变量在编程语言的不同区域(例如,程序段)内具有不同的静态类型。
文档编号G06F9/45GK101253478SQ200680032080
公开日2008年8月27日 申请日期2006年8月15日 优先权日2005年9月6日
发明者A·Y·阿哈罗尼, A·希尔维, B·C·贝克曼, D·N·舒阿奇, H·J·M·梅杰, P·A·维克, P·F·德亚顿, R·拉梅尔 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1