CN102693154A - 动态惰性类型系统 - Google Patents

动态惰性类型系统 Download PDF

Info

Publication number
CN102693154A
CN102693154A CN2012100375272A CN201210037527A CN102693154A CN 102693154 A CN102693154 A CN 102693154A CN 2012100375272 A CN2012100375272 A CN 2012100375272A CN 201210037527 A CN201210037527 A CN 201210037527A CN 102693154 A CN102693154 A CN 102693154A
Authority
CN
China
Prior art keywords
type
value
program
assembly
execution
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
CN2012100375272A
Other languages
English (en)
Other versions
CN102693154B (zh
Inventor
E·克里斯腾森
M·科尔森
C·西泽伯斯基
G·休斯
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 Corp
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 Corp filed Critical Microsoft Corp
Publication of CN102693154A publication Critical patent/CN102693154A/zh
Application granted granted Critical
Publication of CN102693154B publication Critical patent/CN102693154B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • G06F8/437Type checking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44589Program code verification, e.g. Java bytecode verification, proof-carrying code

Abstract

提供了用于动态惰性编程语言的动态惰性类型系统。可在执行期间惰性地为值标识类型。随后,可执行类型检查以定位和返回任何类型错误。因此,程序可获益于运行时灵活性和轻量注释结合由实质的类型系统所提供的益处。

Description

动态惰性类型系统
技术领域
本发明涉及类型系统,尤其涉及动态惰性类型系统。
背景技术
类型系统定义了如何将表达式、值等分类成各类型以及各类型之间的交互的程序行为。类型,或更具体地,数据类型指定了对数据利用的约束。类型系统可被用于执行许多有用的任务,尤其包括类型检查,以根据与数据相关联的类型来标识程序性错误。因此,程序安全度可通过检查无意义代码或类似的无效代码来获得。
类型系统跨各编程语言而变化。例如,编程语言可以是静态类型化的或动态类型化的。静态类型化的语言(例如,C、Java、Haskell……)使得程序能够在执行之前的编译时间进行类型检查。因而,例如通过显式规范或类型推断,在编译时间所有的类型都已知。动态类型化的语言(例如,JavaScript、Smalltalk……)是不同的,因为它们在运行时进行类型检查。因此,在使用之前不必显式地指定各类型,相反在执行期间确定各类型。
关于静态和动态类型化存在各种折衷。具体地,静态类型化是有益的,因为可以在执行之前检测出错误并且程序可以非常高效地执行。此外,可以提升设计时间体验,因为可基于各类型来提供诸如自动填充和建议之类的协助。然而,动态类型化的语言比静态类型化的语言允许更多程序性的灵活性,同时仍然通过运行时检查来提供某种程度的类型安全性。此外,动态类型化的语言更易于使用,因为程序员不必考虑类型规范的问题。
发明内容
下面呈现了简化的发明内容,以便提供对所公开主题的某些方面的基本理解。本发明内容不是广泛性的概观。它并不旨在标识关键/重要元素,也不旨在划定所要求保护主题的范围。其唯一目的是以简化形式呈现一些概念,作为稍后呈现的更具体实施例的序言。
简述之,本公开一般涉及动态的惰性类型系统。更具体地,可在执行期间惰性地为值标识类型。随后,可执行类型检查以定位和返回任何类型错误。换言之,提供了一种用于以动态的惰性编程语言来指定的计算机可执行程序的类型系统。因此,可以指定具有运行时灵活性和轻量注释结合类型系统所提供的益处的程序。
为实现上述及相关目的,在此结合以下描述和附图描述了所要求保护主题的某些说明性方面。这些方面指示可实践本主题的各种方式,它们均落在所要求保护主题的范围之内。当结合附图阅读以下详细描述时,本发明的其他优点和新颖特征将变得显而易见。
附图说明
图1是类型系统的框图。
图2A-B是示出采用类型检查包装的框图。
图3是将类型示为对一组类别的约束的框图。
图4是类型检查的方法的流程图。
图5是联合执行的方法的流程图。
图6是示出用于本公开的各方面的合适的操作环境的示意性框图。
具体实施方式
以下的细节一般涉及动态的惰性类型系统。类型系统提供了对用动态的惰性编程语言所指定的计算机可执行程序的类型支持。因此,程序可获益于运行时灵活性和轻量注释结合由实质的类型系统所提供的益处。
先前的发明要么涉及动态编程语言要么涉及惰性编程语言,但均未涉及这两者。例如,已经作出使如Smalltalk等动态语言配备有类型系统(例如,“StrongTalk”)的尝试。然而,Smalltalk不是惰性的,且StrongTalk类型系统实质上与此处所提供的本类型系统的能力是不同的。此外,已经作出了使惰性语言配备有强静态类型系统的尝试。主要示例是Haskell编程语言。然而,Haskell不是一种动态语言。
现在参考附图更详细地描述本公开的各个方面,在全部附图中用相似的标记来指示相似或相应的元素。然而应该理解,附图及其相关详细描述不旨在将所要求保护的主题限于所公开的具体形式。相反,其意图是覆盖落在所要求保护主题的精神和范围之内的所有修改、等价物和替换的方案。
首先参考图1,示出了用于动态的惰性编程语言的类型系统100。类型系统100提供了向各值分配类型并根据各类型来标识计算机程序中的错误(例如,无意义的代码)从而提供某种程度的程序安全性的机制。另外且如下文进一步讨论的,根据一实施例,类型的分配可便于联合执行(例如,跨不同的执行引擎/环境的分布式执行)。此外,类型系统100可在以动态的惰性编程语言来指定的计算机可执行程序上动态地且惰性地操作。因此,类型系统100可被称为动态惰性类型系统。
如图所示,类型系统100接收、检索或以其他方式获得、获取动态惰性程序或与动态惰性程序交互,并根据各类型来标识其中的任何类型错误。用动态的惰性计算机编程语言来指定的动态惰性程序是动态类型化的且惰性执行的。因而,可在运行时而非在编译时确定和分配各类型,并且可恰在代码的部分执行之前而非某一时间之前分析代码的各部分以检测类型错误。
类型系统100包括分配组件110和分析组件120。分配组件110向经计算的值分配类型,其中类型定义了可允许的值。在一种情况下,程序员可显式地向值分配类型。另选地,类型可能未指定,以使得分配组件110可例如利用自动推断首先标识值的类型并向值分配所标识的类型。类型标识在本质上可以是迭代的,以使得例如可利用被分配第一值的类型来便于对第二值的类型的标识。换言之,类型可以流动。分析组件120被配置成分析值和对应的类型,以确定该类型所提供的一个或多个约束是否掌握或换言之执行了类型检查。如果不满足一个或多个约束,则可产生类型错误。根据一方面,类型系统100可执行动态检查,或换言之在程序执行期间执行类型检查。此外,可例如惰性地、或按需对惰性执行的表达式执行类型检查。
根据所公开的本主题的一个方面,类型系统100所支持的数据类型可对应于承诺。可在必要时检查类型约束,以阻止在执行期间程序的观察(这将违反类型约束)。这很好地与惰性构造(在类型约束的上下文中的类型系统100实现的语言特征)接合。
作为示例,假设程序对一大数据集或数据流进行操作,从而整个数据集无法在任何一个时间保持在存储器中。因而,无法在单个步骤中实施类型,因为将所有数据保持在存储器中并检查以确定所有数据与类型匹配(换言之满足约束)是不可能的。此外,即使这样的方法是可能的,该过程也将是非常低效的。相反,可按需用逐步的方法作出检查。更具体地,可在尝试访问数据之际以及恰在尝试访问数据之前执行类型检查。
在假定值是属于某一类型之后,该值是尚未知的。然而,如果稍后确定该值不属于该类型或者无法满足所假定的类型的一个或多个约束,则类型系统100可承诺在运行时产生类型错误。此外,可在执行程序观察到这样的错误之前产生类型错误。在一实施例中,值包装可用于实现这一特征,其中冗余包装被折叠并在失败的情况下保留踪迹以用于“责备分配”。
图2A-B描绘了根据本公开的一方面的采用类型检查包装。图2A示出由类型检查包装220包装的值210。值210可被分配数据类型,并且类型检查包装220可截取对值210的调用并执行类型检查。例如,类型检查包装可被实现为执行类型检查的函数,并且对值210的调用可由对该函数的调用来替代。因而,可在访问该值之前执行类型检查。如果类型检查失败,这意味着值210的类型不是预期的类型,则可在运行时产生类型错误。另选地,如果类型检查成功,这意味着该值是属于预期的类型,则类型检查包装220可调用该值。结果,可在违反可能发生之前执行类型检查。
图2B示出多个值和类型检查包装的交互。更具体地,存在多个被嵌入的值和类型检查包装,这可对应于两个参数的函数(例如,z=x+y)。值212被嵌入到类型检查包装222内,而值214被嵌入到类型检查包装224内,两者一起计算值216,值216用类型检查包装226来包装。类型检查包装的层或冗余性尤其实现对责备分配的追踪(或换言之根本原因分析)。例如,如果类型检查包装226所执行的类型检查返回非预期的类型,则这种类型错误的原因可追溯至值212和值214中的任一个或两者的类型。以此方式,可提供关于为什么类型检查失败的有用的诊断信息而非仅仅记录该失败。
类型系统100中的类型可表示对明确定义的基础类别的任意约束。代替类型的分层结构,可采用一种基于集合的方法,其中存在多个基础类别并且类型与对于特定类别的任意约束相对应。如图3所示,可利用分割在根本上不同的事物的多个类别310。具体地,类别可包括数字、文本、记录和列表等。类型320与对类别的一个或多个约束(CONSTRAINT1-CONSTRAINTX,其中X是正整数)相对应。换言之,值可属于一个类别而类型(类别的子类型)是对该类别的约束。作为示例,可基于数字类别以及用一约束或判定(例如,采用指定每一个值都大于零的“where”子句)来定义类型“正数”。在另一示例中,可基于指定长度为一的文本的文本类别来定义类型“字符”。因而,类型检查可缩减为确定是否满足任意约束。常规类型系统与这一方法相距甚远,因为编译器在编译时不知道如何推理出任意约束。此外,注意“深的”或换言之复杂的类型的成本是可控的,因为类型实施是惰性地执行的。
根据一方面,“数字”类别可表示抽象不可数实数集合。这一特征容纳数字表示的可扩展集合(例如,二进制、浮点、十进制、双精度……)。“数字”类别的子类型可对任何数字表示起作用。常规地,为任何种类的数字类型定义限制和特性而非实数的抽象概念。通过以此方式定义基础类别,确实具有限制的子类型可被容纳并且彼此参与。
进一步支持跨各类别并作为实例类型来观察时收缩回类别子集的联合类型。即,没有属于“并集”类型的值,因为任何实际的值都属于一底层类别。换言之,诸如例如当值或是数字或是列表的情况下,并集类型允许跨越各类别。在采用指定例如参数可或为单个数字或数字列表的灵活函数的情况下,这尤其有用。
类型系统100可对类型采用基于集合的方法来便于强制转换(cast)。常规分层的方法要求对类型派生链执行强制转换。没有分层结构的概念,来自同一底层类别(也称为原语类型)的值可被强制转换成任何类别子类型或该类别中的类型。例如,当与不同种类的数据源交互时,用于强制转换的基于集合的方法尤其允许在不同类型字段之间转换数据的灵活性。
还可支持对类型的自定义运算符定义以引入自定义运算符行为,这适用于使用基于集合的强制转换的现有值。代替在面向对象的系统中所使用的方法,类型可具有在特定类型的上下文中定义的一组运算符(例如,加、减、乘……)。如前所述,类型使用对值的结构的约束来定义,例如通过比方说该类型是列表还是记录。另外,运算符可被指定以具有某些含义。例如,假定复杂的数字被定义为记录,该记录具有对应于复杂数字的两个部分的两个字段。执行复杂算术也是合乎需要的,因此可对复杂数字定义自定义运算符。这样的运算符形成了类型的一部分,但不必用于类型检查而是处理通过类型检查的值。
此外,类型本身可以是动态惰性语言中的第一类。根据一方面,较晚(例如,在编译时间之后)执行类型工作(例如,分配、分析),并且可以采用类型的(许多类型系统避免的)运行时表示。例如,如C之类的传统的语言在编译时就丢失了所有的类型。根据一实施例,类型被表示为值。因而,可在运行时动态地创建类型并马上使用该类型,与例如构造和利用(诸如记录或列表)其他值的方式类似。
类型还可用于标记(branding)值。类型可以是对结构的约束。然而,可能期望在两个或更多个在结构上等价的值之间进行区分。作为示例,考虑点和向量。这两者都是数字对,所以在结构上它们是相同的。然而,可能期望捕捉语义差别。类似地,不是具有两个文本字段和数字字段的每一个记录都表示顾客。给定对结构具有约束的特定类型,标记的概念是可被添加到该类型从而给予该类型一品牌(brand)或特定身份的标签。由编程语言提供的“Is”运算符可以测试清单类型或换言之值的超类型,而并非该值是否可被强制转换成类型。这允许将类型用作品牌。考虑品牌的一种方式是作为另一约束。然而,品牌不与值直接相关联,而是与类型直接相关联。例如,如果存在一对数字,在该对数字本身中没有东西标识该对数字是表示点还是向量。它只是一对数字。然而,可利用“As”运算符来将品牌归结到类型,例如,比方说该对数字意味着一向量。“As”因此提供了关于品牌的附加承诺或约束,其可例如通过惰性类型检查来实施。
另外,可围绕函数应用采用类型变化。函数指定传入参数和类型可被分配的返回值。此外,函数类型可例如使用“As”运算符被强制转换成其他类型。例如,函数上的“As”可正确地围绕自变量和返回值注入“As”强制转换。
将注意力转回图1,分析组件120可被配置成采用类型流函数,该类型流函数可用于基于实际自变量类型(而非所声明的参数类型)来推断或计算函数的预测结果类型。在动态语言的上下文中,这实现并超越了常规通用类型系统或依赖类型系统的某些能力。这种实现可类似于对于给定自变量值对结果值进行函数求值,但改为对于自变量类型计算结果类型。还可提供类型流函数以覆盖原语(外部)函数。
更一般地,第一函数可与第二函数配对,而第二函数在类型字段中操作。第二函数,类型流函数,可推断或预测在用一组特定的自变量进行调用时将得到的类型。调用第一函数将使类型检查的目的失败,因为程序在任何检查可能完成之前必需执行。因而,可用自变量调用类型流函数来推断或预测函数在运行时的结果类型。
此外,类型系统100的分配组件110可基于部分求值的上下文上的抽象解释来采用双向类型推断。例如,列表级的类似选择的查询可采用以下形式:
List.Transform(
    {[ID=1,Name=″Alice″],[ID=2,Name=″Bob″]},
    Each[Name])
此处,“each[Name]”是一元函数“(item)=>item[Name]”的速记,其中“item”是列表中的项(例如,记录)且其中“item[Name]”选择了该记录的“Name(名称)”字段。
基于列表的模式(例如,“List.Transform”的第一自变量),可以推断作为第二自变量通过的未经类型化的匿名函数是从类型“type[ID=Number.Type,Name=Text.Type]”的记录到类型“Text.Type”的值的函数。建立了这样的推断,可以确定“List.Transform”的返回类型是“type{Text.Type}”。即,简单文本值的列表。即使在这样的一个简单的示例中,为使类型流起作用,推断既从上到下又从下到上地流动。
注意,类似以下的情况需要基于值和类型两者进行推断:
Table.AddColumn(Orders,
    each[Unitprice}*[Quantity],″LineTotal″)
具体地,值“LineTotal”(简单文本值)由“Table.AddColumn”解释为新的一列的名称,从而影响返回值“Table.AddColumn”的类型。在可用时,可绘制值以完成这样的推断。
根据本公开的另一方面,可例如通过分析组件120来采用可折叠类型实施。更具体地,类型的惰性实施允许跨求值字段的类型检查的折叠。换言之,基于程序类型和不同的外部执行引擎或环境的类型或模式,可作出关于该程序或其部分是否可被委托给外部执行引擎中的一个或多个以供执行或求值的判断。这积极地与用于联合程序执行或分布式程序执行的特征进行交互。类似地,分配组件110可利用与不同执行引擎或环境相关联的类型或模式来标识值的类型。
尽管不限于此,但可对与数据集成或聚合(mashup)工具相关联的功能编程语言采用此处描述的类型系统100。该工具可从多个不同种类的数据源(例如,数据库、逗号分隔值(CSV)文件、OData订阅源……)中提取数据,用非寻常方式变换或操纵数据并通过若干手段(例如,数据库、OData订阅源……)发布数据。该工具可允许非技术用户在他们所熟悉的图形环境中执行复杂数据操纵,同时作出可供技术用户使用的底层编程语言的完整表达。此外,该工具可以鼓励在存在动态结果预览的情况下交互式构建复杂查询或表达式。
根据一实施例,用于执行数据操纵的程序语言可以是动态的惰性公式语言,其中公式是在被执行时计算值的表达式。这样的表达式可间接地由非技术用户通过与表示要执行的动作的图形用户界面元素的交互来指定,或者可直接地由技术用户在公式栏中指定。此外,当非技术用户变得越来越有经验时,他们可以利用混合方法来指定表达式。不管怎样,表达式可以在没有类型注释的情况下被指定,并且可被动态地执行以填充结果的预览。因此,可采用动态类型化来在运行时推断类型。此外,为实现优化的执行以及对于大数据集的执行,表达式的至少一部分的执行可被委托给外部执行引擎/环境,诸如但不限于与特定数据源(例如,关系数据库)相关联查询处理器。换言之,可采用跨任意源/执行引擎的联合执行。此外,执行可由内部和/或一个或多个外部执行引擎在不同时间执行,并由此可按需采用惰性类型检查。
在这样的情形中,类型系统100可便于桥接两个不同的世界。例如,类型需要被理解以便生成用于不同执行引擎和/或环境的合适的本机程序。另一方面,不期望对通过构思和分配类型来指定数据变换或操纵的用户造成负担。因而,类型系统100可通过按需在运行时推断和分配类型(例如,以便于转换)以及执行类型检查以确保正确地形成了表达式来桥接这一缺口。此外,应该理解,动态类型分配可提供上下文信息以通过图形用户界面来驱动用户协助。
参考若干组件之间的交互已经描述了上述系统、架构、环境等。应该理解,这样的系统和组件可以包括其中指定的那些组件或子组件,某些指定的组件或子组件,和/或附加的组件。子组件也可以被实现为在通信上被耦合到其他组件而不是被包括在父组件中的组件。此外,一个或多个组件和/或子组件可以组合成提供聚集功能的单个组件。系统、组件、和/或子组件之间的通信可以根据推送(push)和/或拉取(pull)模型来实现。各组件也可以与一个或多个其他组件进行交互,出于简要考虑在此未具体描述其他组件,但本领域的技术人员均已知。
此外,以上公开系统以及以下方法的各个部分可以包括人工智能、机器学习或基于知识或规则的组件、子组件、过程、手段、方法或机制(例如,支持向量机、神经网络、专家系统、贝叶斯置信网络、模糊逻辑、数据融合引擎、分类器…)。这样的组件和其它组件可以自动化其执行的某些机制或过程,由此使得系统和方法的各部分更为自适应以及高效及智能。作为示例而非限制,分配组件110可包括用于确定或推断类型的机制。
考虑到以上描述的示例性系统,参考图4和5的流程图将可以更好地理解根据所公开的主题实现的方法。尽管为了说明简洁起见,按照一系列框示出和描述了方法,但是,应该理解和知道,所要求保护的主题不限于框的顺序,因为一些框可以按与此处所描绘和描述的不同的顺序进行和/或与其它框并发地进行。此外,并非全部所示出的框都是实现下面所描述的方法所必需的。
参考图4,示出了类型检查的方法400。在标号410,类型被分配给程序的值,诸如用动态的惰性编程语言指定的程序。换言之,可惰性地或按需地在程序执行期间确定并分配类型。作为示例而非限制,可利用一个或多个类型流函数来基于实际自变量类型而非所声明的参数来计算函数的预测结果类型。在标号420,根据所分配的类型来分析程序。更具体地,可基于所分配的类型来执行类型检查。在标号430,在执行程序中包括类型错误的对应部分之前,可在运行时返回通过分析所标识的类型错误。
图5是示出联合程序执行的方法500的流程图。在标号510,获取与至少一个子表达式相关联的一个或多个类型。这样的类型可在运行时被推断或预测。在数字520,根据一个或多个类型作出关于至少一个子表达式的远程执行是否受到执行环境的支持的判断。例如,可将所涉及的类型与远程执行引擎所支持的类型进行比较。如果在520基于类型确定远程执行不受支持,则该方法可简单地终止,可能对照另一远程目标来检查或以本地执行来继续。另选地,如果远程执行被支持,则在530至少一个子表达式被转换成目标执行引擎语言。在参考标号540,该转换被传送到远程执行引擎以供执行。稍后可在550接收执行的结果。
此处使用的术语“组件”和“系统”及其各种形式旨在表示与计算机相关的实体,其可以是硬件、硬件和软件的组合、软件、或执行中的软件。例如,组件可以是但不限于是,在处理器上运行的进程、处理器、对象、实例、可执行程序、执行的线程、程序和/或计算机。作为说明,在计算机上运行的应用和计算机都可以是组件。一个或多个组件可以驻留在进程和/或执行线程中,并且组件可以位于一个计算机内和/或分布在两个或更多计算机之间。
在本文中使用的词语“示例性”或其各种形式意味着用作示例、实例或说明。在此被描述为“示例性”的任何方面或设计并不一定要被解释为相比其它方面或设计更优选或有利。此外,各示例只是出于清楚和理解的目的来提供的并且并不意味着以任何方式限制或约束所要求保护主题或本发明的相关部分。可以理解,本来可呈现不同范围的多个附加或替换示例,但出于简明的目的已被省略。
如此处所使用,术语“推论”或“推断”通常指的是从经由事件和/或数据捕捉的一组观察结果来推理或推断系统、环境、和/或用户状态的过程。可以使用推断来标识特定上下文或动作,也可以生成例如状态上的概率分布。推断可以是概率性的,即,基于对数据和事件的考虑,计算在感兴趣状态上的概率分布。推断也可以是指用于从一组事件和/或数据构成较高级别的事件的技术。这样的推断导致从一组观察到的事件和/或存储的事件数据构建新的事件或动作,不管事件在时间上是否紧密相关,以及事件和数据是来自一个还是多个事件和数据源。可采用各种分类方案和/或系统(例如,支持向量机、神经网络、专家系统、贝叶斯信任网络、模糊逻辑、数据融合引擎……)来执行关于所要求保护的主题的自动化和/或推断的动作。
而且,对于在详细描述或权利要求书中使用术语“包括”、“包含”、“具有”、“含有”或其它形式的变型而言,这样的术语旨在以类似于术语“包括”的方式体现包含性,如同“包括”在用作权利要求书中的过渡词时所解释的那样。
为了为所要求保护主题提供上下文,图6以及以下讨论旨在提供对其中可以实现本主题的各方面的合适环境的简要、概括描述。然而,合适的环境只是示例并且并非旨在对使用范围或功能提出任何限制。
尽管能够在可以在一台或多台计算机上运行的程序的计算机可执行指令的一般上下文中描述以上公开的系统和方法,但是,本领域的技术人员将认识到,各方面也可以与其他程序模块等相结合地实现。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、组件和数据结构等。此外,本领域技术人员可以理解,上述系统和方法可用各种计算机系统配置实现,包括单处理器、多处理器或多核处理器计算机系统、小型计算设备、大型计算机、以及个人计算机、手持式计算设备(例如,个人数字助理(PDA)、电话、手表……)、基于微处理器或可编程消费或工业电子设备等。各方面也可以在其中任务由通过通信网络链接的远程处理设备执行的分布式计算环境中实现。然而,所要求保护主题的某些方面,如果不是所有方面的话,可以在独立计算机上实施。在分布式计算环境中,程序模块可以位于本地和远程存储器存储设备中的一个或两者中。
参考图6,示出了示例通用计算机610或计算设备(例如,台式机、膝上型计算机、服务器、手持式设备、可编程消费或工业电子产品、机顶盒、游戏系统……)。计算机610包括一个或多个处理器620、存储器630、系统总线640、大容量存储650、以及一个或多个接口组件670。系统总线640与至少上述系统组件通信地耦合。然而,可以理解,在其最简单的形式中,计算机610可包括耦合到存储器630的一个或多个处理器620,该一个或多个处理器620执行存储在存储器630中的各种计算机可执行动作、指令和/或组件。
处理器620可以用通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它可编程逻辑器件、分立门或晶体管逻辑、分立硬件组件或被设计为执行此处描述的功能的其任意组合来实现。通用处理器可以是微处理器,但在替换方案中,处理器可以是任何处理器、控制器、微控制器、或状态机。处理器620还可被实现为计算设备的组合,例如DSP和微处理器的组合、多个微处理器、多核处理器、结合DSP核的一个或多个微处理器、或任何其它这种配置。
计算机610可包括各种计算机可读介质或以其他方式与各种计算机可读介质交互以便于控制计算机610来实现所要求保护主题的一个或多个方面。计算机可读介质可以是能由计算机610访问的任何可用介质,并包含易失性和非易失性介质以及可移动和不可移动介质。作为示例而非限制,计算机可读介质可包括计算机存储介质和通信介质。
计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据这样的信息的任意方法或技术来实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括,但不限于,存储器设备(例如,随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)……)、磁存储设备(例如,硬盘、软盘、磁带盒、磁带……)、光盘(例如,紧致盘(CD)、数字多功能盘(DVD)……)、以及固态设备(例如,固态驱动器(SSD)、闪存驱动器(例如,卡、棒、键驱动器……)……)、或者可用于存储所需信息并且可由计算机610访问的任何其他介质。
通信介质通常以诸如载波或其他传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其他数据,并包括任何信息传送介质。术语“已调制数据信号”是指具有以在信号中编码信息的方式被设定或改变其一个或多个特征的信号。作为示例而非限制,通信介质包括诸如有线网络或直接线连接之类的有线介质,以及诸如声学、RF、红外及其他无线介质之类的无线介质。上述的任意组合也应包含在计算机可读介质的范围内。
存储器630和大容量存储650是计算机可读存储介质的示例。取决于计算设备的确切配置和类型,存储器630可以是易失性的(例如RAM)、非易失性的(例如ROM、闪存……)或是两者的某种组合。作为示例,包括诸如在启动期间在计算机610内的元件之间传输信息的基本例程的基本输入/输出系统(BIOS)可被存储在非易失性存储器中,而易失性存储器可担当外部高速缓存存储器以便于处理器620的处理等。
大容量存储650包括相对于存储器630用于存储大量数据的可移动/不可移动、易失性/非易失性计算机存储介质。例如,大容量存储650包括但不限于,诸如磁盘或光盘驱动器、软盘驱动器、闪存存储器、固态驱动器、或记忆棒的一个或多个设备。
存储器630和大容量存储650可包括或其中存储有操作系统660、一个或多个应用662、一个或多个程序模块664和数据666。操作系统660用于控制和分配计算机610的资源。应用662包括系统和应用软件之一或两者,并且可利用操作系统660对资源的管理通过存储在存储器630和/或大容量存储650中的程序模块664和数据666来执行一个或多个动作。因此,应用662可根据由此提供的逻辑来将通用计算机610变成专用机器。
所要求保护主题的全部或各部分可以使用产生控制计算机以实现所公开功能的软件、固件、硬件或其任意组合的标准编程和/或工程技术来实现。作为示例而非限制,类型检查系统100或其部分可以是或可以形成应用662的一部分,并且包括存储在存储器和/或大容量存储650中的一个或多个模块664和数据666,这些模块和数据的功能可在由一个或多个处理器620执行时实现。
根据一个特定实施例,处理器620可与片上系统(SOC)或在单个集成电路基座上包括或换言之集成硬件和软件的类似架构相对应。此处,处理器620可包括至少与处理器620和存储器630相似的一个或多个处理器以及存储器等。常规处理器包括最少量的硬件和软件并且广泛依赖于外部硬件和软件。作为对比,处理器的SOC实现更强大,因为它将硬件和软件嵌入其中以能够用最少的硬件和软件或不依赖于外部硬件和软件来启用特定功能。例如,类型检查系统100和/或相关联的功能可被嵌入到SOC架构中的硬件内。
计算机610还包括通信地耦合到系统总线640并方便与计算机610的交互的一个或多个接口组件670。作为示例,接口组件670可以是端口(例如,串行、并行、PCMCIA、USB、火线……)或接口卡(例如,声音、视频……)等等。在一个示例实现中,接口组件670可被具体化为用户输入/输出接口,该用户输入/输出接口使得用户能够通过一个或多个输入设备(例如,诸如鼠标等定点设备、跟踪球、指示笔、触摸垫、键盘、话筒、操纵杆、游戏手柄、圆盘式卫星天线、扫描仪、照相机、其他计算机……)来将命令和信息输入到计算机610中。在另一示例实现中,接口组件670可被具体化为输出外围接口,该输出外围接口向显示器(例如,CRT、LCD、等离子……)、扬声器、打印机和/或其他计算机等提供输出。此外,接口组件670可被具体化为网络接口,该网络接口使得能够诸如通过有线或无线通信链路与其他计算设备(未示出)通信。
以上所已经描述的内容包括所要求保护主题的各方面的示例。当然,出于描绘所要求保护主题的目的而描述每一个可以想到的组件或方法的组合是不可能的,但本领域内的普通技术人员应该认识到,所要求保护主题的许多进一步的组合和排列都是可能的。从而,所公开的主题旨在涵盖落入所附权利要求书的精神和范围内的所有这样的变更、修改和变化。

