CN101253478A - 类型推理和类型导向的后期绑定 - Google Patents

类型推理和类型导向的后期绑定 Download PDF

Info

Publication number
CN101253478A
CN101253478A CNA2006800320802A CN200680032080A CN101253478A CN 101253478 A CN101253478 A CN 101253478A CN A2006800320802 A CNA2006800320802 A CN A2006800320802A CN 200680032080 A CN200680032080 A CN 200680032080A CN 101253478 A CN101253478 A CN 101253478A
Authority
CN
China
Prior art keywords
type
computer implemented
implemented system
variable
late binding
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.)
Pending
Application number
CNA2006800320802A
Other languages
English (en)
Inventor
H·J·M·梅杰
B·C·贝克曼
D·N·舒阿奇
A·希尔维
P·A·维克
P·F·德亚顿
A·Y·阿哈罗尼
R·拉梅尔
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 Corp
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 CN101253478A publication Critical patent/CN101253478A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • 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/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution

Abstract

提供了通过供应选择进入(或选择退出)后期绑定来平衡编程语言内后期绑定和早期绑定的系统和方法,其中后期绑定是基于该变量的静态类型(例如,对象或类型/字符串)而触发的。此外,可以允许变量在编程语言的不同区域(例如,程序段)内具有不同的静态类型。

Description

