共享垃圾收集器的不同类型图之间的无缝高性能互操作性的制作方法

文档序号:16595870发布日期:2019-01-14 19:38阅读:147来源:国知局
共享垃圾收集器的不同类型图之间的无缝高性能互操作性的制作方法

在计算机科学的领域中,垃圾收集(gc)是一种自动存储器管理形式,其中垃圾收集器找到并且回收由不再由执行程序使用的数据占据的存储器。垃圾收集可以消耗大比例的处理资源并且因此可以对性能具有重大影响。垃圾收集的优点包括但不限于以下各项。程序员不必显式地解除分配存储器,由此消除或大量减少与这些活动相关联的程序错误的类型。

另外,利用gc,某些类型的存储器泄漏可以被避免。当由不可及对象占据的存储器变得不可用时发生存储器泄漏。然而,因为垃圾收集器确定要释放哪个存储器,所以招致开销,其可能导致降低的或不均匀的性能。常常需要额外的存储器来补偿gc开销,以使程序能够与在显式存储器管理被执行时一样快地被执行。程序指令中的暂停可以在实际上收集垃圾时发生。这些暂停可以在执行某些任务时是不可接受的。



技术实现要素:

多个不同类型层级可以通过共享垃圾收集器和接口调度逻辑以高性能且无缝(透明)的方式进行通信。运行时环境可以支持相同gc环境内的多个独立类型层级。每个类型层级可以由定义针对类型层级的类型图的根的模块定义。运行时环境还可以包括助手功能。助手功能可以包括在请求时分配合适的类型图的新异常的功能、解析类型图中的节点的元数据的功能、用于将未处理的异常报告给特定类型图本地的代码的功能、和/或用于建立保持在异常对象中的数据内的描述的堆栈框架的功能。使用调度逻辑的代码可以遵循某些规则以维持gc和类型安全。为了跨类型图通信目的,不相交的类型图中的不同类型可以表现为如同它们是一种类型一样。

可以提供实现面向对象编程的api表面。api表面可以与垃圾收集器集成以允许一个类型图中的代码保持由另一类型图中的代码实施的资源活动。应用二进制接口(abi)描述用于在机器级调用函数、方法、aip等等的二进制合约。该合约可以包括与函数相关联的标识或名称、签名(用于调用函数)、传递到函数的参数的顺序和/或与参数相关联的数据类型等等。还可以包括用于暴露与类型相关联的行为的定义和/或规则。针对动态垃圾收集的运行时中的接口的子集的abi风格版本化实现对象从一个类型图到另一个的类型安全传递。诸如microsoft.net和oraclejava等等的一些编程平台根据所有类型和方法可以被表示在其上的单类型层级来定义它们的api表面。这样的平台通常仅定义对象之间的类型兼容性和针对存在于类型图的相同实例上的类型和方法的函数调用行为。其他平台不定义单个类型层级的存在并且将类型的兼容性定义为存储器布局,并且允许基于方法的参数的存储器布局在函数的任何集合之间的函数调用。这样的方法由遵循c编程语言abi(应用二进制接口)的编程平台遵循。本文描述的主题描述实现cabi功能和针对通常需要更精确类型检查的编程平台内的函数的子集的类型兼容性。

提供本发明内容从而以简化的形式介绍下面在具体实施方式中进一步描述的一系列概念。本发明内容不旨在确定要求保护的主题的关键特征或必要特征,也不旨在用于限制要求保护的主题的范围。

附图说明

在附图中:

图1a是表示根据本文描述的主题的方面的用于不同类型图之间的无缝高性能互操作性的系统的示例的框图100;

图1b是表示根据本文描述的主题的方面的图1a的一部分的更详细视图的示例的框图101;

图2a示出表示根据本文描述的主题的方面的用于不同类型图之间的无缝高性能互操作性的方法200的示例;

图2b示出根据本文描述的主题的方面的应用代码的示例。

图2c示出根据本文描述的主题的方面的运行时代码的示例。

图3是根据本文描述的主题的方面的计算环境的示例的框图;以及

图4是根据本文描述的主题的方面的集成开发环境的示例的框图。

具体实施方式

概述

