CN104718529B - 表示没有外部引用的引用属性注释 - Google Patents
表示没有外部引用的引用属性注释 Download PDFInfo
- Publication number
- CN104718529B CN104718529B CN201380053879.XA CN201380053879A CN104718529B CN 104718529 B CN104718529 B CN 104718529B CN 201380053879 A CN201380053879 A CN 201380053879A CN 104718529 B CN104718529 B CN 104718529B
- Authority
- CN
- China
- Prior art keywords
- variable
- return
- unmodifiable
- independent variable
- executable component
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
- G06F16/288—Entity relationship models
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/468—Specific access rights for resources, e.g. using capability register
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Devices For Executing Special Programs (AREA)
- Storage Device Security (AREA)
Abstract
从可执行组件返回的引用的注释表示没有对由返回的引用来引用的特定对象图的外部引用。如果1)没有对可执行组件的输入自变量或2)每一输入自变量不可改变或者表示没有指向对象图的外部可变的引用,并且没有引用外部对象的内部可变的引用的对象图,则将特定属性分配到返回的引用。相应地,如果返回的引用是可写入的(如通过对于可执行组件评估声明代码或调用代码所确定的),返回的引用随意具有给它分配的任何访问权限,也可以被分配到隔离的存储器位置,但是,这样的分配将导致返回的引用丢失特定属性。
Description
背景
计算系统通过执行软件程序,获得高度的功能。程序包括以某种持久形式,诸如在硬盘驱动器、光盘、拇指驱动器、闪存等等上保存的计算机可执行指令。在执行过程中,这样的计算机可执行指令可以常常被加载到易失性存储器中,并由计算系统的一个或多个处理器执行,导致计算系统执行任务。
具有多个处理器或多个处理器核的计算系统常常将程序分区为多个并行执行的任务。这样的并行执行会改善响应性和处理效率,但是,并行执行会导致不同的任务试图访问计算系统中的相同数据(被称为“共享的状态”)。
然而,对共享的状态的无限制的访问会导致难以检测到、再现和解决的问题。在这些问题中,有数据竞争。数据竞争是这样的情况:一个任务会观察到存储器中的对象的无效状态,而另一个任务同时正在改变该对象的状态。利用并行性的优点而同时避免数据竞争历史上一直是难以解决的难题。
发明内容
此处所描述的至少一个实施例涉及从可执行组件返回的引用的注释。返回的引用对特定对象图进行引用。如果1)没有对可执行组件的输入自变量或2)每一输入自变量不可改变或者表示没有指向对象图的外部可变的引用,并且没有引用外部对象的内部可变的引用的对象图,则将特定属性分配到返回的引用。特定属性表示1)没有对由返回的引用来引用的特定对象图(或特定对象图内的任何对象)的外部引用,以及,2)在所述对象图内没有对所述对象图外部的任何对象的可变的引用。相应地,返回的引用在给返回的引用分配的权限的范围内随意具有给它分配的任何访问权限。例如,如果返回的引用被声明为可写入,则返回的引用可以用特定属性来注释,以便表示可以给返回的引用分配任何权限和/或返回的引用可以被分配到隔离的存储器位置,但是,这样的分配将导致返回的引用丢失特定属性。如此,此处所描述的原理允许对其没有外部引用的引用的适当的检测和注释。
本发明内容并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。
附图简述
为了描述可以获得本发明的上文所列举的及其他优点和特征的方式,下面将通过参考附图来呈现对各实施例的更具体的描述。可以理解,这些附图只描绘了示例实施例,并且因此不被认为是对其范围的限制,将通过使用附图并利用附加特征和细节来描述和解释各实施例,在附图中:
图1抽象地示出了可以在其中使用此处所描述的一些实施例的计算系统;
图2示出了包括跟踪对象图的隔离和可变性的框架,以及注释组件的环境;
图3示出了注释组件(诸如图2的注释组件)评估返回至少一个引用(所述至少一个引用对特定对象图进行引用)的可执行组件,并且注释由可执行组件返回的引用的方法的流程图;以及
图4示出了可执行组件在其中接收输入自变量并生成返回的引用的环境。
具体实施方式
根据此处所描述的各实施例,描述了从可执行组件返回的引用的注释。返回的引用对特定对象图进行引用。如果1)没有对可执行组件的输入自变量或2)每一输入自变量不可改变或者表示没有指向对象图的外部可变的引用,并且没有引用外部对象的内部可变的引用的对象图,则将特定属性分配到返回的引用。特定属性表示1)没有对由返回的引用来引用的特定对象图(或特定对象图内的任何对象)的外部引用,以及,2)在所述对象图内没有对所述对象图外部的任何对象的可变的引用。相应地,返回的引用在给返回的引用分配的权限的范围内随意具有给它分配的任何访问权限。例如,如果返回的引用被声明为可写入,则返回的引用可以用特定属性来注释,以便表示可以给返回的引用分配任何权限和/或返回的引用可以被分配到隔离的存储器位置,但是,这样的分配将导致返回的引用丢失特定属性。如此,此处所描述的原理允许对其没有外部引用的引用的适当的检测。首先,将参考图1来描述对计算系统的一些引导性讨论。然后,将参考图2到4来描述注释的操作原理。
计算系统现在越来越多地采取多种多样的形式。计算系统可以例如是手持式设备、电器、膝上型计算机、台式计算机、大型机、分布式计算系统,或者甚至通常不被视为计算系统的设备。在本说明书以及权利要求书中,术语计算系统摂被广义地定义为包括任何设备或系统(或其组合),该设备或系统包含至少一个物理有形的处理器以及其上能含有可由处理器执行的计算机可执行指令的物理有形的存储器。存储器可以采取任何形式,并可以取决于计算系统的特性和形式。计算系统可以分布在网络环境中,并可包括多个组分计算系统。
如图1所示,在其最基本的配置中,计算系统100通常包括至少一个处理单元1102和存储器104。存储器104可以是物理系统存储器,该物理系统存储器可以是易失性、非易失性、或两者的某种组合。此处也可以使用术语“存储器”来指诸如物理存储介质之类的非易失性大容量存储。如果计算系统是分布式的,则处理、存储器和/或存储能力也可以是分布式的。如此处所使用的,术语“可执行模块”或“可执行组件”可以是指可以在计算系统上执行的软件对象、例程或方法。此处所描述的不同组件、模块、引擎,以及服务可以实现为在计算系统上执行的对象或进程(例如,作为分开的线程)。
在随后的描述中,参考由一个或多个计算系统执行的动作描述了各实施例。如果这样的动作是以软件实现的,则执行动作的相关联计算系统的一个或多个处理器响应于已经执行了计算机可执行指令来引导计算系统的操作。例如,这样的计算机可执行指令可以在形成计算机程序产品的一个或多个计算机可读介质上实现。这样的操作的示例涉及对数据的操纵。计算机可执行指令(以及被操纵的数据)可以存储在计算系统100的存储器104中。计算系统100还可包含允许计算系统100例如通过网络110与其他消息处理器通信的通信信道108。
此处所描述的各实施例可包括或利用专用或通用计算机,该专用或通用计算机包括诸如例如一个或多个处理器和系统存储器等计算机硬件,如以下更详细讨论的。此处所描述的各实施例还包括用于携带或存储计算机可执行指令和/或数据结构的物理介质和其他计算机可读介质。这些计算机可读介质可以是通用或专用计算机系统能够访问的任何可用介质。存储计算机可执行指令的计算机可读介质是物理存储介质。携带计算机可执行指令的计算机可读介质是传输介质。由此,作为示例而非限制,本发明的各实施例可包括至少两种完全不同类型的计算机可读介质:计算机存储介质和传输介质。
计算机存储介质包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储、磁盘存储或其他磁存储设备、或可用于存储计算机可执行指令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的任何其他介质。
“网络”被定义为允许在计算机系统和/或模块和/或其他电子设备之间传输电子数据的一个或多个数据链路。当信息通过网络或另一个通信连接(硬连线、无线、或者硬连线或无线的组合)传输或提供给计算机时,该计算机将该连接适当地视为传输介质。传输介质可包括可用于携带计算机可执行指令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的网络和/或数据链路。上述的组合也应被包括在计算机可读介质的范围内。
此外,在到达各种计算机系统组件之后,计算机可执行指令或数据结构形式的程序代码装置可从传输介质自动传输到计算机存储介质(或反之亦然)。例如,通过网络或数据链路接收到的计算机可执行指令或数据结构可被缓存在网络接口模块(例如,“NIC”)内的RAM中,然后最终被传输到计算机系统RAM和/或计算机系统处的较不易失性的计算机存储介质。因而,应当理解,计算机存储介质可被包括在还利用(或甚至主要利用)传输介质的计算机系统组件中。
计算机可执行指令例如包括,当在处理器处执行时使通用计算机、专用计算机、或专用处理设备执行某一功能或某组功能的指令和数据。计算机可执行指令可以是例如二进制代码、诸如汇编语言之类的中间格式指令、或甚至源代码。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述特征或动作。相反,上述特征和动作是作为实现权利要求的示例形式而公开的。
本领域的技术人员将理解,本发明可以在具有许多类型的计算机系统配置的网络计算环境中实践,这些计算机系统配置包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持式设备、多处理器系统、基于微处理器的或可编程消费电子设备、网络PC、小型计算机、大型计算机、移动电话、PDA、寻呼机、路由器、交换机等等。本发明也可在其中通过网络链接(或者通过硬连线数据链路、无线数据链路,或者通过硬连线和无线数据链路的组合)的本地和远程计算机系统两者都执行任务的分布式系统环境中实施。在分布式系统环境中,程序模块可位于本地和远程存储器存储设备中。
图2示出了此处所描述的原理可以在其中操作的环境200。环境200包括跟踪对象图的隔离和可变性的框架210。框架210通过控制对引用的访问,组织对对象图的各种引用221。引用可以是局部变量、方法参数、对象字段,或对对象图的任何其他引用。在所示实施例中,引用221被示为包括引用221A到221E,虽然省略号221F以符号方式表示框架210可以管理对任意数量的引用220的访问。
框架210通过向引用分配权限,来管理对引用221的访问。“权限”是对于引用的指示关于引用是否可以被改变的一些属性的注释。这样的权限通过图2中的权限211来抽象地表示。权限包括可读取的权限211A、可写入的权限211b和不可改变的权限211C。“可读取的”权限211A意味着,对应的对象(以及所有其字段,以及其字段的所有字段,等等)只能被从其中读取。“可写入的”权限211B意味着,对应的对象可以被写入。“不可改变的”的权限211C类似于可读取的权限211A,但是,进一步保证没有其他具有对此对象的可写入的引用。不可改变的权限211C还可以进一步保证决不会再有对此对象的可写入的引用。如此,不可改变的权限211C意味着,对应的对象决不会被写入,类似地,所有其字段,以及其字段的所有字段,等等决不会被写入。对象中的全部静态字段都被框架210视为具有不可改变的权限211C。
框架210还包括将存储器位置注释为被隔离的隔离的存储器管理器212。对存储位置的“隔离的”注释意味着,该位置存储在外部是唯一的值。即,对于存储在该位置的任何对象,在系统中没有对该对象的外部引用,也没有对该对象的字段中的任何一个,或其字段的任意字段,等等的任何引用。例如,隔离的存储器管理器212管理隔离的存储器位置222。隔离的存储器位置被示为包括两个隔离的存储器位置222A和222B,但是,省略号222C表示隔离的存储器位置222可包括任意数量的隔离的存储器位置。
注释组件201被构建在框架210上,并如此处所进一步描述的那样来操作。可另选地或另外,注释组件201还可以作为框架210的一部分来操作。注释组件201被配置成评估返回引用(诸如图2的引用221中的一个)的可执行组件。图3示出了注释组件评估返回引用特定对象图的至少一个引用的可执行组件,并注释由可执行组件返回的引用的方法300的流程图。由于图3的方法300可以由图2的注释组件201执行,将频繁地参考图2和3两者来描述方法300。
方法300包括评估可执行组件(动作311)以标识将作为执行可执行组件的结果发生的一个或多个返回的引用(动作312)。方法300的其余部分涉及评估返回的引用,以判断是否可以给特定属性分配返回的引用。在某些情况下,方法的其余部分可以通过首先评估在其中声明了可执行组件的代码来执行。在其他情况下,评估在其中执行组件被调用的代码,其中,不能用声明代码来标识返回的引用的关键特征。
图4示出了其中可执行组件401接收输入自变量411和412并生成返回的引用421和422的环境400。然而,省略号413表示可以存在对可执行组件401的任意数量的输入自变量(甚至为零,一个或两个或更多)。省略号423表示通过执行可执行组件401,可以有任何正数(一个或多个)个返回的引用。注释组件201可以评估声明或调用可执行组件401的代码。
不管涉及可执行代码的声明代码或调用代码是否正在被评估,都判断是否有对可执行组件的任何输入自变量(判断框313)。如果根本没有任何输入自变量(在判断框313,“否”),那么,可以给返回的引用分配表示属性(动作315)。表示属性表示1)没有对由返回的引用来引用的特定对象图(或特定对象图内的任何对象)的外部引用,以及,2)在对象图内没有对对象图外部的任何对象的可变的引用。在本说明书以及在权利要求中,属性“表示”一组一个或多个权利要求,如果该属性可由系统解释为表示该组一个或多个权利要求是真的。
例如,考虑下列代码示例:
方法MyClass是构造器。一般而言,构造器返回可写入的值。通过评估此声明(例如,甚至在运行时之前),可以观察到,表达式“new MyClass()”返回完全与外部世界隔离的值。构造器没有输入自变量(在判断框313中,“否”)。因此,存储在新创建的对象的字段中的任何值都来自两个位置之一:1)它们是在对象的构造器内部新创建的,或2)它们来源于静态字段。尽管构造器随意调用方法并将返回值存储在字段中,但是,任何方法调用的返回值本身可传递地来自那两个位置之一。
不管框架210是实现不可改变的还是可变的静态,此处所描述的原理都起作用。在不可改变的静态的情况下,框架210确保静态字段是不可改变的。相应地,来自不可改变的静态字段的新创建的字段可以同样具有通过表示属性表示的保证。换言之,这样的新生成的字段1)没有对由新创建的字段来引用的特定对象图(或特定对象图内的任何对象)的外部引用,以及,2)在所述对象图内没有对所述对象图外部的任何对象的可变的引用。
在框架实现可变的统计的情况下,原理仍适用于可执行组件(由程序员或者由编译器自动地)使用可变的统计来被注释的情况。这可以被建模为方法的可写入的自变量,以便方法的输出没有资格分配属性。
例如,思维模型如下所示:
voidUsesMutableStatics(writable Statics s){
//静态变量只是一个普通可写入
//引用。编译器可以为你探测它
//或开发人员可以通过
//一系列注释(或者决定参加或者决定退出)来这样做。
s.Type.staticVariable=42;
}
如此,在动作315中,注释组件201分配用于建模这些新构造的,没有别名的值的特殊表示的属性。表达式“new MyClass()”被视为具有表示属性。在某些实施例中,此表示属性是具有“fresh”的值的权限类型。在该实施例中,由于构造器没有输入,返回值的权限(通常只是“可写入”)从“可写入”提升到“fresh”。fresh引用可以被存储到带有任何权限——可读取、可写入,或不可改变的——位置,虽然一旦这样做,fresh权限就丢失。此外,它也可以被存储到隔离位置内,由此,丢失其“fresh”权限。请注意,位置将不被标记为fresh。如此,一旦值被存储在位置中,它可以带有别名,如此,不再是fresh。如此,以此方式,表示属性(例如,fresh权限状态)可能会丢失。
返回到图3,如果存在对可执行组件的一个或多个输入自变量(在判断框313中,“是”),判断输入自变量是否是不可改变的,或者表示没有指向对象图的外部可变的引用,并且没有引用外部对象的内部可变的引用的对象图(判断框314)。如果有输入自变量,并且并非它们中的全部是不可改变的或以别的方式满足这些准则(在判断框314中,“否”),那么,不分配表示属性(例如,fresh权限)(动作316)。
然而,如果对可执行组件的全部输入自变量是不可改变的或者引用没有指向对象图的外部可变的引用,并且没有引用外部对象的内部可变的引用的对象图(在判断框314中,“是”),那么,也可以在此情况下分配表示属性(例如,fresh权限)(动作315)。
考虑下列代码示例,其中,构造器采用一些不可改变的输入自变量。
在此情况下,应用相同分析。MyClass2的任何新构造的实例不能与外部世界共享任何可变的状态。因此,可以给新构造的MyClass2对象分配表示属性(例如,fresh权限)。这可以在运行时之前通过分析MyClass2构造器的声明来确定。
现在,考虑构造器采用一些并不总是不可改变的自变量的情况:
回想一下,可读取的权限指指示此引用不允许改变,但是,另一实体仍可以持有可写入的引用,如此,可以观察到引用的改变。如此,虽然头两个输入自变量x和y两者都是不可改变的,但是,第三输入自变量myClass不是不可改变的,而是可读取的。相应地,它不能单独地基于对声明的分析来确定,是否可以将属性分配到由此构造器构造的返回的myClass。
然而,在评估myClass的实例的实际执行的运行时环境(即,调用代码)时,或许第三输入自变量可以被提升到不可改变的状态,因为不可改变的权限只是某一类型的具有施加了额外的限制的可读取的权限。在实际运行时环境中,如果观察到那些额外的限制,那么,第三输入自变量将是不可改变的。例如,考虑下列运行时代码:
public void Run2(immutable MyClassmyClass)
{
immutableMyClass3myClass3=new MyClass3(5,"five",myClass);
}
在此情况下,可以观察到,新的表达式的实际自变量全部都是不可改变的。因此,在此特定实例中,可以给返回的引用分配表示属性(例如,fresh权限),尽管相同构造器将常常产生non-fresh值。在所有的上面的示例中,如果输入自变量也具有表示属性(例如,fresh权限),则可以给返回的引用分配表示属性(例如,fresh权限)。在某些情况下,注释组件201本身可能已经在以前的时间点向输入自变量分配了fresh权限。
到目前为止,所有这些示例都使用了构造器。事实上,相同分析适用于任意可执行组件。考虑下列示例。请注意,在Increment的参数列表之后的“可读取的”注释意味着,“此”,并如此对于所有实例字段访问或实例方法调用,上的权限,都是可读取的。
对“new Counter()”的原始调用返回fresh对象,如上文所讨论的,因为没有对Counter()的输入自变量。对Increment()的第一调用具有输入(其是fresh),因为它是来自Counter()的返回的值。因此,由于Increment()的返回值的权限是“可写入”,因此,可以安全地将返回值提升到“fresh”。该逻辑适用于序列中的每一调用。一个的“fresh”输出变为下一个的“fresh”输入。对Increment()的最后一个调用返回“fresh”值,然后,该值可以被转换为“不可改变的”。
下列表达式返回可读取的值:
在此情况下,尽管相同分析适用,但是,将返回值提升到fresh是不安全的。这样做将允许它被改变。将可读取的值转换为可写入值或被隔离的值是危险的。然而,可以给返回的值分配可读取的或不可改变的权限。由于不可改变的权限始终可以被降低到可读取的,因此,返回可读取的值的方法可以假设地返回不可改变的对象的任意字段。在此情况下,将该返回值提升到fresh将允许不可改变的数据被改变,这是不一致的。相反,应用不同的提升规则:输出被视为具有“不可改变的”权限,而并非“fresh”权限。如前所述,此提升是安全的,如果全部输入都是不可改变的或fresh,那么,不可能与外部世界共享任何可变的状态,如此,返回值(已经不能被改变)可以安全地被视为不可改变的。
相应地,此处所描述的原理允许从可执行对象返回的引用接收表示表示外部引用是否可以访问对象的属性。
本发明可具体化为其它具体形式而不背离其精神或本质特征。所描述的实施例在所有方面都应被认为仅是说明性而非限制性的。从而,本发明的范围由所附权利要求书而非前述描述指示。落入权利要求书的等效方案的含义和范围内的所有改变应被权利要求书的范围所涵盖。
Claims (10)
1.一种供计算系统的注释组件评估返回对特定对象图进行引用的至少一个引用的可执行组件并注释由所述可执行组件返回的所述引用的系统,所述系统包括:
用于判断是否存在对所述可执行组件的任何输入自变量的装置;
用于在存在对所述可执行组件的一个或多个输入自变量的情况下,判断每一输入自变量是不可改变的还是表示对象图的装置,所述对象图没有指向所述对象图的外部可变的引用,并且没有引用外部对象的内部可变的引用的对象图;以及
用于在不存在对所述可执行组件的输入自变量或每一输入自变量是不可改变的或者表示没有外部可变的引用并且没有引用外部对象的内部可变的引用的对象图的情况下,给所述返回的引用分配表示属性的装置,所述表示属性表示1)没有对由所述返回引用所引用的所述特定对象图的外部引用,并且,2)在所述对象图内没有对所述对象图外部的任何对象的可变的引用,所述表示属性是允许将所述返回引用存储到具有可读取、可写入和不可改变中任一权限的位置的权限类型;以及
用于在表示属性没有被分配到所述返回引用的情况下,将所述返回引用存储到具有可读取、可写入和不可改变中任一权限的位置的装置。
2.根据权利要求1所述的系统,其特征在于,所述可执行组件没有输入自变量。
3.根据权利要求1所述的系统,其特征在于,所述可执行组件具有至少一个输入自变量。
4.根据权利要求3所述的系统,其特征在于,用于判断每一输入自变量是不可改变的还是表示对象图的装置通过判断所述输入自变量还具有所述表示属性而判断所述输入自变量引用没有外部可变的引用的对象图。
5.根据权利要求4所述的系统,其特征在于,所述可执行组件的所述输入自变量的所述表示属性还通过所述注释组件来分配。
6.根据权利要求3所述的系统,其特征在于,用于判断每一输入自变量是不可改变的还是表示对象图的装置通过评估所述输入自变量的不可改变的权限而判断所述输入自变量是不可改变的。
7.根据权利要求3所述的系统,其特征在于,用于判断每一输入自变量是不可改变的还是表示对象图的装置通过评估将所述输入自变量限制为不可改变的所述可执行组件的执行上下文而判断所述输入自变量是不可改变的。
8.根据权利要求1所述的系统,其特征在于,所述可执行组件被声明为将所述返回的引用限制为是可读取的,但是,潜在地还可被其他实体写入,其中所述表示属性是,所述返回的引用是不可改变的。
9.根据权利要求1所述的系统,其特征在于,所述可执行组件不被声明为将所述返回的引用限制为是可读取的。
10.一种供计算系统的注释组件评估返回对特定对象图进行引用的至少一个引用的可执行组件并注释由所述可执行组件返回的所述引用的方法,所述方法包括:
评估对应于可执行组件的代码的动作;
标识将由所述可执行组件在执行时返回的返回的引用的动作;
判断是否存在对所述可执行组件的任何输入自变量的动作;
在存在对所述可执行组件的一个或多个输入自变量的情况下,判断所述输入自变量是不可改变的还是表示对象图的动作,所述对象图没有指向所述对象图的外部可变的引用,并且没有引用外部对象的内部可变的引用对象图;以及
在不存在对所述可执行组件的输入自变量或每一输入自变量是不可改变的或者表示没有外部可变的引用并且没有引用外部对象的内部可变的引用的对象图的情况下,给所述返回的引用分配表示属性的动作,所述表示属性表示1)没有对由所述返回引用所引用的所述特定对象图的外部引用,并且,2)在所述对象图内没有对所述对象图外部的任何对象的可变的引用,所述表示属性是允许将所述返回引用存储到具有可读取、可写入和不可改变中任一权限的位置的权限类型;以及
在表示属性没有被分配到所述返回引用的情况下,将所述返回引用存储到具有可读取、可写入和不可改变中任一权限的位置。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/652,436 US9971578B2 (en) | 2012-10-15 | 2012-10-15 | Reference attribute annotation signifying no external reference |
US13/652,436 | 2012-10-15 | ||
PCT/US2013/065139 WO2014062739A1 (en) | 2012-10-15 | 2013-10-15 | Reference attribute annotation signifying no external reference |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104718529A CN104718529A (zh) | 2015-06-17 |
CN104718529B true CN104718529B (zh) | 2018-05-15 |
Family
ID=49582796
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380053879.XA Active CN104718529B (zh) | 2012-10-15 | 2013-10-15 | 表示没有外部引用的引用属性注释 |
Country Status (6)
Country | Link |
---|---|
US (1) | US9971578B2 (zh) |
EP (1) | EP2907026A1 (zh) |
JP (1) | JP6272336B2 (zh) |
KR (1) | KR102093531B1 (zh) |
CN (1) | CN104718529B (zh) |
WO (1) | WO2014062739A1 (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9026993B2 (en) * | 2008-06-27 | 2015-05-05 | Microsoft Technology Licensing, Llc | Immutable types in imperitive language |
US9569282B2 (en) | 2009-04-24 | 2017-02-14 | Microsoft Technology Licensing, Llc | Concurrent mutation of isolated object graphs |
US9098269B2 (en) | 2013-01-04 | 2015-08-04 | Microsoft Technology Licensing, Llc | System and method to ensure resource access safety with immutable object types |
US10996945B1 (en) * | 2014-09-17 | 2021-05-04 | Amazon Technologies, Inc. | Splitting programs into distributed parts |
US10754644B2 (en) * | 2015-08-04 | 2020-08-25 | International Business Machines Corporation | Annotations in software development |
US11521744B1 (en) | 2019-06-18 | 2022-12-06 | Cigna Intellectual Property, Inc. | Machine learning system for generating predictions according to varied attributes |
US12111957B2 (en) | 2021-06-08 | 2024-10-08 | Microsoft Technology Licensing, Llc | Software provenance validation |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100373338C (zh) * | 2000-09-21 | 2008-03-05 | 国际商业机器公司 | 一种检测在一个程序组件中字段和类的可变性的系统和方法 |
CN101981545A (zh) * | 2008-01-31 | 2011-02-23 | Bea系统公司 | 用于事务缓存的系统和方法 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
AU2001229371A1 (en) * | 2000-01-14 | 2001-07-24 | Saba Software, Inc. | Information server |
US6785693B2 (en) * | 2001-02-02 | 2004-08-31 | International Business Machines Corporation | Management of multiple links to a file in a file system |
US7114152B2 (en) | 2002-01-08 | 2006-09-26 | International Business Machines Corporation | Method, apparatus, and program to determine the mutability of an object at loading time |
US7614037B2 (en) * | 2004-05-21 | 2009-11-03 | Microsoft Corporation | Method and system for graph analysis and synchronization |
CN101055518A (zh) | 2007-05-31 | 2007-10-17 | 上海交通大学 | 基于面向对象的智能空间建模方法 |
CN100517224C (zh) | 2007-06-13 | 2009-07-22 | 北京北大方正电子有限公司 | 对象的串行化存储和恢复的系统和方法 |
JP2009129127A (ja) | 2007-11-22 | 2009-06-11 | Fujitsu Ltd | プログラムの不変物抽出処理プログラム,処理装置,および処理方法,ならびに該プログラムを記憶する記憶媒体 |
US9569282B2 (en) * | 2009-04-24 | 2017-02-14 | Microsoft Technology Licensing, Llc | Concurrent mutation of isolated object graphs |
-
2012
- 2012-10-15 US US13/652,436 patent/US9971578B2/en active Active
-
2013
- 2013-10-15 CN CN201380053879.XA patent/CN104718529B/zh active Active
- 2013-10-15 EP EP13789915.9A patent/EP2907026A1/en not_active Ceased
- 2013-10-15 KR KR1020157009591A patent/KR102093531B1/ko active IP Right Grant
- 2013-10-15 JP JP2015537021A patent/JP6272336B2/ja active Active
- 2013-10-15 WO PCT/US2013/065139 patent/WO2014062739A1/en active Application Filing
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100373338C (zh) * | 2000-09-21 | 2008-03-05 | 国际商业机器公司 | 一种检测在一个程序组件中字段和类的可变性的系统和方法 |
CN101981545A (zh) * | 2008-01-31 | 2011-02-23 | Bea系统公司 | 用于事务缓存的系统和方法 |
Also Published As
Publication number | Publication date |
---|---|
US9971578B2 (en) | 2018-05-15 |
WO2014062739A1 (en) | 2014-04-24 |
EP2907026A1 (en) | 2015-08-19 |
KR102093531B1 (ko) | 2020-03-25 |
JP2015531529A (ja) | 2015-11-02 |
US20140108438A1 (en) | 2014-04-17 |
JP6272336B2 (ja) | 2018-01-31 |
KR20150070152A (ko) | 2015-06-24 |
CN104718529A (zh) | 2015-06-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104718529B (zh) | 表示没有外部引用的引用属性注释 | |
US8689231B2 (en) | System and method for ordering tasks with complex interrelationships | |
CN104756445A (zh) | 增强的图遍历 | |
US9740460B2 (en) | Resource access safety through immutable object types | |
Bouyer et al. | Reachability in networks of register protocols under stochastic schedulers | |
Liu et al. | Necessary and sufficient liveness condition of GS3PR Petri nets | |
CN109345221A (zh) | 资源流转的核对方法及装置 | |
CN112015912A (zh) | 一种基于知识图谱的指标智能可视化方法及装置 | |
US20190173923A1 (en) | Systems and methods for quantitative assessment of a computer defense technique | |
CN105074667A (zh) | 对象图部分不可变性以及隔离实施 | |
Gorodnyaya | Method of Paradigmatic Analysis of Programming Languages and Systems. | |
Wenzel et al. | Translation of interactive Datalog programs for microcontrollers to finite state machines | |
Koolen et al. | Using SMT for solving fragments of parameterised Boolean equation systems | |
US10579340B2 (en) | Model element characteristic preservation in modeling environments | |
US8572594B2 (en) | Invasion analysis to identify open types | |
Fakhir et al. | Smacs: A framework for formal verification of complex adaptive systems | |
Liu et al. | Maximally permissive deadlock prevention via an invariant controlled method | |
Ünver et al. | q‐Rung Orthopair Picture Fuzzy Topological Spaces and Parameter‐Dependent Continuity: Control System Applications | |
AlQuwaiee | On Performance Optimization and Prediction of Parallel Computing Frameworks in Big Data Systems | |
Capelli | Performance, memory efficiency and programmability: the ambitious triptych of combining vertex-centricity with HPC | |
Zhao et al. | Research on Cache Coherence Protocol Verification Method Based on Model Checking | |
Gedeon | Network topology and interaction logic determine states it supports | |
Third et al. | DEPARTMENT OF COMPUTER APPLICATIONS, MIT Manipal MCA (MASTER OF COMPUTER APPLICATIONS) Course Structure (Applicable to 2019-20 admission onwards) | |
CN118071046A (zh) | 排产计划存储方法、系统及电子设备 | |
CN110018868A (zh) | 对象处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20171016 Address after: Washington State Applicant after: Micro soft technique license Co., Ltd Address before: Washington State Applicant before: Microsoft Corp. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |