针对外部数据源的静态类型检查的制作方法

文档序号:6422743阅读:215来源:国知局
专利名称:针对外部数据源的静态类型检查的制作方法
技术领域
本发明涉及计算机开发,尤其涉及计算机开发中的类型检查。
背景技术
编程语言中的数据类型是数据的属性,该数据的属性给出关于它是什么种类的数据的信息。诸如该数据可采用什么类型的值以及可以对其执行什么操作之类的约束可以通过将数据类型分配给数据来建立。类型系统将一个或多个数据类型与程序中的每一程序值相关联。通过检查程序中的指令对数据的值进行什么操作,类型系统试图防止“类型错误”。 例如,特定编程语言可以将把串值分配给整数类型的变量视为一种类型错误,并且将出错消息给予尝试这么做的用户。类型系统还试图防止对数据的非法操作。例如,某些编程语言将把串与整数相加在一起视为非法操作,并且将出错消息给予尝试这么做的用户。类型检查可以发生在编译时(静态检查或静态类型检查)或在运行时(动态检查或动态类型检查)。如果一种语言有力地应用其类型规则,(例如,仅允许不丢失信息的自动类型转换),这种语言被称为强类型化语言。如果一种语言的限制性相对较小,它被称为弱类型化的。编程语言被认为当在编译时期间执行类型检查时使用静态类型。在静态类型中, 类型与变量相关联。静态类型化语言包括Ada、C、C++、C#、Java、Fortran、Haskell、ML、 Pascal以及Scala。静态类型使得许多错误能在开发周期的早期被发觉。由于静态类型检查器在编译期间评估类型信息,并且缺少仅在运行时可用的类型信息,因此静态类型检查器是保守的。即,即使对程序的特定执行可以正确地运行,但如果所评估的条件对于对程序所有可能的执行不成立,则静态类型检查器将拒绝该程序。由于静态类型检查器评估在编译时可以确定的类型信息并且验证所检查的条件对程序的所有可能的执行都成立,因此无需在每次执行程序时重复静态类型检查。编程语言被认为是在运行时执行大部分类型检查时被动态地类型化。在动态类型化时,类型与从程序的执行得到的值相关联。动态类型化语言包括Clojure、Groovy, JavaScript、Lisp、Objective—C、PHP、Prolog、Python、Ruby 以及 Smalltalk。动态类型化没有静态类型化那么严格,但可以导致较大可能性的执行错误(例如,由于变量的值具有不允许的类型而引起的出错结果)。动态类型化的语言系统通常使得对源代码的编译时检查较少。运行时检查可能是更复杂的,因为除了在编译期间呈现且在运行时仍可用的信息之外,它们还可以使用动态(运行时)信息。运行时检查断言条件在程序的特定执行中成立并且对程序的每一执行重复。绑定可以发生在编译时,在该情况下被称为“静态绑定”,或者可以动态地发生在运行时,被称为“动态绑定”。动态绑定允许推迟对未定义的变量的解析直到程序运行。动态绑定与静态绑定在根本上是不同的,因为其结果——例如,被分配给操作的意义——取决于其所操作的实际值的运行时类型,而不是源代码中的变量的编译时类型。通常,静态类型化的编程语言执行静态绑定,以及动态类型化的编程语言执行动态绑定。

发明内容
在诸如集成式开发环境(IDE)、交互式编辑或REPL环境等交互编辑环境中执行针对外部数据源的静态类型检查。可以向用户提供对外部数据就如同对内部静态、类型化数据所提供的编辑体验一样的丰富编辑体验,。提供可扩展编译器,使得用户或第三方可以将类型检查工具扩展到任何外部数据源。提供可扩展语言服务,使得用户或第三方可以扩展语言服务以提供外部数据的一致的、当前的静态视图。可扩展编译器和语言服务允许语言扩展插入类型检查过程。这使得编译器和语言服务能够提供扩展点,该扩展点使得编辑器能够被扩展并且允许语言服务静态地呈现动态信息。提供本发明内容以便以简化形式介绍将在以下的具体实施方式
中进一步描述的一些概念。本概述并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于限定所要求保护的主题的范围。