当开发代码时,无论是采用诸如但不限于微软的c#还是oracle的java的编程语言,通常以相同的语言开发额外代码(例如,库等等)并且支持功能。当这么做时,容易造成被紧密耦合的代码,意味着所有代码必须在基本概念上一致,基本概念诸如例如字符串的定义、数组的定义、对象的定义、词典类型的定义等等。这么做使得难以演变以不同速率在逻辑上分离的不同代码段。一些已知的工具链使应用和执行环境混合。工具链是用于执行操作的软件实用程序的集合。例如,在程序开发中,工具链可以将源代码转变为工作机器语言程序。通过从应用层执行环境提取低级执行环境的高级特性,使用户产生可以与其他可执行文件互操作的可执行文件的能力被增强。额外地,可执行文件可以变得更具版本弹性,因为低级执行环境的类型图部分地独立于应用的执行环境的类型图。

根据本文描述的主题的一些方面,描述了其中运行时系统可以运行以与保持一定距离(atarm’slength)的运行时代码相同的语言编写的应用层代码的系统和方法。“保持一定距离”意味着应用层代码不必使用与运行时完全相同的类型空间环境。即,建立允许更多操作灵活性的正式合约。

在本文内描述了用于以使用一个垃圾收集堆的熟悉的方式提供运行时与运行时正在运行的代码之间的一定距离的系统和方法。另外,所描述的系统和方法不施加重大性能损失。已知的系统使得独立类型图能够在相同过程内执行。这样的系统可以使用相同的gc堆,由此实现对象的生存时间管理的益处,但是不能以面向对象的方式与彼此通信。即,例如,在已知系统中,不能够将表示分配的存储器的对象从一个类型图传递到另一个,并且使生存时间管理机制正确地工作,使得当运行时类型图保持来自应用执行环境层的对象时,正确对象生存时间管理发生。此外,已知系统未能允许使用编程语言的所有特征。根据本文描述的主题的方面,多个类型空间环境可以以允许仍然通过下面描述的各种形式充分地限制的丰富api(应用编程接口)表面的构建的自然的方式交互,使得不同类型空间中的代码的独立版本化可以发生。

接口可以通过例如使用独特标识符被暴露为在多个类型图之间等价。例如,接口可以由标识符iname(i名称)标识。iname接口可以被定义在多个类型空间中。命名为iname的接口可以被认为跨其中定义iname接口的类型空间等价。命名为iname的每个接口可以具有可以接收名称并以类型安全的方式跨类型空间转移数据的方法。面向对象的代码包括基类型的概念。对象是某种类型的。例如,字符串可以是已经接收的特定对象的类型的。字符串可以是从类型图的根节点得到的基类型的。每种类型具有身份(标识其的名称)。分配在第一类型空间中的对象可以被传递到基于第二类型图的不同版本或身份的第二类型空间的环境。

环境之间的通信可以经由与不同类型空间相关联的动态命名的接口发生。动态命名的接口可以被当作相同的等价接口,使得对象可以从环境一被传递到环境二。每个环境可以具有用于它自己的实施目的的它自己的词典类型的概念。一个环境中的代码不限于使用与第二环境中的代码相同的类型定义。这意味着低级运行时执行环境必须能够运行没有全部使用其使用的相同的词典类型的许多不同的应用。

根据本文描述的主题的一些方面,模块可以被给予独特标识符,独特标识符将其标识为定义类型的属性的模块。例如,typeidentifierattribute.typeidentifierattribute(类型标识符属性.类型标识符属性)可以是在具有名称typeidentifierattribute(类型标识符属性)的任何模块中定义的属性,并且可以采取具有两个字符串参数(范围和标识符)的构造函数。通过固定范围参数,针对等价比较的比较数据可以被简化。通过使无缝互操作性类型私有,关于任何先前实施的等价特征的兼容性问题可以被避免。另外,通过使类型私有,引用来自多个模块的相同类型和具有针对复杂类型层级的复杂接口方法重载规则可以被避免。根据本文描述的主题的一些方面,接口方法可以具有含有诸如但不限于以下的内容的签名:其他类型等价接口、具有相同布局的结构、整数和浮点基本类型、针对以上的指针和管理的指针。

根据本文描述的主题的一些方面,编译器可以被增强以检测无效方法模式。编译器可以在检测到无效方法模式(例如,无效方法签名)时产生编译错误。方法的签名是参数集合和方法的返回值的类型。例如,一种方法可以取3个整数参数并且返回布尔值。其签名将是返回布尔型的3个整数。根据本文描述的主题的一些方面,有效签名的集合可以被定义为包括指定类型集合。可允许类型集合可以被定义为包括类型等价接口结构的类型的集合。与不相交的类型图相关联的类型等价接口结构可以共享相同布局。例如,不相交的类型图可以被准许共享整数和浮点型(诸如32位浮点数、64位浮点数、整数、短整数、长整数、字符指针、以及管理的指针)的存储器布局。

