本发明专利技术描述了可以在系统编程中提升安全性的语言扩展,在其中在该类型的所有实例不可变的情况下,整个类型可以被声明为不可变。不可变类型声明自动地使该类型的任何实例被视为不可变,并且自动使实例的所有直接或间接可达的成员(例如,字段、方法、属性)也被视为不可变。而且,允许实例的字段分配的任何构造时间引用不被允许超出实例变得对创建者可访问的点而继续存在。相应地,该实例以及相同类型的任何其他实例将会自构造时刻起不可变。将所有这种实例归类为不可变的能力是有利的,因为不可变性质允许由于资源访问安全而通常不会被允许的动作。
【技术实现步骤摘要】
【国外来华专利技术】【专利说明】不可变的对象类型背景计算系统通过执行软件程序来获得高度的功能性。程序由以某一永久形式保持在诸如硬驱、压缩盘、拇指驱动器、闪存等等上的计算机可执行指令组成。在执行期间,这种计算机可执行指令通常会被加载在随机存取存取器中,并且由计算系统的一个或多个处理器执行,使计算系统执行任务。在面向对象的编程中,这些计算机可执行指令被组织为多个对象,所述多个对象通过功能调用进行交互、并且具有一个或多个属性。托管代码是在托管环境中运行的代码,该托管环境提供类型安全,但也提供存储器管理和异常处理。在托管代码中,对象具有无限的寿命、对存储没有限制,访问限制的方法涉及间接或额外资源。系统级编程是基于对遍及系统的资源(诸如对象)的访问及寿命的严格且有效的管理。提供此严格管理的一种常用方式是使用应用程序接口(API)来管理资源的寿命和访问。概述此处描述的至少一些实施例涉及在系统编程中提升安全的语言扩展。按照语言扩展,在一完整类型的所有实例均不可变的情况下,该类型可以被声明为不可变。不可变类型声明自动地使该类型的任何实例被视为不可变,并且自动使实例的所有直接或间接可达的成员(例如,字段、方法、属性)也被视为不可变。而且,允许实例的字段分配的任何构造时间引用不被允许超出实例变得对创建者可访问的点而继续存在。相应地,该实例以及具有相同类型的任何其他实例将会自构造时刻起不可变。将所有这种实例归类为不可变的能力是有利的,因为不可变性质允许由于资源访问安全而通常将不会被允许的动作。例如,实例可以在多个组件和多个线程间共享,因为不会存在这些组件和线程将以某种方式对实例执行冲突动作的风险。该概述不意图标识所要求保护的主题的关键特征或基本特征,也不意图被用来帮助确定所要求保护的主题的范围。附图简述为了描述可获得以上记载的及其他好处和特征的方式,将参照附图呈现各个实施例的更具体描述。理解这些附图仅描述样本实施例,因此不应被视为限制本专利技术的范围,实施例将通过使用附图以附加的具体性和细节来描述和解释,附图中:图1抽象地图示了其中可采用此处所述的一些实施例的计算系统;图2抽象地图示了表示其中可采用此处所述的实施例的示例环境的托管代码系统;图3图示了包括创作环境的环境,在该创作环境中的源代码中有可以根据此处描述的原理作出的不可变类型声明;以及图4图示一种按照此处描述的实施例确保对象类型的多个实例不可变的方法的流程图。详细描述按照此处描述的实施例,描述了一种在系统编程中提升安全性的语言扩展,其中整个类型可以被声明为不可变。不可变类型声明自动地使该类型的任何实例被视为不可变,并且自动使实例的所有直接或间接可达的成员(例如,字段、方法、属性)也被视为不可变。而且,允许实例的字段分配的任何构造时间引用不被允许超出实例变得对创建者可访问的点而继续存在。相应地,该实例以及具有相同类型的任何其他实例将会自构造时刻起不可变。将所有这种实例归类为不可变的能力是有利的,因为不可变性质允许由于资源访问安全而通常将不会被允许的动作。例如,实例可以在多个组件和多个线程间共享,因为不会存在这些组件和线程将以某种方式对实例执行冲突动作的风险。将参照图1描述计算系统的一些介绍性讨论。然后,将参照图2描述托管代码系统的原理。最后,将参照图3和4来描述用于声明不可变类型的语言扩展的原理。计算系统目前日益采取广泛的形式。计算系统可以例如是手持设备、电器、膝上型计算机、台式计算机、大型机、分布式计算系统、或者甚至是通常不被认为是计算系统的设备。在该说明书以及在权利要求书中,术语“计算系统”被宽泛地定义为包括任何设备或系统(或其组合),所述设备或系统包括至少一个物理且有形的处理器、以及能在其上具有可由处理器执行的计算机可执行指令的物理且有形的存储器。存储器可以采取任何形式并且可以取决于计算系统的性质和形式。计算系统可以分布在网络环境上并且可以包括多个组成的计算系统。如图1所示,在其最基本的配置中,计算系统100 —般包括至少一个处理单元102和存储器104。存储器104可以是物理系统存储器,它可以是易失性的、非易失性的、或者两者的某一组合。术语“存储器”也可在此用来指示诸如物理存储介质这样的非易失性大容量存储器。如果计算系统是分布式的,则处理、存储器和/或存储能力也可以是分布式的。如此处使用的,术语“可执行模块”或“可执行组件”可以指可以在计算系统上执行的软件对象、例程或方法。此处描述的不同组件、模块、引擎和服务可以被实现为在计算系统上执行的对象或进程(例如,作为分开的线程)。在以下描述中,参照由一个或多个计算系统执行的动作描述了多个实施例。如果这种动作用软件来实现,则执行该动作的相关计算系统的一个或多个处理器响应于所执行的计算机可执行指令来引导计算系统的操作。例如,这种计算机可执行指令可以体现于形成计算机程序产品的一个或多个计算机可读介质上。这一操作的示例包括数据的操纵。计算机可执行指令(以及所操纵的数据)可以被存储于计算系统100的存储器104中。计算系统100也可以包含通信信道108,通信信道108允许计算系统100通过例如网络110与其他消息处理器进行通信。此处描述的实施例可以包括或利用专用或通用计算机,所述专用或通用计算机包括如以下进一步详细讨论的诸如例如一个或多个处理器和系统存储器这样的计算机硬件。此处描述的实施例也包括用于实现或存储计算机可执行指令和/或数据结构的物理及其他计算机可读介质。这种计算机可读介质可以使可由通用或专用计算机系统访问的任何可用介质。存储计算机可执行指令的计算机可读介质是物理存储介质。实现计算机可执行指令的计算机可读介质是传输介质。因此,通过示例但非限制,本专利技术的实施例可以包括至少两种完全不同种类的计算机可读介质:计算机存储介质和传输介质。计算机存储介质包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储器、磁盘存储器或其他磁性存储设备、或者可用于存储期望程序代码装置的任何其他介质,所述期望程序代码装置的形式为可由通用或专用计算机访问的计算机可执行指令或数据结构。“网络”被定义为允许计算机系统和/或模块和/或其他电子设备间的电子数据传输的一个或多个数据链路。当信息通过网络或另一通信连接(或硬线、无线或者硬线或无线的组合)被传输或提供至计算机时,计算机将该连接正确地视为传输介质。传输介质可以包括可用于携带期望程序代码装置的网络和/或数据链路,所述期望程序代码装置的形式为可由通用或专用计算机访问的计算机可执行指令或数据结构。以上的组合也应被包括在计算机可读介质的范围内。而且,在到达各个计算机系统组件之际,形式为计算机可执行指令或数据结构的程序代码装置可以从传输介质被自动传输至计算机存储介质(或反之亦然)。例如,通过网络或数据链路接收到的计算机可执行指令或数据结构可以在网络接口模块(例如,“NIC”)内的RAM中被缓冲,然后最终被传输至计算机系统RAM和/或计算机系统处的较不易失性的计算机存储介质。因此,应当理解,计算机存储介质可以被包括在也(或甚至主要)利用传输介质的计算机系统组件中。计算机可执行指令包括例如在处理器处执行时使通用计算机、专用计算机或专用处理设备执行某一功能或一组功能的指令和数据。计算机可执行指令可以是例如二进制数、本文档来自技高网...
【技术保护点】
一种用于确保对象类型的多个实例不可变的计算机实现的方法,所述方法包括:访问对象类型不可变的声明的动作;以及响应于所述声明,执行以下动作:自动形成计算机可执行指令以使所述对象类型的每个实例被归类为不可变的动作;自动形成计算机可执行指令以使所述对象类型的所述实例的所有直接或间接可达成员被归类为不可变的动作;以及自动形成计算机可执行指令以使允许所述对象时间的实例的字段分配的任何引用不被允许超过所述实例变得对实例的创建者可访问的点而继续存在的动作。
【技术特征摘要】
【国外来华专利技术】...
【专利技术属性】
技术研发人员:J·J·达菲,J·P·帕森斯,M·辛兹,A·D·布罗姆菲尔德,K·J·克瓦利纳,
申请(专利权)人:微软技术许可有限责任公司,
类型:发明
国别省市:美国;US
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。