类型推理和类型导向的后期绑定
背景
随着编程方法和基础的发展,业已开发出各种应用编程接口(API)和编程模式来将先前多变型且相对不兼容的编程方法进行标准化和统一化。因此,现代编程经常是将各种API和模式与可再用库联用。此类编程语言持续不断地演进以便于程序员做指定并便于程序的高效率执行。
编译器和/或解释器承担着将高级逻辑翻译成可执行机器代码的重任。一般而言,编译器和/或解释器是接收以源代码编程语言(例如,C、C#、Visual Basic、Java等)指定的程序并且将由此提供的逻辑转换成可由硬件设备执行的机器语言的组件。然而,这种转换无需逐字进行。实际上,常规编译器和/或解释器对源代码进行分析并且生成非常高效率的代码。例如,程序员写的代码阐述对人类而言直观且易于理解的操作逻辑流,但是这些代码就计算机执行而言通常效率低下。编译器和/或解释器能够标识出效率低下之处并且能通过消除不必要的操作和/或在仍实现预期结果的同时重新编排指令的执行从而在硬件层面上改善程序性能。以此方式,程序员就能够创建出强健且高效率的软件程序。
编程语言包括静态语言和动态语言。静态语言要求在编译之时大多数程序结构-诸如变量和函数自变量的类型-是确定的。编译器能够以运行时灵活性为代价检测差错并优化性能。另一方面,动态语言允许用户对程序结构进行更多的运行时更改,诸如将不同类型的自变量传递给同一函数、以及在某些语言中还可定义新的类型或类。动态环境能够使运行时定义和链接得以进行。
一般而言,类型推理是方便程序员写出正确地归类的应用程序的语言机制。请考虑:
Dim X=″Hello″
作为一个Visual Basic语句的情形,该语句既宣示了变量X还将其值初始化为字符串″Hello″。编译器知晓右手侧的类型是String(字符串)。因此,编译器能够推理出变量的类型应该是X。当前,编译器将X的类型设置为该语言中最普通的类型“Object(对象)”,并且利用后期绑定来解析后面仅对类型String合法的像″X.L.ength()″这样的代码。
后期绑定”指的是其中编译器在运行时插入代码以查找方法“Length(长度)”的操作。对后绑定成员名的这种能力对于其中不能静态获知数据结构的数据密集型程序、以及对于编写通用解释代码而言尤为重要。然而,后期绑定尽管非常灵活,但有时候也会引入运行时开销并降低用户界面内的设计时提示(例如,当利用诸如Intellisense之类的援助提供者时)。这会妨碍程序语言的灵活性。
因此,需要克服与常规系统和设备相关联的前述示例性缺陷。
概述
以下呈现了简化概述,以提供对权利要求主题的某些方面的基本理解。本概述不是广范的纵览。它并非意在标识关键/重要元素,亦非意欲描绘权利要求主题的范围。这一概述的唯一目的是以一种简化的形式来介绍一些概念,作为稍后呈现的更为详细的描述的前序。
本发明提供了通过供给可选择进入(或选择退出)后期绑定的选项组件来平衡编程语言中后期绑定和前期绑定的系统和方法,其中后期绑定是基于变量的静态类型(例如,对象或类型/字符串)而触发的。类型推理组件以编程语言实现,并且可以调用合适的后绑定助手(例如,用于XML类型的值的XML后绑定助手、对象的反射后绑定助手等)来以类型导引后期绑定。由此,可基于为变量指定的类型来触发后期绑定。选项组件可以包括智能标签或类似的重构机制,这能够让用户选择“作为字符串”或“作为对象”,且不仅指定是否期望后期绑定,还指定例如后期绑定的类型。后期绑定可以是有关该编程语言的默认场景,并且用户能够选择退出。或者,编程语言可以包括非后期绑定作为默认,其中用户可选择进入。此外,在Visual Basic(VB)句法的上下文中,智能标签在被点击时能够展开,以显式地指示类型,其中变量声明即已可用。
根据本发明的另一方面,变量可以在编程语言的不同区域(例如,程序段)具有不同的静态类型。此外,可以执行分析来标识变量在程序的不同段处的类型,或者为该变量标识一组可能的类型。这能够减轻类型的早期束缚,而如果类型是可接受的,则可在稍后的时间提供校验。还可以向用户提供有关变量类型变化的反馈警告(相对于差错而言)。这能够为向户提供灵活性,于是例如相同的变量名就能在整个编程代码中的若干场合使用。
在一相关方法中,用户能够首先选择是否期望后期绑定。随后,用户可指定期望的后期绑定类型。此外,可以根据变量的静态类型提供后期绑定的不同类型(例如,从其用法中推理)。因此,就能够建立起前期绑定和后期绑定之间的平衡,其中校验在运行时可以放松,而有关静态类型的可用信息可以在编译时加以利用。
为实现上述及相关目的,在此结合下列说明和附图描述所要求保护的主题的特定示例性的方面。这些方面表示了可以实践发明主题的各种方式,它们均落在所要求保护的主题的范围之内。结合附图阅读下面的详细描述则本发明的其他优点和新颖特征将变得很清楚。
附图说明
图1示出了作为本发明增强型编程环境一部分的选项组件。
图2示出了用于类型推理和类型导向的后期绑定的编程环境。
图3示出了根据本发明的变量的静态类型表示的示意图,以及与传统方法的比较。
图4示出了根据本发明一个示例性方面的智能标签的实现。
图5示出了基于后期绑定类型采用合适助手的编程环境。
图6示出了在其中变量可以在不同区域具有不同静态类型(例如,作为一组类型)的代码片段。
图7示出了根据本发明一个方面的类型导向的后期绑定的示例性方法。
图8示出了根据本发明的另一个示例性方法。
图9用支持具有类型推理和类型导向的后期绑定功能的编程语言的源程序示出了一种编程环境。
图10是描绘可被用于实现本发明的类型导向的后期绑定的编译器环境的框图。
图11示出了用于实现本发明各方面的示例性环境。
图12是可用于实现本发明的的其它计算环境的示意性框图。
详细说明
现在参考附图描述本发明的各个方面,其中始终用相同的附图标记来指代相同的或相应的元素。然而应该了解,附图以及与其相关的详细描述并非旨在把所要求保护的主题局限于所揭示的特定形式。相反,其意图是覆盖落在权利要求书的精神和范围之内的所有修改、等效和替换的方案。
在此所用的术语“组件”、“系统”等等意指与计算机相关的实体,可以是硬件、硬件和软件的组合、软件、或执行中的软件。例如,组件可以是但不限于是,在处理器上运行的进程、处理器、对象、可执行(程序)、执行的线程、程序和/或计算机。作为例示,运行在计算机上的应用程序和计算机本身都可以是计算机组件。一个或多个组件可以驻留在进程和/或执行的线程中,而组件可以位于一个计算机内和/或分布在两个或更多的计算机之间。同样,在此使用词语“示例性的”意指用作例子、实例或例示。在此被描述为“示例性的”的任何方面或设计并不一定被解释为比其他方面或设计优先或有利。
此外,所揭示的主题可以使用产生软件、固件、硬件或其任意组合的标准编程和/或工程技术实现为用于控制基于计算机或处理器的设备以实现在此所详述的诸方面的系统、方法、装置或制品。此处所用的术语“计算机程序”旨在包括可以从任何的计算机可读设备、载波或介质访问的计算机程序。例如,计算机可读介质可以包括但不限于磁存储设备(例如,硬盘、软盘、磁条等)、光盘(例如,激光盘(CD)、数字通用盘(DVD)等)、智能卡和闪速存储器设备(例如,闪存卡、记忆棒)。另外应该明白,载波可以被用于承载计算机可读电子数据,例如那些被用于传送和接收电子邮件方面或被用于访问网络如因特网或局域网(LAN)的数据。当然,本领域的技术人员将会认识到,可以对这一配置进行许多修改而不会背离权利要求书中的范围或精神。
首先转向图1,示出了编程环境100,并且编程语言110(例如,Visual Basic)通过采用选项组件130而增强。选项组件130能让用户选择进入(或者选择退出)后期绑定108,其中后期绑定基于为变量(例如,变量可以被赋值为特定静态类型115或对象120)指定的静态类型而被触发。类型推理组件125用编程语言实现,其中此种类型组件能够在得到通常不可避免的不完整的类型信息的情况下指定表达式和变量的类型。这样就在编程语言中提供了一种在后期绑定和前期绑定之间的平衡,其中可以调用适当的后绑定助手(例如,用于XML的XML后绑定助手、用于对象的反射后绑定助手等)来对后期绑定进行类型导向。
如图所示,类型推理组件125可以基于输入数据流的上下文信息向编译器(未示出)提供缺失的类型信息。选项组件130还可包括智能标签或类似的重构机制,这些将在下文中详细描述的标签或机制能够让用户在精确推理的类型或对象之间选择,并且不仅指定是否期望后期绑定,还指定例如后期绑定的类型。后期绑定可以是有关该编程语言110的默认场景,并且用户能够选择退出。或者,编程语言110可以包括非后期绑定作为默认,其中用户可选择进入。此外,在Visual Basic(VB)句法的上下文中,智能标签在被点击时能够展开,以显式地指示类型,其中变量声明例如已经可用。
首先参考图2,示出了用于类型推理和类型导向的后期绑定的编程环境200,这些都将在下文中详述。系统200包括由集成开发环境(IDE)开发、设计或编辑的源程序210。IDE可与诸如开发人员工作室应用程序之类的更为精密的编程站相关联,或者与诸如代码文本编辑器之类的更为基础的工具相关联。一般而言,选项组件能够让用户选择进入(或选择退出)后期绑定,并且其中变量的静态类型可被赋值为精确推理的类型或对象。编译器250根据众所周知的编译技术并考虑类型导向的后期绑定来处理该源代码,从而在260处为计算机生成可执行代码。
典型地,对后绑定成员名的这种能力对于其中不能静态获知数据结构的数据密集型程序、以及编写范型解释代码而言尤为重要。一般而言,绑定指的是诸如Visual Basic代码的编程代码进行访问的方法。存在两种Visual Basic使用的绑定类型,即前期绑定和后期绑定。
一般而言,在表达式的目标可以被延迟至运行时的情况下,这一延迟处理被称为后期绑定。后期绑定允许以无类型的方式使用Object(对象)变量,其中各成员的所有解析皆基于变量中的值在实际运行时的类型。如果编译环境指定了严格语义,则后期绑定会引起编译时差错。非公共成员在执行后期绑定时会被忽略,包括出于重载解析的目的。此外,与前期绑定的情况不同,调用或访问共享成员后绑定会引起调用目标在运行时被评估。
图3示出了根据本发明的变量的静态类型表示在与传统方法比较时的比较结果示意图。例如,在由区域310表示的传统静态编程语言中,变量在整个编程语言中都具有相同的静态类型。因而,在传统的静态编程语言中,需要确定变量的用法并且要指定与变量用法相一致的类型(例如,超类型)。
类似地,区域320表示传统的动态语言的方法,其中所有值的类型都被定为对象。在这些动态语言中,动态语言不具有与变量的静态类型有关的知识。
本发明在一个示例性方面涉及中间场330,其中根据值的静态类型提供选择进入和选择退出(例如,区310和320)以及不同形式的后期绑定。于是,变量能够在程序的不同区域接受不同的静态类型(例如,静态类型可变的变量)、以及基于变量的使用而推理的类型。由此,不同的程序片段可以包含同一变量的不同静态类型(或组)。例如在编译时,一个变量可以接受整数或按钮(button)的静态类型作为一组可能性。这与传统的静态编程语言形成对照,在传统的静态编程语言中,变量通常在编程语言的任何地方都只接受一种静态类型。
图4示出了根据本发明一个示例性方面的基于智能标签的重构(refactoring)。考虑图4所示的示例400,其中用户将下列声明键入一VB程序:
Dim X=E
其中编译器已知表达式E的类型为T。根据本发明的一个方面,VB可以在例如VS IDE内的X下显示“智能标签”410。智能标签410可以起到交互图形元素的作用。因此,如果用户点击或停在智能标签410上,就会出现选项420的下拉菜单。在本例中示出的两个选项是“T”和“Object”。
一般而言,如果用户选择T,则用户是在选择进入静态类型推理,意味着在后面的代码中,变量X的类型将会是T。具体地,写为“X.”的对X的点操作符的辅助提供者Intellisense将显示类型T已知的字段和方法列表。或者,从智能标签的下拉菜单中选择“Object”意味着用户正在选择进入对Object的标准VB后期绑定。这样,编译器和IDE将不会知道有关X的字段和方法的特定列表,所以点操作符将不会显示辅助提供者(例如,Intellisense)提示,编译器必须生成代码以在运行时选择字段和方法(经由通过反射实现的元对象协议)。
典型地,辅助提供者(未示出)为具体的编程语言(例如,Visual Basic、C#、C++、Java、J#)提供智能程序辅助(例如,Intellisense)。因此,此类辅助提供者组件可由特定的语言开发实体(例如,软件公司、大学、个人)提供。辅助提供者组件可以简化编码,例如通过提供基于程序性上下文的建议,而在语句、类和函数完成方面为程序员提供帮助。这些建议能够经弹出窗口或框、下拉窗口等来提供。例如,可以基于同一或另一编译单元中的在前指定来为对部分指定的字或语句的完成提出建议。
应当认识到,后期绑定通常不应被解释为是静态归类的相反面。静态上已知的类型T可以要求在它的域上做后期绑定。例如,当用户键入:
Dim X=<book><title>″Lions,Tigers,and B ears″</title></book>
X的静态类型可以是“XElement”,这为XML中的实际项提供了一种后期绑定。具体地,“X.book.title”将会是合法的代码,并且一般而言将只会在运行时方被完全解析。于是,Intellisense就能够在用户键入“X.”时显示提示(如果范围内存在XSD模式),但是对“book”和“title”的绑定则稍后进行,即仅在运行时完成。这种静态已知类型(XElement)和动态已知绑定(X.book、X.book.title)的混合可称为类型导向的后期绑定(Type-Directed Late Binding)。
此外,当用户选择进入对Object的静态类型或后期绑定时,则IDE就能够使用IDE优质列表程序来重写代码,以指示选定的类型。例如,如果用户选择进入T,则IDE能够用:
Dim X As T=E
替换
Dim X=E
而如果用户选择进入Object,则IDE能够用:
Dim X As Object=E
替换
Dim X=E
在这一优质列表之后,有关选择进入的智能标签可以消失。
此外,在下列代码的上下文中:
Dim X=″Hello″
X=5
并且假设用户在声明时选择进入类型String而非Object,则随后该优质列表程序会将上述组合重写为:
Dim X As String=″Hello″
X=Ctype(5,String)
其中,对内建类型转换函数的显式调用能够依据推理的类型而被插入。此外,因为不是所有的类型转换皆为合法或有意义,所以类型推理能够帮助编译器和运行时标识无意义的代码。例如:
Dim X As Integer=5
X=Ctype(″Hello″,Integer)
是没有意义的,而
X=IntegerHash(″Hello″)
X=Ctype(″37″,Integer)
有意义。
此外,如果“Option Strict(选项严格)”为ON(开启),则一般而言要求用户在编译进行之前选择进入。或者,如果“Option Strict”为OFF(关闭),则将会为用户尚未选择进入的每一情况选择对Object的后期绑定作为默认。
此外,在某些情况下,没有必要在采用每个变量之前对其进行声明。例如,如果变量X在程序内首次出现是赋值“X=5”,则编译器就可推理变量X的类型为Integer(整数)。类似地,IDE可以显示带有下拉菜单的智能标签,其中下拉菜单提供选项“Integer”和“Object”。下列代码可视作一个示例:
IF someBooleanExpression THEN
    X=5
ELSE
    X=″Hello″
END IF
对于这个例子,假设该代码是变量X在程序中的首次出现。编译器中的标准流分析知晓控制可以走分支的任一方向,所以它可以告知类型推理X的类型可以是Integer、String或Object中的任一种。为了用户便利,带有这三个选项的智能标签可以在分支内首个X之下出现。此外,优质列表可以与选择进入的类型相一致地插入对内建类型转换函数的显式调用。随后,如果用户选择上述String,则优质列表程序将重写该组合为:
IF someBooleanExpression THEN
    X=Ctype(5,String)
ELSE
    X=″Hello″
END IF
未声明变量的默认类型可以是Object,于是若变量X的首次使用不是在可推理的上下文中,则其类型应被推理为Object。
图5示出了根据本发明一个示例性方面的编程环境500。根据本发明的一个方面,基于对object 520或string 515的选择,将调用合适的助手(诸如,用于XML的XML后绑定助手510;用于object的反射后绑定助手520)对后期绑定进行类型导向处理。
现参考图6,示出了在其中变量可以在不同区域具有不同静态类型(例如,作为一组类型)的代码片段。这可以给不同的区域提供灵活性,而无需在早期就束缚于具体类型。如果类型是可接受的,则准许采用该类型并且稍后的校验再对精确性加以检验。相反地,传统的静态编程语言在此情况下会报错。如图所示,在610处,假设变量X的静态类型为字符串string,其中还可以提供Intellisense检验。随后在620处,X可以是数字integer,并且采用有关该X类型的本地知识。可以用警告625的形式向用户提供有关这一变化的反馈。其后在630处,假设X为按钮button。在640处,并且在End If之后,X可以是integer或button(但不是string)。编译器可以跟踪该类型,因为它知道X是integer或button,并且可以假设X是其中的任一种。或者,可以将X指定为object,而非更为精确的跟踪。这样就能够标识程序中变量类型已知(或精确规定(precise prescription))的区域。
作为又一个示例,考虑下列代码:
Dim X=″Hello″
X=5
在语句“X=5”处,IDE可以显示另一个智能标签以许可用户选择进入来进行类型切换。在上述方案之下,该代码可被自动重写为:
Dim X As String=″Hello″←statement 1,declaration
…region 1,X has type String…
X=Ctype(5,String)←statement 2
…region 2,X has type String…
IDE通常可以在statement 2处的X下维持一个智能标签,从而允许用户在区域2选择进入类型Integer、String或Object。
图7示出了根据本发明一个方面的示例性方法700。虽然在此将该示例性方法图示并描述为代表各种事件和/或动作的一系列框,但是本发明不受这些框的图出次序的限制。例如,根据本发明,除了在此示出的次序之外,某些动作或事件可以按不同的次序发生和/或与其他动作或事件同时发生。此外,不是所有示出的框、事件或动作都是实施根据本发明的方法所必需的。此外,将会认识到根据本发明的该示例性方法和其他方法可以与在此图示并描述的方法相关联地实现,也可与未示出或描述的其他方法和装置相关联地实现。首先在710处,可以为变量指定一静态类型。随后在720处,向用户呈现用于选择进入后期绑定的选项。如果在730处选择了后期绑定选项,则方法700行进至740,其中可基于选定的静态类型触发后期绑定。或者,如果用户未选择后期绑定选项,则方法在735处结束。
图8示出了根据本发明的另一个示例性方法。首先在810处,可以为在编程代码第一区域内的变量指定静态类型。随后在820处,该变量可在该代码的第一区域内使用。在830处,变量的静态类型可以改变为不同的类型,例如一个静态类型可变的变量。在840处,可以向用户提供有关这一变化的反馈。在850处,随后可以在编程代码的第二区域内采用该静态类型。这样,代码中就可以存在其中变量可以在不同区域具有不同静态类型(例如,作为一组类型)的片段。这可以为不同的区域提供灵活性,而无需在前期就束缚于变量具体类型。
图9示出了一种编程环境900,其中的源程序910支持具有类型推理和类型导向的后期绑定功能的编程语言。这能通过提供后期绑定的选择进入(或选择退出)来平衡编程语言内的后期绑定和前期绑定。系统900包括可由集成开发环境(IDE)开发、设计或编辑的源程序910。IDE可与诸如开发人员工作室应用程序之类的更为精密的编程站相关联,或者与诸如代码文本编辑器之类的更为基础的工具相关联。编译器920根据已知的编译技术处理源代码,从而生成用于计算机的可执行代码930。
图10是描绘可被用于实现本发明的后期绑定选项的编译器环境1000的框图。编译器环境1000包括编译器1010,而编译器1014包括映射组件1020、前端组件920、转换器组件1030、后端组件1040、差错校验器组件1050、符号表1060、语法分析树1070和状态1080。编译器1010接受源代码作为输入并且能够产生执行代码作为输出。输入可以包括但不限于在此描述的程序性的表达式。编译器环境的各组件和模块间的关系示出了数据的主要流向。为了简明起见没有示出其他的组件和关系。取决于实现,组件可以增添、省略、拆分成多个模块、与其他模块和/或其他模块的配置相组合。
编译器1010可以接受具有与处理元素序列相关联的源代码的文件作为输入。源代码可以包括各种表达式和关联函数、方法和/或其他程序性构造。编译器1010可以协同一个或多个组件来对源代码进行处理以分析构造并生成或注入代码。
前端组件1020读取源代码并对其执行词法分析。实质上,前端组件1020读取源代码中的字符(例如,字母数字式)序列并将其翻译成句法元素或令牌,指示常量、标识符、运算符号、关键字、和标点等。
转换器组件1030将令牌通过语法分析变成中间表示。例如,转换器组件1030能够检查句法并将令牌分组为表达式或其他的句法结构,后者进而接合成语句树。概念上,这些树形成语法分析树1070。此外并且在适当情况下,转换器模块1030可以将条目放入符号表1030中,符号表930将在源代码中使用的符号名和类型信息连同相关特性一起列出。
状态1080可用于跟踪编译器910在处理接收到或检索到的源代码并形成语法分析树1070时的进度。例如,不同的状态值指示编译器1010是在类定义或函数的开始、是刚声明了类成员、还是已经完成了表达式。随着编译器的进展,它不断地更新状态1080。编译器1010可部分地或者完全地将状态1080曝露给外界实体,外界实体随之可向编译器1010提供输入。
基于源代码内的构造或其他信号(或者以其他方式识别出此机会),转换器组件1030或另一组件可注入对应于促进高效率及正确执行的代码。编码在转换器组件1030或其他组件中的规则指示为能实现期望的功能性并识别要注入代码的位置或要实行其他操作的位置所必须完成的动作。注入的代码通常包括在一个或多个位置处添加的语句、元数据、或其他元素,但是该术语也可以包括改变、删除、或以其他方式修改现有的源代码。注入的代码可以作为一个或多个模板或以某种其他形式来存储。此外,应该认识到可能发生符号表的操纵以及语法分析树的转化。
基于符号表1060和语法分析树1070,后端组件1040可将中间表示翻译成输出代码。后端组件940将中间表示转换成可在目标处理器中执行的或由其执行的指令,转换成对变量的存储器分配,等等。输出代码可以由真实的处理器执行,但是也能提供可由虚拟处理器执行的输出代码。
此外,前端组件1020和后端组件1040能够执行另外的功能,诸如代码优化,并且能够将所描述的操作作为单个阶段或分多个阶段执行。编译器1010诸组件的各个其他方面在本质上是常规的,并且可由执行等效功能的组件代替。另外,在源代码处理过程中的各个阶段,差错校验器组件1050可以检验差错,诸如词法结构中的差错、句法差错、甚至是语义差错。一旦检测到差错,校验器组件1050就暂停编译并生成指示此差错的消息。
为给所揭示的主题的各方面提供上下文,图11和12以及下列讨论旨在提供可以在其中实现所揭示主题的各方面的合适的计算环境的简要、概括的描述。尽管前面已经在运行在一个或多个计算机上的计算机程序的计算机可执行指令的一般上下文中描述了本发明,然而本领域内的技术人员将认识到,本发明也可以和其他程序模块结合实现。一般地,程序模块包括执行特定任务和/或实现特定抽象数据类型的例程、程序、对象、数据结构等等。而且,本领域内的技术人员将会理解,本发明的方法可以在其他计算机系统配置中实施,包括单处理器或多处理器计算机系统、小型计算设备、大型计算机以及个人计算机、手持式计算设备(例如,个人数字助理(PDA)、电话、手表等)、基于微处理器的或可编程的消费性或工业电子产品等等。也可以在分布式计算环境中实践所例示的方面,在分布式计算环境中,任务是由通过通信网络连接的远程处理设备执行的。然而,即使不是本发明的全部方面,至少也本发明的部分方面可以在独立计算机上实现。在分布式计算环境中,程序模块可被置于本地或远程的存储器设备中。
参考图11,用来实施本发明各个方面的示例性环境1110包括计算机1112。计算机1112包括处理器单元1114,系统存储器1116,以及系统总线1118。系统总线1118把包括但不限于系统存储器1116的系统部件连接到处理单元1114。处理单元1114可以是各种可用处理器中的任意一种。双微处理器和其它多处理器结构也可用作处理单元1114。
系统总线1118可以是几种类型的总线结构中的任意一种,包括存储器总线或存储器控制器,外围总线或外部总线,和/或利用下述可用总线结构中的任意一种的本地总线,包括但不限于,11位总线,工业标准结构(ISA),微通道结构(MCA),扩展工业标准结构(EISA),智能化驱动器电子接口(IDE),VESA本地总线(VLB),外围部件互连(PCI),通用串行总线(USB),高级图形端口(AGP),个人计算机内存卡国际联合会总线(PCMCIA),以及小型计算机系统接口(SCSI)。
系统存储器1116包括易失性存储器1120以及非易失性存储器1122。基本输入/输出系统(BIOS)包含诸如在启动期间在计算机1112的元件之间传送信息的基本例程,其存储在非易失性存储器1122中。作为例子而不是限制,非易失性存储器1122可以包括只读存储器(ROM),可编程ROM(PROM),电可编程ROM(EPROM),电可擦除ROM(EEPROM),或者闪存。易失性存储器1120包括用作外部高速缓存的随机存取存储器(RAM)。作为例子而不是限制,RAM可以是很多形式,诸如同步RAM(SRAM),动态RAM(DRAM),同步DRAM(SDRAM),双速SDRAM(DDR SDRAM),增强型SDRAM(ESDRAM),同步链接DRAM(SLDRAM),以及直接存储器总线RAM(DRRAM)。
计算机1112还包括可移动/不可移动,易失性/非易失性计算机存储介质。例如,图11示出了磁盘存储器1124。磁盘存储器1124包括但不限于诸如磁盘驱动器、软盘驱动器、磁带驱动器、Jaz驱动器、Zip驱动器、LS-100驱动器、闪存卡、或者内存条之类的设备。此外,磁盘存储器1124可以包括独立的或者与其它存储介质结合的存储介质,包括但不限于诸如加密盘ROM驱动器(CD-ROM)、可记录CD驱动器(CD-R驱动器)、可重写CD驱动器(CD-RW驱动器)或者数字视频盘ROM驱动器(DVD-ROM)这样的光盘驱动器。为了便于把磁盘存储装置1124连接到系统总线1118,通常把可移动或不可移动的接口用作诸如接口1126。
应该明白,图11描述了在合适的操作环境1110中描述的基础计算机资源和用户之间起到中间人作用的软件。这些软件包括操作系统1128。存储在磁盘存储器1128上的操作系统1124,在运行时控制并分配计算机系统1112的资源。系统应用程序1130通过存储在系统内存1128或磁盘存储器1132中的程序模块1134和程序数据1116,利用操作系统1124对资源进行管理。应该明白,在此描述的各个组件可以用各种操作系统或操作系统的组合来实施。
用户通过输入装置1136把命令或信息输入到计算机1112中。输入装置1136包括但不限于诸如光标、轨迹球、指示笔、触摸板、键盘、麦克风、操纵杆、游戏手柄、卫星反射器、扫描仪、TV调谐卡、数码相机、数字摄像机、网页照相机等等。这些以及其它输入装置通过系统总线1114经由接口端口1138连至处理单元1118。接口端口1138包括,例如串行端口、并行端口、游戏端口、以及通用串行总线(USB)。输出装置1140利用和输入装置1136相同类型的端口。因此,例如,USB端口可以用来向计算机1112提供输入,以及把来自计算机1112的信息输出到输出装置1140。输出适配器1142是用来举例说明除了输出装置1140之外还有些象监视器、扬声器、以及打印机这样的输出装置需要专用适配器。输出适配器1142包括,作为例子而不是限制,视频和声频卡,其在输出装置1140和系统总线1118之间提供了连接装置。应该注意到,其它装置和/或系统提供了诸如远程计算机1144这样的输入和输出能力。
计算机1112可以利用到诸如远程计算机1144这样的一个或多个远程计算机的逻辑连接在联网的环境中操作。远程计算机1144可以是个人计算机、服务器、路由器、网络PC、工作站、基于电器的微处理器,同等装置或者其它普通网络节点等,通常包括所描述的有关于计算机1112中的很多或者全部元件。为了简明,只举例说明了远程计算机1146的存储器存储设备1144。远程计算机1144经由网络接口1148被逻辑地连接到计算机1112然后经由通信连接1150被物理连接。网络接口1148包括诸如局域网(LAN)和广域网(WAN)这样的通信网络。LAN技术包括光纤分布式数据接口(FDDI)、铜线分布式数据接口、以太网/IEEE 802.3、令牌环/IEEE 802.3等。WAN技术包括但不限于,点对点链接,象综合业务数字网(ISDN)和其各种变形这样的线路交换网,分组交换网,以及数字用户专线(DSL)。
通信连接1150指的是把网络接口1148连接到总线1118的硬件/软件。虽然为了清楚地举例说明,通信连接1150显示在计算机1112的内部,但其也可以在计算机1112的外部。连接到网络接口1148所需要的硬件/软件包括,仅为了举例说明,内部和外部技术,诸如调制解调器包括常规电话级别的调制解调器、电缆调制解调器以及DSL调制解调器、ISDN适配器、以太网卡。
图12是根据本发明一个方面用于可任选的后期绑定的示例计算环境1200的示意性框图。系统1200包括一个或多个客户端1210。(诸)客户端1210可以是硬件和/或软件(例如,线程、进程、计算设备)。系统1200也包括一个或多个服务器1230。(诸)服务器1230可以是硬件和/或软件(例如,线程、进程、计算设备)。服务器1230可以容纳各线程以通过例如利用在此描述的各组件执行转换。在客户端1210和服务器1230之间的一种可能的通信能够以适合在两个或多个计算机进程之间传输的数据分组的形式进行。系统1200包括可以用来使(诸)客户端1210和(诸)服务器1230之间通信更容易的通信框架1250。(诸)客户端1210工作时被连接到一个或多个可以用来存储(诸)客户端1210的本地信息的客户端数据存储1260。同样地,(诸)服务器1230工作时被连接到一个或多个可以用来存储(诸)服务器1240的本地信息的服务器存储1230。
以上描述的内容包括各个示例性方面。当然,出于描绘这些方面的目的而描述每一个可以想到的组件或方法的组合是不可能的,但本领域内的普通技术人员应该认识到,许多进一步的组合和排列都是可能的。因此,在此描述的各方面旨在包括所有这些属于所附权利要求书的精神和范围内的改变、修改和变动。此外,至于术语“包括”可在详细说明书或权利要求书中使用,该术语与术语“包含”在权利要求中用作过渡词时所被解释的那样的方式相类似,也可以是包括性的。

Claims (20)

1.一种计算机实现的系统,包括下列计算机可执行组件:
带有选项组件的编程语言,所述选项组件供应以下之一:后期绑定的选择进入和选择退出,以及
促进所述后期绑定的助手,所述后期绑定基于为所述编程语言的变量所指定或推理的类型。
2.如权利要求1所述的计算机实现的系统,其特征在于,所述变量带有在所述编程语言中可变的静态类型。
3.如权利要求2所述的计算机实现的系统,其特征在于,所述可变的静态类型基于所述变量在所述编程语言的代码区域内的位置。
4.如权利要求1所述的计算机实现的系统,其特征在于,所述可变的静态类型基于所述变量的使用而被推理。
5.如权利要求1所述的计算机实现的系统,其特征在于,所述助手是针对表示XML对象模型的类型的XML后绑定助手。
6.如权利要求1所述的计算机实现的系统,其特征在于,所述助手是针对对象的反射后绑定助手。
7.如权利要求1所述的计算机实现的系统,其特征在于,所述选项组件带有重构机制,为所述变量指派精确的推理类型或对象。
8.如权利要求7所述的计算机实现的系统,其特征在于,所述重构机制展开声明,显式地指示类型。
9.如权利要求7所述的计算机实现的系统,其特征在于,所述重构机制采用下拉菜单指示对象和类型。
10.如权利要求9所述的计算机实现的系统,其特征在于,对象的选择指示对关于对象的标准Visual Basic后期绑定的选择。
11.一种计算机实现的系统,包括下列计算机可执行组件:
向用户提供以下选项之一:后期绑定和非后期绑定一编程语言;
推理变量的类型,以及
改变作为所述编程语言一部分的变量的静态类型。
12.如权利要求11所述的计算机实现的系统,其特征在于,还包括基于所述变量的使用推理可变的静态类型。
13.如权利要求11所述的计算机实现的系统,其特征在于,还包括基于变量在所述编程语言内的位置改变所述静态类型。
14.如权利要求11所述的计算机实现的系统,其特征在于,还包括为所述编程语言指定后期绑定的类型。
15.如权利要求11所述的计算机实现的系统,其特征在于,还包括在改变所述静态类型时向用户提供反馈。
16.如权利要求11所述的计算机实现的系统,其特征在于,还包括经由编译器跟踪变量类型。
17.如权利要求11所述的计算机实现的系统,其特征在于,还包括基于选定的静态类型触发后期绑定。
18.如权利要求11所述的计算机实现的系统,其特征在于,还包括采用重构机制,所述重构机制展开以显式地指定类型。
19.如权利要求11所述的计算机实现的系统,其特征在于,还包括标识所述编程语言的代码中具有类型的精确规定的区域。
20.一种计算机实现的系统,其包括下列计算机可执行组件:
用于编程语言的后期绑定的选择进入和选择退出之一的装置,
用于推理变量类型的装置,以及
用于改变所述编程语言中的变量的静态类型的装置。
CNA2006800320802A 2005-09-06 2006-08-15 类型推理和类型导向的后期绑定 Pending CN101253478A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/220,167 2005-09-06
US11/220,167 US8473971B2 (en) 2005-09-06 2005-09-06 Type inference and type-directed late binding

Publications (1)

Publication Number Publication Date
CN101253478A true CN101253478A (zh) 2008-08-27

Family

ID=37831354

Family Applications (1)

Application Number Title Priority Date Filing Date
CNA2006800320802A Pending CN101253478A (zh) 2005-09-06 2006-08-15 类型推理和类型导向的后期绑定

Country Status (4)

Country Link
US (2) US8473971B2 (zh)
KR (1) KR101354803B1 (zh)
CN (1) CN101253478A (zh)
WO (1) WO2007030282A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110945474A (zh) * 2017-08-24 2020-03-31 谷歌有限责任公司 用于元组图程序的类型推理的系统、跨网络执行元组图程序的方法

Families Citing this family (29)

* 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
US8561048B2 (en) * 2005-12-29 2013-10-15 Sap Ag Late and dynamic binding of pattern components
US8171453B2 (en) * 2007-05-21 2012-05-01 Microsoft Corporation Explicit delimitation of semantic scope
US8589872B2 (en) * 2007-06-12 2013-11-19 International Business Machines Corporation System and method for variable type identification
US8321836B2 (en) 2007-06-21 2012-11-27 Microsoft Corporation Late bound programmatic assistance
US8156149B2 (en) * 2007-07-24 2012-04-10 Microsoft Corporation Composite nested streams
US7493610B1 (en) 2008-03-27 2009-02-17 International Business Machines Corporation Versioning optimization for dynamically-typed languages
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
US8473897B2 (en) 2008-10-03 2013-06-25 Microsoft Corporation Common intermediate representation for data scripting language
US20100235730A1 (en) * 2009-03-13 2010-09-16 Microsoft Corporation Consume-first mode text insertion
US9075667B2 (en) * 2009-05-21 2015-07-07 Microsoft Technology Licensing, Llc Dynamic binding directed by static types
US9298427B2 (en) * 2010-01-06 2016-03-29 Microsoft Technology Licensing, Llc. Creating inferred symbols from code usage
US8572591B2 (en) 2010-06-15 2013-10-29 Microsoft Corporation Dynamic adaptive programming
US9081893B2 (en) * 2011-02-18 2015-07-14 Microsoft Technology Licensing, Llc Dynamic lazy type system
US9256401B2 (en) 2011-05-31 2016-02-09 Microsoft Technology Licensing, Llc Editor visualization of symbolic relationships
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
US9542168B2 (en) 2011-11-10 2017-01-10 Microsoft Technology Licensing Llc Hostable compiler utilizing type information from a host application
US8893098B2 (en) * 2012-12-14 2014-11-18 Oracle International Corporation Deferred type inference of generic type parameters in function calls to overloaded functions
US9696968B2 (en) * 2014-01-17 2017-07-04 Microsoft Technology Licensing, Llc Lightweight optionally typed data representation of computation
US10817272B2 (en) * 2016-12-12 2020-10-27 Sap Se Generation and usage of language-converted script
US10437568B1 (en) * 2017-05-18 2019-10-08 Palantir Technologies Inc. Real-time rendering based on efficient device and server processing of content updates
US10474435B2 (en) * 2017-08-07 2019-11-12 Sap Se Configuration model parsing for constraint-based systems
US10534592B2 (en) 2017-08-07 2020-01-14 Sap Se Template expressions for constraint-based systems
US10599482B2 (en) 2017-08-24 2020-03-24 Google Llc Method for intra-subgraph optimization in tuple graph programs
US10887235B2 (en) 2017-08-24 2021-01-05 Google Llc Method of executing a tuple graph program across a network
US11836454B2 (en) * 2018-05-02 2023-12-05 Language Scientific, Inc. Systems and methods for producing reliable translation in near real-time
US11119887B2 (en) * 2018-11-29 2021-09-14 International Business Machines Corporation Attaching metadata to lines of code for alerting to changes in the code

Family Cites Families (84)

* 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 富士ゼロックス株式会社 オブジェクト指向言語のメッセージコンパイル装置
US5500881A (en) 1993-07-12 1996-03-19 Digital Equipment Corporation Language scoping for modular, flexible, concise, configuration descriptions
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
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
US6100885A (en) 1996-07-06 2000-08-08 International Business Machines Corporation Supporting modification of properties via a computer system's user interface
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
US6041180A (en) 1997-04-28 2000-03-21 International Business Machines Corporation System and method for optimizing template object files
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
US6330717B1 (en) 1998-03-27 2001-12-11 Sony Corporation Of Japan Process and system for developing an application program for a distributed adaptive run-time platform
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
US6477543B1 (en) 1998-10-23 2002-11-05 International Business Machines Corporation Method, apparatus and program storage device for a client and adaptive synchronization and transformation server
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
US6895578B1 (en) 1999-01-06 2005-05-17 Parasoft Corporation Modularizing a computer program for testing and debugging
US6678745B1 (en) * 1999-06-01 2004-01-13 Bruce Hodge Dynamic object synthesis with automatic late binding
CA2279118A1 (en) 1999-07-29 2001-01-29 Ibm Canada Limited-Ibm Canada Limitee Tooling framework system and method for code generation
US6560774B1 (en) 1999-09-01 2003-05-06 Microsoft Corporation Verifier to check intermediate language
US6986132B1 (en) 2000-04-28 2006-01-10 Sun Microsytems, Inc. Remote incremental program binary compatibility verification using API definitions
US6981249B1 (en) 2000-05-02 2005-12-27 Microsoft Corporation Methods for enhancing type reconstruction
US6973646B1 (en) 2000-07-21 2005-12-06 International Business Machines Corporation Method for compiling program components in a mixed static and dynamic environment
AU2001296394A1 (en) 2000-09-27 2002-04-15 Conducive Technology Corp Scripting business logic in a distributed object oriented environment
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
US7117504B2 (en) 2001-07-10 2006-10-03 Microsoft Corporation Application program interface that enables communication for a network software platform
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
US7647610B2 (en) 2003-08-19 2010-01-12 Lg Electronics Inc. Interfacing system between digital TV and plurality of remote controllers, method thereof, remote controller thereof, and remote controller signal transmitting method thereof
US8307109B2 (en) * 2003-08-27 2012-11-06 International Business Machines Corporation Methods and systems for real time integration services
US7818729B1 (en) 2003-09-15 2010-10-19 Thomas Plum Automated safe secure techniques for eliminating undefined behavior in computer software
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
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
US20060100975A1 (en) 2004-10-25 2006-05-11 Microsoft Corporation Strongly-typed object oriented GUI automation framework
US7490316B2 (en) 2004-12-02 2009-02-10 International Business Machines Corporation Method and apparatus to implement adaptive scripting tool
US7571189B2 (en) 2005-02-02 2009-08-04 Lightsurf Technologies, Inc. Method and apparatus to implement themes for a handheld device
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
US7765519B2 (en) 2005-12-16 2010-07-27 International Business Machines Corporation Efficient builds for installation software
US7958493B2 (en) 2006-01-20 2011-06-07 Kevin Edward Lindsey Type inference system and method
US8615743B2 (en) 2006-02-27 2013-12-24 Microsoft Corporation Adaptive compiled code
US7849451B2 (en) 2006-03-02 2010-12-07 Oracle America Inc. Dynamic delegation chain for runtime adaptation of a code unit to an environment
US8225294B2 (en) 2006-04-27 2012-07-17 Oracle America, Inc. Method and apparatus for expressing and checking relationships between types
US8321836B2 (en) 2007-06-21 2012-11-27 Microsoft Corporation Late bound programmatic assistance
US20080320453A1 (en) 2007-06-21 2008-12-25 Microsoft Corporation Type inference and late binding
US8434062B2 (en) 2008-06-19 2013-04-30 International Business Machines Corporation Enhancing source code debugging and readability using visual symbols
US8640104B2 (en) 2009-12-08 2014-01-28 International Business Machines Corporation Computer method and apparatus for debugging in a dynamic computer language
US8572591B2 (en) 2010-06-15 2013-10-29 Microsoft Corporation Dynamic adaptive programming
US9256401B2 (en) 2011-05-31 2016-02-09 Microsoft Technology Licensing, Llc Editor visualization of symbolic relationships

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110945474A (zh) * 2017-08-24 2020-03-31 谷歌有限责任公司 用于元组图程序的类型推理的系统、跨网络执行元组图程序的方法

Also Published As

Publication number Publication date
US8473971B2 (en) 2013-06-25
KR20080043325A (ko) 2008-05-16
US20130290987A1 (en) 2013-10-31
US20070055978A1 (en) 2007-03-08
KR101354803B1 (ko) 2014-02-19
WO2007030282A1 (en) 2007-03-15
US8732732B2 (en) 2014-05-20

Similar Documents

Publication Publication Date Title
CN101253478A (zh) 类型推理和类型导向的后期绑定
US7730448B2 (en) Layered type systems
CN100451968C (zh) 语法创建系统
CN102696012B (zh) 从代码使用中创建所推断的符号
US20060277523A1 (en) Annotations for tracking provenance
Kennard et al. Towards a general purpose architecture for UI generation
CN106598556A (zh) 用户界面生成方法及装置
CN105446725B (zh) 用于模型驱动开发的方法和系统
EP3859587A1 (en) Robotic task planning for complex task instructions in natural language
Wilken Angular in action
US20080244541A1 (en) Code translator and method of automatically translating modeling language code to hardware language code
US9201761B1 (en) Debugging data format conversion
CN111736840A (zh) 小程序应用的编译方法、运行方法、存储介质及电子设备
CN101251838A (zh) 对分层标记文档进行语法分析的方法和系统
CN108027721A (zh) 用于使用控件来配置通用程序的技术
US20050204336A1 (en) Visual programming method and system thereof
Arslan et al. DSML4DT: A domain-specific modeling language for device tree software
CN106055343B (zh) 一种基于程序演进模型的目标代码逆向工程系统
CN106462405A (zh) 使用活动场所的互动学习工具
CN104081347A (zh) 运算次序的图形表示
CN109155129B (zh) 语言程控系统
KR20060044361A (ko) 런타임 전에 코딩 에러를 감소시키는 컴퓨터 구현 방법
US20080141230A1 (en) Scope-Constrained Specification Of Features In A Programming Language
CN103077066A (zh) 一种编译时嵌入产品关键信息的方法和系统
Savic et al. Use case specification at different levels of abstraction

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication

Open date: 20080827