在这种上下文中,管理的指针可以被定义为引用参数。合约可以通过包括独特字符集的名称来标识。独特合约标识符可以与具有以相同顺序的方法的特定不可变集合和所需方法的特定集合的接口相关联。通过声明该名称,相关联的合约可以被选择。

共享垃圾收集器的不同类型图之间的无缝高性能互操作性

图1a是表示根据本文描述的主题的方面的用于共享垃圾收集器的不同类型图之间的无缝高性能互操作性的系统的示例的框图。系统100的全部或部分可以驻留在一个或多个计算机或计算设备(诸如下面参考图3描述的计算机)上。系统100或其部分可以被提供为独立系统或者被提供为插件或附件。系统100可以整体或部分地在ide内执行或者可以整体或部分地在ide外部执行。ide可以是诸如参考图4描述的ide或者可以是任何其他ide。系统100的全部或部分可以被实施为插件或附件。

系统100或其部分可以包括从(例如,云中的)服务获得的信息或者可以在云计算环境中操作。云计算环境可以是未拥有计算服务但是根据需要提供计算服务的环境。例如,信息可以驻留在网络化云中的多个设备上,并且/或者数据可以被存储在云内的多个设备上。

系统100可以包括一个或多个计算设备,诸如,例如,计算设备102。预期的计算设备包括但不限于台式计算机、平板计算机、膝上型计算机、笔记本计算机、个人数字助理、智能电话、蜂窝电话、移动电话、服务器、虚拟机、包括数据库、防火墙等等的设备。诸如计算设备102的计算设备可以包括诸如处理器142等等的一个或多个处理器以及诸如存储器144的与一个或多个处理器通信的存储器。

系统100可以包括一个或多个程序模块,其当被加载到存储器中并且由一个或多个处理器作用时执行归因于(多个)程序模块的动作。系统100可以包括诸如开发程序模块105的一个或多个开发程序模块和/或诸如运行时程序模块107的一个或多个运行时程序模块。开发程序模块105可以使得类型依附的合约能够被指定。运行时程序模块107可以访问与接口相关联的合约标识符。运行时程序模块107可以修改接口调度和投射逻辑以实现基于指定的合约的接口到接口投射。接口调度是指使用接口基于其名称来调用方法。根据本文描述的主题的各方面,运行时程序模块107可以实现针对到不同类型空间的调用的接口调度(本文中称为类型等价调度)。

不是直接由类型实施的对接口的调用可以通过声明某种其他类型实施该接口并且其他类型上的实施可以被使用来实现。系统100可以包括包含以下的元件中的任何一个或任何组合:应用执行环境,诸如执行诸如应用104的应用的应用运行时环境112;基类库,诸如与诸如类型图1106b的第一类型图相关联的应用bcl106a;高级运行时,诸如与诸如类型图2108b的类型图相关联的高级运行时108a,其中与应用104相关联的类型图和与高级运行时108a相关联的类型图是不相交的。类型图是其中图中的每个节点表示类型并且图中的每个弧表示节点之间的引用的图。不相交的图是其中在一个类型图(第一类型图)与另一类型图(第二类型图)之间没有弧的图。

应用运行时环境112可以执行与应用基类库106a相关联的应用104。高级运行时108a可以包括:类型加载程序;编译器,诸如但不限于即时编译器(未示出);程序模块,其执行与动态互操作相关联的功能(未示出);和/或程序模块,其执行类型投射(未示出),等等。高级运行时108a可以包括与高级运行时108a相关联的诸如类型图2108b的类型图的根节点的定义。根据本文描述的主题的一些方面,与高级运行时108a相关联的类型图的根节点的定义可以是私有的。诸如低级执行运行时110a的低级执行运行时可以包括诸如垃圾收集器114的垃圾收集器、eh(异常处理)和/或协调针对gc114的线程的程序模块,等等。低级执行运行时110a可以包括与低级运行时110a相关联的类型图110b的根节点的定义。根据本文描述的主题的一些方面,与低级运行时110a相关联的类型图110b的根节点的定义可以是私有的。

