CN101689112B - 后期绑定程序协助 - Google Patents

后期绑定程序协助 Download PDF

Info

Publication number
CN101689112B
CN101689112B CN200880021201.2A CN200880021201A CN101689112B CN 101689112 B CN101689112 B CN 101689112B CN 200880021201 A CN200880021201 A CN 200880021201A CN 101689112 B CN101689112 B CN 101689112B
Authority
CN
China
Prior art keywords
type
program
static
component
assistance
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
Application number
CN200880021201.2A
Other languages
English (en)
Other versions
CN101689112A (zh
Inventor
H·J·M·梅杰
A·西尔弗
P·A·维克
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 CN101689112A publication Critical patent/CN101689112A/zh
Application granted granted Critical
Publication of CN101689112B publication Critical patent/CN101689112B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/33Intelligent editors

Abstract

提供了用于集成开发环境(IDE)中的动态类型的程序协助。与后期绑定构造相关联的类型可以从静态信息中推断和/或从设计时执行中确定。协助然后可根据精确和/或推测类型来提供。此外,动态类型协助可以结合静态类型协助来采用以便于开发例如支持后期和早期绑定的程序。

Description

后期绑定程序协助
背景
计算机程序是描述由计算机或其他基于处理器的设备来执行的动作的指令集。当计算机程序被加载在计算机硬件上并在其上执行时,计算机将通过遵循计算机程序的指令来以预定方式工作。因此,计算机变为执行指令规定的任务的专用机器。
使用一种或多种编程语言的程序员创建构成计算机程序的指令。通常,源代码由程序员手动地和/或在集成开发环境(IDE)的帮助下指定或编辑。随后,源代码可由另一程序编译或以其他方式变换成可由计算机或类似设备执行的计算机指令。
作为示例,程序员可选择利用面向对象的编程语言(例如,Visual Basic、C#、Java...)来实现代码。根据这一范例,程序员将创建标识抽象事务的属性和特性的多个类以及描述类行为或能力的各种方法。具体程序逻辑然后可被指定为类或对象等的实例之间的交互。随后对于特定机器的可执行代码可由相关联的编译器产生。或者,代码可被变换成对于目标虚拟机的中间代码(例如,CIL(公共中间语言)、Java字节代码(Java Bytes Code))以便于经由对中间代码的进一步编译或解释在多个计算机平台上执行。
常轨上,编程语言或者是静态类型指定的或者是动态类型指定的。类型根据语言类型系统来提供对数据解释的约束。因此,类型可用于经由类型检查来检测编程错误。换言之,可以通过根据数据类型来检测无意义的或可能无效的代码来获取一定程度的程序安全性。这可以静态地或动态地完成。静态类型指定语言使得能够在编译时对程序进行类型检查。因此,所有类型在编译时例如通过显式指定或类型推断来知晓。动态类型指定语言的不同之处在于它们是在运行时进行类型检查的。结果,无须在使用之前显式地指定类型,相反,这些类型是在执行期间确定的。
当选择语言时,程序员需要考虑静态和动态类型指定之间的折衷。具体地,静态类型指定得益于可以在执行之前检测到错误并且程序可以非常高效地执行。此外,可以改善设计时体验,因为诸如自动填充和建议等协助可以基于类型来提供。然而,动态类型指定语言允许比静态类型指定语言更多的程序灵活性,同时仍然经由运行时检查来提供一定程度的类型安全性。此外,动态类型指定语言更易于使用,因为程序员无需关心类型指定。
概述
以下呈现了简化的概述,以提供对所要求保护的主题的某些方面的基本理解。本概述不是广泛的概观。它并不旨在标识关键/重要元素,也不旨在描绘所要求保护的主题的范围。其唯一的目的是以简化的形式来介绍一些概念,作为稍后提出的更为详细的描述的序言。
简言之,本发明涉及提供程序协助。更具体地,可以提供关于动态/后期绑定类型和/或调用的程序协助。动态类型协助可以单独或结合静态类型协助采用以便于整体程序开发。这允许其中程序员在无需担心类型的情况下开始探查问题的非常灵活的编程风格。随后在设计定形(crystallize)时,可以添加静态类型指定(statictyping)以提供类型安全性和高效的执行。
根据本发明的一方面,动态类型可以从静态信息和/或设计时执行中确定。诸如从程序流程分析、程序简档、程序员简档和先前运行中出现的静态信息可用于标识近似或推测动态类型。另外地或另选地,精确类型可以从设计时程序执行中标识。
根据本发明的另一方面,程序协助可以根据一个或多个所标识的静态类型来提供。在一个实例中,这种协助可能涉及成员列表和自动代码完成。在这种情况下,成员可以根据一个或多个精确和/或近似类型来提供以便选择和自动代码完成。也提供了用于向用户提供相关程序协助的各种技术。
为实现上述及相关目的,在此结合以下描述和附图描述了所要求保护的主题的某些说明性方面。这些方面指示可实践本主题的各种方式,它们均落在所要求保护的主题的范围之内。当结合附图阅读以下详细描述时,本发明的其它优点和新颖特征将变得清楚。
附图简述
图1是根据所要求保护的主题的一方面的程序开发系统的框图。
图2是代表性动态类型组件的框图。
图3是代表性协助组件的框图。
图4是优化的程序开发系统的框图。
图5是为静态和动态类型两者提供协助的程序开发系统的框图。
图6是支持自动重构(refactor)的程序开发系统600的框图。
图7是可扩展程序开发系统的框图。
图8是方便程序开发的方法的流程图。
图9是提供程序协助的方法的流程图。
图10是在后期绑定和早期绑定的上下文之间转换的方法的流程图。
图11是示出用于本发明的各方面的合适的操作环境的示意性框图。
图12是示例计算环境的示意性框图。
详细描述
描述了关于集成开发环境中的后期绑定或动态类型程序协助的系统和方法。对于构造的精确和/或推测类型可以利用设计时分析来标识并且可用于提供包括自动代码完成的程序指定方面的有用协助。可以利用各种机制来提供最相关的协助。此外,动态类型程序协助可以结合静态类型程序协助来提供。
现在将参考附图描述公开的主题的各个方面,全部附图中相同的标号指的是相同或相应的元素。然而,应理解,附图及其有关的详细描述不旨在将所要求保护的主题限于所公开的具体形式。相反,其意图是覆盖落在所要求保护的主题的精神和范围内的所有修改、等效和替换方案。
最初参考图1,示出了根据所要求保护的主题的一方面的程序开发系统100。在一个实例中,系统100可以对应于集成开发环境(IDE)或其各部分,包括但不限于代码编辑器。程序开发系统100特别包括动态类型组件110和协助组件120。
动态类型组件110是用于为后期绑定程序构造确定类型的机制。如将在下文中更详细地描述的,动态类型组件110可用于判定、推断或以其他方法标识或查明精确类型和/或推测或近似程序数据类型。此外,动态类型组件110可以在设计时而非执行时标识一个或多个类型。
协助组建120接收、取得或以其他方式获取或获得动态类型组件110所产生的类型信息并且基于该类型信息来生成反馈。基于类型的反馈特别能够方便程序或代码指定。在一个实例中,协助组件120可以提供建议、推荐或提示来帮助程序员。作为示例而非限制,在程序员指定对象接收者和点运算符(“.”)的地方,协助组件120可以提供标识若干语句完成选项的下拉菜单,这些选项包括由所标识的接收者类型或类提供的对象成员。
程序开发系统100的一个优点是它允许灵活的编程风格。程序员使用后期绑定类型的一个原因是他们想要开始编程的容易的方式。他们想要开始“探查”问题空间而不深陷于类型声明等。这可以用其中程序员在能够自动推断出类型的地方省略类型的静态类型推测来部分地解决。然而,在变量只可以是特定静态类型的方面仍然是受限的。动态类型指定(Dynamic typing)在程序开发过程中给予进一步的灵活性和流畅性。不幸的是,常规技术由于未正好在最需要反馈的时刻提供程序协助而阻碍了这种编程风格。程序开发系统100通过提供关于动态或后期绑定类型的设计时程序协助或反馈解决了这个问题。
转而关注图2,示出了根据本发明的一方面的代表性动态类型组件110。动态类型可以利用静态和/或执行分析来确定或逼近。因此,动态类型组件110包括静态分析组件210和执行分析组件220。
静态分析组件210提供了用于用静态信息来逼近动态类型的机制。特别地,静态分析组件210可以采用硬编码的指令、启发式和/或机器学习来方便类型标识。此外,可标识不止一个类型,因为通过定义,很有可能无法静态地绝对肯定地标识精确类型。结果,静态分析组件210可以产生若干可能的或候选动态类型。
在一个实例中,静态分析组件210可以执行程序流程分析(例如,控制和/或数据...)以便确定候选类型。更具体地,在程序中的每一个调用点处,静态分析组件210可以收集后期绑定调用的接收者可以拥有的所有可能的静态知晓类型的并集。作为示例而非限制,考虑以下代码片断:
Dim X As Object
If SomeCondition
      X=“Hello”
Else
      X=new Button()
End If
在第一行代码中,变量“X”被声明为具有类型“Object”。因此,这可以是变量“X”的类型,因为它是显式声明的。然而,因为“Object”是根或超类型,并且在某些语言中,它仅仅用于指示变量、表达式等是后期绑定的,所以这不是非常有帮助的。此外,后续条件指定更加具体的类型。条件是“If、Then、Else”条件,其中“X”被分配串“Hello”或被实例化为新的“Button”。静态分析组件210的这一程序流程分析的结果可以是类型集“String”和“Button”,因为它们表示动态类型变量“X”的可能类型。
由静态分析组件210提供的可能的类型集可以由多个其他信息生成或影响。例如,先前的程序执行信息可用于标识类型。此外,对于推断候选动态类型可以考虑程序和/或程序员简档信息或其他上下文信息。
此外,虽然静态类型分析组件210可以分析包括链接的部分(例如API、库...)的整个程序,但在某些情况下,可以为了实用性而减少它。例如,如果还没有对类型为“Object”的变量赋值或者如果参数或函数结果的类型为“Object”,则可解除可能的类型集的绑定。分别考虑例如“Dim X As Object=F()”或“Sub G(X AsObject)”。为了将其精简到实用的某物,静态分析组件210可以由范围内的类型来限制。例如,当“Object”是方法返回类型时,组件210可以进行全局或整体程序分析以便确定可能的返回类型F会是什么来降低命中数。当使用object类型的自变量时,静态分析组件210可以执行全局分析以找出其中调用“G”的所有可能的位置并从这些调用点中确定更小的可能的类型集。
动态类型组件110的执行分析组件220提供用于根据设计时执行来标识精确动态类型的机制。程序执行可以在程序指定期间在后台执行,并且动态类型信息可以从该执行中取得。在一个实现中,这可以利用诸如IDE等程序开发系统中的批编译器和读取-评估-打印循环(REPL或REPL循环)或其修改来实现。这不同于对REPL的常规使用,该常规使用涉及将IDE之外的交互式REPL环境用于动态类型的代码以及将这些代码剪切并粘贴到利用IDE开发的主程序中。在程序开发系统中,可以用断点等来指定代码以控制后台执行。作为示例,考虑包括“If、Then、Else”条件的先前的代码片断。如果在该条件之后提供断点,则可以从执行中捕捉到精确的动态类型,此处是“String”或“Button”。
参考图3,示出了根据所要求保护的主题的一方面示出了代表性协助组件120。如上所述,协助组件120根据类型信息来提供程序协助和/或反馈。在一个实例中,协助可以包括关于代码指定或完成的建议、推荐或提示。例如,在检测到诸如“X.”中的点(“.”)等触发器时,可以产生包括完成推荐的下拉框、菜单等。建议标识组件310提供用于根据类型来生成建议的机制。例如对于类型“String”,建议标识组件310可以返回类或类型的成员,包括属性“length”和/或方法“compare()”和“concatenate()”等。
由于在某些情况下,多个类型被标识为可能的动态类型且可能的成员集很大,因此可以采用排序。具体地,排序组件320可以确定并提供对由组件310提供的建议的相关性排序。过滤组件330随后可用于根据结果的排序来过滤结果以便于提供最相关的信息。排序可根据包括关于类型和/或相关联的建议的信息的任何和/或所有相关信息来生成。例如,排序组件320可以确定或推断条件可能性。在当前示例中,如果条件“某一条件”相比为假更有可能为真,则类型“String”和相关联的建议在相关性方面可以比类型“Button”排名更高。在其他实例,排序可以与先前的选择相关。此处,如果用户面临一情形并且选择了供语句完成的特定成员并且该情形再次出现,则排序可能受到先前选择的影响。此外,可以使用如简档信息的当前和/或先前运行来影响排序。类似地,可以采用程序员简档信息来进行排序计算。例如,可以获悉程序员相对于其他类型优选特定类型。此外,可利用程序范围,更具体地是范围中的类型来确定相关性。
呈现组件330控制如何将协助呈现给用户。呈现组件330可利用来自建议组件310、排序组件320和/或过滤组件330的信息来以可能对用户最有帮助的方式提供协助。例如,呈现组件330能够以相关性次序提供预定数量的建议。另选地或另外地,排序信息可具备建议。此外,所确定的精确类型(例如,经由设计时执行)可以如此标识和/或与近似类型(例如,经由静态分析)分开。此外,呈现组件可以呈现将动态类型转换成静态类型的选项,如将在下文中进一步描述的。
图4描绘了根据所要求保护的主题的一方面的程序开发系统400。类似于图1的系统100,系统400包括动态类型组件110和协助组件120,如先前所描述的。简而言之,动态类型组件110可以在设计时确定或推断动态类型,该动态类型由协助组件400用来经由诸如自动代码完成等机制协助开发者指定程序。
设计时动态类型确定或推断可以是在计算密集型的。因此,可采用优选组件410来协助处理。优化组件410可以利用一个或多个处理优化机制,包括本领域中已知的某些机制。例如,优化组件410可以将所标识的类型和/或建议高速缓存在数据存储420中。作为示例而非限制,优化组件410可以高速缓存使用最频繁的和/或最有可能使用的类型和/或相关联的协助(例如,预测高速缓存)。然后可调整处理以便在任何确定之前首先对优化组件410并更具体地是数据存储420进行检查以避免重复工作。
另外地或另选地,类型和/或协助信息可以按类似于数据库和搜索引擎所采用的方式来索引以使得能够迅速取得适当的信息。因此,优选组件410可用于存储和/或取得在数据存储420中索引和容纳的信息。
参考图5,示出了程序开发系统500。根据本发明的一个方面,代码可以用同时支持静态和动态类型和/或其混合的语言来开发。因此,系统500使得能够根据早期绑定和后期绑定来提供协助。这提供了在程序开发方面的高度灵活性,因为可以为静态和动态类型两者提供协助。
具体地,系统500包括动态类型组件110和协助组件120,如先前所描述的。此外,系统包括通信地耦合到协助组件120的静态类型组件510。静态类型组件510标识、确定或推断静态或早期绑定类型并使其对协助组件120可用。协助组件120然后可以根据除了动态类型之外的静态类型来提供程序协助和/或反馈。例如,在某些情况下,开发者将比动态类型的灵活性更重视静态类型的类型安全性。
更具体地,反馈可基于显式声明的类型和/或推断出的静态类型。例如,考虑以下示例性早期绑定代码段“Dim X=‘Hello’”和“Dim X As String=‘Hello’”。在任一情况下,“X”具有静态类型“String”。因此,对“X.”(X“点”)的指定可使得协助组件120标识类型“String”的成员,包括“length”、“compare()”和“concatenate()”等,以便代码完成。
图6示出了支持早期和晚期绑定构造之间的自动重构的程序开发系统600。类似于图5的系统500,系统600包括动态类型组件110、协助组件120和静态类型组件510。基于静态和动态类型的协助经由上述组件的可用性提供了静态和动态构造之间交互机会。重构组件610提供用于例如响应于用户选择来自动修改代码的机制。实质上,重构组件610提供其中可以将推测类型变换成更精确的类型的细化。
在一个实例中,动态类型可以在选择和/或指定成员时被转换成静态类型。例如,考虑由协助组件120根据动态类型来提供的成员列表。一旦从该列表中选择一成员,成员返回类型和成员接收者是已知的,重构组件610就可以根据该成员来强制转换(cast)相关构造。为了方便起见,考虑以下再次呈现的当前示例:
Dim X As Object
If SomeCondition
      X=“Hello”
Else
      X=new Button()
End If
想象在该循环之后添加“Dim Y=X”并且从由协助组件120提供的成员列表中选择“Length()”。就此,可以确定length方法的结果是整数。因此,重构组件610可以通过在动态调用附近插入显式强制转换以返回由用户选择的成员确定的静态类型来自动将“Y”从后期绑定转换成前期绑定。例如如下:“DimY=CInt(X.Length())REM X Inferred as Integer”。或者,可以通过首先如下转换接收者来将调用变成静态调用:“Dim Y=CInt(X.Length())REM X Inferred asInteger”。在这两种情况下,这些转换都可以由编译器或类似的组件插入到所生成的代码中。
可以理解,在某些情况下,用户可能只希望选择适用成员的名称但是保持在后期绑定上下文中。这可以通过用户偏好和/或显式/隐式声明来指示。例如,协助组件120可以呈现具有诸如单选按钮等选项的成员,其中用户可以选择是否期望保留后期绑定上下文。
程序开发系统600以及其它类似的系统允许不同的更有探索性的编程过程。它允许开发者使用近似类型推断或判定来更多地学习他们的程序。实质上,编译器或其它开发组件可以提供多个选项,程序员可以从中进行选择并且利用这些选项来退出后期绑定世界并进入前期绑定世界或者相反。在一个实例中,包括其所有灵活性的后期绑定构造可以被重构成更受限的更安全的构造。
转到图7,示出了根据所要求保护的主题的一方面的可扩展程序开发系统700。系统700包括与图5的系统500相同的组件,包括动态类型组件110、协助组件120和静态类型组件510。如先前所描述的,这些组件可用于在设计时根据静态和动态类型中的一个或两者来提供程序协助。如可以理解的,系统500可以包括特定标准或默认功能。系统700中还提供扩展组件710,该扩展组件通信地耦合到每一个组件以使得能够扩展这些组件。在一个特定实现中,扩展组件710可以接受和采用由插件提供的外部功能。由此,系统700可被称为可扩展的和/或可插入的。作为示例而非限制,排序算法可以被插入到系统700中并由系统700用来提供协助。此外,包括可能是合乎需要的成员的元数据可以被插入到系统700中。此外,扩展组件710可以使得能够经由采用web服务和/或到数据库的连接通过网络来利用扩展。例如,扩展组件710可以提供用于允许系统连接到模式或其他元数据的储存库并使用该储存库的机制。
已经相对于若干组件之间的交互描述了上述系统、体系结构等。应该理解,这样的系统和组件可以包括此处指定的那些组件或子组件,所指定组件或子组件中的一些、和/或另外的组件。子组件也可以被实现为通信耦合至其它组件而非被包括在父组件内的组件。而且,一个或多个组件和/或子组件可以被组合成提供聚集功能的单个组件。可根据推和/或拉模型来实现各系统、各组件和/或各子组件之间的通信。组件也可以与出于简明考虑而在此未具体描述的、但本领域的技术人员已知的一个或多个其它组件交互。
此外,如将会理解的,所公开的系统和方法的各部分可以包括或包含人工智能、机器学习或基于知识或规则的组件、子组件、进程、装置、方法或机制(例如,支持向量机、神经网络、专家系统、贝叶斯置信网络、模糊逻辑、数据融合引擎、分类器等)。这样的组件和其它组件可以自动化所执行的某些机制或进程,由此使得系统和方法的各部分更为自适应、高效及智能。作为示例而非限制,动态类型组件110可采用这些机制来在设计时从静态信息中推断出动态类型。类似地,协助组件120可采用类似的机制来排列、过滤和/或呈现协助。
考虑到以上描述的示例性系统,参考图8-10的流程图将可以更好地理解根据所公开的主题实现的方法。尽管出于说明简单的目的,各方法被显示和描述为一系列框,但应该理解和领会,所要求保护的主题不受框次序的限制,因为一些框能够以不同的次序和/或与在此描绘和描述的其它框同时发生。而且,并非所有示出的框都是实现以下描述的方法所必需的。
参考图8,示出了根据所要求保护的主题的一方面的方便程序开发的方法800。在附图标记810处,在设计时确定与后期绑定构造相关联的可能的类型。在一个实例中,确定可对应于从静态信息中推断出近似类型,例如经由静态程序流程分析和/或诸如程序员简档、偏好和先前的执行等其它上下文信息。根据一方面,可能的后期绑定类型集是静态类型的超集。在另一实例中,确定可涉及从设计时执行中标识精确类型。在标记820处,提供对开发环境中的后期绑定调用的反馈。换言之,根据一个或多个已确定的类型来提供程序协助。例如,在指定诸如点运算符(“.”)等触发器时,可以向程序员呈现与精确和/或近似类型相关联的成员。程序然后可以选择所提供的成员以便自动完成,继续类型指定以减少选择并随后调用自动完成或完全指定所需成员。
图9描绘了根据本发明的一方面的提供程序协助的方法900。在附图标记910处,标识、确定、推断或以其它方式查明程序类型。在标记920处,分析一个或多个类型以确定其对应于动态类型的可能性。这可以利用各种因素来确定。例如,从执行中标识出的精确类型比从静态控制流程分析中推断出的近似类型更有可能是动态类型。类似地,某些近似类型由于关于程序和/或程序员的上下文信息而比其他类型更有可能是动态类型。在标记930处,标识至少匹配所查明的类型的子集的成员。成员可对应于变量、域、方法、函数等。此外,匹配的成员可以根据诸如使用最频繁和/或最有可能使用等上下文来过滤。在附图标记940处,将成员呈现给用户。这对应于程序协助的成员选项列表。该列表可以按对程序员最有用的方式来组织和呈现。例如成员可以根据类型和/或成员按相关性的顺序来组织,其中首先呈现更相关的建议并且最后呈现最不相关的建议。呈现还可限于前K个相关建议。此外,建议、推荐、提示等可以用相关性分数来标记和/或基于该分数来分段或分层描绘。例如,根据精确类型的成员可以从与近似类型相关联的成员中图形地描绘。
参考图10,描绘了示出在后期绑定和早期绑定上下文之间转换的方法1000的流程图。虽然后期绑定和早期绑定世界可以是分开的,但类似地,根据一个方面,它们能够交互。在附图标记1010处,提供动态类型协助。例如,可以提供列表成员协助,其中列出多个成员以供可能的选择和自动代码完成。在标记1020处,标识所选成员。在附图标记1030处,确定是否提供自动代码重构。该判定可基于重构是否可能和/或有益、和/或准许或限制这一功能的用户偏好等来作出。如果在标记1030处,确定不需要重构,则该方法可以简单地终止。否则,该方法可以继续到标记1040,在那里可强制转换动态调用以返回根据所选成员的静态类型。以此方式,程序员可以利用动态类型指定和具备该动态类型指定的协助来以探索性和灵活的方式编码。在选择具体成员后,可以自动将代码的各部分重构成静态类型,由此提供提高的代码安全性以及高效执行。
如此处所使用的,术语“组件”、“系统”等意指计算机相关实体,或者是硬件、硬件和软件的组合、软件或执行中的软件。例如,组件可以是但不限于是,在处理器上运行的进程、处理器、对象、实例、可执行程序、执行的线程、程序和/或计算机。作为说明,在计算机上运行的应用程序和计算机都可以是组件。一个或多个组件可以驻留在进程和/或执行的线程中,并且组件可以位于一个计算机内和/或分布在两个或更多的计算机之间。
在此使用词语“示例性”意指用作示例、实例或说明。在此被描述为“示例性”的任何方面或设计并不一定要被解释为相比其它方面或设计更优选或有利。此外,各示例只是出于清楚和理解的目的来提供的并且并不意味着以任何方式限制本发明或其相关部分。可以理解,本可呈现多个其它或替换示例,但已出于简明的目的而省略了。
如此处所使用地,术语“推论”或“推断”通常指的是从经由事件和/或数据捕捉的一组观察结果来推理或推断系统、环境、和/或用户状态的过程。例如,推断可用于标识特定的上下文或动作,或可生成状态的概率分布。推断可以是概率性的,即,基于数据和事件的考虑计算感兴趣的状态的概率分布。推断也可以指用于从一组事件和/或数据组成更高级事件的技术。这类推断导致从一组观察到的事件和/或存储的事件数据中构造新的事件或动作,而无论事件是否在相邻时间上相关,也无论事件和数据是来自一个还是若干个事件和数据源。各种分类方案和/或系统(例如,支持矢量机、神经网络、专家系统、贝叶斯信任网络、模糊逻辑、数据融合引擎……)可结合执行关于本发明的自动化和/或推断的动作来采用。
此外,本发明的所有或部分可使用生产控制计算机实现所公开的发明的软件、固件、硬件或其任何组合的标准编程和/或工程设计技术而被实现为方法、装置或制品。如在此使用的术语“制品”旨在涵盖可以从任何计算机可读设备或介质访问的计算机程序。例如,计算机可读介质可以包括但不限于磁存储设备(例如,硬盘、软盘、磁带……)、光盘(例如,紧致盘(CD)、数字多功能盘(DVD)……)、智能卡和闪存设备(例如,卡、棒、钥匙驱动器……)。另外应该明白,可以使用载波来承载计算机可读电子数据,例如那些用于发送和接收电子邮件或用于访问如因特网或局域网(LAN)等网络的数据。当然,本领域的技术人员将会认识到,在不背离所要求保护的主题的范围或精神的前提下可以对这一配置进行许多修改。
为了对所公开的主题的各个方面提供上下文,图11和12以及以下讨论旨在提供对其中可实现所公开的主题的各方面的合适的环境的简要、大体描述。尽管以上在运行在一台或多台计算机上的程序的计算机可执行指令的一般上下文中描述了本主题,但本领域的技术人员将认识到,本发明也可结合其它程序模块实现。一般,程序模块包括执行特定任务和/或实现特定抽象数据类型的例程、程序、组件、数据结构等。此外,本领域的技术人员可以理解,系统/方法可用其他计算机系统配置实现,包括单处理器、多处理器或多核处理器计算机系统、小型计算设备、大型计算机、以及个人计算机、手持式计算设备(例如,个人数字助理(PDA)、电话、手表……)、基于微处理器或可编程消费者或工业电子设备等。所示各方面也可在其中任务由通过通信网络链接的远程处理设备执行的分布式计算环境中实现。然而,所要求保护的主题的一些方面,如果不是全部方面,可以在独立计算机上实施。在分布式计算环境中,程序模块可以位于本地和远程存储器存储设备中。
参考图11,用于实现此处所公开的各方面的示例性环境1110包括计算机1112(例如,台式计算机、膝上型计算机、服务器、手持式计算机、可编程消费或工业电子产品……)。计算机1112包括处理器单元1114、系统存储器1116和系统总线1118。系统总线1118将包括但不限于系统存储器1116的系统组件耦合到处理单元1114。处理单元1114可以是各种可用处理器中的任意一种。可以理解,双微处理器、多核、和其它多处理器体系结构也可用作处理单元1114。
系统存储器1116包括易失性和非易失性存储器。基本输入/输出系统(BIOS)包含诸如在启动期间在计算机1112的元件之间传送信息的基本例程,其存储在非易失性存储器中。作为示例而非限制,非易失性存储器可包括只读存储器(ROM)。易失性存储器包括随机存取存储器(RAM),它用作帮助处理的外部高速缓冲存储器。
计算机1112还包括可移动/不可移动、易失性/非易失性计算机存储介质。例如,图11示出了大容量存储1124。大容量存储1124包括但不限于,诸如磁盘或光盘驱动器、软盘驱动器、闪存或记忆棒之类的设备。另外,大容量存储1124可以包括独立的或者与其它存储介质结合的存储介质。
图11提供用作用户和/或其它计算机与在合适的操作环境1110中描述的基本计算机资源之间的中介的软件应用程序1128。这种软件应用程序1128包括系统和应用程序软件的一个或两者。系统软件可以包括存储在大容量存储1124上的操作系统,该操作系统用于控制并分配计算机系统1112的资源。应用程序软件通过存储在系统存储器1116和大容量存储1124的任一或两者之上的程序模块和数据来利用系统软件对资源的管理。
计算机1112还包括通信地耦合到总线1118并帮助与计算机1112的交互的一个或多个接口组件1126。作为示例,接口组件1126可以是端口(例如,串行、并行、PCMCIA、USB、火线……)或接口卡(例如,声卡、视频卡、网络卡……)等。接口组件1126可以接收输入和提供输出(有线地或无线地)。例如,输入可以从以下设备接收,这些设备包括但不限于,诸如鼠标、跟踪球、指示笔、触摸垫等定点设备,键盘,话筒,操纵杆,游戏手柄,圆盘式卫星天线,扫描仪,照相机,其它计算机等。还可以由计算机1112经由接口组件1126向输出设备提供输出。输出设备可以包括显示器(例如,CRT、LCD、等离子……)、扬声器、打印机和其它计算机等等。
图12是本发明可与其交互的示例计算环境1200的示意性框图。系统1200包括一个或多个客户机1210。客户机1210可以是硬件和/或软件(例如,线程、进程、计算设备)。系统1200还包括一个或多个服务器1230。因此,系统1200可对应于两层客户机服务器模型或多层模型(例如,客户机、中间层服务器、数据服务器)以及其它模型。服务器1230也可以是硬件和/或软件(例如,线程、进程、计算设备)。服务器1230可以容纳各线程以通过例如利用本发明的各方面来执行转换。客户机1210和服务器1230之间的一种可能的通信可以是在两个或多个计算机进程之间传输的数据分组的形式。
系统1200包括可以用来使客户机1210和服务器1230之间通信更容易的通信框架1250。客户机1210可在操作上连接至可用来存储对客户机1210本地的信息的一个或多个客户机数据存储1260。同样地,服务器1230可在操作上连接到可以用来存储对服务器1230本地的信息的一个或多个服务器数据存储1240。
例如,可在一个客户机1210上开发程序以便经由客户机1210和或服务器1230来分发以供在其他客户机1210上执行。此外,程序在客户机上执行的程序开发环境可利用通信框架1250来与远程服务器1230交互以获取诸如模式等元数据以使得能够提供诸如成员标识等相关协助。类似地,排序算法等可通过通信框架1250从服务器1230或其他客户机1210下载以更改所提供的协助的方式和/或类型。
以上所已经描述的内容包括所要求保护的主题的各方面的例子。当然,出于描绘所要求保护的主题的目的而描述每一个可以想到的组件或方法的组合是不可能的,但本领域内的普通技术人员应该认识到,所要求保护的主题的许多进一步的组合和排列都是可能的。从而,所公开的主题旨在涵盖落入所附权利要求书的精神和范围内的所有这样的变更、修改和变化。而且,就在详细描述或权利要求书中使用术语“包含”、“具有”或“含有”或其形式的变型而言,这样的术语旨在以类似于术语“包括”在用作权利要求书中的过渡词时所解释的方式为包含性的。

Claims (15)

1.一种集成程序开发系统,包括:
动态类型组件,其通过用静态信息逼近后期绑定的、动态类型化的程序构造来为所述程序构造标识一个或多个候选类型;以及
协助组件,其根据所标识的候选类型来在代码编辑器中为所述程序构造提供程序建议以便于程序指定,其中所述程序建议中的至少一个标识匹配候选类型的成员;
其中所述动态类型组件对所述程序执行静态分析以便为所述程序构造标识可能的类型并且经由对所述程序的设计时执行来为所述程序构造标识精确类型。
2.如权利要求1所述的系统,其特征在于,还包括静态类型组件,其为早期绑定程序构造标识类型以供所述协助组件使用。
3.如权利要求1所述的系统,其特征在于,还包括过滤组件,其将所提供的建议限于预定数量的最相关的建议。
4.如权利要求3所述的系统,其特征在于,还包括排序组件,其根据相关联的类型是正确的可能性来对每一个建议的相关性进行排序。
5.如权利要求1所述的系统,其特征在于,还包括优化组件,其持久存储所述候选类型和/或相关联的建议以便优化执行。
6.如权利要求1所述的系统,其特征在于,还包括重构组件,其根据程序员指定来将动态类型转换成静态类型。
7.如权利要求1所述的系统,其特征在于,还包括扩展组件,其添加或改变所述动态类型组件和/或协助组件的行为。
8.一种协助面向对象的程序开发的方法,包括:
在设计时通过用静态信息逼近动态类型化的、后期绑定的调用来为所述调用的接收者确定至少一个类型;以及
向程序员显示所述类型的成员集以供选择和自动代码完成,其中提供了标识匹配候选类型的成员的一个或多个程序建议;
所述方法还包括对代码执行静态分析以推断所述类型;以及
从设计时代码执行中标识所述类型。
9.如权利要求8所述的方法,其特征在于,以根据所述类型是正确的可能性来确定的相关性顺序来显示所述成员。
10.如权利要求9所述的方法,其特征在于,还包括指示从精确类型和/或推测类型导出的成员。
11.如权利要求8所述的方法,其特征在于,还包括从高速缓存中取得所述至少一个类型和/或成员。
12.如权利要求8所述的方法,其特征在于,还包括采用索引来标识所述类型成员。
13.如权利要求8所述的方法,其特征在于,还包括用根据所选成员的静态调用来替换动态调用。
14.一种方便程序指定的系统,包括:
用于在设计时通过用静态信息逼近动态类型化的、后期绑定的调用来为所述调用确定一个或多个可能的类型的装置;以及
用于在代码编辑器中显示匹配所述一个或多个所确定的类型的所确定的动态类型的成员的装置,其中提供了标识匹配候选类型的成员的一个或多个程序建议;
用于对所述程序执行静态分析以便为所述调用标识可能的类型的装置;以及
用于经由对所述程序的设计时执行来为所述调用标识精确类型的装置。
15.如权利要求14所述的系统,其特征在于,还包括用于确定一个或多个静态类型的装置。
CN200880021201.2A 2007-06-21 2008-06-06 后期绑定程序协助 Active CN101689112B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/766,347 2007-06-21
US11/766,347 US8321836B2 (en) 2007-06-21 2007-06-21 Late bound programmatic assistance
PCT/US2008/066149 WO2009002683A2 (en) 2007-06-21 2008-06-06 Late bound programmatic assistance

Publications (2)

Publication Number Publication Date
CN101689112A CN101689112A (zh) 2010-03-31
CN101689112B true CN101689112B (zh) 2014-06-11

Family

ID=40137833

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200880021201.2A Active CN101689112B (zh) 2007-06-21 2008-06-06 后期绑定程序协助

Country Status (7)

Country Link
US (1) US8321836B2 (zh)
EP (1) EP2174216B1 (zh)
JP (1) JP5264898B2 (zh)
CN (1) CN101689112B (zh)
BR (1) BRPI0812127A2 (zh)
TW (1) TWI493464B (zh)
WO (1) WO2009002683A2 (zh)

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8473971B2 (en) 2005-09-06 2013-06-25 Microsoft Corporation Type inference and type-directed late binding
US20080320453A1 (en) * 2007-06-21 2008-12-25 Microsoft Corporation Type inference and late binding
US9170787B2 (en) * 2008-06-27 2015-10-27 Microsoft Technology Licensing, Llc Componentization of compiler functionality
US20090328001A1 (en) * 2008-06-27 2009-12-31 Microsoft Corporation Unloadable managed code
US9135948B2 (en) 2009-07-03 2015-09-15 Microsoft Technology Licensing, Llc Optical medium with added descriptor to reduce counterfeiting
US20100235730A1 (en) * 2009-03-13 2010-09-16 Microsoft Corporation Consume-first mode text insertion
US8799877B2 (en) * 2009-03-27 2014-08-05 Optumsoft, Inc. Interpreter-based program language translator using embedded interpreter types and variables
US8533669B2 (en) * 2009-04-21 2013-09-10 Microsoft Corporation Analysis of dynamic elements in bounded time
US9075667B2 (en) * 2009-05-21 2015-07-07 Microsoft Technology Licensing, Llc Dynamic binding directed by static types
JP4912452B2 (ja) * 2009-11-27 2012-04-11 インターナショナル・ビジネス・マシーンズ・コーポレーション 動的型付け言語で記述されたソースコードを静的型付け言語で記述されたターゲットコードに変換し、実行する方法、並びにそのコンピュータ・プログラム及びコンピュータ・システム
US8429200B2 (en) * 2010-02-02 2013-04-23 Red Hat, Inc. Using a separate process in an interactive computer programming environment as a database
US20110271250A1 (en) * 2010-04-30 2011-11-03 Microsoft Corporation Software Development Tool
US20110271258A1 (en) * 2010-04-30 2011-11-03 Microsoft Corporation Software Development Tool
US8572591B2 (en) * 2010-06-15 2013-10-29 Microsoft Corporation Dynamic adaptive programming
US9195810B2 (en) * 2010-12-28 2015-11-24 Microsoft Technology Licensing, Llc Identifying factorable code
US8997069B2 (en) * 2011-04-13 2015-03-31 Microsoft Technology Licensing, Llc API descriptions
US9256401B2 (en) 2011-05-31 2016-02-09 Microsoft Technology Licensing, Llc Editor visualization of symbolic relationships
US9383973B2 (en) * 2011-06-29 2016-07-05 Microsoft Technology Licensing, Llc Code suggestions
US9542168B2 (en) 2011-11-10 2017-01-10 Microsoft Technology Licensing Llc Hostable compiler utilizing type information from a host application
US8869106B2 (en) * 2011-12-16 2014-10-21 Microsoft Corporation Language service provider management using application context
US9032378B2 (en) * 2011-12-16 2015-05-12 Microsoft Technology Licensing, Llc Available symbol set generation using untyped variable
US9170782B2 (en) * 2012-03-27 2015-10-27 Microsoft Technology Licensing, Llc Extensible mechanism for providing suggestions in a source code editor
US8843890B2 (en) * 2012-05-10 2014-09-23 International Business Machines Corporation System and method for transplanting source code
US10606569B2 (en) * 2013-06-02 2020-03-31 Microsoft Technology Licensing, Llc Declarative configuration elements
US9244658B2 (en) 2013-06-04 2016-01-26 Microsoft Technology Licensing, Llc Multi-step auto-completion model for software development environments
US9329849B2 (en) 2013-08-26 2016-05-03 Facebook, Inc. Systems and methods for converting typed code
US11188308B2 (en) * 2014-07-23 2021-11-30 Apple Inc. Interactive code editing
US9678746B2 (en) * 2014-07-31 2017-06-13 International Business Machines Corporation Coding convention discovery and enforcement
US10261766B2 (en) * 2014-08-28 2019-04-16 Hewlett Packard Enterprise Development Lp Sloppy feedback loop compilation
US10114627B2 (en) * 2014-09-17 2018-10-30 Salesforce.Com, Inc. Direct build assistance
CN104657658A (zh) * 2015-02-13 2015-05-27 深圳酷派技术有限公司 一种安装应用的方法及终端
CN107515739B (zh) * 2016-06-16 2021-02-26 斑马智行网络(香港)有限公司 提高代码执行性能的方法及装置
US10162605B2 (en) * 2016-07-20 2018-12-25 Microsoft Technology Licensing, Llc Code snippet content recommendation to define an object literal
US10503478B2 (en) * 2017-02-14 2019-12-10 Hcl Technologies Limited System and method for guiding a user in a software development lifecycle using machine learning
CN108920149B (zh) * 2017-03-29 2020-12-08 华为技术有限公司 编译方法和编译装置
US11243750B2 (en) 2018-01-21 2022-02-08 Microsoft Technology Licensing Llc Code completion with machine learning
US10990358B2 (en) 2018-03-29 2021-04-27 Microsoft Technology Licensing, Llc. Code completion for overloaded methods
US11645576B2 (en) 2018-04-29 2023-05-09 Microsoft Technology Licensing, Llc. Code completion for languages with hierarchical structures
CN114416104B (zh) * 2022-03-30 2022-08-09 清华大学 一种结构化数据文件处理方法及装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1698033A (zh) * 2001-11-30 2005-11-16 甲骨文国际公司 有效管理企业的可配置组件的系统和方法
CN1740969A (zh) * 2004-08-25 2006-03-01 微软公司 具有合并的检验信息的数据类型

Family Cites Families (64)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5488727A (en) * 1991-09-30 1996-01-30 International Business Machines Corporation Methods to support multimethod function overloading with compile-time type checking
US5485615A (en) * 1992-06-10 1996-01-16 Telefonaktiebolaget L M Ericsson System and method of interactively developing desired computer programs by using plurality of tools within a process described in graphical language
JP3178151B2 (ja) * 1993-03-19 2001-06-18 富士ゼロックス株式会社 オブジェクト指向言語のメッセージコンパイル装置
US5748961A (en) * 1993-07-12 1998-05-05 Digital Equipment Corporation Efficient method and apparatus for compiling and linking modules of computer code in a large software system
US5500881A (en) * 1993-07-12 1996-03-19 Digital Equipment Corporation Language scoping for modular, flexible, concise, configuration descriptions
US6425124B1 (en) * 1993-11-08 2002-07-23 Matsushita Electric Industrial Co. Ltd. Resource allocation device for reducing the size and run time of a machine language program
US5742828A (en) * 1994-08-03 1998-04-21 Microsoft Corporation Compiler and method for evaluation of foreign syntax expressions in source code
US5692195A (en) * 1994-08-31 1997-11-25 International Business Machines Corporation Parent class shadowing
US5748963A (en) * 1995-05-12 1998-05-05 Design Intelligence, Inc. Adaptive binding
US5687377A (en) * 1995-10-06 1997-11-11 Electronic Data Systems Corporation Method for storing variables in a programming language
US5872973A (en) * 1995-10-26 1999-02-16 Viewsoft, Inc. Method for managing dynamic relations between objects in dynamic object-oriented languages
US6072950A (en) * 1996-06-18 2000-06-06 Microsoft Corporation Pointer analysis by type inference combined with a non-pointer analysis
US6041179A (en) * 1996-10-03 2000-03-21 International Business Machines Corporation Object oriented dispatch optimization
JPH10124325A (ja) * 1996-10-25 1998-05-15 Toshiba Corp 変数の最適配置方法、変数の最適配置装置及び変数の最適配置プログラムを格納したコンピュータ読み取り可能な記録媒体
US6134708A (en) * 1997-02-13 2000-10-17 Nec Corporation Program compilation execution system
US5842220A (en) * 1997-05-02 1998-11-24 Oracle Corporation Methods and apparatus for exposing members of an object class through class signature interfaces
US6026233A (en) * 1997-05-27 2000-02-15 Microsoft Corporation Method and apparatus for presenting and selecting options to modify a programming language statement
US6314559B1 (en) * 1997-10-02 2001-11-06 Barland Software Corporation Development system with methods for assisting a user with inputting source code
CA2219557C (en) * 1997-10-29 2002-12-10 Ibm Canada Limited-Ibm Canada Limitee Run-time instrumentation for object oriented programmed applications
US5983021A (en) * 1998-05-27 1999-11-09 Sun Microsystems Dynamically switching statically bound function calls to dynamically bound function calls without recompilation
US6018628A (en) * 1998-06-16 2000-01-25 Sun Microsystems, Inc. Method of implementing parameterized types to be compatible with existing unparameterized libraries
US6237135B1 (en) * 1998-06-18 2001-05-22 Borland Software Corporation Development system with visual design tools for creating and maintaining Java Beans components
US6915301B2 (en) * 1998-08-25 2005-07-05 International Business Machines Corporation Dynamic object properties
US6415316B1 (en) * 1998-09-01 2002-07-02 Aidministrator Nederland B.V. Method and apparatus for implementing a web page diary
US6502233B1 (en) * 1998-11-13 2002-12-31 Microsoft Corporation Automated help system for reference information
US7137069B2 (en) * 1998-12-18 2006-11-14 Tangis Corporation Thematic response to a computer user's context, such as by a wearable personal computer
US6842877B2 (en) * 1998-12-18 2005-01-11 Tangis Corporation Contextual responses based on automated learning techniques
US6678745B1 (en) * 1999-06-01 2004-01-13 Bruce Hodge Dynamic object synthesis with automatic late binding
US6560774B1 (en) * 1999-09-01 2003-05-06 Microsoft Corporation Verifier to check intermediate language
US6981249B1 (en) * 2000-05-02 2005-12-27 Microsoft Corporation Methods for enhancing type reconstruction
US6957394B1 (en) * 2000-12-01 2005-10-18 Microsoft Corporation Rendering controls of a web page according to a theme
US7437710B2 (en) * 2001-07-02 2008-10-14 Bea Systems, Inc. Annotation based development platform for stateful web services
US7120897B2 (en) * 2001-07-10 2006-10-10 Microsoft Corporation User control objects for providing server-side code generation from a user-defined dynamic web page content file
US6928425B2 (en) * 2001-08-13 2005-08-09 Xerox Corporation System for propagating enrichment between documents
US20030131347A1 (en) * 2001-10-12 2003-07-10 Allison David S. Method and apparatus for runtime binding of object members
US20030097648A1 (en) * 2001-10-12 2003-05-22 Allison David S. Method and apparatus for determining runtime size and type information in dynamically typed languages
US6965990B2 (en) * 2001-10-23 2005-11-15 International Business Machines Corporation Method and apparatus for providing programming assistance
US7152229B2 (en) * 2002-01-18 2006-12-19 Symbol Technologies, Inc Workflow code generator
US7017117B2 (en) * 2002-02-14 2006-03-21 Symantec Corporation Attenuating and amplifying user interface themes
US7127707B1 (en) * 2002-10-10 2006-10-24 Microsoft Corporation Intellisense in project upgrade
US7546607B2 (en) * 2002-11-19 2009-06-09 Microsoft Corporation Native code exposing virtual machine managed object
US7051322B2 (en) * 2002-12-06 2006-05-23 @Stake, Inc. Software analysis framework
US8032860B2 (en) * 2003-02-26 2011-10-04 Oracle International Corporation Methods for type-independent source code editing
US7246361B1 (en) * 2003-03-20 2007-07-17 Intuit, Inc. Supporting multiple late binding objects with the same identifier
US7389498B2 (en) * 2003-03-25 2008-06-17 Microsoft Corporation Core object-oriented type system for semi-structured data
US7620959B2 (en) * 2003-05-12 2009-11-17 Microsoft Corporation Reflection-based processing of input parameters for commands
US7197702B2 (en) * 2003-06-13 2007-03-27 Microsoft Corporation Web page rendering mechanism using external programmatic themes
US8307109B2 (en) * 2003-08-27 2012-11-06 International Business Machines Corporation Methods and systems for real time integration services
WO2005036368A2 (en) * 2003-10-10 2005-04-21 Humanizing Technologies, Inc. Clustering based personalized web experience
WO2005038610A2 (en) * 2003-10-14 2005-04-28 Donn Delson A method and system for using cascading style sheets (css) to customize an online store
US7676798B2 (en) * 2003-10-24 2010-03-09 Microsoft Corporation Mechanism for obtaining and applying constraints to constructs within an interactive environment
US7580914B2 (en) * 2003-12-24 2009-08-25 Intel Corporation Method and apparatus to improve execution of a stored program
US20050198177A1 (en) * 2004-01-23 2005-09-08 Steve Black Opting out of spam
US20050278695A1 (en) * 2004-06-14 2005-12-15 Synovic Michael J System and method for modifying code assist within an integrated development environment
US7693856B2 (en) * 2004-06-25 2010-04-06 Apple Inc. Methods and systems for managing data
US20060015817A1 (en) * 2004-07-15 2006-01-19 Giuseppe Fioretti Method to dynamically customize a web user interface
GB0416867D0 (en) * 2004-07-29 2004-09-01 Ibm Automatic content completion of valid values for method argument variables
US7571189B2 (en) * 2005-02-02 2009-08-04 Lightsurf Technologies, Inc. Method and apparatus to implement themes for a handheld device
US7340686B2 (en) * 2005-03-22 2008-03-04 Microsoft Corporation Operating system program launch menu search
US7730448B2 (en) * 2005-08-11 2010-06-01 Microsoft Corporation Layered type systems
US8473971B2 (en) * 2005-09-06 2013-06-25 Microsoft Corporation Type inference and type-directed late binding
US7958493B2 (en) * 2006-01-20 2011-06-07 Kevin Edward Lindsey Type inference system and method
US8225294B2 (en) * 2006-04-27 2012-07-17 Oracle America, Inc. Method and apparatus for expressing and checking relationships between types
US20080320453A1 (en) * 2007-06-21 2008-12-25 Microsoft Corporation Type inference and late binding

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1698033A (zh) * 2001-11-30 2005-11-16 甲骨文国际公司 有效管理企业的可配置组件的系统和方法
CN1740969A (zh) * 2004-08-25 2006-03-01 微软公司 具有合并的检验信息的数据类型

Also Published As

Publication number Publication date
BRPI0812127A2 (pt) 2014-11-18
EP2174216A2 (en) 2010-04-14
US8321836B2 (en) 2012-11-27
TWI493464B (zh) 2015-07-21
JP5264898B2 (ja) 2013-08-14
JP2010530590A (ja) 2010-09-09
EP2174216B1 (en) 2019-04-03
CN101689112A (zh) 2010-03-31
EP2174216A4 (en) 2012-01-25
TW200901037A (en) 2009-01-01
WO2009002683A3 (en) 2009-02-26
WO2009002683A2 (en) 2008-12-31
US20080320444A1 (en) 2008-12-25

Similar Documents

Publication Publication Date Title
CN101689112B (zh) 后期绑定程序协助
US11068323B2 (en) Automatic registration of empty pointers
CN101233487B (zh) 拉姆达表达式
US8756593B2 (en) Map generator for representing interrelationships between app features forged by dynamic pointers
US8589876B1 (en) Detection of central-registry events influencing dynamic pointers and app feature dependencies
US20200264853A1 (en) System for generating a map illustrating bindings
JP5592591B2 (ja) アイテム間のリレーションシップの生成、およびアイテムのナビゲートをするためのシステム
CN111143178B (zh) 用户行为分析方法、装置及设备
US11645548B1 (en) Automated cloud data and technology solution delivery using machine learning and artificial intelligence modeling
CN111191410A (zh) 用于计算笔记本界面的系统和方法及其计算机可读介质
CN102693154A (zh) 动态惰性类型系统
CN102693263A (zh) 数据编程环境
CA3175497A1 (en) Systems, devices and methods for the dynamic generation of dialog-based interactive content
CN110263932B (zh) 多智能体仿真系统图形化组合构建方法与装置
Moroney AI and Machine Learning for On-Device Development
CN113553514B (zh) 基于人工智能的对象推荐方法、装置及电子设备
Ali Advanced IOS 4 Programming: Developing Mobile Applications for Apple IPhone, IPad, and IPod Touch
CN115167833B (zh) 编程方法、可执行程序的执行方法及装置
Al-Subaihin Software Engineering in the Age of App Stores: Feature-Based Analyses to Guide Mobile Software Engineers
CN109343871A (zh) 应用程序打包的方法、装置、设备及存储介质
Katz et al. An advisory system for developing data representations
Yatsko et al. Insight Into Theoretical and Applied Informatics: Introduction to Information Technologies and Computer Science
CN113704257B (zh) 数据表的更新方法和装置
US20230076548A1 (en) Method and Device for Processing Programming Data
Nguyen Improving Programming Productivity with Statistical Models

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: MICROSOFT TECHNOLOGY LICENSING LLC

Free format text: FORMER OWNER: MICROSOFT CORP.

Effective date: 20150511

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

Effective date of registration: 20150511

Address after: Washington State

Patentee after: Micro soft technique license Co., Ltd

Address before: Washington State

Patentee before: Microsoft Corp.