在附图中图1示出了根据此处所公开的主题的各方面的用于针对外部数据源的静态类型检查的系统100的示例;图2是如参考图1所描述的此处所公开的主题的各方面的针对外部数据源的静态类型检查的方法200的示例的流程图;图3是示出此处所公开的主题的各方面可在其中实现的计算环境的示例的框图; 以及图4是根据此处所公开的主题的各方面的集成开发环境的示例的框图。
具体实施例方式概览程序员常常编写以包括但不限于数据库、Microsoft Excel 电子表格、web服务、 盘上的文件、域专用模型等的特定外部(通常但不一定是动态的)数据源为目标的代码。多个编程语言提供对这些域的动态类型访问,但不提供IDE支持。传统上,通过调用方法(例如,诸如对SQL数据库进行GET ROW以及传递串的调用)来动态地访问外部数据源。在构建时,可以运行检查数据源并且生成代码(通常为大量代码)的代码生成器。这一方法涉及对代码生成器的进行中维护以及更新,并且不能为开发者提供良好IDE的体验。S卩,由于来自外部数据源的信息直到构建时才可用,因此像自动完成、参数帮助以及工具提示之类的程序员特征在设计时不可用。类似地,静态类型检查对外部数据源不可用。因此,尽管设计时代码生成技术可能存在,但它们对于维护是麻烦的并且需要创建关于IDE交互的语言特征。IDE可以在设计时交互式地生成代码以恢复丢失的程序员特征,但并不提供良好的IDE体验。例如,IDE可能不能够支持对程序员正使用的语言的代码的生成。其次,程序员正使用的语言可能不具有IDE中的完全支持所需的特殊特征(例如, C#中的部分类)。此外,每一特定的交互式代码生成器实现必须被特别设计来与特定IDE 一起工作,由此限制了代码生成器的有用性。最后,由于可能会生成大量代码,因此增加了所得到的可执行文件的大小。静态类型化对于编程语言的类型系统内部的或来自编程语言的对象通常是可用的,但数据来自编程语言外部时即不可用。根据此处所公开的主题的各方面,强数据类型化按轻量方式被扩展到用户选择的外部数据源。在编译时,临时静态类型被制造。编译器使用合成类型来连接到不管什么指定的数据源。合成类型不是永久的,但使用“实际”类型来为编译器提供足够信息来允许编译器执行其编译并且生成可执行文件。合成类型在编译中的稍后阶段可以被移除,或者合成类型可以被实现或转换成实际类型。所描述的选择由扩展提供者来决定。诸如例如?#编译器等特定编译器可以允许这两者。在CLR(公共语言运行时)环境中,编译器可以将IL(中间语言)写入结果汇编。扩展的语言服务可以在IDE 内部提供程序员支持,使得例如像自动完成、参数帮助、功能列表等之类的特征在程序员在源代码编辑器中写代码时对该程序员可用。针对外部数据源的静态类型检查图1示出了根据此处所公开的主题的各方面的用于针对外部数据源检的静态类型检查的系统100的示例。系统100的所有或部分可以驻留在诸如以下参考图3来描述的计算机等一个或多个计算机上。另选地,系统100或其部分可以被提供为独立系统或插件或附件。系统100的所有或部分可以驻留在诸如以下参考图4来描述的计算机等一个或多个软件开发计算机上。系统100或其部分可以包括诸如以下所描述的且在图4中所示的部分的集成开发环境的一部分。系统100或其部分可以被提供为独立系统或插件或附件。图1是在具有处理器142和存储器144的计算机102上执行的诸如Microsoft Visual Studio , Eclipse、Microsoft Office、或其他 IDE、REPL、或交互式编辑环境等已知集成开发环境(IDE) 104的图示。系统100可以包括诸如计算机102等一个或多个计算机。一个或多个计算机可以包括以下各项的一个或多个处理器(诸如处理器142)、诸如存储器144等存储器、以及用于针对外部数据源的静态类型检查的一个或多个模块。还可以包括本领域熟知的其他组件,但这里未示出。可以理解,可以将用于针对外部数据源的静态类型检查的模块加载到存储器144,以导致诸如处理器142等一个或多个处理器执行该用于针对外部数据源的静态类型检查的模型的动作。用于针对外部数据源的静态类型检查的模块可以包括提供诸如扩展点116等扩展点的模块。可以将用于针对外部数据源的静态类型检查的模块集成在编译器108和/语言服务112内。编译器108可以是任何静态类型化的编译器,包括但不限于F#或C#编译器。编译器108可以是后台编译器。扩展点116可以是由编译器108与语言服务112共享的扩展点,使得组件、模块或诸如扩展118、122、126等扩展,可以被编写或接收以扩展典型的编译 /编辑过程。另选地,扩展点116可以插入编译器,并且经由扩展点116生成的信息可以从编译器流入语言服务以呈现可扩展数据的视图。可以为例如数据源120、124、128等外部数据源定制扩展点116。可以使得扩展点可经由API (应用程序编程接口)访问,可以公布该扩展点并且使其对公众可视,使得用户可以插入扩展点以受控方式来扩展编译器。编译器扩展可以集成在从编译时到加工以及IDE的构建时体验的整个过程中,并且还可以影响由所扩展的编译器生成的应用程序可执行文件110的运行时行为。外部数据源可以是任何类型的静态或动态数据源。例如,外部数据源可以是包含关于特定域的数据的实况Microsoft Excel 文件、包含关于特定域的XML文件、SQL数据库的实例、web服务、或任何动态或静态外部文件。扩展点116将信息提供给编译器,该信息是通过读取这些外部是数据源来提取的。编译器和语言服务接收由扩展点116提供的信息,并且根据这一信息,编译器和语言服务可以给予用户与在针对静态类型进行编程时所接收的体验等价的体验。为编辑计算机程序的源代码而设计的编辑器114接收用户输入134,并且通常包括被设计成简化并且加速源代码的输入的特征。这些特征包括但不限于句法突出显示、自动完成、括号匹配、参数帮助、功能列表、工具提示等等。编辑器114还可以在程序员类型化时执行句法检查,立即检测并且向用户通知句法问题。由语言服务和/或后台编译器108 支持的编辑器还可以担当发现工具。例如,在某些已知编辑器中,程序员可以对功能名(例如,输入)进行类型化,并且可以响应于输入“.”(点)为该功能显示参数列表。对于成员、 参数、功能和其他程序元素可用的这一特征通常仅对静态类型化的程序元素可用。根据此处所公开的主题的各方面,这一发现特征还对可从外部数据源获得的信息可用。例如,根据此处所描述的主题的各方面,当输入“.”而不是探查.NET类型或编程环境内部的其他类型时,来自诸如数据库、网站等外部数据源的信息被提供。因此,此处描述的特征可以提供一种动态地探查以及访问来自外部数据源的数据的方式。在集成开发环境内,程序员常常使用“点”来了解API如何工作。程序员常常偏好通过输入点、查看可用的各选项、选择各选项中的一个选项、输入点等而不是通过参考文档来了解现有软件。根据此处所公开的主题的各方面,除了对于内部静态类型,这一探索和发现特征对于外部数据源也可用。图2示出了根据此处所公开的主题的各方面的用于执行针对外部数据源的静态类型检查的方法200的示例。在202,提供了用于扩展编译器和/或语言服务以提供对外部数据源的静态类型检查的扩展点。对数据源的扩展被创建和/或接收并且被挂钩到扩展点。扩展可以包括对外部数据源专用的并且对来自数据源的信息如何出现在编程环境内的编程语言类型系统内专用的逻辑。实现了扩展点与扩展软件之间进行接口的接口。接口可以通过创建从系统合成类型继承的类来实现,使得为外部数据源创建合成类。可以实现表示主存的对象模型的类。可以实现处理由合成类型展示的方法和属性调用的静态方法。 可以将属性添加到所创建的类的方法和特性中,以支持IDE或交互式编辑环境中的动态评论。随后是可以向编译器呈现实况Excel 数据的Microsoft Excel 插件的示例。 该示例只是说明性的而非限制性的。令 f = Excel.Excel 类型费用费用公司的现金流、难题以及月费用在以上再现的代码中,费用表示Excel文件中的现有工作表。令f = Excel.费用.月Al Al当前值是 “500M,,在以上的示例中,诸如自动完成或Intellisense等程序员特征可以直接从Excel文件获取关于Excel单元(例如,“500M”)的内容的信息。在204,可以将编译器扩展代码的引用添加到用户的项目中。例如,用户随后可以简单地将以下代码行添加到他们的文件中#r “myhost. dll”所扩展的编译器可以导入用诸如例如ExtendCompiler (扩展编译器)等特定属性标记的类型,并且将这些元素变换成包括外部数据源的合成类型的内部表示。这些变换经由该方法在类型从其中继承的系统类型上发生。在将外部实体转换成内部表示之后,对象可以流过编译器逻辑而不影响现有类型推断、分析、代码生成等等。当对这些类型作出调用或方法时,编译器生成对被导入以在运行时执行工作的主存类型调用诸如 InvokeMethod(调用方法)等方法调用的代码。在206,当用户正在编辑器中编辑或编写他的程序时,编译器和语言服务为外部数据源提供了与内部静态数据类型相同的类型体验。当在IDE中写代码时,用户将这一数据感知为静态的。关于诸如自动完成、参数帮助、工具提示等程序员辅助的用户体验与针对静态类型库所提供的用户体验相同。例如,如果用户将诸如Oracle数据库扩展等数据库扩展的引用添加到他的项目中,则当他响应于对该点进行语法分析而对“Oracle数据库.”进行类型化时,语言服务将返回在他的机器上可用的Oracle数据库列表。通过再次输入“.”,用户可以接收所选择的Oracle数据库内部的表列表。可以针对所指定的Oracle表等来写代码。在208,在编译步骤的代码生成部分期间,合成类型以及合成方法调用被移除,并且用对外部数据源的一组动态调用来替换。在没有此处描述的特征的情况下,这些所生成的动态调用将必须由开发者直接在代码中编写。当该可执行文件被构建并且运行时,该可执行文件访问在代码中指定的数据库,并且从数据库检索出实际数据。在编译步骤的代码生成部分,合成类型可以报告返回一应被使用的实际类型,而不是该合成类型。实际类型可以是数据库连接对象、.NET系统对象、Excel 应用程序类型等等。合成方法调用可以由询问表示该方法调用的表达式树的扩展的编译器来替换。表达式树可以包含对编程环境中存在的实际方法的方法调用,或者它可以包含在编程环境中可以编写的任何种类的程序。合适的计算环境的示例为了提供用于此处所公开的主题各方面的上下文,图3及以下讨论旨在提供对其中可实现各实施例的合适的计算环境510的简要概括描述。尽管此处所公开的主题是在诸如程序模块等由一个或多个计算机或其他计算设备执行的计算机可执行指令的通用上下文中描述的,但本领域的技术人员将认识到,此处所公开的主题的各部分还能够结合其他程序模块和/或作为硬件和软件的组合来实现。一般而言,程序模块包括执行特定任务或实现特定数据类型的例程、程序、对象、物理人工制品、数据结构等。通常,程序模块的功能可以在各个实施例中按需进行组合或分布。计算环境510只是合适的操作环境的一个示例,并且不旨在限制此处所公开的主题的使用范围或功能。参考图3,描述了用于对线性栈上的共同历程的高效恢复的计算机512形式的计算设备。计算机512可以包括处理单元514、系统存储器516以及系统总线518。处理单元 514可以是各种处理器中的任何一种。也可以使用双微处理器及其他多处理器体系结构作为处理单元514。系统存储器516可以包括易失性存储器520和非易失性存储器522。非易失性存储器522可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)或闪存。易失性存储器520可以包括可充当外部高速缓冲存储器的随机存取存储器(RAM)。系统总线518将包括系统存储器516的系统物理人造制品耦合到处理单元514。系统总线518 可以是若干类型中的任一种,包括存储器总线、存储器控制器、外围总线、外部总线、或局部总线,并且可以使用各种可用的总线体系结构中的任何一种。计算机512通常包括各种计算机可读介质,诸如易失性和非易失性介质、可移动和不可移动介质。计算机存储介质可以以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任何方法或技术来实现。计算机存储介质包括但不限于,RAM、ROM、 EEPR0M、闪存或其它存储器技术、CDR0M、数字多功能盘(DVD)或其它光盘存储、磁盒、磁带、 磁盘存储或其它磁存储设备、或可以用来储存所期望的信息并可由计算机512访问的任一其它瞬态或非瞬态介质。可以理解,图3描述了可以在用户与计算机资源之间担当中介的软件。这一软件可以包括可存储在盘存储524上的操作系统528,该操作系统可以控制并分配计算机系统 512的资源。盘存储524可以是通过诸如接口 526等不可移动存储器接口连接到系统总线 518的硬盘驱动器。系统应用程序530利用由操作系统528通过存储在系统存储器516或者存储在磁盘存储器524上的程序模块532和程序数据534对资源的管理。应该明白,计算机可以用各种操作系统或操作系统的组合来实施。用户可以通过输入设备536向计算机512输入命令或信息。输入设备536包括但不限于诸如鼠标、跟踪球、指示笔、触摸垫、键盘、话筒之类的定点设备。这些以及其它输入设备通过系统总线518经由接口端口 538连至处理单元514。接口端口 538可以表示串行端口、并行端口、通用串行总线(USB)之类的端口。输入设备540可以使用与输入设备相同类型的端口。提供了输出适配器542以示出存在像监视器、扬声器、以及打印机之类的需要特定适配器的某些输出设备540。输出适配器542包括但不限于,在输出设备540和系统总线518之间提供连接的视频卡和声卡。其他设备和/或设备或系统,诸如远程计算机544, 可提供输入和输出两种能力。计算机512可以使用到诸如远程计算机544之类的一个或多个远程计算机的逻辑连接,在联网环境中操作。远程计算机544可以是个人计算机、服务器、路由器、网络PC、对等设备或其它常见的网络节点,并且通常包括许多或所有以上相对于计算机512所描述的元件,尽管在图4中仅示出了存储器存储设备546。远程计算机544可经由通信连接550逻辑地连接。网络接口 548涵盖诸如局域网(LAN)和广域网(WAN)这样的通信网络,但也可以包括其他网络。通信连接550是指用来将网络接口 548连接到总线518的硬件/软件。连接550可以在计算机512内部或外部并且包括诸如调制解调器(电话、电缆、DSL和无线) 和ISDN适配器、以太网卡等内部和外部技术。应该理解,所示网络连接仅是示例,并且可以使用在计算机之间建立通信链路的其它手段。本领域的普通技术人员可以理解,计算机512或其它客户机设备可作为计算机网络的一部分来部署。在这一点上,此处所公开的主题可以涉及具有任意数量的存储器或存储单元以及在任意数量的存储单元或卷上发生的任意数量的应用程序和进程的任何计算机系统。此处所公开的各方面可应用于具有部署在网络环境中的具有远程或本地存储的服务器计算机和客户计算机的环境。此处所公开的主题的各方面也可应用于具有编程语言功能、解释和执行能力的独立计算设备。图4示出集成开发环境(IDE) 600和通用语言运行时环境602。IDE 600可允许用户(例如,开发者、程序员、设计者、编码者等)在计算机系统中设计、编码、编译、测试、运行、编辑、调试或构建程序、程序集、网站、web应用程序和web服务。软件程序可以包括在一个或多个源代码语言(例如,Visual Basic、Visual J#、C++、C#、J#、Java Script、APL、 COBOL、Pascal、Eiffel、Haskell、ML、Oberon> Perl、Python、Scheme、Smalltalk 等等)中创建的源代码(组件610)。IDE 600可提供本机代码开发环境,或者可提供在虚拟机上运行的托管代码开发,或者可提供其组合。IDE 600可提供使用.NET框架的托管代码开发环境。可使用语言专用源编译器620从源代码组件610和本机代码组件611创建中间语言组件650,并且在执行应用时使用中间语言编译器660(例如,即时(JIT)编译器)从中间语言组件650创建本机代码组件611 (例如,机器可执行指令)。即,当IL应用被执行时,其在被执行的同时被编译成正在其上执行它的平台的合适机器语言,由此使代码能跨若干平台便携。或者,在其他实施例中,程序可被编译成适合其目标平台的本机代码机器语言(未示出)。用户可根据已知软件编程技术以及与特定源语言相关联的特定逻辑和句法规则经由IDE 600中的用户接口 640和源代码编辑器651来创建和/或编辑源代码组件。此后, 源代码组件610可经由源编译器620被编译,藉此可创建该程序的中间语言表示,诸如汇编 630。汇编630可包括中间语言组件650和元数据642。应用程序设计可以能够在部署前被验证。此处所述的各种技术可结合硬件或软件,或在适当时以其组合来实现。由此,此处描述的方法和装置或其特定方面或部分可采取包含在诸如软盘、CD-ROM、硬盘驱动器或任何其它机器可读存储介质等有形介质中的程序代码(即,指令)的形式,其中当程序代码被加载到诸如计算机等机器内并由其执行时,该机器成为用于实现本文所公开的主题的各方面的装置。在程序代码在可编程计算机上执行的情况下,计算设备通常将包括处理器、该处理器可读的存储介质(包括易失性和非易失性的存储器和/或存储元件)、至少一个输入设备、以及至少一个输出设备。可例如通过使用数据处理API等来利用域专用编程模型各方面的创建和/或实现的一个或多个程序可用高级过程编程语言或面向对象的编程语言来实现以与计算机系统通信。然而,若有需要,程序也可以以汇编或机器语言来实现。在任一情况下,语言都可以是编译的或解释的语言,并与硬件实现相结合。虽然已结合附图描述了本文所公开的主题,但是应理解,可作出修改以按不同方式执行相同功能。
权利要求
1.一种系统(100),包括处理器(142)和存储器(144),存储器包括一模块,其被配置成使所述处理器(142)执行通过以下来在交互式编辑环境(104)中提供针对外部数据源(120、124、128等)的静态类型检查提供所述外部数据源(120、124、128等)的扩展点(116),所述扩展点(116)由公共应用程序编程接口访问,所述应用程序编程接口接受为所述外部数据源(120、124、128等)定制的扩展(118),通过创建所述外部数据源(120、124、128等)的合成类来实现所述应用程序编程接口, 所述合成类启用对所述外部数据源(120、124、128等)的静态类型检查。
2.如权利要求1所述的系统,其特征在于,所述扩展包括对所述外部数据源专用的逻辑。
3.如权利要求1所述的系统,其特征在于,所述外部数据源是动态的。
4.如权利要求3所述的系统,其特征在于,静态类型编程辅助包括在源代码的交互式编辑期间为所述外部数据源提供的自动完成、参数帮助、工具提示、或成员列表。
5.如权利要求1所述的系统,其特征在于,在编译期间,合成方法和合成类型由对所述外部数据源的动态调用来替换。
6.一种方法(200),包括通过以下来在软件开发计算机上的交互式编辑环境中提供针对外部数据源的静态类型检查提供对所述外部数据源的扩展点(202),所述扩展点由公共应用程序编程接口访问,所述应用程序编程接口向为所述外部数据源定制的扩展提供接口 ;通过创建从系统合成类型继承的类来实现所述接口,使得合成类是为所述外部数据源创建的,所述合成类表示主存的模型(202);导入用表示所述扩展的属性标记的类型,并且基于从所述系统合成类型继承的方法将所导入的类型变换成内部表示(206);当对所述系统合成类型作出调用时或当对所述系统合成类型调用一方法时,生成调用对所主存的模型的合成类的方法调用的代码(208)。
7.如权利要求6所述的方法,其特征在于,还包括使用所述内部表示以在集成开发环境或REPL环境中提供对所述外部数据源的静态类型检查。
8.如权利要求7所述的方法,其特征在于,所述静态类型检查包括交互式源代码编辑器中的功能列表、工具提示、成员列表、或自动完成。
9.如权利要求6所述的方法,其特征在于,还包括在编译期间用对所述外部数据源的动态调用来替换所述合成类型。
10.如权利要求6所述的方法,其特征在于,所述扩展包括对所述外部数据源专用的逻辑。
11.一种包括计算机可执行指令的计算机可读存储介质,所述指令当被执行时使得至少一个处理器通过以下来在交互式编辑环境(104)中提供针对外部数据源(120、124、128等)的静态类型检查提供所述外部数据源(120、124、128等)的扩展点(116),所述扩展点(116)由公共应用程序编程接口访问,所述应用程序编程接口向为所述外部数据源(120、124、128等)定制的扩展(118、122、126等)提供接口 ;通过创建所述外部数据源(120、124、128等)的合成类来实现所述应用程序编程接口, 所述合成类启用对所述外部数据源(120、124、128等)的静态类型检查;当对合成类型作出调用时或当对所述合成类型调用一方法时,生成代码,所生成的代码对所述外部数据源(120、124、128等)的合成类型调用一方法调用;以及在交互式编辑期间显示动态检查编程辅助。
12.如权利要求11所述的计算机可读介质,其特征在于,还包括被执行时使得所述至少一个处理器执行以下步骤的计算机可执行指令在编译期间用对所述外部数据源的动态调用来替换所述合成类型。
13.如权利要求11所述的计算机可读介质,其特征在于,还包括被执行时使得所述至少一个处理器执行以下步骤的计算机可执行指令在计算机程序的交互式编辑期间提供自动完成、成员列表、功能列表、参数帮助或工具提示帮助。
14.如权利要求11所述的计算机可读介质,其特征在于,还包括被执行时使得所述至少一个处理器执行以下步骤的计算机可执行指令向编译器或语言服务的扩展提供接口。
15.如权利要求11所述的计算机可读介质,其特征在于,还包括被执行时使得所述至少一个处理器执行以下步骤的计算机可执行指令向外部数据源的扩展提供接口包括数据库、电子表格、web服务、盘上的文件、或域专用模型。
全文摘要
在交互编辑环境中执行针对外部数据源的静态类型检查。可以向用户提供对于外部数据的与对内部静态、类型化数据所提供的体验相同的丰富编辑体验。提供可扩展编译器,使得用户或第三方可以将类型检查工具扩展到任何外部数据源。提供可扩展语言服务,使得用户或第三方可以扩展语言服务以提供外部数据的一致的且当前的静态视图。可扩展编译器和语言服务允许语言扩展插入类型检查过程。这使得编译器和语言服务能够提供扩展点,该扩展点允许编辑器的扩展并且允许语言服务静态地呈现动态信息。
文档编号G06F9/45GK102222012SQ201110100148
公开日2011年10月19日 申请日期2011年4月13日 优先权日2010年4月14日
发明者D·西梅, J·A·费雪, L·J·霍本, T·Y·T·额 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1