应用104与应用bcl106a之间的通信(在图1a中由箭头116a指示)包括相同类型空间通信,因为应用104和应用bcl106a的类型图是相同的(都使用类型图1106b)。应用104/应用bcl106a与高级运行时108a之间的通信(由箭头116b指示)包括跨类型空间通信,因为应用104/应用bcl106a使用类型图1106b并且高级运行时108a使用类型图2108b,即,使用的类型图是不相交的。类似地,高级运行时108a与低级执行运行时110a之间的通信(由箭头116c指示)包括跨类型空间通信,因为高级运行时108a使用类型图2108b并且低级执行运行时110a使用类型图3110b,即,使用的类型图是不相交的。

图1b是表示根据本文描述的主题的方面的如参考图1a描述的跨类型空间通信的示例101的框图。图1b示出第一类型空间127,其包括诸如模块a122的程序模块(包括与第一类型图(类型图a126)相关联的诸如函数a130的至少一个函数)和第一类型等价接口(接口a134)。图1b示出第二类型空间129,其包括诸如模块b124的程序模块(包括与第二类型图(类型图b128)相关联的诸如函数b132的至少一个函数)和第二类型等价接口(接口b136)。程序模块a可以定义类型层级。程序模块a可以定义助手功能。程序模块a可以定义类型图a126的根。程序模块a122可以与第一类型图相关联。模块a122中的诸如但不限于例如函数a130的代码可以使用第一类型图,诸如,例如,类型图a126,其与由另一类型空间中的另一模块(诸如,例如,由模块b124)使用的类型图(诸如,例如,类型图b128)不相交(分离)。

函数a130可以使用接口a134与第二类型空间进行通信。例如,函数a130可以做出使用诸如接口a的类型等价接口来访问从具有其自己的类型图的另一类型空间接收的对象(例如,访问从模块b124接收的对象b138)的函数调用。图1b示出诸如模块b124的程序模块。程序模块b可以定义其类型层级。程序模块b可以定义其助手功能。程序模块b可以定义类型图b1286的根。模块b124可以与第二类型图相关联。模块b124中的诸如但不限于例如函数b132的代码可以使用类型图,诸如,例如,类型图b128,其与由其他类型空间中的其他模块(诸如,例如,模块a122)使用的类型图不相交(分离)。函数b132可以使用接口b136来与使用诸如例如类型图a128的第一类型图的另一模块进行通信。

图2a示出根据本文描述的主题的方面的用于跨类型空间通信的方法200的示例。尽管方法200描述了按序列执行的一系列操作,但是应理解方法200不受描绘的序列的顺序限制。例如,一些操作能够以与所描述的顺序不同的顺序来发生。另外,一个操作可以与另一操作并发地发生。在一些实例中,不是所有描述的操作都被执行。在一些实例中,不是所有执行的操作都被示出。方法200或其部分可以由系统或诸如系统100和如参考图1b所描述的系统的部分来执行。

在操作202处,与诸如类型图a126的第一类型图相关联的诸如函数a130的第一函数可以做出对不同模块(诸如,例如,模块b124)的直接跨类型空间函数调用。直接(静态)函数调用不使用接口。在操作204处,模块b124中的代码(诸如但不限于函数b132)可以分配在与模块b(即,类型图b128)相关联的类型图中定义的类型的对象。即,在操作204处,针对模块b124中的函数b132的代码可以分配来自模块b的类型图b128的对象b138。分配的对象可以实施第二类型等价接口(接口b136)。模块b124可以通过做出从模块b124到模块a122的静态函数调用来将在操作206处的对象返回到模块a122中的函数a130。模块b124因此将在第二类型图(类型图b)中定义的对象返回到与第一类型图(类型图a126)相关联的模块a122,该对象实施接口b(操作208)。在操作210处,模块a122可以使用在类型图a126中定义的接口a134做出对对象的接口调用。接口a134和接口b136是类型等价的。因为与第一类型图(例如,类型图a126)相关联的代码具有对另一(第二)类型图中的对象的访问(例如,模块a122具有对类型图b128中的对象b138的访问),所以与一个类型图相关联的代码可以保持另一类型图中的资源(例如,对象b)活动。将认识到,尽管根据函数a调用模块b124进行描述,但是方法200的逻辑当函数b132调用模块a122时也适用。

