CN105164641A - 扩展开发环境 - Google Patents

扩展开发环境 Download PDF

Info

Publication number
CN105164641A
CN105164641A CN201380068712.0A CN201380068712A CN105164641A CN 105164641 A CN105164641 A CN 105164641A CN 201380068712 A CN201380068712 A CN 201380068712A CN 105164641 A CN105164641 A CN 105164641A
Authority
CN
China
Prior art keywords
logical block
expansion
compiler
source code
computer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201380068712.0A
Other languages
English (en)
Other versions
CN105164641B (zh
Inventor
F·A·玛每瑞
M·C·范宁
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN105164641A publication Critical patent/CN105164641A/zh
Application granted granted Critical
Publication of CN105164641B publication Critical patent/CN105164641B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本文描述了用于扩展软件开发工具的行为的概念和技术。软件开发工具可访问并消费扩展以将该软件开发工具配置成以扩展模式执行操作。在一个示例中,扩展可基于输入源代码来扩展编译器。在一个配置中,编译器扩展可以向编译器提供特定编程语言的各种源代码元素的一个或多个运行时语义。编译器可访问扩展列表以确定编译器是否将要以扩展模式对特定源代码元素或逻辑单元执行编译操作。

Description

扩展开发环境
背景
为了开发用于执行计算任务的软件应用,软件开发者通常为软件应用编写概括该软件应用的功能的源代码。存在对开发者可用的各种类型的语言,这取决于软件应用的特定用途、其中将执行软件应用的计算环境和/或软件开发者的个人偏好。例如,语言可以是其中通常在编译时确定变量类型的静态类型化编程语言。在另一示例中,语言可以是在运行时确定变量类型的动态类型化编程语言。
一旦软件开发者编写源代码,如果其中将要执行源代码的环境需要可执行代码,则使用编译器来将源代码编译成可执行代码(或者取决于系统环境而能在执行时被解释)。编译器用于将源代码转换成可以直接在计算机系统上执行的机器代码。计算环境执行可执行代码以实现源代码的功能。连同将源代码编译成可执行代码,常规编译器还可通过输出调试信息来帮助软件开发者。软件开发者可使用调试信息来修复源代码中的潜在问题,当在运行时期间执行可执行代码时,这些潜在问题可能导致故障。
本文所做出的本公开正是关于这些和其他考虑事项而提出的。
概述
本文描述了用于扩展开发环境的概念和技术。开发工具可消费扩展以修改开发工具针对所描绘的源代码元素的行为。在一些实施例中,开发工具可消费扩展以便在各种过程中使用扩展行为,这些过程包括但不限于预处理、词法分析、句法分析、静态分析、指令调度、代码生成、链接、汇编、解释和JIT编译。例如,在扩展编译器的行为时,扩展可由编译器在包括但不限于句法分析、语义分析、代码生成和代码优化的编译过程的各个阶段期间消费。在一个配置中,当在编译器开发环境内使用时,编译器扩展可以向编译器提供特定编程语言的各种源代码元素的一个或多个运行时语义。在一些配置中,可以在诸如但不限于静态分析器、解释器、编译器、链接器、汇编器和模拟器的各种编程操作中使用扩展。
应当理解,上述主题可被实现为计算机控制的装置、计算机进程、计算系统或诸如计算机可读存储介质等制品。通过阅读下面的详细描述并审阅相关联的附图,这些及各种其他特征将变得显而易见。
提供本概述是为了以精简的形式介绍将在以下详细描述中进一步描述的一些概念。本概述并不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在将本概述用来限制所要求保护的主题的范围。此外,所要求保护的主题不限于解决在本公开的任一部分中所提及的任何或所有缺点的实现。
附图简述
图1是可被用来实现本文公开的各实施例的说明性操作环境的系统图。
图2是执行可被用来实现本文公开的各实施例的编译器的说明性编译环境的系统图。
图3是示出根据一些实施例的其中根据扩展来处理源代码的逻辑单元的编译环境的功能框图。
图4是示出根据一些实施例的将传统源代码变换成用于经更新的操作环境的可执行代码的功能框图。
图5是示出根据一些实施例的用于扩展软件开发工具的示例性方法的框图。
图6是示出能够实现本文中所呈现的实施例的各方面的计算系统的说明性计算机硬件和软件体系结构的计算机体系结构图。
详细描述
以下详细描述涉及扩展软件开发工具的行为。在各配置中,向软件开发工具提供扩展。软件开发工具消费扩展。扩展将软件开发工具针对所描绘的操作的行为从默认模式改为扩展模式。在一些示例中,软件开发工具可出于各种原因在扩展模式中使用,这些原因的示例在下文中更详细地描述。
尽管在结合计算机系统上的操作系统和应用程序的执行而执行的程序模块的一般上下文中提出了本文描述的主题,但是本领域技术人员将认识到,其他实现可以结合其他类型的程序模块来执行。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、组件、数据结构和其他类型的结构。此外,本领域技术人员将明白,可以利用其他计算机系统配置来实施本文描述的主题,这些计算机系统配置包括手持式设备、多处理器系统、基于微处理器的或可编程消费电子产品、小型计算机、大型计算机等等。
在以下详细描述中,参考了构成详细描述的一部分并作为说明示出了各具体实施方式或示例的附图。现在参考附图(全部若干附图中相同的标号表示相同的元素),将提出用于扩展源代码开发环境的计算系统、计算机可读存储介质和计算机实现的方法以及其他方面。
现在参考图1,将描述用于文本呈现的各实施例的源代码开发环境100的各方面。图1所示的源代码开发环境100包括计算设备102。在一些实施例中,计算设备102可包括台式计算机、膝上型计算机、笔记本计算机、超便携计算机、上网本计算机或其它类型的计算设备。操作系统104在计算设备102上执行。操作系统104是用于控制计算设备102处的各种功能的可执行程序。
计算设备102可执行软件开发工具106。软件开发工具106可包括程序或工具,诸如但不限于静态分析器、解释器、编译器、链接器、汇编器和模拟器。软件开发工具106可接收包括编程语言中所表达的源代码的输入文件108。软件开发工具106可接收对输入文件108中的源代码执行各种开发操作的命令或指令。
应当明白,本文描述的概念和技术不限于任何特定类型的编程语言。例如,输入文件108中的源代码编程文件类型可使用静态类型化编程语言、动态类型化编程语言或其它类型来表达。静态类型化编程语言的示例包括但不限于C、Fortran、Java和Pascal。动态类型化编程语言的示例包括但不限于JavaScript、Perl、Lisp和VBScript。其他类型包括强和弱类型、安全和不安全类型、相交类型、联合类型、鸭子类型和依赖类型。应当明白,本文描述的概念和技术不限于任何特定类型。还应明白,本文描述的概念和技术不限于作为一种特定类型的编程语言,因为一些编程语言可用作或可被认为是各种类型。
在一些配置中,开发操作可以是不产生输出的对输入文件108中的源代码的操作。在其他配置中,开发操作可生成在图1中被示为开发工具输出110的输出。例如,如果软件开发工具106是编译器且操作是代码生成,则开发工具输出110可包括可执行代码中所表达的一个或多个输出逻辑单元。如此处所使用的,“逻辑单元”包括一起形成逻辑结合整体的一组代码块或语句。逻辑单元可以是源代码元素或者可包括形成逻辑结合整体的一个或多个源代码元素。开发工具输出110还可包括但不限于可查看消息、查询、输入文件108的一个或多个分量的重写,等等。本文描述的概念和技术不限于任何特定输出。
在某些情况下,软件开发工具106可能不被配置成或不具有以下能力:理解软件开发工具106正对其执行开发操作的输入文件108中的源代码元素的行为。如此处所使用的,“源代码元素”包括但不限于对函数的定义或使用、类、方法、变量、宏、模板、过程、闭包、类型、源代码文件本身或所引用的库。可以存在软件开发工具106无法识别或理解源代码元素的行为的各种原因。
例如,如果源代码元素的行为将在运行时期间被决定,则软件开发工具106无法理解该元素的行为。逻辑单元可包括软件开发工具106未被配置来识别的函数。在其他情况下,软件开发工具106可被配置成对源代码元素执行不安全、过期或由于某种原因而不合需要的操作。在其他情况下,源代码元素或逻辑单元可包括妨碍软件开发工具106识别的误拼写。在编译器环境中的另一示例中,编译器无法在编译时理解各种函数的实际运行时语义。应明白,这些和其他示例仅仅是示例性的。本文描述的概念和技术不限于软件开发工具106的任何特定限制、故障或不合需要的行为。
为了修改软件开发工具106的行为,软件开发工具106可被配置成访问和消费扩展112,扩展112在执行各种开发操作时扩展(或修改)软件开发工具106的行为。在扩展模式中操作的软件开发工具106在图1中被示为软件开发工具(经扩展的)106A。如此处所使用的,“扩展”意指软件开发工具106消费扩展112以扩大、增加和/或更改源开发工具106的能力。通过扩展软件开发工具106的能力,软件开发工具106可被配置成(作为示例而非限制)执行它先前无法执行的操作。在其他配置中,软件开发工具106可被扩展为软件开发工具(经扩展的)106A,以便对源代码元素执行经修改的操作,而不是以非扩展模式执行默认操作。在一些示例中,软件开发工具106A可被扩展为软件开发工具(经扩展的)106A,以便在以默认或非扩展模式执行操作之外还以扩展模式执行操作。例如,扩展模式可包括不在默认模式中执行的对源代码元素的附加操作。
图2是示出其中软件开发工具106是编译器206的编译环境200的功能框图。如上所述,本文描述的概念和技术不限于任何特定开发环境。本文所包含的各种说明和描述仅仅出于描述目的而使用编译器环境,且不表示将当前所公开的主题仅仅限于编译器环境的意图。为了执行编译操作,编译器206可以在其编程内具有执行编译操作所必需的组件。
在一些配置中,编译器206可包括内部库214,该内部库214在一些配置中可以是可由编译器206消费以执行各种编译操作的程序或可执行代码的集合。在一些配置中,编译器206可访问第三方库,诸如外部库216。在一些配置中,外部库216可以是未被包括在内部库214中的可由编译器206消费以执行各种编译操作的程序或可执行代码的集合(或编译器206的源代码)。如此处所使用的,“库”包括可由诸如编译器206等软件开发工具消费的二进制形式的代码。内部库214和外部库216在图1中仅仅出于说明目的而被示为单个库,并且不反映将本公开限于单个库的意图。内部库214或外部库216可包括可以从源程序消费的程序代码的函数、宏、类模板(取决于特定编译器和可执行代码)和其他单元。
如上所述,为了处置特定编译时操作,编译器206可在其代码内具有编程,可访问内部库214和/或可访问外部库216。例如,编译器206可接收对程序段(I)执行语义分析的指令:
inti;
printf(“%s\n”,i);(I)。
在一些配置中,编译器206可使用编译器206的各个组件来对程序段(I)执行语义分析。在其他配置中,编译器206可以在编译程序段(I)时访问内部库214或外部库216(或两者)。
尽管常规编译器可能能够对程序段(I)执行语义分析(或其他编译时操作),但在运行时期间可能由于各种编译时状况而出现错误。如果源代码元素的行为是在运行时期间用动态类型化编程语言来决定的,则在源代码的特性在编译时期间未被静态描述的情况下可能出现错误。作为示例,以下JavaScript代码包括可由包括内部库214和/或外部库216在内的各种库提供的被称为“DefineNamespace”的函数:
DefineNamespace(‘Utilities.File’,{open:function(name){/*代码*/}});
varfile=Utilities.File.open(‘a.txt’);
名称“Utilities.File”通常直到运行时才被指定,此时执行DefineNamespace。上述对代码执行语义分析的编译器可能不知道该代码在运行时是否正确地执行。为了降低常规上通过编译时分析要求,但在运行时期间导致程序不正确地运行的函数引入错误的概率,编译器206可访问可以向该编译器206提供各种逻辑单元的运行时语义的扩展112A-112N,以使得编译器206能够在编译时期间理解逻辑单元(扩展112A-112N之后被统称为和/或通称为“扩展112”)。在各种配置中,向编译器206提供运行时语义可帮助编译器206确认与逻辑单元相关联的参数。
扩展112可由各种源创建和/或从各种源提供给编译器206。例如,扩展112可以是被提供给开发者的用于特定操作环境的软件开发套件的一部分。在另一示例中,扩展112可由一个或多个开发者生成以供其他开发者使用。在另一示例中,开发者可以在内部库214、外部库216或其他第三方库上创作扩展112。在另一示例中,扩展112可以是内部库214和/或外部库216的一部分。
编译器206可以在编译时期间消费扩展112以便对源代码元素和/或逻辑单元执行编译操作。在上述第一示例中,编译器206可被配置成检测“printf”函数是将根据扩展112来处理的函数。在该配置中,编译器206可消费扩展112以便以扩展模式执行编译操作,而不是消费内部库214中的可执行代码以便以默认或非扩展模式执行编译操作。在上述第二示例中,通过消费扩展112,编译器206可被配置成在运行时期间理解“DefineNamespace”函数行为并且在一个示例中通过创建合适对象来在编译时期间模仿(或模拟)该行为。
扩展112还可以向编译器206提供识别源代码中的特定错误的能力,这些特定错误可能在运行时期间导致错误或者可能妨碍编译操作完成。例如,如果开发者编写函数“DefineNamespace”的源代码但以错误方式编写该函数,则编译器206可消费扩展112以创建各种对象并确定该函数将在被执行时生成错误。例如,开发者可编写其中单词“open”被误拼写为“oopen”的代码段:
DefineNamespace(‘Utilities.File’,{open:function(name){/*代码*/}});
varfile=Utilities.File.oopen(‘a.txt’).
编译器206可消费扩展112以便对上述代码段执行成功的语义分析。例如,编译器206可消费扩展112以便通过用静态地处理上述代码段的一个或多个结果填充符号表来以扩展模式执行操作。在创建静态处理的一个或多个结果后,编译器206可检测到第二行可由于“open”的误拼写而导致运行时错误。在该示例中,如果编译操作是代码生成操作,则编译器206可以在消费扩展112后以扩展模式行动并生成可操作的可执行代码。在不以扩展模式操作的情况下,编译器206可以在非扩展模式中使用默认行为来生成不可操作代码。一些其他示例在下文中提供。
传统上,静态分析已经与静态语言相关联。例如,考虑以下C代码:
longaNumber;
voidSomeFunction(inti){/*函数体*/}
voidSomeOtherFunction(){
XomeFunction();
aNumber="hello";
}
在以上示例中,编译器206可标记2个语义问题:名称“XomeFunction”不存在;以及aNumber被赋值“string”(在技术上是指向字符数组的指针)。常规C编译器能这样做的原因是因为C是静态语言。在静态语言中,所有语言构造的名称和类型在编译时期间都是已知的。甚至对于静态语言而言,特定检查通常直到运行时才能被执行-即使所有元素的名称和类型在编译时期间都是已知的。例如,考虑以下C函数:
date_tcreate_date(unsignedcharday,unsignedcharmonth,shortintyear){
/*实现*/
}
该函数被认为是静态的。该函数本身、所有其参数及其类型以及其返回类型在编译时期间全都是已知的。然而,特定种类的错误在运行时期间仍然可能发生。考虑以上代码的消费者的以下示例:
date_tdate1=create_date(29,02,2012);/*有效日期,2012是闰年*/
date_tdate2=create_date(29,02,2010);/*无效日期,2010不是闰年*/
以上对create_date函数的两个调用被认为是有效的;该函数存在,自变量的数量是正确的,自变量的类型是正确的,所提供的值在针对类型的期望范围内,且消费者的期望返回类型匹配该函数所声明的一个返回类型。然而,这些日期中只有一个是有效的。构造date1将会工作,但date2不会。create_date函数针对date2的行为取决于如何实现该函数。例如,可能抛出运行时异常,可能返回表示错误的特殊实例date_t,和/或可能创建包含无效数据的有效实例date_t。
如上所示,甚至对静态语言而言,也存在传统上在运行时期间执行的特定种类的检查。测试软件可以是易出错且昂贵的。理想地,应在编译时或构建时期间捕捉到尽可能多的错误。如果create_date函数被构建在编译器中或者是该语言的标准库的一部分,则该编译器可执行检查以提出关于以上date2的错误。标准库是随编译器提供的预构建库的集合。因此,编译器可被编程为知道该标准库。
然而,如果以上create_date函数不是标准库的一部分,则编译器无法执行该函数专用的任何检查。如果开发团队想要执行该函数专用的检查,则必须出于这样的目的而编写或消费附加工具。这些工具可以对:源代码;目标代码;调试符号表;或者上述各项的组合进行操作。
这些工具可以是:独立库;为语义分析器(诸如FxCop、Lint等工具)编写的规则;其他;或上述各项的组合。但是,这些工具可具有若干缺陷。例如,它们可能需要被加入(即,开发者将需要为其代码库中的每一个编译位置打开工具/规则/等等)。由于这些工具不是编译器的一部分,因此它们丢失与该编译器的同步(例如,这些工具可能在新版本的编译器改变例如目标文件的布局的情况下中断)。在其他情况下,这些工具经常需要重复编译器中的功能(例如,解析、语义分析等)以提供有意义的分析。
为了扩展编译器206的行为和/或功能,可实现插件模型。在以上示例中,考虑create_date函数的导入声明被改变为看似以下:
extension("date.dll")
date_tcreate_date(unsignedcharday,unsignedcharmonth,shortintyear){
/*实现*/
}
在以上示例中,date.dll是包含对编译器的一个或多个插件(即,编译器扩展)的库。具体而言,它可包括将扩展编译器的语义分析的插件,如下:
通过运行与对create_date的调用的语义分析相关联的扩展112(即,插件),编译器206可执行原本在编译时期间是不可能的检查。
在一些配置中,对于语义分析阶段,这可具有胜于上述外部工具的以下优点。检查可以相对“廉价”-工具链接其他程序、构造模型等的成本被节省。检查可由编译器206执行-无需加入,它就在那儿,只要使用编译器206。不存在与编译器206重复的功能。并且,扩展112未丢失与编译器206的同步。
在以上示例中,C语言句法已经用可用于指定扩展112的关键字来扩充。替代实现包括但不限于:包含扩展的文件需要使用语言句法来显式声明;将源元素映射到扩展的外部文件;源代码中的格式化良好的评论(源代码注释);源属性;以及其他。其他示例包括但不限于:编译器可查找具有与包含引用的文件相同的文件前缀的DLL(例如,对于date.h、date.c或date.obj,编译器将查找date.dll);编译器可查找具有相同的基名的脚本(例如,date.lua或date.js);系统中注册的类型库(例如,COM),其中类型库被指定;系统中注册的类型库(例如,COM),其中类型库是隐式的;以及扩展可位于与引用(例如,date.h、date.c或date.obj)相同的单元中。应理解,本文描述的概念和技术不限于上述实现。
继续以上示例,到DLL的完整路径尚未被指定。替代实现包括但不限于:扩展112路径可以是显式的;扩展112路径可以是隐式的,其中编译器可搜索当前工作目录、源文件目录、预定义目录、预定义系统文件夹;扩展112路径可以是隐式的,且搜索路径由用户相对于命令行选项显式提供,命令行选项具有将按序搜索的目录的列表或者要搜索(例如,通过使用#pragma指示)的目录的源中列表;或者扩展112路径可以是系统中的全局设置,诸如系统注册表或环境变量。另一实现可以经由web服务跨网络动态地获取扩展112。这些概念和技术不限于在此明确描述的实现,因为可使用其他实现并且其他实现被认为在本公开的范围内。
在以上示例中,已经为扩展112提供具有二进制码的单独DLL。替代实现包括但不限于:可使用脚本语言(诸如JavaScript、Lua等);扩展112可以是编写为源程序的一部分的函数本身;或者扩展112可以是源程序中的评论。这些概念和技术不限于在此明确描述的实现,因为可使用其他实现并且其他实现被认为在本公开的范围内。
在以上示例中,扩展DLL中的入口点的名称尚未被提供。替代实现包括但不限于:具有与引用构造相同的名称的函数,其中使用过载来消除针相同构造的不同扩展的歧义;具有与引用构造相同的名称的函数,其中使用相同的词缀来消除对相同构造的不同扩展的歧义;需要提供入口点的显式名称;扩展函数的v表中的偏移;或者导出函数的导出索引。这些概念和技术不限于在此明确描述的实现,因为可使用其他实现并且其他实现被认为在本公开的范围内。
在以上示例中,隐式名称匹配是区分大小写的。替代实现包括但不限于:大小写敏感;大小写不敏感;或者特定大写规则(例如,关于词缀等)。这些概念和技术不限于在此明确描述的实现,因为可使用其他实现并且其他实现被认为在本公开的范围内。
在以上示例中,已扩展编译器206行为以用于语义分析期间的函数调用。可以在语义分析期间扩展的替代源构造包括但不限于:对过载操作符的调用;函数引用;类型实例化;变量引用;变量赋值;或者指针解引用。这些概念和技术不限于在此明确描述的实现,因为可使用其他实现并且其他实现被认为在本公开的范围内。
以上示例提出关于被传递给函数的特定值的错误。对扩展112可用的其他动作包括但不限于:添加、修改或删除符号表中的符号;对输入文档的句法树进行操作;提出错误和警告;改变错误和警告的抑制状态;创建、修改和删除源元素,诸如类型、枚举、常量值、宏或命名空间;或者执行文件操作。这些概念和技术不限于在此明确描述的实现,因为可使用其他实现并且其他实现被认为在本公开的范围内。
以上示例示出了与库一起提供的扩展。这不是创作和分发扩展的唯一方式。创作和分发扩展的其他方式包括但不限于:与库本身一起分发的对库的扩展,诸如与编译器一起分发的标准库扩展;由与对标准库的扩展不同的厂商开发的扩展;或者由库的消费者开发的用于强制实施由团队架构师定义的特定用途或帮助迁移至库的新版本的扩展。
以上示例未示出对扩展的许可。一些许可可以包括但不限于:与库相同的许可;以使用扩展112的许可为条件的使用库的许可;开源许可;闭源但免费使用的许可;或者专用的付费许可。以上示例也未示出在扩展112未被找到或具有错误的情况下的编译器206行为。一些方法可以包括但不限于:提出错误;提出警告;记录故障日志并继续;记录故障日志并中止;不做任何事并忽略故障;提供用于指定做什么的源中指示;或者提供用于指定做什么以及扩展声明的机制。
以上示例示出了静态语言的编译器可如何使用扩展。扩展也可用于动态语言。考虑以下JavaScript示例:
WinJS.Namespace.define("Utilities.File",{
open:function(name){
/*实现*/
}
});
varf=Utilities.File.open("foo.txt");
在以上示例中,对库函数(WinJS.Namespace.define)的调用将创建名称Utilities.File.open。在动态类型语言中,名称创建直到运行时才发生。静态地,以上示例不包含名称Utilities.File.open。Utilities.File仅仅是被传递至函数的字符串。传统上,由于用动态语言(诸如JavaScript)编写的程序能够在运行时期间创建和删除名称(如以上示例中),因此用于此类语言的静态分析器无法提出关于不存在的名称的问题。扩展可用于提高对动态程序的语义分析的质量。在以上示例中,扩展可被提供给WinJS.Namespace.define函数,该扩展执行以下步骤:检查第一参数;如果它不是字符串,则退出扩展;解析字符串参数;和/或在不存在必需符号的情况下创建所有必需符号。
通过对WinJS.Namespace.define的调用运行上述扩展112,静态分析器可具有将在运行时期间创建的名称的知识。上述语义分析器然后将能够标记违例。例如,考虑与先前程序类似但具有打字错误的以下程序:
WinJS.Namespace.define("Utilities.File",{
open:function(name){
/*实现*/
}
});
varf=Utilities.File.oopen("foo.txt");
语义分析器可被配置成标记打字错误,因为所请求的名称(“oopen”)无法在符号表中找到。编译器206可被触发以便在使用各种机制来编译输入文件108中的源代码时访问扩展112。例如,编译器206可被配置成在对输入文件108中的源代码的每一个逻辑单元执行编译操作时检查扩展112。在另一配置中,编译器206可被配置成基于包括指定要执行的逻辑单元的扩展输入的编译时指令集来访问扩展112。例如,编译器206可以在编译时被指示只用扩展112来处理所指定或预定的逻辑单元。将根据扩展112来处理的预定的逻辑单元或源代码元素可被存储编译器206可访问的列表中。应理解,其他逻辑单元或源代码元素可使用扩展112来处理。本文公开的概念和技术不限于任何特定元素或逻辑单元。
用于检索和消费扩展112的其他触发事件可包括但不限于:将扩展112与诸如‘foo’等任何标识符的出现相关联。例如,在常规JS运行时中,先前是合法的一些关键字可能不再合法(因为它们已被保留以供在该语言中使用)。本文描述的概念和技术可实现用于一致地重写这些标识符以使其与所保留的关键字一致/不再冲突的算法。另一触发事件可以是扩展112已经与对特定函数或例程的调用点相关联。在遇到致力于特定/唯一标识的符号(函数、属性、特定变量)的调用点时,调用扩展。扩展可能更改/重写或甚至移除调用点。或者,扩展可能仅仅检查调用点以创建自身可用于附加诊断/代码发出等的一些存储器内信息。命名空间构造示例落在该场景中。对于此,对在运行时产生存储器内类的API的调用点可能无法以任何方式修改。相反,可以为将在运行时产生的类型/成员创建符号,以使得对这些类型/成员的后续引用可以在代码中验证。
另一触发事件可以是将扩展112与特定类的构造相关联。例如,当出现任何‘newFoo()’时,调用扩展112。该实现还可用于顺便访问(dropin)替代类或者由于依赖于被禁止的类型的尝试而停止编译。其他触发事件可以是将扩展112与对特定库/二进制码/外部引用的引用相关联。例如,如果程序链接到不安全的库的已作废版本v1,则扩展112的各种配置可更改编译以迫使该程序链接到经更新/更安全的版本。在一个示例中,用于逻辑单元的扩展112可迫使对逻辑单元的引用引用功能等同体。又一触发事件可以是将扩展112与抽象句法树节点种类相关联。附加配置可以是将扩展112与词法令牌种类相关联。
编译器206还可被配置成检索和消费针对未被显式指定而是被隐式指定的源代码元素或逻辑单元。例如,编译器206可被配置成消费针对具有与源代码中的其他逻辑单元或源代码元素相同的名称的逻辑单元或源代码元素的扩展112。在另一示例中,编译器206可被配置成消费针对具有相同拼写但不管任何大写差异的逻辑单元或源代码元素的扩展112。在另一示例中,可提供针对具有常见的误拼写名称的逻辑单元或源代码元素的扩展112。在该示例中,编译器206可被配置成消费对应于误拼写的逻辑单元或源代码元素的扩展112。扩展112可被配置成纠正误拼写。在另一配置中,扩展112可以与实现特定接口的每一类型相关联。在另一配置中,扩展112可以与扩展那特定基类型的所有类型相关联。
图3是示出其中根据扩展112来处理源代码的逻辑单元的编译环境300的框图。在图3中,编译器206可访问内部库214、外部库216和扩展112。输入文件108A包括具有逻辑单元302A-302C的源代码。输入文件108B包括具有逻辑单元302D-302N(之后统称为和/或通称为“逻辑单元302”)的源代码。应理解,本文描述的概念和技术不限于任何输入文件108配置,因为各种配置可包括一个输入,而其他配置可包括多个输入文件,诸如输入文件108A和输入文件108B。
编译器206可被配置成确定编译器206是否将在扩展模式中对逻辑单元302中的特定逻辑单元进行操作。应理解,编译器206可被配置成使用诸如本文描述的那些触发机制之类的各种触发机制来检查扩展。例如,编译器206可通过以下操作来确定扩展112是否将被消费以用于开发操作:在扩展文件中检查扩展,通过基于与输入相关联的名称或标识符计算扩展文件名来查找扩展,检查与编译单元内联的元数据,查找具有与包含引用的文件相同的文件前缀的DLL,以及查找具有相同的基名的脚本。编译器206可接收对输入文件108A和输入文件108B执行编译操作的指令。响应于接收到该指令,编译器206可以对逻辑单元302执行编译操作。
在一个配置中,编译器206可以对逻辑单元302执行编译操作以便在开发工具输出110中创建可执行代码(代码生成),这些可执行代码在图3中被示为逻辑单元304A-304N(之后被统称为和/或通称为“逻辑单元304”)。应理解,开发工具输出110中的逻辑单元304可包括不直接以1:1关系对应于输入文件中的逻辑单元302的逻辑单元。例如,在代码生成编译操作期间,逻辑单元304可以从一个或多个逻辑单元302中生成或者可由编译器206生成为与逻辑单元302中的任何特定逻辑单元都无关的逻辑单元。
编译器206可被配置成检测到将通过消费扩展112来编译逻辑单元302D。如上所述,扩展112可以在诸如但不限于句法分析、语义分析、优化和代码生成等各种编译操作期间消费。在图3所示的配置中,编译器206可开始对逻辑单元302D的代码生成操作。编译器206消费扩展112中的扩展(代码生成)112A以便以扩展模式对逻辑单元302D执行代码生成操作。编译器206可生成被示为开发工具输出110的逻辑单元304中的逻辑单元(经扩展的)204D的输出逻辑单元。应理解,为逻辑单元(经扩展的)304B指定“扩展”意味着该逻辑单元已经在编译器206消费扩展(代码生成)112A之后使用扩展编译器模式来生成。
如果执行另一编译器操作,则编译器206可被配置成基于该操作来使用其他扩展。例如,扩展(语义)112B可由编译器206在对逻辑单元302D的语义分析操作期间消费。在另一示例中,扩展(优化)112C可由编译器206在对逻辑单元302D的优化操作期间消费。在另一示例中,扩展(句法)112D可由编译器206在对逻辑单元302D的句法分析操作期间消费。
应理解,本文描述的概念和技术不限于编译器206的任何特定操作。还应理解,不一定消费针对源代码文件中的所有逻辑单元或源代码元素的扩展。例如,扩展可能由编译器206针对诸如逻辑单元302D等源代码元素消费以用于特定编译操作,且不在其他编译操作中消费。此外,如上所述,应理解,编译器206可被配置成消费针对除了函数之外的源代码元素或逻辑单元的扩展。作为示例而非限制,编译器206可被配置成消费针对函数、类、方法或变量或其他元素的扩展。本文公开的概念和技术不限于任何特定逻辑单元或源代码元素的扩展的执行。
本文描述的概念和技术的各实施例可给予开发者关于编写源代码的一定程度的灵活性。一些示例在上文中描述。本文描述的概念和技术的实现的附加示例是将传统编程语言(或传统版本)变换成编程语言的经更新版本、不同的编程语言或已消费库的经更新版本。如此处所使用的,“传统”意指已经被另一源代码或编程语言替代的源代码或编程语言。例如,传统源代码可以是早于源代码的当前使用版本的源代码版本。在另一示例中,传统源代码可以是用早于当前使用的编程语言的编程语言的源代码。在另一示例中,输入可以是针对库或系统的传统版本的源代码,而输出可以是可以对库或系统的新版本进行操作的计算机程序。
图4是示出使用本文描述的各种概念和技术来将传统代码变换成供在经更新系统中使用的代码的功能框图。传统代码输入文件108包括传统代码输入文件108中所包括的逻辑单元402A-402N(之后统称为和/或通称为“逻辑单元402”)。逻辑单元402形成传统程序的源代码的至少一部分。如果开发者希望在诸如新环境之类的经更新系统中使用逻辑单元402,则开发者可能被要求修改传统单元402的各部分以使得传统单元402可以在新环境中执行。
在图4所示的配置中,如果编译器206在代码生成操作期间使用外部库216,则在该代码生成操作完成时生成的逻辑单元在新环境中可能不正确地或不按所需要的那样运行。这可能出于各种原因而发生。例如,逻辑单元402可包括不在执行开发工具输出110中的可包括传统代码的可执行代码的环境中使用的逻辑单元。在另一示例中,逻辑单元402可包括具有在执行开发工具输出110的环境中不再使用的变量的函数。
为了向开发者提供在编译器206编译逻辑单元402时更新逻辑单元402的能力,扩展112可包括扩展(传统)112E。扩展(传统)112E可由编译器206消费以扩展编译器206的行为。在一个配置中,扩展(传统)112E可由编译器206在生成用编程语言的第一版本编写的代码的代码生成操作期间消费以兼容该编程语言的第二版本。例如,传统扩展112E可由编译器206消费以为逻辑单元404A-404N(之后统称为和/或通称为“逻辑单元404”)中的逻辑单元(经扩展的逻辑单元404B)生成可包括与新环境兼容的源代码逻辑单元的可执行代码。应理解,对于扩展(传统)112E相关联的术语“传统”的使用在该配置中意味着该扩展时是与库、源代码元素、环境等的传统版本相关联的活动(或当前使用的)扩展。
现在转向图5,提供了根据说明性实施例的扩展软件开发工具106的各方面。应该理解,不一定按任何特定次序来呈现此处公开的方法的操作,并且用替换次序来执行部分或全部操作是可能的且可构想的。为了易于描述和说明,按所示次序来呈现各操作。可以添加、省略和/或同时执行操作,而不脱离所附权利要求书的范围。
还应当理解,所示方法可在任何时间结束且不必完整地执行。所述方法的部分或全部操作和/或基本上等价的操作可以通过执行计算机存储介质上所包括的计算机可读指令来执行,如本文所定义的。如在说明书和权利要求书中使用的术语“计算机可读指令”及其变型,在本文是用来广泛地包括例程、应用、应用模块、程序模块、程序、组件、数据结构、算法等等。计算机可读指令可以在各种系统配置上实现,包括单处理器或多处理器系统、小型计算机、大型计算机、个人计算机、手持式计算设备、基于微处理器的可编程消费电子产品、其组合等等。
因此,应该理解,本文所述的逻辑操作被实现为:(1)一系列计算机实现的动作或运行于计算系统上的程序模块;和/或(2)计算系统内的互连的机器逻辑电路或电路模块。该实现是取决于计算系统的性能及其他要求的选择问题。因此,此处描述的逻辑操作被不同地称为状态、操作、结构设备、动作或模块。这些操作、结构设备、动作和模块可以用软件、固件、专用数字逻辑及其任何组合来实现。各方法的操作在下文中被描述为至少部分地由软件开发工具106、编译器206、内部库214、外部库216、扩展112或其组合来实现。
转向图5,方法500开始于操作502并继续至操作504,其中软件开发工具106接收执行开发操作的指令。如上所述,开发操作可包括但不限于预处理、词法分析、句法分析、静态分析、指令调度、代码生成、链接、汇编、解释、模拟和JIT编译。
从操作504,方法500继续至操作506,其中软件开发工具106确定扩展112是否对该操作可用。如上所述,该操作可以是对各种源代码元素或逻辑单元的各种操作。例如,软件开发工具106可接收为特定逻辑单元生成代码的指令。软件开发工具106可确定扩展是否可用于为该特定逻辑单元生成代码。如果没有扩展对该操作可用,则方法500继续至操作508,其中软件开发工具106以默认(或非扩展)模式执行该操作。方法500然后在操作510处结束。
如果扩展对该操作可用,则方法500继续至操作512,其中软件开发工具106访问扩展112。软件开发工具106可以从各种源访问扩展112。例如,扩展112可以是包括由第三方开发者提供的可执行代码的单独文件。在另一示例中,扩展112可被加载到软件开发工具106的内部库214中。
从操作512,方法500继续至操作514,其中软件开发工具106消费扩展112。通过消费扩展,软件开发工具106被配置成以扩展模式而非默认或任何其他模式执行操作。应理解,扩展112不限于对源代码元素或逻辑单元执行的操作。例如,扩展112可将软件开发工具106配置成对外部库216、内部库214或软件开发工具106执行操作。本文描述的概念和技术不限于对输入文件的操作。
从操作514,方法500继续至操作516,其中软件开发工具106以扩展模式执行操作。软件开发工具(经扩展的)106A的扩展模式可取决于软件开发工具106的特定配置来启动或撤消。例如,开发者可能想要软件开发工具106在一个时间段期间以默认模式操作,而在其他时间段中以扩展模式(106A)操作。例如,系统可能在程序调用特定应用编程接口时经历安全问题。扩展112可以变得可供软件开发工具106消费以使得软件开发工具106生成导致该程序调用安全API的代码。当安全问题结束时,软件开发工具106可被重新编程为生成必要的代码。由此,在该示例中,扩展112是临时的。方法500然后在操作510处结束。
图6示出了能够执行本文描述的软件组件以提供本文描述的概念和技术的设备的说明性计算机体系结构600。由此,图6所示的计算机体系结构600示出服务器计算机、移动电话、PDA、智能电话、台式计算机、上网本计算机、平板计算机、和/或膝上型计算机的体系结构。计算机体系结构600可用于执行本文所呈现的软件组件的任何方面。
图6所示的计算机体系结构600包括中央处理单元602(“CPU”)、包括随机存取存储器606(“RAM”)和只读存储器(“ROM”)608在内的系统存储器604、以及将存储器604耦合至CPU602的系统总线610。基本输入/输出系统被存储在ROM608中,该系统包含帮助诸如在启动期间在计算机体系结构600中的元件之间传输信息的基本例程。计算机体系结构600还包括用于存储来自图1的操作系统104以及一个或多个应用程序或文件的大容量存储设备612,这些应用程序或文件包括但不限于软件开发工具106、内部库214和扩展112。
大容量存储设备612通过连接至总线610的大容量存储控制器(未示出)连接至CPU602。大容量存储设备612及其相关联的计算机可读介质为计算机体系结构600提供非易失性存储。虽然对此处包含的计算机可读介质的描述引用了诸如硬盘或CD-ROM驱动器之类的大容量存储设备,但是本领域的技术人员应该明白,计算机可读介质可以是可由计算机体系结构600访问的任何可用计算机存储介质或通信介质。
通信介质包括诸如载波或其它传输机制等已调制数据信号中的计算机可读指令、数据结构、程序模块或其它数据,且包含任何传递介质。术语“已调制数据信号”指的是其一个或多个特征以在信号中编码信息的方式被更改或设定的信号。作为示例而非限制,通信介质包括诸如有线网络或直接线连接之类的有线介质,以及诸如声学、RF、红外及其他无线介质之类的无线介质。上述的任意组合也应包括在计算机可读介质的范围之内。
作为示例而非限制,计算机存储介质可包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。例如,计算机介质包括但不限于,RAM、ROM、EPROM、EEPROM、闪存或其他固态存储器技术、CD-ROM、数字多功能盘(“DVD”)、HD-DVD、蓝光(BLU-RAY)或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备、或能用于存储所需信息且可以由计算机体系结构600访问的任何其他介质。为了声明的目的,短语“计算机存储介质”及其变型不包括波或信号本身和/或通信介质。
根据各实施例,计算机体系结构600可以使用通过诸如网络620之类的网络到远程计算机的逻辑连接来在联网环境中操作。计算机体系结构600可以通过连接至总线610的网络接口单元616来连接到网络620。应当理解,网络接口单元616还可以被用来连接到其他类型的网络和远程计算机系统。计算机体系结构600也可包括输入/输出控制器618,该输入/输出控制器618用于接收和处理来自多个其他设备(包括键盘、鼠标或电子指示笔)的输入。类似地,输入/输出控制器618可以向显示屏、打印机或其他类型的输出设备提供输出。
应当理解,本文所描述的软件组件在被加载到CPU602中并被执行时可以将CPU602和总体计算机体系结构600从通用计算系统变换成为被定制为促进本文提出的功能的专用计算系统。CPU602可以用任意数量的晶体管或其他分立的电路元件(它们可以分别地或共同地呈现任意数量的状态)构建。更具体而言,CPU602可以响应于包含在本文所公开的软件模块中的可执行指令而作为有限状态机来操作。这些计算机可执行指令可以通过指定CPU602如何在各状态之间转换来变换CPU602,由此变换了构成CPU602的晶体管或其它分立硬件元件。
对本文所提出的软件模块的编码也可变换本文所提出的计算机可读介质的物理结构。在本说明书的不同实现中,物理结构的具体变换可取决于各种因素。这样的因素的示例可以包括,但不仅限于:用于实现计算机可读介质的技术、计算机可读介质被表征为主存储器还是辅存储器等等。例如,如果计算机可读介质被实现为基于半导体的存储器,则本文所公开的软件可以通过变换半导体存储器的物理状态而在计算机可读介质上编码。例如,软件可以变换构成半导体存储器的晶体管、电容器或其它分立电路元件的状态。软件还可变换这些组件的物理状态以在其上存储数据。
作为另一示例,本文所公开的计算机可读介质可以使用磁或光技术来实现。在这些实现中,本文所提出的软件可以在磁或光介质中编码了软件时变换所述磁或光介质的物理状态。这些变换可以包括改变给定磁性介质内的特定位置的磁性。这些变换还可以包括改变给定光学介质内的特定位置的物理特征或特性,以改变这些位置的光学特性。在没有偏离本说明书的范围和精神的情况下,物理介质的其他变换也是可以的,前面提供的示例只是为了便于此描述。
鉴于以上内容,应当理解,在计算机体系结构600中发生许多类型的物理变换以便存储并执行本文所提出的软件组件。还应当理解,计算机体系结构600可以包括其它类型的计算设备,包括:手持式计算机、嵌入式计算机系统、个人数字助理、以及本领域技术人员已知的其它类型的计算设备。还可以构想的是,计算机体系结构600可以不包括图6所示的全部组件,可以包括未在图6中明确示出的其它组件,或者可利用以某种方式不同于图6所示的体系结构。
基于上述内容,应当意识到,本文已经公开了用于扩展软件开发工具的行为的概念和技术。虽然用计算机结构特征、方法和变换动作、特定计算机器、以及计算机可读介质专用的语言描述了本文中所描述的主题,但是应当理解,所附权利要求书中所定义的本发明不必限于本文中所描述的具体特征、动作、或介质。相反,这些具体特征、动作以及介质是作为实现权利要求的示例形式而公开的。
以上所述的主题仅作为说明提供,并且不应被解释为限制。可对本文中所描述的主题作出各种修改和改变,而不必遵循示出和描述的示例实施例和应用且不背离所附权利要求书中所阐述的本发明的真正精神和范围。

Claims (10)

1.一种用于执行源代码开发操作的方法,所述方法包括:
接收包括包含至少一个逻辑单元的源代码的输入文件;
接收对所述至少一个逻辑单元执行开发操作的指令;
响应于接收到对所述至少一个逻辑单元执行所述开发操作的指令,确定扩展是否将被消费以用于所述开发操作;以及
如果所述扩展将被消费以用于所述开发操作,则
检索所述扩展;
通过消费所述扩展来变为扩展模式;以及
以所述扩展模式对所述至少一个逻辑单元执行所述开发操作。
2.如权利要求1所述的方法,其特征在于,所述开发操作是预处理、词法分析、句法分析、语义分析、指令调度、代码生成、链接、汇编、解释和JIT编译中的一个或多个。
3.如权利要求1所述的方法,其特征在于,确定所述扩展是否将被消费以用于所述开发操作包括接收指定将在所述扩展模式中对其进行操作的一个或多个逻辑单元的扩展输入。
4.如权利要求1所述的方法,其特征在于,确定所述扩展是否将被消费以用于所述开发操作包括以下动作中的一个或多个:
在扩展文件中检查所述扩展;
通过基于与输入相关联的名称或标识符计算扩展文件名来查找所述扩展;以及
检查与编译单元内联的元数据。
5.一种计算机,包括:
处理器;以及
与所述处理器通信的计算机可读存储介质,所述计算机可读存储介质包括其上存储的计算机可执行指令,所述计算机可执行指令在由所述处理器执行时使所述处理器:
接收包括将被编译的至少一个逻辑单元的输入文件;
接收对所述至少一个逻辑单元执行编译操作的指令;
响应于接收到执行所述编译操作的指令,确定是否将在所述至少一个逻辑单元将被编译时为所述至少一个逻辑单元执行扩展;以及
如果将为所述逻辑单元执行所述扩展,则
检索针对所述至少一个逻辑单元的扩展;以及
在对所述至少一个逻辑单元执行所述编译操作之前执行所述扩展;以及
使用所述扩展来对所述至少一个逻辑单元执行所述编译操作。
6.如权利要求5所述的计算机,其特征在于,所述逻辑单元包括以下各项中的一个或多个:对函数的定义或使用、类、方法、变量、宏、作用域、模板、过程、闭包、类型、指示、源文件本身或库。
7.如权利要求5所述的计算机,其特征在于,所述至少一个逻辑单元是针对库或系统的传统版本的源代码,而输出是能对所述库或所述系统的新版本进行操作的计算机程序。
8.如权利要求5所述的计算机,其特征在于,所述用于确定是否将在所述至少一个逻辑单元将被编译时为所述至少一个逻辑单元执行所述扩展的计算机可执行指令包括在由所述处理器执行时使所述处理器执行以下操作的计算机可执行指令:接收指定将被扩展的一个或多个可扩展逻辑单元的扩展输入或者在扩展文件中检查针对所述至少一个逻辑单元的扩展。
9.如权利要求5所述的计算机,其特征在于,针对所述至少一个逻辑单元的所述扩展包括迫使对逻辑单元的引用引用功能等同体。
10.一种包括其上存储的计算机可执行指令的计算机可读存储介质,所述计算机可执行指令在由计算机执行时使所述计算机:
接收将从第二编程语言编译成第一编程语言的输入文件,所述输入文件包括用所述第二编程语言的多个逻辑单元;
接收对所述输入文件中的所述多个逻辑单元执行代码生成的指令;
响应于执行代码生成的所述指令,分析所述多个逻辑单元中的第一逻辑单元;
确定扩展是否与所述多个逻辑单元中的所述第一逻辑单元相关联;
如果扩展与所述多个逻辑单元中的所述第一逻辑单元相关联,则
执行与所述第一逻辑单元相关联的所述扩展;
如果扩展不与所述多个逻辑单元中的所述第一逻辑单元相关联,则
访问库,
在不执行所述扩展的情况下将所述第一逻辑单元编译成经编译的第一逻辑单元,以及
将所述经编译的第一逻辑单元输出到用所述第一编程语言的输出文件。
CN201380068712.0A 2012-12-31 2013-12-27 扩展开发环境 Active CN105164641B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/732,073 2012-12-31
US13/732,073 US8954939B2 (en) 2012-12-31 2012-12-31 Extending a development environment
PCT/US2013/077901 WO2014106000A1 (en) 2012-12-31 2013-12-27 Extending a development environment

Publications (2)

Publication Number Publication Date
CN105164641A true CN105164641A (zh) 2015-12-16
CN105164641B CN105164641B (zh) 2019-03-08

Family

ID=49998706

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201380068712.0A Active CN105164641B (zh) 2012-12-31 2013-12-27 扩展开发环境

Country Status (4)

Country Link
US (1) US8954939B2 (zh)
EP (1) EP2939111A1 (zh)
CN (1) CN105164641B (zh)
WO (1) WO2014106000A1 (zh)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107566519A (zh) * 2017-09-27 2018-01-09 北京蜂语网络科技有限公司 一种代码操作方法、装置、服务器及服务器集群
CN108920133A (zh) * 2018-06-14 2018-11-30 北京三快在线科技有限公司 跨语言编程方法、装置、电子设备及存储介质
CN109947430A (zh) * 2019-03-26 2019-06-28 山东浪潮通软信息科技有限公司 一种基于动态编译的代码编译生成工具和一种动态编译方法
CN111309308A (zh) * 2020-02-27 2020-06-19 思客云(北京)软件技术有限公司 一种对c和c++编译器加壳的方法、设备和计算机可读存储介质
CN112513820A (zh) * 2018-07-16 2021-03-16 微软技术许可有限责任公司 开发工具扩展程序的透明远程执行
CN113260976A (zh) * 2018-12-31 2021-08-13 微软技术许可有限责任公司 用于在编译源代码中调度指令技术
CN113287114A (zh) * 2019-01-14 2021-08-20 微软技术许可有限责任公司 针对以同步数字电路为目标的编程语言的查找表优化
CN113391789A (zh) * 2020-02-26 2021-09-14 红帽公司 应用框架开发者工具
CN113614688A (zh) * 2019-02-05 2021-11-05 西门子股份公司 大自动化代码

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9176714B2 (en) * 2007-11-12 2015-11-03 International Business Machines Corporation Re-using legacy libraries in software
US8924944B2 (en) * 2012-06-29 2014-12-30 Microsoft Corporation Implementation of distributed methods that support generic functions
US9176769B2 (en) 2012-06-29 2015-11-03 Microsoft Technology Licensing, Llc Partitioned array objects in a distributed runtime
US8893155B2 (en) 2013-03-14 2014-11-18 Microsoft Corporation Providing distributed array containers for programming objects
US9678787B2 (en) 2014-05-23 2017-06-13 Microsoft Technology Licensing, Llc Framework for authoring data loaders and data savers
EP2977918A1 (en) * 2014-07-24 2016-01-27 Tata Consultancy Services Limited A system and method for executing a sparql query
US20160335067A1 (en) * 2015-05-11 2016-11-17 Microsoft Technology Licensing, Llc Source code customization framework
US9569335B1 (en) * 2015-10-07 2017-02-14 Sap Se Exploiting software compiler outputs for release-independent remote code vulnerability analysis
US10120968B1 (en) * 2015-12-03 2018-11-06 Cadence Design Systems, Inc. System and method for hierarchical library searching
US10203940B2 (en) * 2016-12-15 2019-02-12 Microsoft Technology Licensing, Llc Compiler with type inference and target code generation
US11281987B2 (en) * 2017-11-28 2022-03-22 Duke University Software-defined quantum computer
US11216255B1 (en) * 2017-12-30 2022-01-04 ezbds, LLC Open compiler system for the construction of safe and correct computational systems
US11295083B1 (en) * 2018-09-26 2022-04-05 Amazon Technologies, Inc. Neural models for named-entity recognition
US10983771B1 (en) * 2019-11-21 2021-04-20 Oracle International Corporation Quality checking inferred types in a set of code
CN113407184A (zh) * 2020-03-16 2021-09-17 广州汽车集团股份有限公司 一种诊断安全算法封装及验证方法、系统及存储介质
US11966322B2 (en) * 2020-11-25 2024-04-23 International Business Machines Corporation Preloading debug information based on the increment of application
CN112925514A (zh) * 2021-02-25 2021-06-08 浪潮云信息技术股份公司 一种机器学习平台扩展自定义算法组件的方法
US11481200B1 (en) * 2021-10-11 2022-10-25 International Business Machines Corporation Checking source code validity at time of code update
US11947966B2 (en) 2021-10-11 2024-04-02 International Business Machines Corporation Identifying computer instructions enclosed by macros and conflicting macros at build time
US11934810B2 (en) * 2022-05-19 2024-03-19 Microsoft Technology Licensing, Llc Translating an edit from a child computer language to a parent computer language while maintaining a semantic meaning of the edit
US12061903B2 (en) 2022-09-16 2024-08-13 Microsoft Technology Licensing, Llc Software development quality assessment
CN115481745B (zh) * 2022-10-19 2024-08-23 量子科技长三角产业创新中心 一种量子算法的编译方法、系统、电子设备及存储介质
CN116069633B (zh) * 2023-01-03 2024-03-29 广州汽车集团股份有限公司 代码的检验方法、装置、电子设备及存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6219834B1 (en) * 1998-05-15 2001-04-17 International Business Machines Corporation Extensible compiler and method
US20090241090A1 (en) * 2008-03-20 2009-09-24 Sap Ag Extending the functionality of a host programming language
CN102402451A (zh) * 2010-09-28 2012-04-04 微软公司 用户定义类型的编译时边界检查
CN102696012A (zh) * 2010-01-06 2012-09-26 微软公司 从代码使用中创建所推断的符号
CN102707982A (zh) * 2011-03-04 2012-10-03 微软公司 托管汇编件的增量式生成
CN103064720A (zh) * 2011-09-09 2013-04-24 微软公司 简档导向的jit代码生成

Family Cites Families (68)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5481708A (en) 1992-06-05 1996-01-02 Borland International, Inc. System and methods for optimizing object-oriented compilations
US5923882A (en) 1995-08-29 1999-07-13 Silicon Graphics, Inc. Cross-module optimization for dynamically-shared programs and libraries
US5845118A (en) 1995-12-14 1998-12-01 International Business Machines Corporation Method for generating shared library executable code with lazy global offset table address calculation
US5892950A (en) * 1996-08-09 1999-04-06 Sun Microsystems, Inc. Interface for telecommunications network management
US6175948B1 (en) 1998-02-05 2001-01-16 Motorola, Inc. Method and apparatus for a waveform compiler
CA2240584C (en) 1998-06-12 2002-02-12 Ibm Canada Limited - Ibm Canada Limitee Compile-time data dependency verification
US6289506B1 (en) 1998-06-30 2001-09-11 Intel Corporation Method for optimizing Java performance using precompiled code
US6202205B1 (en) * 1998-07-21 2001-03-13 Hewlett-Packard Company System and method for profile-based, on-the-fly optimization of library code
US6292938B1 (en) 1998-12-02 2001-09-18 International Business Machines Corporation Retargeting optimized code by matching tree patterns in directed acyclic graphs
US6895578B1 (en) 1999-01-06 2005-05-17 Parasoft Corporation Modularizing a computer program for testing and debugging
EP1292887A1 (en) * 2000-04-21 2003-03-19 Togethersoft Corporation Methods and systems for generating source code for object-oriented elements
US6973646B1 (en) 2000-07-21 2005-12-06 International Business Machines Corporation Method for compiling program components in a mixed static and dynamic environment
GB2373073A (en) 2001-03-08 2002-09-11 Escher Technologies Ltd Process and system for developing validated and optimised object-oriented software
US6804682B1 (en) 2002-04-29 2004-10-12 Borland Software Corporation System and methodology providing compiler-assisted refactoring
US7171657B2 (en) 2002-09-09 2007-01-30 Sun Microsystems, Inc. Method and apparatus for importing static members of a class
US20040117778A1 (en) 2002-12-16 2004-06-17 Sehr David C. Optimization of software code using N-bit pointer conversion
US7441237B2 (en) * 2003-03-25 2008-10-21 Microsoft Corporation System and method for extending a compiler through a composer
US7219338B2 (en) 2003-03-25 2007-05-15 Microsoft Corporation Multi-language compilation
US7305666B2 (en) * 2003-07-23 2007-12-04 Microsoft Corporation Description language for an extensible compiler and tools infrastructure
US7434209B2 (en) 2003-07-15 2008-10-07 Transitive Limited Method and apparatus for performing native binding to execute native code
US7373642B2 (en) * 2003-07-29 2008-05-13 Stretch, Inc. Defining instruction extensions in a standard programming language
US8533233B2 (en) * 2004-01-21 2013-09-10 Siemens Industry, Inc. Generic framework for porting legacy process automation assets to a new control system
US8631386B2 (en) 2004-08-25 2014-01-14 Mohit Doshi System and method for automating the development of web services
US7370318B1 (en) 2004-09-02 2008-05-06 Borland Software Corporation System and methodology for asynchronous code refactoring with symbol injection
US7451435B2 (en) 2004-12-07 2008-11-11 Microsoft Corporation Self-describing artifacts and application abstractions
US7779399B2 (en) 2005-05-16 2010-08-17 Armorize Technologies, Inc. System and method for securing web application code and verifying correctness of software
US7650600B2 (en) 2005-06-20 2010-01-19 Microsoft Corporation Unique identifier resolution interfaces for lightweight runtime identity
US7730448B2 (en) 2005-08-11 2010-06-01 Microsoft Corporation Layered type systems
US7788651B2 (en) * 2005-09-02 2010-08-31 Microsoft Corporation Anonymous types
US20070078823A1 (en) 2005-09-30 2007-04-05 Microsoft Corporation Expression templates and object classes for multidimensional analytics expressions
US20070169036A1 (en) 2005-10-31 2007-07-19 Dhi Technologies, Inc. Incremental type inferencing engine
WO2007084780A2 (en) 2006-01-20 2007-07-26 Aptana, Inc. Type inference system and method
US7861229B2 (en) 2006-03-16 2010-12-28 Microsoft Corporation Complexity metrics for data schemas
US7770106B2 (en) 2006-03-17 2010-08-03 Microsoft Corporation Dynamic generation of compliant style sheets from non-compliant style sheets
US8015554B2 (en) 2006-03-24 2011-09-06 International Business Machines Corporation Source-to-source transformation for language dialects
US7805707B2 (en) 2006-07-21 2010-09-28 Novell, Inc. System and method for preparing runtime checks
US8739137B2 (en) 2006-10-19 2014-05-27 Purdue Research Foundation Automatic derivative method for a computer programming language
US8132158B2 (en) 2006-12-28 2012-03-06 Cheng Wang Mechanism for software transactional memory commit/abort in unmanaged runtime environment
US8276118B2 (en) 2007-03-01 2012-09-25 International Business Machines Corporation Depicting changes to structures in an integrated development environment
US8171453B2 (en) 2007-05-21 2012-05-01 Microsoft Corporation Explicit delimitation of semantic scope
US8296721B2 (en) * 2007-05-30 2012-10-23 International Business Machines Corporation Template-based software development
US8060868B2 (en) 2007-06-21 2011-11-15 Microsoft Corporation Fully capturing outer variables as data objects
US20090024986A1 (en) 2007-07-19 2009-01-22 Microsoft Corporation Runtime code modification
CN101369233A (zh) 2007-08-14 2009-02-18 国际商业机器公司 程序编译方法和编译器
US20100269094A1 (en) * 2007-11-13 2010-10-21 Roman Levenshteyn Technique for automatically generating software in a software development environment
US7493610B1 (en) 2008-03-27 2009-02-17 International Business Machines Corporation Versioning optimization for dynamically-typed languages
US7530056B1 (en) 2008-03-31 2009-05-05 International Business Machines Corporation Method and system for detecting runtime defects in a program by comparing correct and incorrect runs
US8099721B2 (en) 2008-06-17 2012-01-17 Microsoft Corporation Parsing of declarations in all branches of preprocessor conditionals
US8434062B2 (en) 2008-06-19 2013-04-30 International Business Machines Corporation Enhancing source code debugging and readability using visual symbols
US8387021B2 (en) 2008-09-26 2013-02-26 Microsoft Corporation Symbolic runtime checking of quantified contracts
JP5209059B2 (ja) 2008-10-24 2013-06-12 インターナショナル・ビジネス・マシーンズ・コーポレーション ソース・コード処理方法、システム、及びプログラム
KR101049718B1 (ko) 2008-12-29 2011-07-19 에스케이 텔레콤주식회사 소프트웨어 분리 실행 방법, 장치 및 컴퓨터로 읽을 수 있는 기록매체
US8239842B2 (en) 2009-02-24 2012-08-07 Microsoft Corporation Implicit line continuation
US9134973B2 (en) 2009-02-26 2015-09-15 Red Hat, Inc. Dynamic compiling and loading at runtime
US8239847B2 (en) 2009-03-18 2012-08-07 Microsoft Corporation General distributed reduction for data parallel computing
US8578218B2 (en) 2009-04-04 2013-11-05 Oracle International Corporation Method and system for implementing a scalable, high-performance, fault-tolerant locking mechanism in a multi-process environment
US8245210B2 (en) 2009-05-22 2012-08-14 Microsoft Corporation Compile-time context for dynamically bound operations
US8640104B2 (en) 2009-12-08 2014-01-28 International Business Machines Corporation Computer method and apparatus for debugging in a dynamic computer language
US20110138373A1 (en) 2009-12-08 2011-06-09 American National Laboratories, Inc. Method and apparatus for globally optimizing instruction code
US8302086B2 (en) 2009-12-18 2012-10-30 Oracle America, Inc. System and method for overflow detection using symbolic analysis
US8707270B2 (en) 2010-02-17 2014-04-22 Siemens Product Lifecycle Management Software Inc. Method and system for configurable pessimistic static XSL output validation
US8813027B2 (en) 2010-04-14 2014-08-19 Microsoft Corporation Static type checking against external data sources
US8479188B2 (en) 2010-07-08 2013-07-02 Microsoft Corporation Binary code change vulnerability prioritization
US8943487B2 (en) 2011-01-20 2015-01-27 Fujitsu Limited Optimizing libraries for validating C++ programs using symbolic execution
US8752035B2 (en) 2011-05-31 2014-06-10 Microsoft Corporation Transforming dynamic source code based on semantic analysis
US8789018B2 (en) 2011-05-31 2014-07-22 Microsoft Corporation Statically derived symbolic references for dynamic languages
US8555250B2 (en) 2011-05-31 2013-10-08 Microsoft Corporation Static semantic analysis of dynamic languages
US9256401B2 (en) 2011-05-31 2016-02-09 Microsoft Technology Licensing, Llc Editor visualization of symbolic relationships

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6219834B1 (en) * 1998-05-15 2001-04-17 International Business Machines Corporation Extensible compiler and method
US20090241090A1 (en) * 2008-03-20 2009-09-24 Sap Ag Extending the functionality of a host programming language
CN102696012A (zh) * 2010-01-06 2012-09-26 微软公司 从代码使用中创建所推断的符号
CN102402451A (zh) * 2010-09-28 2012-04-04 微软公司 用户定义类型的编译时边界检查
CN102707982A (zh) * 2011-03-04 2012-10-03 微软公司 托管汇编件的增量式生成
CN103064720A (zh) * 2011-09-09 2013-04-24 微软公司 简档导向的jit代码生成

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107566519A (zh) * 2017-09-27 2018-01-09 北京蜂语网络科技有限公司 一种代码操作方法、装置、服务器及服务器集群
CN107566519B (zh) * 2017-09-27 2021-04-06 北京蜂语网络科技有限公司 一种代码操作方法、装置、服务器及服务器集群
CN108920133A (zh) * 2018-06-14 2018-11-30 北京三快在线科技有限公司 跨语言编程方法、装置、电子设备及存储介质
CN108920133B (zh) * 2018-06-14 2021-06-18 北京三快在线科技有限公司 跨语言编程方法、装置、电子设备及存储介质
CN112513820A (zh) * 2018-07-16 2021-03-16 微软技术许可有限责任公司 开发工具扩展程序的透明远程执行
CN112513820B (zh) * 2018-07-16 2024-06-07 微软技术许可有限责任公司 开发工具扩展程序的透明远程执行
CN113260976A (zh) * 2018-12-31 2021-08-13 微软技术许可有限责任公司 用于在编译源代码中调度指令技术
CN113287114A (zh) * 2019-01-14 2021-08-20 微软技术许可有限责任公司 针对以同步数字电路为目标的编程语言的查找表优化
CN113614688A (zh) * 2019-02-05 2021-11-05 西门子股份公司 大自动化代码
CN109947430A (zh) * 2019-03-26 2019-06-28 山东浪潮通软信息科技有限公司 一种基于动态编译的代码编译生成工具和一种动态编译方法
CN113391789A (zh) * 2020-02-26 2021-09-14 红帽公司 应用框架开发者工具
CN111309308A (zh) * 2020-02-27 2020-06-19 思客云(北京)软件技术有限公司 一种对c和c++编译器加壳的方法、设备和计算机可读存储介质

Also Published As

Publication number Publication date
WO2014106000A1 (en) 2014-07-03
US8954939B2 (en) 2015-02-10
EP2939111A1 (en) 2015-11-04
CN105164641B (zh) 2019-03-08
US20140189662A1 (en) 2014-07-03

Similar Documents

Publication Publication Date Title
CN105164641A (zh) 扩展开发环境
US8250524B2 (en) Contract programming for code error reduction
US9047583B2 (en) Ontology context logic at a key field level
TWI536263B (zh) 將作業系統之原始應用程式介面投射至其它程式語言
US10331425B2 (en) Automated source code adaption to inject features between platform versions
US20040261065A1 (en) Method and system for compiling multiple languages
US8141035B2 (en) Method for accessing internal states of objects in object oriented programming
CN103718155A (zh) 运行时系统
US20050065953A1 (en) System and method for changing defined elements in a previously compiled program using a description file
CN105808266A (zh) 代码运行方法及装置
US7512938B2 (en) Typed intermediate representation for object-oriented languages
US20040187100A1 (en) Data store for arbitrary data types with type safe storage and retrieval
KR20090024229A (ko) 마크업 내부에서 명시적으로 서브클래스를 정의하고 이용하는 시스템 및 방법
Bolin Closure: The definitive guide: Google tools to add power to your JavaScript
US9141356B2 (en) Process for generating dynamic type
CN105393216B (zh) 运行时内存调节
Danilewski et al. Specialization through dynamic staging
Guyon et al. An integrated development environment for pattern matching programming
Friesen Designing Programming Languages for Writing Maintainable Software
Tselikis Introduction to C++
Wittie et al. Generating a statically-checkable device driver I/O interface
Danial Language Basics
Morales et al. Modular Extensions for Modular (Logic) Languages
Adams An Introduction to the C++ Programming Language (Version: 2015-02-03)
Darulová Final Year Project Report

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant