CN104412229A - 自适应可移植库 - Google Patents

自适应可移植库 Download PDF

Info

Publication number
CN104412229A
CN104412229A CN201380032264.9A CN201380032264A CN104412229A CN 104412229 A CN104412229 A CN 104412229A CN 201380032264 A CN201380032264 A CN 201380032264A CN 104412229 A CN104412229 A CN 104412229A
Authority
CN
China
Prior art keywords
platform
specific
scale
executive item
code
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
CN201380032264.9A
Other languages
English (en)
Other versions
CN104412229B (zh
Inventor
M·特罗芬
K·克瓦利纳
P·H·杜斯德
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 CN104412229A publication Critical patent/CN104412229A/zh
Application granted granted Critical
Publication of CN104412229B publication Critical patent/CN104412229B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/423Preprocessors
    • 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/44536Selecting among different versions
    • G06F9/44542Retargetable
    • G06F9/44547Fat binaries

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

可以用针对不同平台和/或版本注释的源代码的一个或多个部分来扩充平台不可知源代码。包括平台不可知部分以及平台专用和/或版本专用部分这两者的源代码可被一次编译以创建可被分发至多个设备平台和/或一个或多个平台的多个版本并在可在其上运行的单个可执行件。平台专用或版本专用可执行件(例如,汇编件、二进制件等)可作为资源(例如,数据)被嵌入到二进制件或可执行件中。当已编译代码在设备上执行时,运行时可提取与该可执行件正在其上运行的设备相对应的平台专用部分,可将所提取的部分绑定到该可执行件并且可加载并执行该可执行件。因此,相同的二进制件可取决于该二进制件在其上运行的平台的能力来产生不同的结果或功能性。

Description

自适应可移植库
背景
计算机科学中使用的术语“可移植性(portability)”是指在不同计算环境中使用相同软件的能力。术语“可移植代码”可被用来指代非平台专用的代码。即,完全相同的软件可在任何平台上运行或者至少在多个平台上运行。术语“可移植代码”还可用于指代与从头开始编写软件相比可被更成本有效地改变以便在不同平台上运行的代码。为了区分同一术语的这些不同用法,术语“通用可移植代码”将被用来指代可在任何平台上运行的平台不可知代码。术语“可移植代码”将被用来指代可被以成本有效地更改以在不同平台上运行的代码。
创建代码的不同版本以在不同平台上运行的一种方式是通过条件编译。条件编译使得编译器能够通过将代码编译多次来产生与多个不同平台相关联的多个不同可执行件。该编译器用一组参数或指示来运行以生成用于第一平台的可执行件,并用另一组参数或指示来运行以生成用于第二平台的可执行件,等等。
概述
源代码的平台不可知部分可被扩充以包括为不同平台和/或不同软件版本注释的一个或多个部分。包括平台不可知部分以及平台专用和/或版本专用部分这两者的源代码可被一次编译以创建可被分发至多个设备平台和/或一个或多个平台的多个版本并在可在其上运行的单个可执行件。开发环境的平台专用属性可使得编译器能够提供平台专用的自动完成和类型检查。平台专用或版本专用可执行件(例如,汇编件、二进制件等)可作为资源(例如,数据)被嵌入到通用可移植(平台不可知)可执行件中。平台专用抽象层和/或版本专用接口也可被创建并且可作为资源或数据被嵌入到通用可移植可执行件中。平台专用抽象层可由相应的平台专用可执行件在执行时实现。开发工具(例如IDE(集成开发环境))可设置可执行件以使得当该可执行件在特定设备上执行时,该可执行件将正确地执行。当已编译代码在设备上执行时,程序执行管理器(例如,运行时)可提取与该可执行件正在其上运行的设备相对应的平台专用数据,可将所提取的数据绑定到该可执行件并且可加载并执行该可执行件。因此,相同的二进制件可取决于该二进制件在其上运行的平台的能力来产生不同的结果或功能性。
提供本概述是为了以简化的形式介绍将在以下具体实施方式中进一步描述的概念选择。本概述并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。
附图说明
在附图中:
图1a解说在本领域中已知的对可移植代码进行条件编译的系统100的示例;
图1b解说根据此处公开的主题的各方面的生成能在多个平台上运行的单个可执行件的系统109的示例;
图1c解说根据此处公开的主题的各方面的生成能在多个平台上运行的单个可执行件的系统121的示例;
图2解说根据此处所公开的主题的各方面的用于生成单个可执行件并执行所生成的可执行件的方法200的示例;
图3是根据此处所公开主题的各方面的计算环境的示例的框图;以及
图4是根据此处所公开的主题的各方面的集成开发环境(IDE)的示例的框图。
具体实施方式
概览
图1a解说本领域中已知的用于产生通用可移植代码的系统。传统上,具有条件编译指示的源代码(诸如源代码101)被编译以在目标设备上运行。例如,源代码在编译器102上被编译一次以在目标设备(诸如智能电话)上运行并产生针对智能电话的二进制件,诸如针对智能电话的二进制件,诸如针对智能电话104a的二进制件。具有不同指示的源代码可被第二次编译以产生能在平板上运行的二进制件(例如,针对平板104b的二进制件)。具有另外的不同指示的源代码可被再次编译以产生能在游戏盒上运行的二进制件(例如,针对游戏盒104c的二进制件)或能在台式机上运行的二进制件(例如,针对台式机104d的二进制件)或能在其他设备上运行的二进制件(例如,针对设备n 104n的二进制件)。从而,该可移植代码被编译多次以产生多个二进制件,每个二进制件被设计成在特定平台上运行。
这种设计的一种结果是:当软件被打包以部署到一设备时,必须为该设备选择适当的二进制件。例如,针对智能电话的二进制件104a必须被部署到智能电话,而智能电话106a的运行时将执行二进制件104a来产生某种执行结果a108a。类似地,针对平板的二进制件104b必须被部署到平板且平板106b的运行时将执行二进制件104b来产生某种执行结果b 108b,执行结果b 108b可不同于执行结果a 108a。类似地,针对游戏盒的二进制件104c可被部署到游戏盒且游戏盒106c的运行时将执行二进制件104c来产生某种执行结果c 108c,执行结果c 108c可不同于执行结果a 108a且不同于执行结果b 108b。针对台式机的二进制件104d可被部署到台式机且台式机106d的运行时将执行二进制件104d来产生某种执行结果108d,执行结果d 108d可以不同于其他设备的执行结果。即,设备专用二进制件104n必须被部署到相应的设备且该设备106n的运行时将执行二进制件104n来产生特定结果108n。如果该代码被重用,则该代码必须被修改来改变设备专用部分。
图1b解说根据此处公开的主题的各方面的生成单个二进制件(其也可被称为参考库)的系统109。根据此处公开的主题的各方面,诸如源代码110等源代码可被经修改的编译器112编译一次以产生能在多个目标平台上运行的单个二进制件(例如,二进制件115)。本领域公知的二进制件可包括代码部分和代表资源或数据的非代码部分。二进制件115可包括诸如包含版本和/或平台不可知代码的版本和/或平台不可知部分114之类的一个或多个部分,以及版本专用的和/或平台专用的一个或多个部分(例如,智能电话专用部分116a、平板专用部分116b、游戏盒专用部分116c、台式机专用部分116d或任何设备专用部分n 116n)。平台专用部分可被标记为资源或数据。单个可执行件115可被部署到多个不同平台。
在运行时,二进制件115可由程序执行管理器来执行,该程序执行管理器诸如是但不限于运行时(例如,针对智能电话的运行时118a、针对平板的运行时118b、针对游戏盒的运行时118c、针对台式机的运行时118d、以及一般性地针对设备n的运行时118n)。该运行时可提取该二进制件的适当(匹配)的版本专用和/或平台专用部分(例如,从该二进制件中被标记为资源或数据的部分中)并且将该二进制件的所提取的版本专用和/或平台专用部分绑定到该二进制件的版本和/或平台不可知部分。即,例如,智能电话的运行时118a可将二进制件的智能电话专用部分116a绑定到平台不可知部分114并可执行它来产生针对智能电话的执行结果a 120a。类似地,平板的运行时118b可将二进制件的平板专用部分116b绑定到平台不可知部分114并可执行它来产生针对平板的执行结果b 120b。游戏盒的运行时118c可将二进制件的游戏盒专用部分116c绑定到平台不可知部分114并可执行它来产生针对游戏盒的执行结果c 120c。台式机的运行时118d可将二进制件的台式机专用部分116d绑定到平台不可知部分114并可执行它来产生针对台式机的执行结果d 120d。类似地,特定设备的运行时118n可将二进制件的该设备专用部分116n绑定到平台不可知部分114并可执行它来产生针对该设备的执行结果n 120n。
类似地,版本专用和/或平台专用平台抽象层(图1b中未示出)可被从该二进制件的数据部分中提取并可被绑定到版本专用和/或平台不可知部分114。根据此处公开的主题的一些方面,该单个二进制件115是用这种方式产生的:该代码的一个或多个版本专用和/或平台专用部分被运行时理解为正常的重用单元(例如,该二进制件是按照该运行时认识的格式创建的)。
自适应可移植库
图1c解说根据此处公开的主题的各方面的生成单个可移植可执行件的系统121的框图。图1c还解说根据此处公开的主题的各方面的该可移植可执行件的执行。系统121的全部或部分可以驻留在诸如下面参考图3所描述的计算机之类的一个或多个计算机或计算设备上。系统121或其部分可作为独立系统或作为插件或附件提供。系统121可全部或部分在软件开发计算机(诸如参考图4描述的软件开发计算机)上执行。系统121的全部或部分可由开发工具来操作。例如,系统121的全部或部分可在诸如关于图4被更完整地描述的IDE等集成开发环境(IDE)内执行、或可在IDE外执行。
系统121可包括一个或多个计算设备或计算机,诸如计算设备122。计算设备122可包括一个或多个处理器(例如处理器142等)、存储器(诸如存储器144)和一个或多个模块(诸如生成单个通用可移植可执行件的模块123)。模块123所代表的该一个或多个模块可包括编译链124的一部分。模块123可以是编译器或编译器预处理器或编译器后处理器或其任何组合的一部分。要领会,一个或多个模块(诸如,模块123等)可被加载到存储器144以使得一个或多个处理器(诸如,处理器142等)执行归于模块123的动作。
系统121可包括一个或多个其他计算机或计算设备,包括但不限于:智能电话、平板、台式计算机、游戏盒或任何类型的计算设备。这些计算设备中的每一个可包括一个或多个处理器(未示出)、存储器(未示出)和本领域公知的其他组件。
源代码文件(诸如源代码文件134)可包括平台不可知代码(诸如平台不可知代码130)的一个或多个部分。源代码文件134还可包括平台专用代码(诸如平台专用代码132等)的一个或多个部分。平台专用代码的一个或多个部分可包括专用于在一设备(诸如设备1135、设备2137……设备n 139等等)上运行的代码。设备(诸如设备1135、设备2137……设备n 139)可包括诸如智能电话、平板、游戏盒、台式计算机、膝上型计算机、笔记本计算机或现在已知或在未来建造的其他计算设备等设备。版本专用和/或平台专用代码的该一个或多个部分可以用标识注释来注释,该标识注释指示该代码专用于的设备版本和/或类型。例如,第一注释或注释类型可表示程序源代码的所注释部分专用于智能电话或专用于该智能电话的一软件版本。第二注释或注释类型可表示程序源代码的所注释部分专用于平板或专用于平板的一软件版本,等等。所使用的特定注释可控制使用哪个编译器或编译器版本来创建二进制件。
模块123可接收源代码文件134并与编译链124的其他组件相组合来创建单个二进制件129,该单个二进制件129包括诸如平台不可知二进制件126等版本不可知和/或平台不可知代码的一个或多个部分和诸如例如平台专用二进制件128等版本专用和/或平台专用代码的一个或多个部分。该版本专用和/或平台专用二进制件128可包括“点亮代码”。点亮代码可包括这样的一个或多个特性:其在一个平台或版本中存在但是在另一平台或版本中不存在,从而在一个平台或版本的用户界面中“点亮”而在另一平台或版本的用户界面中不“点亮”。版本专用和/或平台专用二进制件(诸如例如平台专用二进制件128等)可被指定为资源,诸如与平台不可知二进制件126相关联的资源。模块123等还可基于与该平台相关联的代码来针对所遇到的每种类型的平台专用代码部分生成抽象层(例如,平台专用接口)。例如,第一平台专用二进制件(诸如平台专用二进制件128)可与第一平台专用抽象层(诸如抽象层128a)相关联,等等。替代地,源代码可使用条件编译技术来编译多次来产生多个平台专用二进制件,这些多个平台专用二进制件可在后编译操作中组合来创建单个多平台二进制件。
同一二进制件(例如二进制件129)可被部署到多个不同平台。当在其上部署该软件的设备上执行该软件时,该设备的运行时(例如,运行时136、运行时138、或运行时140等)可使用适当的平台专用二进制件,将其绑定到平台不可知二进制件来创建在该设备上运行的可执行件。例如,假定平台不可知二进制件(二进制件A)使用平台专用二进制件(二进制件B)。在执行时,适用于该设备的平台专用二进制件B可被该运行时选择来与二进制件A绑定且所得到的可执行件此时可被执行。要领会,除了不同平台之外,也可类似地适应不同版本。针对该平台的适当的平台抽象层可基于在绑定时选择的平台专用代码由运行时实现。要领会,尽管在虚拟机环境中的托管语言的上下文中描述,然而此处描述的概念可应用于本机代码环境。在本机代码环境中,平台不可知代码可能更难创建。
图2解说创建能在多个不同平台上运行的单个二进制件的方法200。该二进制件可被部署到一个或多个不同平台。当该二进制件被执行时,该二进制件已被部署于其上的设备的运行时可确定适当的平台专用二进制件,提取该适当的平台专用二进制件并可将其绑定以产生针对该设备的平台专用二进制件。因此相同的二进制件在不同设备上运行时可产生不同的结果。图2中所描述的方法可由诸如但不限于参考图1b和1c所描述的系统来实践。尽管方法200描述了顺序执行的一系列操作,但要理解,方法200不受该顺序的次序的限制。例如,一些动作可以与所描述的不同的次序发生。另外,一个动作可以与另一动作并发发生。在一些实例中,不是所有的动作都要被执行。而且,要领会,尽管参考不同平台来描述,然而下面描述的方法类似地也适用于不同软件版本的创建、生成、部署和执行。
在操作201,可由IDE的源代码编辑器或其他软件工具来接收平台不可知源代码。在操作202,可接收已被注释的源代码。平台专用的源代码可被注释以便标识该源代码所针对的平台。在操作204,包括一个或多个平台不可知部分和一个或多个平台专用部分这两者的源代码可被编译为单个二进制件。在操作206,该二进制件的平台专用部分可被附加于被标记或指定为数据或非代码资源的平台不可知二进制件。在操作208,该二进制件可被部署到一个或多个不同平台。在操作210,所述设备中该二进制代码被部署到其上的一个设备的运行时可接收执行该二进制件的请求。该运行时可确定并提取适当的平台专用部分来绑定到该平台不可知二进制件。在操作212,所提取的平台专用部分可被绑定至该平台不可知二进制件。在操作214,该二进制件可被加载,而在216,该二进制件可被执行。
合适的计算环境的示例
为了提供有关本文所公开主题的各方面的上下文,图3以及以下讨论旨在提供其中可以实现本文所公开主题的各实施例的合适计算环境510的简要概括描述。尽管本文所公开的主题是在诸如程序模块等由一个或多个计算机或其他计算设备执行的计算机可执行指令的通用上下文中描述的,但本领域技术人员将认识到,本文所公开的主题的各部分还能够结合其他程序模块和/或硬件和软件的组合来实现。通常,程序模块包括执行特定任务或实现特定数据类型的例程、程序、对象、物理人为产物、数据结构等。通常,程序模块的功能可在各个实施例中按需进行组合或分布。计算环境510只是合适的操作环境的一个示例,并且不旨在对此处所公开的主题的使用范围或功能提出任何限制。
参考图3,描述了计算机512形式的计算设备。计算机512可包括至少一个处理单元514、系统存储器516和系统总线518。至少一个处理单元514可执行被存储在诸如但不限于系统存储器516之类的存储器中的指令。处理单元514可以是各种可用处理器中的任何一种。例如,处理单元514可以是图形处理单元(GPU)。这些指令可以是用于实现被描述为由上述一个或多个组件或模块所执行的功能的指令或用于实现上述方法中的一个或多个的指令。也可以使用双微处理器及其他多处理器体系结构作为处理单元514。计算机512可被用于支持在显示屏上呈现图形的系统中。在另一示例中,计算设备的至少一部分可以用在包括图形处理单元的系统中。系统存储器516可包括易失性存储器520和非易失性存储器522。非易失性存储器522可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)或闪存。易失性存储器520可包括可充当外高速缓冲存储器的随机存取存储器(RAM)。系统总线518将包括系统存储器516的系统物理人为产物耦合到处理单元514。系统总线518可以是几种类型的总线结构中的任何一种,包括存储器总线、存储控制器、外围总线、外总线或局部总线,并且可以使用各种可用总线体系结构中的任一种。计算机512可包括处理单元514可通过系统总线518访问的数据存储。数据存储可包括用于图形呈现的可执行指令、3D模型、素材、材质等。
计算机512通常包括各种计算机可读介质,诸如易失性和非易失性介质、可移动和不可移动介质。计算机可读介质可以通过用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任何方法或技术来实现。计算机可读介质包括计算机可读存储介质(也称为计算机存储介质)以及通信介质。计算机存储介质包括物理(有形)介质,诸如但不限于可存储所希望的数据以及可由计算机512访问的RAM、ROM、EEPROM、闪存或其他存储器技术、CDROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储设备。通信介质包括诸如但不限于通信信号、调制载波或可被用于传递所希望的信息以及可由计算机512访问的任何其他瞬态介质之类的瞬态介质。
将理解,图3描述了可充当用户与计算机资源之间的媒介的软件。该软件可以包括可存储在盘存储524上的操作系统528,该操作系统可分配计算机512的资源。盘存储524可以是通过诸如接口526等不可移动存储器接口连接到系统总线518的硬盘驱动器。系统应用程序530利用由操作系统528通过存储在系统存储器516或者存储在盘存储524上的程序模块532和程序数据534对资源的管理。可以理解,计算机可用各种操作系统或操作系统的组合来实现。
用户可通过输入设备536向计算机512输入命令或信息。输入设备536包括但不限于定点设备,诸如鼠标、跟踪球、指示笔、触摸垫、键盘、话筒、语音识别和姿势识别系统等。这些及其他输入设备通过系统总线518经由接口端口538连接到处理单元514。接口端口538可表示串行端口、并行端口、通用串行总线(USB)等。输出设备540可与输入设备使用相同类型的端口。提供输出适配器542以举例说明存在像监视器、扬声器、以及打印机的需要特定适配器的一些输出设备540。输出适配器542包括但不限于,在输出设备540和系统总线518之间提供连接的视频卡和声卡。其他设备和/或系统和/或设备,诸如远程计算机544,可提供输入和输出两种能力。
计算机512可以使用到诸如远程计算机544之类的一个或多个远程计算机的逻辑连接来在联网环境中操作。远程计算机544可以是个人计算机、服务器、路由器、网络PC、对等设备或其他常见的网络节点,并且通常包括许多或所有以上相对于计算机512所描述的元件,但在图3中仅示出了存储器存储设备546。远程计算机544可经由通信连接550逻辑地连接。网络接口548涵盖诸如局域网(LAN)和广域网(WAN)这样的通信网络,但也可包括其他网络。通信连接550是指用来将网络接口548连接到总线518的硬件/软件。通信连接550可以在计算机512内或外并且包括诸如调制解调器(电话、电缆、DSL和无线)和ISDN适配器、以太网卡等内和外技术。
可以理解,所示网络连接仅是示例,并且可以使用在计算机之间建立通信链路的其他手段。本领域的普通技术人员可以理解,计算机512或其他客户机设备可作为计算机网络的一部分来部署。在这一点上,本文所公开的主题涉及具有任意数量的存储器或存储单元以及在任意数量的存储单元或卷上发生的任意数量的应用和进程的任何计算机系统。本文所公开的主题的各方面可应用于具有部署在网络环境中的具有远程或本地存储的服务器计算机和客户计算机的环境。本文所公开的主题的各方面也可应用于具有编程语言功能、解释和执行能力的独立计算设备。
图4示出集成开发环境(IDE)600和通用语言运行时环境602。IDE 600可允许用户(例如,开发者、程序员、设计者、编码者等)在计算机系统中设计、编码、编译、测试、运行、编辑、调试或构建程序、程序集、网站、web应用和web服务。软件程序可包括以一种或多种源代码语言(例如,VisualBasic、Visual J#、C++、C#、J#、Java Script、APL、COBOL、Pascal、Eiffel、Haskell、ML、Oberon、Perl、Python、Scheme、Smalltalk等)创建的源代码(组件610)。IDE 600可提供本机代码开发环境,或者可提供在虚拟机上运行的托管代码开发,或者可提供其组合。IDE 600可提供使用微软.NETTM框架的托管代码开发环境。在执行应用时,可使用语言专用源编译器620使用建模工具652和模型存储653从源代码组件610和本机代码组件611创建中间语言组件650,并且使用中间语言编译器660(例如,即时(JIT)编译器)从中间语言组件650创建本机代码组件611(例如,机器可执行指令)。即,当中间语言(IL)应用被执行时,其在被执行的同时被编译成适合正在其上执行它的平台的合适机器语言,藉此使代码能跨若干平台移植。替代地,在其他实施例中,程序可被编译成适合其目标平台的本机代码机器语言(未示出)。
用户可根据已知软件编程技术以及与特定源语言相关联的特定逻辑和句法规则经由IDE 600中的用户接口640和源代码编辑器651来创建和/或编辑源代码组件。此后,源代码组件610可经由源编译器620被编译,藉此可创建该程序的中间语言表示,诸如汇编630。汇编630可包括中间语言组件650和元数据642。
应用设计可以能够在部署前被确认。
本文所述的各种技术可结合硬件或软件,或在适当时以其组合来实现。由此,本文所公开的方法和装置或其特定方面或部分可采取包含在诸如软盘、CD-ROM、硬盘驱动器或任何其他机器可读存储介质等有形介质中的程序代码(即,指令)的形式,其中当程序代码被加载到诸如计算机等机器内并由其执行时,该机器成为用于实现本文所公开的主题的各方面的装置。如此出所用的,术语“机器可读存储介质“应被用来排除提供(即存储和/或传输)任何形式的传播信号的任何机制。在程序代码在可编程计算机上执行的情况下,计算设备通常将包括处理器、该处理器可读的存储介质(包括易失性和非易失性的存储器和/或存储元件)、至少一个输入设备、以及至少一个输出设备。可例如通过使用数据处理API等来利用域专用编程模型各方面的创建和/或实现的一个或多个程序可用高级过程语言或面向对象的编程语言来实现以与计算机系统通信。然而,如果需要,该程序可以用汇编语言或机器语言来实现。在任何情形中,语言可以是编译语言或解释语言,且与硬件实现相结合。
尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述具体特征或动作。相反,上述具体特征和动作是作为实现权利要求的示例形式公开的。

Claims (10)

1.一种系统,包括:
计算设备的至少一个处理器;
通信地耦合至所述计算设备的所述至少一个处理器的存储器;以及
加载到所述存储器中的至少一个模块,所述至少一个模块使所述至少一个处理器:
接收源代码的平台不可知部分;
接收源代码的多个平台专用部分,代码的所述多个平台专用部分被指定为资源;
将源代码的所述平台不可知部分和源代码的所述多个平台专用部分编译为单个可执行件;以及
将所述单个通用可移植可执行件部署到多个不同平台。
2.如权利要求1所述的系统,其特征在于,所述计算设备是智能电话、平板、游戏盒、台式计算机或笔记本计算机。
3.如权利要求1所述的系统,其特征在于,还包括至少一个模块,所述至少一个模块在被加载到所述存储器中时致使所述至少一个处理器生成包括接口的平台专用抽象层。
4.如权利要求1所述的方法,其特征在于,源代码的所述多个平台专用部分中的一平台专用部分包括软件版本。
5.如权利要求1所述的方法,其特征在于,所述源代码中的注释确定将所述源代码的所述平台不可知部分和所述源代码的所述多个平台专用部分编译为所述单个可执行件的编译器。
6.一种方法,包括:
由计算设备的处理器接收单个可执行件,所述单个可执行件包括平台不可知部分和多个平台专用部分,所述多个平台专用部分包括针对第一平台的平台专用部分和针对第二平台的平台专用部分;
确定所述计算设备的所述处理器的平台,所述处理器的所述平台包括所述第一平台;
从所述单个可执行件的所述多个平台专用部分提取针对所述第一平台的平台专用部分;
将针对所述第一平台的平台专用部分绑定到二进制件的平台不可知部分;以及
加载经绑定的二进制件。
7.如权利要求6所述的方法,其特征在于,所述第一平台包括智能电话、平板、游戏盒、台式计算机或笔记本计算机。
8.如权利要求6所述的方法,其特征在于,进一步包括:
接收包括多个平台专用平台抽象层部分的所述单个可执行件,所述多个平台专用平台抽象层部分包括针对所述第一平台的平台专用平台抽象层以及针对所述第二平台的平台专用平台抽象层。
9.如权利要求6所述的方法,其特征在于,进一步包括:
从所述单个可执行件的所述多个平台专用平台抽象层部分提取针对所述第一平台的平台专用平台抽象层部分;
将针对所述第一平台的平台专用平台抽象层部分绑定到二进制件的平台不可知部分;以及
加载经绑定的二进制件。
10.一种包括计算机可执行指令的计算机可读存储介质,所述计算机可执行指令在被执行时使计算设备的至少一个处理器:
由计算设备的处理器接收单个可执行件,所述单个可执行件包括代码部分和非代码部分,所述单个可执行件包括所述代码部分中的平台不可知部分以及所述非代码部分中的多个平台专用部分,所述多个平台专用部分包括针对第一平台的平台专用部分和针对第二平台的平台专用部分;
确定所述计算设备的平台,所述计算设备的所述平台包括所述第一平台;
从所述单个可执行件的所述多个平台专用部分提取针对所述第一平台的平台专用部分;
将针对所述第一平台的平台专用部分绑定到二进制件的平台不可知部分;以及
加载经绑定的二进制件。
CN201380032264.9A 2012-06-18 2013-05-28 自适应可移植库 Active CN104412229B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/525,356 US10402208B2 (en) 2012-06-18 2012-06-18 Adaptive portable libraries
US13/525,356 2012-06-18
PCT/US2013/042791 WO2013191852A1 (en) 2012-06-18 2013-05-28 Adaptive portable libraries

Publications (2)

Publication Number Publication Date
CN104412229A true CN104412229A (zh) 2015-03-11
CN104412229B CN104412229B (zh) 2018-09-18

Family

ID=48916167

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201380032264.9A Active CN104412229B (zh) 2012-06-18 2013-05-28 自适应可移植库

Country Status (6)

Country Link
US (1) US10402208B2 (zh)
EP (1) EP2862066A1 (zh)
JP (1) JP6122493B2 (zh)
KR (1) KR102059705B1 (zh)
CN (1) CN104412229B (zh)
WO (1) WO2013191852A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106445564A (zh) * 2016-12-23 2017-02-22 携程旅游网络技术(上海)有限公司 用于同平台具有不同编程语言项目的混合引用方法及系统
CN108614705A (zh) * 2017-02-07 2018-10-02 腾讯科技(深圳)有限公司 一种数据编译处理方法及终端

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9032379B2 (en) * 2013-06-21 2015-05-12 Oracle International Corporation Platform specific optimizations in static compilers
US9223550B1 (en) * 2013-10-17 2015-12-29 Google Inc. Portable handling of primitives for concurrent execution
US9292270B2 (en) 2014-03-27 2016-03-22 Microsoft Technology Licensing, Llc Supporting dynamic behavior in statically compiled programs
US9389890B2 (en) 2014-03-27 2016-07-12 Microsoft Technology Licensing, Llc Hierarchical directives-based management of runtime behaviors
US20160077831A1 (en) * 2014-09-11 2016-03-17 Microsoft Corporation Accurate and performant code design using memoization
US9977673B1 (en) * 2014-11-13 2018-05-22 Marvell International Ltd. Systems and methods for providing a platform-specific porting layer for multi-level software stacks
US9690552B2 (en) * 2014-12-27 2017-06-27 Intel Corporation Technologies for low-level composable high performance computing libraries
CN104503819A (zh) * 2015-01-05 2015-04-08 中国科学院计算技术研究所 一种面向异os的汇编器及汇编移植方法
US9529630B1 (en) 2015-01-21 2016-12-27 Pivotal Software, Inc. Cloud computing platform architecture
US10007500B1 (en) * 2015-01-21 2018-06-26 Pivotal Software, Inc. Cloud computing platform architecture
US10140104B2 (en) 2015-04-14 2018-11-27 Micron Technology, Inc. Target architecture determination
CN104978224B (zh) * 2015-07-06 2018-11-20 张兆琦 一种面向多硬件平台的应用程序管理方法
US10120661B2 (en) * 2015-07-16 2018-11-06 Sugarcrm Inc. Multi-flavored software execution from a singular code base
US9876852B2 (en) 2015-07-23 2018-01-23 Microsoft Technology Licensing, Llc Coordinating actions across platforms
US10180825B2 (en) * 2015-09-30 2019-01-15 Apple Inc. System and method for using ubershader variants without preprocessing macros
US11640284B2 (en) * 2015-11-30 2023-05-02 Oracle International Corporation Multi-platform compiling
JP6129376B1 (ja) * 2016-03-28 2017-05-17 株式会社ラック プログラム
US10740093B2 (en) 2016-09-01 2020-08-11 Dropbox, Inc. Advanced packaging techniques for improving work flows
US10289394B2 (en) * 2016-10-11 2019-05-14 Oracle International Corporation Selective generation of multiple versions of machine code for source code functions for execution on different processor versions and/or architectures
CN109213670A (zh) * 2017-06-30 2019-01-15 中兴通讯股份有限公司 实现白盒otn硬件设备的方法及装置、存储介质
US10579347B2 (en) 2017-11-03 2020-03-03 International Business Machines Corporation Self re-encoding interpreted application
CN108509200A (zh) * 2018-03-13 2018-09-07 中国银行股份有限公司 一种建立软件源代码与执行码之间关联的方法及装置
US10983803B2 (en) * 2018-06-03 2021-04-20 Apple Inc. Annotating dynamic libraries for multi-OS applications
US10705511B2 (en) * 2018-07-11 2020-07-07 Siemens Aktiengesellschaft Abstraction layers for automation applications
JP7001012B2 (ja) 2018-07-30 2022-01-19 オムロン株式会社 サポート装置およびサポートプログラム
CN110806891B (zh) * 2019-09-27 2023-09-19 武汉船舶通信研究所(中国船舶重工集团公司第七二二研究所) 嵌入式设备软件版本的生成方法及装置
CN111552480B (zh) * 2020-05-07 2021-06-25 深圳百斯特控制技术有限公司 跨平台编译方法、装置、设备及可读存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5860006A (en) * 1995-09-15 1999-01-12 Apple Computer, Inc. Processor independent network operating system loadable modules
US20050108694A1 (en) * 2003-02-28 2005-05-19 Sundaram Ramani System and method for compiling markup files
US20090249277A1 (en) * 2008-03-31 2009-10-01 Sun Microsystems, Inc. Method for creating unified binary files
US20110276954A1 (en) * 2010-05-06 2011-11-10 International Business Machines Corporation Simultaneous compiler binary optimizations

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09190355A (ja) 1996-01-10 1997-07-22 Toshiba Corp プログラム変換方法
JP2000347875A (ja) 1999-04-23 2000-12-15 Sun Microsyst Inc ファイル移植技術
FR2801118B1 (fr) 1999-11-17 2001-12-21 Bull Cp8 Procede de chargement d'applications dans un systeme embarque multi-application, systeme embarque correspondant, et procede d'execution d'une application du systeme embarque
AR033549A1 (es) * 2000-08-07 2003-12-26 Diebold Inc Maquina automatica para operaciones bancarias, metodos para operarla y medio legible por computadora
US7346849B1 (en) * 2001-04-03 2008-03-18 Cypress Semiconductor Corp. Executable code derived from user-selectable links embedded within the comments portion of a program
US7210132B2 (en) 2002-05-30 2007-04-24 Microsoft Corporation Interoperability of objects between various platforms
US7546607B2 (en) 2002-11-19 2009-06-09 Microsoft Corporation Native code exposing virtual machine managed object
US7275241B2 (en) 2003-11-21 2007-09-25 International Business Machines Corporation Dynamic instrumentation for a mixed mode virtual machine
US20060080680A1 (en) 2004-10-12 2006-04-13 Majid Anwar Platform independent dynamic linking
US7945902B1 (en) 2005-07-13 2011-05-17 Oracle America, Inc. Detection of non-standard application programming interface usage via analysis of executable code
US20070169010A1 (en) * 2005-10-31 2007-07-19 Dhi Technologies, Inc. Multiplatform programming environment
US9553947B2 (en) * 2007-07-18 2017-01-24 Google Inc. Embedded video playlists
US8141056B2 (en) 2008-04-03 2012-03-20 International Business Machines Corporation Just-in-time dynamic instrumentation
US9009662B2 (en) * 2008-12-18 2015-04-14 Adobe Systems Incorporated Platform sensitive application characteristics
US8843920B2 (en) * 2009-09-15 2014-09-23 Advanced Micro Devices, Inc. Systems and methods for deferring software implementation decisions until load time
WO2011116494A1 (en) * 2010-03-24 2011-09-29 Thomson Licensing Method and apparatus for monitoring quality of service of network
US8572591B2 (en) 2010-06-15 2013-10-29 Microsoft Corporation Dynamic adaptive programming

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5860006A (en) * 1995-09-15 1999-01-12 Apple Computer, Inc. Processor independent network operating system loadable modules
US20050108694A1 (en) * 2003-02-28 2005-05-19 Sundaram Ramani System and method for compiling markup files
US20090249277A1 (en) * 2008-03-31 2009-10-01 Sun Microsystems, Inc. Method for creating unified binary files
US20110276954A1 (en) * 2010-05-06 2011-11-10 International Business Machines Corporation Simultaneous compiler binary optimizations

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
SANG KIL CHA 等: "Platform-Independent Programs", 《ACM CONFERENCE ON COMPUTER AND COMMUNICATIONS SECURITY》 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106445564A (zh) * 2016-12-23 2017-02-22 携程旅游网络技术(上海)有限公司 用于同平台具有不同编程语言项目的混合引用方法及系统
CN106445564B (zh) * 2016-12-23 2019-08-20 携程旅游网络技术(上海)有限公司 用于同平台具有不同编程语言项目的混合引用方法及系统
CN108614705A (zh) * 2017-02-07 2018-10-02 腾讯科技(深圳)有限公司 一种数据编译处理方法及终端
CN108614705B (zh) * 2017-02-07 2022-06-03 腾讯科技(深圳)有限公司 一种数据编译处理方法及终端

Also Published As

Publication number Publication date
JP2015524126A (ja) 2015-08-20
CN104412229B (zh) 2018-09-18
EP2862066A1 (en) 2015-04-22
JP6122493B2 (ja) 2017-04-26
KR102059705B1 (ko) 2019-12-26
WO2013191852A1 (en) 2013-12-27
US10402208B2 (en) 2019-09-03
US20130339928A1 (en) 2013-12-19
KR20150024842A (ko) 2015-03-09

Similar Documents

Publication Publication Date Title
CN104412229A (zh) 自适应可移植库
CN102222039B (zh) 使用dsl来调用api以测试软件
US8495598B2 (en) Control flow graph operating system configuration
CN102696012B (zh) 从代码使用中创建所推断的符号
JP4183399B2 (ja) 複数言語のコンパイル方法及びシステム
Sen et al. Jalangi: A selective record-replay and dynamic analysis framework for JavaScript
EP2972821B1 (en) Application compatibility checking in a distributed computing environment
CN102222012B (zh) 针对外部数据源的静态类型检查
Hellman Android programming: Pushing the limits
US20100146481A1 (en) Developing applications at runtime
JP2004310776A (ja) 拡張ランタイムホスティング
US8910133B2 (en) Library conformity checker
CN102279765A (zh) 预编译托存托管代码
CN109196476A (zh) 共享垃圾收集器的不同类型图之间的无缝高性能互操作性
JP2023139043A (ja) 実行時コンテナ
CN102696026A (zh) 带有增量改变的高效不可变句法表示
KR20170057264A (ko) 멀티 컨텍스트 지능형 지원 기능을 갖는 코드 개발 툴
US10019345B2 (en) Executing multi-version tests against a multi-version application
CN114116134A (zh) 智能合约部署和执行方法、设备及存储介质
CN102812437B (zh) 高和低值应用状态
US20170083298A1 (en) Resilient format for distribution of ahead-of-time compiled code components
KR20130020135A (ko) 통합 개발 환경에서의 코드 동시 개발자 리스트 제공 시스템 및 방법
EP2835738B1 (en) Method and parallelization detection device for detecting parallelism in a sequential program
Palsbröker et al. A Framework for Modular VST-based NIMEs Using EDA and Dependency Injection.
Koch et al. A sustainable infrastructure concept for improved accessibility, reusability, and archival of research software

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
TA01 Transfer of patent application right
TA01 Transfer of patent application right

Effective date of registration: 20171016

Address after: Washington State

Applicant after: Micro soft technique license Co., Ltd

Address before: Washington State

Applicant before: Microsoft Corp.

GR01 Patent grant
GR01 Patent grant