图2b示出实施以上过程的应用代码的示例257。在图2b中,由附图标记250标识的代码的部分标识类型等价关系的类型。即,该标识符建立标识要使用的特定调度逻辑的合约。由附图标记251标识的代码的部分获取如以上所描述的实施类型等价接口的对象的实例。由附图标记252标识的代码的部分使用类型等价接口做出调用。由附图标记253标识的代码的部分指示此时对象正由一个模块保持活动(将不被gc回收),即使对象不在与该模块相关联的类型图中。

图2c是实施以上过程的运行时代码的示例255。假设与图2b相关联的第一类型图被称为apptypegraph(应用类型图)并且与图2c相关联的第二类型图被称为runtimetypegraph(运行时类型图)。apptypegraph可以包括以下类型:system.object(系统.对象);system.type(系统.类型),其从system.object得到并且可以包括类型itypedescriptor(i类型描述符)的字段;runtimetypehandle(运行时类型句柄),其可以是具有类型intptr(整数指针)的单个字段的结构,其中intptr可以是可以表示指针的基本类型;itypedescriptor,其可以是无缝(类型等价)接口。第二类型图runtimetypegraph可以包括以下类型:system.object,typerepresentation(类型表示),其可以从system.object得到并且可以实施itypedescriptor;intptr,其可以是可以表示指针的基本类型;以及itypedescriptor,其可以是无缝接口。

给定函数类型type.gettypefromhandle(runtimetypehandlehandle)(类型.从句柄获得类型(运行时类型句柄句柄)),其可以从runtimetypehandle获得system.type对象,效果可以是:

从句柄获得intptr字段。

调用ityperepresentationgetitypedescriptorfromintptroftype(intptr)(i类型表示从类型(整数指针)的整数指针获得i类型描述符)。这可以是运行时写的函数,但是可以被特别地标注使得其可以从应用调用。

创建包含在先前语句中返回的itypedescription(i类型描述)的system.type对象。

随后在未来的某个时刻,从应用可以存在对从调用返回到type.gettypefromhandle(类型.从句柄获得类型)的system.type对象上的type.attributes(类型.属性)属性的调用。该属性的实施将利用包含的ityperepresentation接口并且查询运行时以获得正确的属性集。经由由在不同类型图中定义的对象解析的接口调用查询运行时的该操作可以是跨类型图的无缝接口调用。将认识到,尽管以c#语言呈现了示例,但是本文描述的主题不限于任何特定编程语言。

本文描述了一种计算设备,其包括至少一个处理器,连接到至少一个处理器的存储器以及至少一个程序模块,至少一个程序模块当被加载到存储器中时使至少一个处理器:在与第一类型图相关联的第一类型空间和与第二类型图相关联的第二类型空间之间进行通信,其中第一类型空间定义第一类型图的根,并且第二类型空间定义第二类型图的根,第一类型图和第二类型图是不相交的。至少两个不同类型空间中的一个类型空间可以是运行时环境,运行时环境支持多个独立类型层级中的至少一个独立类型层级,至少一个独立类型层级由定义与至少一个独立类型层级相关联的类型图的根的模块定义。

至少两个不同类型空间中的一个类型空间可以是与类型图相关联的应用运行时环境,其中类型图的类型层级由定义与应用运行时环境相关联的类型图的根的模块定义。第一类型图中的对象可以由与第二类型图相关联的模块保持活动。至少两个不同类型空间内的可执行文件是更具版本弹性的,因为至少两个不同类型空间的类型图是独立的。至少两个不同类型空间可以使用相同的gc堆。至少两个不同类型空间可以使用相同的gc堆,其中gc管理属于相同的gc堆上的至少两个不同类型空间的对象的生存时间。本文描述了一种在至少两个不同类型空间之间进行通信的方法,其中:计算设备的处理器接收从第一模块中的第一函数的调用,模块与第一类型图相关联并且定义第一类型等价接口,做出从第一模块中的第一函数到第二模块的静态跨类型空间函数调用,第二模块与第二类型图相关联并且定义第二类型等价接口。第二模块可以分配在第二类型图中定义的类型的对象;对象实施第二类型等价接口。

可以通过做出从第二模块到第一模块的静态函数调用来将对象返回到第一函数。可以使用第一类型等价接口从第一模块做出对对象的接口调用。第一环境可以是应用类型空间。第二环境可以是高级或低级运行时环境。第一模块可以定义针对第一类型空间的类型图的根,并且第二模块可以定义针对第二类型图的类型图的根。由对象接收的接口调用可以如同调用在第二类型等价接口上被做出一样执行。