Claims (10)

1.一种方法,包括:
采用被配置来执行存储在存储器(630)中的计算机可执行指令以执行以下动作的至少一个处理器(620):
在运行时惰性地标识与计算机可执行程序相关联的一个或多个类型。
2.如权利要求1所述的方法,其特征在于,还包括针对值来对由类型所指定的一个或多个约束进行求值,并且如果所述值不满足所述一个或多个约束中的至少一个则返回类型错误。
3.如权利要求2所述的方法,其特征在于,还包括对基础类别的一个或多个约束进行求值。
4.如权利要求1所述的方法,其特征在于,还包括在运行时动态地生成由一个或多个第一类值所表示的一个或多个类型。
5.如权利要求1所述的方法,其特征在于,还包括基于一个或多个函数自变量类型来预测函数的结果类型。
6.一种类型系统(100),包括:
耦合到存储器(630)的处理器(620),所述处理器(620)被配置来执行存储在所述存储器(630)中的以下计算机可执行组件:
第一组件(110),所述第一组件被配置成在运行时惰性地将类型分配给计算机可执行程序中的值。
7.如权利要求6所述的系统,其特征在于,还包括第二组件,所述第二组件被配置成在程序执行期间根据所述类型来分析所述程序以寻找错误。
8.如权利要求6所述的系统,其特征在于,所述类型指定对基础类别的约束。
9.如权利要求6所述的系统,其特征在于,所述类型被表示为值。
10.如权利要求6所述的系统,其特征在于,所述类型包括品牌。
CN201210037527.2A 2011-02-18 2012-02-17 动态惰性类型系统 Active CN102693154B (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201161444178P 2011-02-18 2011-02-18
US61/444,178 2011-02-18
US13/163,261 US9081893B2 (en) 2011-02-18 2011-06-17 Dynamic lazy type system
US13/163,261 2011-06-17

Publications (2)

Publication Number Publication Date
CN102693154A true CN102693154A (zh) 2012-09-26
CN102693154B CN102693154B (zh) 2018-01-09

Family

ID=46653759

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210037527.2A Active CN102693154B (zh) 2011-02-18 2012-02-17 动态惰性类型系统

Country Status (3)

Country Link
US (2) US9081893B2 (zh)
CN (1) CN102693154B (zh)
WO (1) WO2012112981A2 (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9135027B1 (en) 2011-10-26 2015-09-15 The Mathworks, Inc. Code generation and execution for dynamic programming languages
US8943474B1 (en) * 2011-10-26 2015-01-27 The Mathworks, Inc. Code generation and execution for dynamic programming languages
US9256410B2 (en) 2012-08-09 2016-02-09 Apple Inc. Failure profiling for continued code optimization
US9524175B2 (en) 2012-11-14 2016-12-20 Oracle International Corporation Target typing of overloaded method and constructor arguments
US8909992B2 (en) * 2012-11-27 2014-12-09 International Business Machines Corporation Dynamic concolic execution of an application
US9696968B2 (en) * 2014-01-17 2017-07-04 Microsoft Technology Licensing, Llc Lightweight optionally typed data representation of computation
US10296313B2 (en) * 2014-11-18 2019-05-21 Roger James Poon Safely consuming dynamically-typed code from a statically-typed programming language
US10078580B2 (en) * 2015-08-04 2018-09-18 Ca, Inc. Operations to avoid wrapped mobile application operational errors due to interference from wrapper logic components
US10423397B2 (en) * 2016-12-29 2019-09-24 Grammatech, Inc. Systems and/or methods for type inference from machine code
US11954012B2 (en) * 2022-02-04 2024-04-09 Microsoft Technology Licensing, Llc Client-side telemetry data filter model

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1292527A (zh) * 1999-05-27 2001-04-25 太阳微系统公司 逐模块验证
EP1174791A2 (en) * 2000-07-10 2002-01-23 Microsoft Corporation Unified data type system and method
US20050055680A1 (en) * 2003-09-09 2005-03-10 Gerd Kluger Creating and checking runtime data types
CN1977336A (zh) * 2004-05-21 2007-06-06 拉姆伯斯公司 改善支持多存储器访问延迟的计算机存储器系统的性能的系统和方法

Family Cites Families (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5297284A (en) * 1991-04-09 1994-03-22 Microsoft Corporation Method and system for implementing virtual functions and virtual base classes and setting a this pointer for an object-oriented programming language
US5371891A (en) * 1992-04-09 1994-12-06 Microsoft Corporation Method for object construction in a compiler for an object-oriented programming language
US5881230A (en) 1996-06-24 1999-03-09 Microsoft Corporation Method and system for remote automation of object oriented applications
US7062500B1 (en) * 1997-02-25 2006-06-13 Intertrust Technologies Corp. Techniques for defining, using and manipulating rights management data structures
US6145120A (en) * 1998-03-24 2000-11-07 Lockheed Martin Corporation Declaration programming language extension for procedural programming languages
US6430569B1 (en) * 1998-08-14 2002-08-06 Sun Microsystems, Inc. Methods and apparatus for type safe, lazy, user-defined class loading
US6763397B1 (en) * 1999-05-27 2004-07-13 Sun Microsystems, Inc. Fully lazy linking
US6760905B1 (en) 2000-09-21 2004-07-06 Curl Corporation Lazy compilation of template-generated classes in dynamic compilation execution environments
US20020077823A1 (en) * 2000-10-13 2002-06-20 Andrew Fox Software development systems and methods
US7814198B2 (en) 2007-10-26 2010-10-12 Microsoft Corporation Model-driven, repository-based application monitoring system
US7260775B2 (en) 2001-02-09 2007-08-21 Microsoft Corporation System and method for discovering information about web resources
US20030004746A1 (en) * 2001-04-24 2003-01-02 Ali Kheirolomoom Scenario based creation and device agnostic deployment of discrete and networked business services using process-centric assembly and visual configuration of web service components
US7017162B2 (en) 2001-07-10 2006-03-21 Microsoft Corporation Application program interface for network software platform
US7076785B2 (en) 2001-08-15 2006-07-11 Microsoft Corporation Lazy loading with code conversion
US7676540B2 (en) 2001-10-16 2010-03-09 Microsoft Corporation Scoped referral statements
US7346901B2 (en) * 2001-12-18 2008-03-18 Microsoft Corporation Efficient generic code in a dynamic execution environment
US7185319B2 (en) 2002-07-09 2007-02-27 Microsoft Corporation Debugging distributed applications
US7389498B2 (en) 2003-03-25 2008-06-17 Microsoft Corporation Core object-oriented type system for semi-structured data
US7478402B2 (en) 2004-02-12 2009-01-13 Microsoft Corporation Configurable message pipelines
US7243157B2 (en) 2004-02-20 2007-07-10 Microsoft Corporation Dynamic protocol construction
US7421699B2 (en) * 2004-12-08 2008-09-02 Sap Ag Service meta model for an enterprise service architecture
US7921216B2 (en) 2005-02-01 2011-04-05 Microsoft Corporation System and method for building and using communication binding objects
US8473971B2 (en) 2005-09-06 2013-06-25 Microsoft Corporation Type inference and type-directed late binding
US20070162844A1 (en) * 2006-01-12 2007-07-12 Microsoft Corporation Automatic layout of objects
US7814211B2 (en) 2006-01-31 2010-10-12 Microsoft Corporation Varying of message encoding
US7945905B2 (en) * 2006-06-02 2011-05-17 Accenture Global Services Limited Quality inspector tool
US20080162536A1 (en) * 2006-12-29 2008-07-03 Becker Wolfgang A Systems and methods for extending shared data structures with tenant content in a provider-tenant environment
US7761484B2 (en) 2007-02-09 2010-07-20 Microsoft Corporation Complete mapping between the XML infoset and dynamic language data expressions
US7925783B2 (en) 2007-05-23 2011-04-12 Microsoft Corporation Transparent envelope for XML messages
US8042099B2 (en) * 2007-05-30 2011-10-18 Red Hat, Inc. Facilitating availability of object data types at runtime
US8225308B2 (en) 2007-10-26 2012-07-17 Microsoft Corporation Managing software lifecycle
US7974939B2 (en) 2007-10-26 2011-07-05 Microsoft Corporation Processing model-based commands for distributed applications
US7926070B2 (en) 2007-10-26 2011-04-12 Microsoft Corporation Performing requested commands for model-based applications
US8145794B2 (en) 2008-03-14 2012-03-27 Microsoft Corporation Encoding/decoding while allowing varying message formats per message
US8126931B2 (en) * 2008-06-13 2012-02-28 Sap Ag Method and apparatus for displaying the composition of a data structure during runtime
US8117589B2 (en) 2008-06-26 2012-02-14 Microsoft Corporation Metadata driven API development
US8370735B2 (en) 2008-06-27 2013-02-05 Microsoft Corporation Efficient, non-blocking mechanism for incrementally processing arbitrary sized XML documents
US8370807B2 (en) 2009-03-12 2013-02-05 Microsoft Corporation Debugging for runtime type systems
US8645490B2 (en) 2010-06-08 2014-02-04 Microsoft Corporation Web site implementation by mapping expression evaluation
CN103262064A (zh) * 2010-12-16 2013-08-21 Et国际有限公司 分布式计算体系结构
US20120215804A1 (en) 2011-02-18 2012-08-23 Microsoft Corporation Data-programming environment
US20120240098A1 (en) * 2011-03-18 2012-09-20 Viacom International, Inc. Software Development and Publishing Platform

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1292527A (zh) * 1999-05-27 2001-04-25 太阳微系统公司 逐模块验证
EP1174791A2 (en) * 2000-07-10 2002-01-23 Microsoft Corporation Unified data type system and method
US20050055680A1 (en) * 2003-09-09 2005-03-10 Gerd Kluger Creating and checking runtime data types
CN1977336A (zh) * 2004-05-21 2007-06-06 拉姆伯斯公司 改善支持多存储器访问延迟的计算机存储器系统的性能的系统和方法

Also Published As

Publication number Publication date
WO2012112981A2 (en) 2012-08-23
US9081893B2 (en) 2015-07-14
US20120216077A1 (en) 2012-08-23
CN102693154B (zh) 2018-01-09
US20150278072A1 (en) 2015-10-01
US9436581B2 (en) 2016-09-06
WO2012112981A3 (en) 2012-11-22

Similar Documents

Publication Publication Date Title
CN102693154A (zh) 动态惰性类型系统
US11614922B2 (en) Integration of learning models into a software development system
Ducasse et al. Software architecture reconstruction: A process-oriented taxonomy
Kollmann et al. A study on the current state of the art in tool-supported UML-based static reverse engineering
US7716254B2 (en) System for modeling architecture for business systems and methods thereof
Torre et al. A systematic identification of consistency rules for UML diagrams
CN101887365B (zh) 用于构造基于组件的应用的可执行代码的方法和编译器
WO2022076488A2 (en) Method and system for extraction of data from documents for robotic process automation
US7962497B2 (en) Relationship modeling
US20180349109A1 (en) Integration of learning models into a software development system
CN102193823A (zh) 允许元编程的最优增量工作流执行
CN104350475A (zh) 可视化的代码审阅
Fill SeMFIS: a flexible engineering platform for semantic annotations of conceptual models
CN102591710B (zh) 共享对象表示
Cerny et al. Catalog and detection techniques of microservice anti-patterns and bad smells: A tertiary study
Bose Component based development
Waldemarin et al. OBO to UML: Support for the development of conceptual models in the biomedical domain
Roy et al. Correlating contexts and NFR conflicts from event logs
Roshandel et al. Multi-view software component modeling for dependability
Dua et al. Machine Learning with Spark
CN115686467A (zh) 动态语言中的类型推断
Reynolds et al. Cronista: A multi-database automated provenance collection system for runtime-models
Taylor Software architecture and design
Ernst Software Evolution: a Requirements Engineering Approach
Gogolla Tales of ER and RE Syntax and Semantics

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 1176701

Country of ref document: HK

SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: MICROSOFT TECHNOLOGY LICENSING LLC

Free format text: FORMER OWNER: MICROSOFT CORP.

Effective date: 20150728

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20150728

Address after: Washington State

Applicant after: Micro soft technique license Co., Ltd

Address before: Washington State

Applicant before: Microsoft Corp.

GR01 Patent grant
GR01 Patent grant
REG Reference to a national code

Ref country code: HK

Ref legal event code: GR

Ref document number: 1176701

Country of ref document: HK