当前位置: 首页 > 专利查询>微软公司专利>正文

用于类型化程序设计语言的名称绑定可扩展性制造技术

技术编号:6830096 阅读:224 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及用于类型化程序设计语言的名称绑定可扩展性。提供插入编译器(例如F#)以及相关联的语言服务的方法的体系结构。所述语言组件定义允许任何组件插入服务的标准插件机制,并且提供名称绑定和类型解析服务。所述编译器和语言服务利用了被定义为(例如以为了插入系统必须实现的接口和类的形式)提供编译时间和设计时间扩展的协议。所述体系结构提供了定义用户化协议以与编译器的名称绑定机制交互的能力。这一协议的使用不仅使得编译成功,并且还提供诸如用于快速信息的名称查找和值查找等的丰富的IDE服务。此外,还支持提供静态类型信息以满足类型化的程序设计语言的需求的能力。

【技术实现步骤摘要】

本专利技术涉及计算机程序设计,尤其涉及用于类型化程序设计语言的名称绑定可扩展性
技术介绍
很多静态类型化语言的特点是提供数据的静态类型安全和动态性质之间的矛盾。 为了解决这一问题已经进行了很多尝试,其中代码生成器(设计时间和运行时)是最常见的方式。但是,代码生成器唯一的问题是需要外部工具运行来更新工件以便用户的集成开发环境(IDE)体验变为“当前的”。一般的问题是目前的很多编译器和语言定义不允许内部编译器流水线的用户化,这迫使代码生成器成为替代方案。
技术实现思路
以下提出简单的
技术实现思路
以便提供对此处描述的一些新颖的实施例的基本理解。 本
技术实现思路
不是大量的概述,并且不旨在标识关键/决定性的元素或描绘其范围。其唯一目的是以简化形式呈现某些概念作为之后呈现的更详细描述的序言。所公开的体系结构提供了插入(plug into)编译器(例如F#)和相关联的语言服务的方式。所述语言组件定义了允许任何组件连接入服务并且提供名称绑定和类型解析服务的标准插件(Plug-in)机制。所述编译器和语言服务利用了被定义为(例如以为了插入系统而必须实现的接口和类的形式)提供编译时间和设计时间扩展的协议。所述体系结构提供了定义用户化协议以与编译器的名称绑定机制交互的能力。这一协议的使用不仅使得编译成功,并且还提供诸如针对快速信息的名称查找和值查找这样的丰富的IDE服务。此外,还支持提供静态类型信息以满足类型化程序设计语言的需求的能力。为了实现前述和相关目的,此处结合以下描述和附图描述了某些说明性的方面。 这些方面仅指示可实现此处公开的原理的各种方式,且所有方面及其等价物均旨在包括在所要求保护的主题的范围内。当结合附图考虑以下详细描述时,其它优点和新颖的特征将是显而易见的。附图说明图1示出依照所公开的体系结构,用于与内部编译流水线接口的系统。图2示出依照所公开的体系结构,与内部编译流水线交互的计算机实现的方法。图3示出图2中方法的进一步的方面。图4示出与内部编译流水线交互的另一种方法。图5示出图4中方法的进一步的方面。图6示出依照所公开的体系结构,执行用于与各种类型的编译流水线交互的可扩展接口的计算系统的框图。具体实施例方式一般来说,编译器(编译组件)在编译流水线中具有三个不同的阶段(即过程) 语法分析(包括扫描和解析)、语义分析(包括程序验证、类型检查等)、以及代码生成。所述扫描和解析阶段指的是前端过程,而所述代码生成指的是后端过程。前端确定了程序的语法结构并且将该结构转化为存储器中的语法树。然后前端执行将语法树转化为注解的语义树以及将该注解的语义树转化为可执行程序(例如.exe文件、.dll文件等)的语义分析阶段。所述代码生成可以与目标程序(例如.NET构架、文字处理器、电子制表软件等)紧也袖口。扫描器为解析器的输入标记化传入的程序设计语言文本,并且消除诸如注释的未定义语法。解析器保证源程序与语言定义的一致性,处理错误处理,创建程序语法的存储器中表示供代码生成器消耗,以及确定要使用的运行时间类型。在所公开的体系结构中,诸如在执行名称绑定的语义分析期间,提供允许用户访问一个或多个流水线服务的可扩展接口(插件)。在该过程的第一阶段,插入伪类型。编译器从可扩展接口使用的扩展处接收生成的伪类型。然后像任何其它类型(例如从诸如汇编语言或用户代码的具体的源)流经编译器一样,该生成的伪类型流经类型检查过程。由于伪类型不是真实的类型,体系结构清理在伪类型处理中留下的过程残余。例如,消除留在正在生成的程序中的调用和实例。可扩展接口的另一部分是向编译器内回调并且确定哪些通过扩展在编译器中结束的伪类型应该变成真实的类型。此外,对要被扩展创建的真实方法和代码替代的伪方法或其它代码作出请求。然后在编译过程中的合适阶段插入这些替代,并且编译器通过生成程序而结束。换句话说,可扩展协议一般是为了通过可扩展接口引入伪类型,使编译器执行其工作,并且接着消除在编译器结构中由伪类型剩下的残余。现在将参考附图,其中使用相同的标号来在全文中指示相同的元素。在以下描述中,出于解释的目的,阐明了众多具体细节以便提供对其彻底的理解。但是显然,所述新颖的实施例能够在没有这些具体细节的情况下实现。在其它情况中,用框图形式示出了熟知的结构和设备以便于帮助对其的描述。目的旨在涵盖落在所要求保护的主题的精神和范围之内的所有修改、等价物、以及替代物。图1示出依照所公开的体系结构,用于与内部编译流水线接口的系统100。系统 100包括类型化程序设计语言的编译组件102,该类型化的程序设计语言具有包括名称绑定服务108在内的服务106的内部编译流水线104 ;以及通过语言扩展112便于访问名称绑定服务108以在编译时间与类型交互的可扩展接口组件110。接口组件110和扩展组件112可以被使用作编辑器114的插件以作为集成开发环境(IDE)的一部分。编辑器114被设计为编辑诸如计算机程序等的源代码。编辑器114可以是单独的程序或被建立在IDE中。系统100还能够使用语言服务116。编辑器114 一般包括被设计为简化和加速源代码输入的特征。这些特征包括,但不局限于,语法强调、自动完成、括号匹配、参数帮助、函数列表、工具提示等。编辑器114还能够在程序员键入时执行语法检查,立即检测和向用户通知语法问题。在语言服务116的支持下,编辑器114还能够担当查找工具。例如,在一些已知的编辑器中,程序员可以键入函数名,并且响应于“,”(逗号)的输入,为该函数显示一列参数。但是应当理解,这一特征由语言服务提供,该语言服务与编译器一起紧密地工作以提供这一信息。这一可用于成员、参数、函数、和其它程序元素的特征一般仅可用于静态类型化的程序元素。依照所公开的体系结构的各方面,这一查找特征还可用于在外部数据源中存储的信息。可扩展接口组件110在编译流水线104中启用伪类型的静态绑定。可扩展接口组件110还能够编译运行时间中的某(些)点用真实类型取代伪类型。可以通过接口组件 110将这个(这些)点变成可访问的,这可以被公开或被变成公开可见的以便于用户插入扩展点以通过受控的方式扩展编译器。编译器扩展可以被集成在整个流水线的各个地方,并且还可以影响由扩展的编译组件102生成的可执行应用程序的运行时间行为。外部数据源可以是任何类型的静态或动态数据源。例如,外部数据源可以是包含有关具体域的数据的电子表格文件、包含有关具体域的数据的XML文件、SOL数据库的实例、web服务、或任何动态或静态外部文件。扩展点向编译组件102提供信息。通过读取这些外部数据源提取该信息。编译组件102和语言服务116接收由扩展点提供的信息,并且通过这一信息,编译组件102和语言服务116可以为用户提供丰富的IDE体验,该IDE体验等同于在编程时为防止静态类型而接收的IED体验。编译组件102可以是任何静态类型化的编译器,包括,但不局限于,F#和/或C#编译器。可扩展接口组件110还能够消除在运行时间中伪类型残余,其中该伪类型残余例如在伪类型的类型检查期间被创建。可扩展接口组件110进一步使语言服务116与编译时间扩展和设计时间扩展接触。编译组件102的操作不妨碍与可扩展接口组件110的合作。 可扩展接口组件110还能够通过语言扩展112进行名本文档来自技高网...

【技术保护点】
1.一种具有存储由处理器执行的可执行指令的计算机可读介质的计算机可实现系统(100),包括:编译组件(102),所述编译组件具有包含名称绑定服务在内的服务的内部编译流水线的类型化程序设计语言;以及可扩展接口组件(110),所述可扩展接口组件便于通过语言扩展访问名称绑定服务以便在编译时间与类型交互。

【技术特征摘要】
...

【专利技术属性】
技术研发人员:J·A·费雪D·西梅L·J·霍本T·Y·T·额
申请(专利权)人:微软公司
类型:发明
国别省市:US

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1