本文描述了一种计算设备,其包括至少一个处理器,连接到至少一个处理器的存储器以及至少一个程序模块,至少一个程序模块当被加载到存储器中时使至少一个处理器:通过经由使用相同命名的接口创建类型等价关系来执行跨类型空间通信,其中第一相同命名的接口与第一类型图相关联,并且第二相同命名的接口与第二类型图相关联。计算机可以包括与第一类型图相关联的运行时环境,使得运行时环境支持多个独立类型层级中的至少一个独立类型层级,至少一个独立类型层级由定义与至少一个独立类型层级相关联的类型图的根的模块定义。其可以包括与第二类型图相关联的应用执行环境,其中第二类型图的类型层级由定义第二类型图的根的模块定义。

其可以包括应用执行环境,其中使用第一类型等价接口从第一模块做出对对象的接口调用,接口调用如同调用使用第二类型等价接口来做出一样执行。其可以包括第一模块,第一模块当执行时做出从第一模块中的第一函数到第二模块的静态跨类型空间函数调用,第二模块与第二类型图相关联并且定义第二类型等价接口。其可以包括第二模块,第二模块当执行时分配在第二类型图中定义的类型的对象;该对象实施第二类型等价接口;并且通过做出从第二模块到第一模块的静态函数调用来将对象返回到第一函数。第一模块可以使用第一类型等价接口从第一模块做出对在第二类型图中定义的类型的对象的接口调用。

合适的计算环境的示例

为了提供针对本文公开的主题的各个方面的上下文,图3和以下讨论旨在提供对本文公开的主题的各种实施例可以被实施于其中的合适的计算环境510的简要总体描述。尽管本文公开的主题在由一个或多个计算机或其他计算设备执行的诸如程序模块的计算机可执行指令的总体上下文中进行描述,但是本领域技术人员将意识到,本文公开的主题的部分也可以结合其他程序模块和/或硬件和软件的组合来实施。总体上,程序模块包括例程、程序、对象、物理工件、数据结构、等等,其执行特定任务或实现特定数据类型。通常,程序模块的功能可以在各种实施例中根据期望来组合或分布。计算环境510仅是适当的操作环境的一个示例并且不旨在限制本文公开的主题的使用或功能的范围。

参考图3,描述了以计算机512的形式的计算设备。计算机512包括至少一个处理单元514、系统存储器516和系统总线518。至少一个处理单元514可以执行存储在存储器(诸如但不限于系统存储器516)中的指令。处理单元514可以是各种可用的处理器中的任何处理器。例如,处理单元514可以是图形处理单元(gpu)。指令可以是用于实施由以上讨论的一个或多个部件或模块执行的功能的指令或者用于实施以上描述的方法中的一个或多个方法的指令。双核微处理器和其他多处理器体系结构也能够被用作处理单元514。计算机512可以被用于支持在显示屏上绘制图形的系统中。在另一示例中,计算设备的至少一部分可以被用于包括图形处理单元的系统中。系统存储器516可以包括易失性存储器520和非易失性存储器522。非易失性存储器522可以包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)或闪存。易失性存储器520包括随机访问存储器(ram),其可以用作外部高速缓存存储器。系统总线518将包括系统存储器516的系统物理工件耦合到处理单元514。系统总线518可以是包括存储器总线、存储器控制器、外围总线、外部总线、或者本地总线的若干类型中的任何并且可以使用任何种类的可用总线体系结构。计算机512可以包括可由处理单元514借助于系统总线518访问的数据存储。数据存储可以包括用于图形绘制的可执行指令、3d模型、材料、纹理等等。

计算机512通常包括各种计算机可读介质,诸如易失性和非易失性介质、可移除和不可移除介质。计算机可读介质可以以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据的信息的任何方法或技术来实现。计算机可读介质包括计算机可读存储介质(也称为计算机存储介质)和通信介质。计算机存储介质包括物理(有形)介质,诸如但不限于ram、rom、eeprom、闪存或其他存储器技术、cdrom、数字多用盘(dvd)或其他光学盘存储装置、磁带盒、磁带、磁盘存储装置或可以存储期望数据并且可以由计算机512访问的其他磁性存储设备。通信介质包括诸如但不限于通信信号、调制的载波或者可以用于传达期望信息并且可以由计算机512访问的任何其他无形介质的介质。

将认识到,图3描述了可以用作用户与计算机资源之间的中介物的软件。该软件可以包括操作系统528,其可以被存储在盘存储装置524上并且其可以分配计算机512的资源。盘存储装置141可以是通过诸如接口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描述的元件中的许多或全部,尽管仅存储器存储装置546已经被示出在图3中。(多个)远程计算机544可以经由(多个)通信连接550逻辑地连接。网络接口548包含通信网络,诸如局域网(lan)和广域网(wan),而且还可以包括其他网络。(多个)通信连接550是指用于将网络接口548连接到总线518的硬件/软件。(多个)通信连接550可以在计算机512内部或外部并且包括内部和外部技术,诸如调制解调器(电话、线缆、dsl和无线)和isdn适配器、以太网卡、等等。

将认识到,所示的网络连接仅是示例,并且可以使用建立计算机之间的通信链接的其他方式。本领域普通技术人员可以认识到,计算机512或其他客户端设备可以被部署为计算机网络的部分。在这方面,本文公开的主题可以涉及具有任何数量的存储器或存储单元以及跨任何数量的存储单元或体积出现的任何数量的应用和过程的任何计算机系统。本文公开的主题的方面可以应用于具有部署在网络环境中的具有远程或本地存储装置的服务器计算机和客户端计算机的环境。本文公开的主题的方面还可以应用于具有编程语言功能、解释和执行能力的独立计算设备。

图4示出集成开发环境(ide)600和通用语言运行时环境602。ide600可以允许用户(例如,开发者、程序员、设计者、编码者、等等)设计、编码、编译、测试、运行、编辑、调试或者构建计算机系统中的程序、程序的集合、web站点、web应用、以及web服务。软件程序可以包括以一种或多种源代码语言(例如,visualbasic、visualj#、c++、c#、j#、javascript、apl、cobol、pascal、eiffel、haskell、ml、oberon、perl、python、scheme、smalltalk等等)创建的源代码(部件610)。ide600可以提供本机代码开发环境或者可以提供在虚拟机上运行的管理的代码开发或者可以提供其组合。ide600可以使用.net框架来提供管理的代码开发环境。当应用被执行时,中间语言部件650可以使用语言特定的源编译器620从源代码部件610和本机代码部件611创建,并且本机代码部件611(例如,机器可执行指令)使用中间语言编译器660(例如,即时(jit)编译器)从中间语言部件650创建。即,当il应用被执行时,其被编译同时被执行为针对其正在其上执行的平台的合适的机器语言,由此使代码跨若干平台可移植。备选地,在其他实施例中,程序可以被编译成适合于其预期的平台的本机代码语言(未示出)。

用户可以根据已知软件编程技术以及与特定源语言相关联的特定逻辑和语法规则经由ide600中的用户接口640和源代码编辑器651来创建和/或编辑源代码部件。其后,源代码部件610可以经由源编译器620来编译,由此可以创建程序的中间语言表示,诸如组件630。组件630可以包括中间语言部件650和元数据642。

应用设计可以能够在部署之前被验证。

本文描述的各种技术可以结合硬件或软件或者在适当的情况下利用两者的组合来实施。因此,本文描述的方法和装置或者其某些方面或部分可以采取体现于有形介质中的程序代码(即,指令)的形式,有形介质诸如软盘、cd-rom、硬盘驱动器、或者任何其他机器可读存储介质,其中当程序代码被加载到诸如计算机的机器中并且由该机器执行时,该机器变成一种用于实践本文公开的主题的各方面的装置。如本文所使用的,术语“机器可读介质”应被理解为不包括提供(即,存储和/或传送)任何形式的传播信号的任何机制。在可编程计算机上执行程序代码的情况下,计算设备通常将包括处理器、由处理器可读取的存储介质(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。可以利用(例如通过使用数据处理api等等)对领域特定的编程模型方面的创建和/或实施的一个或多个程序可以以高级面向过程或面向对象编程语言实施以与计算机系统进行通信。然而,在期望时,(多个)程序可以以组件或机器语言来实施。在任何情况下,语言可以是编译的语言或解释的语言,并且与硬件实施方式组合。

尽管已经以对结构特征和/或方法动作特定的语言描述了本主题,但是应理解在所附权利要求中限定的主题不必限于以上描述的特定特征或动作。相反,以上描述的特定特征和动作被公开为实施权利要求的示例形式。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1