首页> 中国专利> 通过元数据抽取执行动态语言

通过元数据抽取执行动态语言

摘要

用于执行以动态脚本设计语言撰写的脚本的方法和装置包含在两个阶段中剖析脚本:预先剖析,其使用简化文法以产生关于脚本的高级结构的脚本元数据;以及完全剖析,其使用动态脚本设计语言的文法和语法以及所产生的脚本元数据。所产生的元数据可描述存在于脚本的语言中的高级结构,例如函数、对象方法以及最高级调用图。可在完全剖析期间使用脚本元数据来确定待完全剖析的代码部分。本发明的各方面使在运行时间进行剖析所花费的处理时间减到最少,且可消除为解译或编译将不执行的代码区段所需要的处理。也可高速缓冲存储脚本元数据以及完全剖析结果以提供更多的处理效率。

著录项

  • 公开/公告号CN102741812A

    专利类型发明专利

  • 公开/公告日2012-10-17

    原文格式PDF

  • 申请/专利权人 高通股份有限公司;

    申请/专利号CN201180005177.5

  • 申请日2011-01-10

  • 分类号G06F9/44;G06F9/445;G06F9/45;

  • 代理机构北京律盟知识产权代理有限责任公司;

  • 代理人宋献涛

  • 地址 美国加利福尼亚州

  • 入库时间 2023-12-18 07:02:10

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-12-27

    未缴年费专利权终止 IPC(主分类):G06F9/44 授权公告日:20150325 终止日期:20190110 申请日:20110110

    专利权的终止

  • 2015-03-25

    授权

    授权

  • 2012-12-12

    实质审查的生效 IPC(主分类):G06F9/44 申请日:20110110

    实质审查的生效

  • 2012-10-17

    公开

    公开

说明书

相关申请案

本申请案主张2010年1月12日申请的名为“通过元数据抽取执行动态语言”的美国临时专利申请案第61/294,478号的优先权益,所述临时专利申请案的全部内容据此以引用的方式并入本文中。

技术领域

本申请案大体上涉及计算装置,且更明确地说,涉及用于在计算装置上执行动态语言的方法。

背景技术

目前,动态脚本设计语言是计算机程序设计和软件开发中的优选开发平台。明确地说,是用于客户端侧上的网页和网络应用程序的主要开发语言,而Python和Ruby是用于服务器侧上的软件开发的极流行语言。这些程序设计语言经设计成用于交互式执行(脚本设计),且因此,必然是动态的(即,支持动态类型、反省和内省,以及可扩充性)。动态脚本设计语言通常通过解译而执行,其中,在运行时间,在执行脚本之前剖析和分析脚本。

近年来,已针对若干这些语言(例如,JavaScript)引入即时编译,以解决动态语言的性能问题。然而,性能问题仍继续存在。在受约束计算环境的情况下尤其如此,例如在移动装置的情况下,其中执行动态语言的性能和电力效率继续成为问题。

发明内容

本发明呈现一种用于执行以动态语言撰写的脚本的设备、系统和方法的各个方面。在一个方面中,可预先剖析脚本以在脚本内识别高级程序结构且产生表征所识别的高级结构的元数据。可连同运行时间信息一起使用此元数据以确定脚本的可能需要执行的部分。在一个方面中,可连同所产生的元数据一起完全剖析和使用需要执行的部分以产生字节码。在各个方面中,可执行经预先剖析的脚本。在一个方面中,脚本的执行可通过解译而进行。在另一个方面中,执行脚本可包含根据所产生的字节码产生可执行码以及执行所产生的可执行码。

在一个方面中,可将所产生的元数据、所产生的字节码和/或所产生的可执行码存储在高速缓冲存储器中。在一个方面中,可使用文法预先剖析脚本,所述文法比用以完全剖析需要执行的部分的文法简单。在一个方面中,可仅在确定先前尚未高速缓冲存储脚本时才预先剖析脚本。在一个方面中,可仅在确定先前尚未高速缓冲存储脚本时才完全剖析脚本。在另一个方面中,可仅在确定先前尚未高速缓冲存储用于脚本的可执行码时才产生可执行码。

在另一个方面中,可在并行处理操作中实现预先剖析。在一个方面中,可使用单独的线程和/或过程来执行预先剖析、元数据产生、代码产生、程序执行和/或高速缓冲存储操作。在一个方面中,可使用最佳线程和/或过程来预取和分析可能需要未来执行的脚本。在一个方面中,最佳线程或过程可使用推测性算法用于预取操作,由此,使用关于当前执行的信息来预期未来执行路径且预测很可能在未来执行的代码区段。

一个方面提供一种用于执行以动态脚本设计语言撰写的脚本的方法,所述方法包含在执行之前预先剖析脚本以在脚本内识别高级程序结构、产生表征所识别的高级结构的元数据、使用运行时间信息和元数据来确定脚本的需要执行的部分、使用所产生的元数据完全剖析脚本的部分以产生字节码,以及执行脚本。在此种方法中,可使用文法实现预先剖析脚本,所述文法比用于完全剖析脚本的部分的文法简单。在一个方面中,可通过解译执行脚本。在另一个方面中,执行脚本可包含根据所产生的字节码产生可执行码以及执行所产生的可执行码。在一个方面中,所述方法可进一步包含高速缓冲存储所产生的元数据、高速缓冲存储所产生的字节码,和/或高速缓冲存储所产生的可执行码。此方面可进一步包含:确定是否已高速缓冲存储脚本,且在确定先前尚未高速缓冲存储脚本时预先剖析脚本;确定是否已完全剖析脚本,且在确定先前尚未完全剖析脚本时剖析脚本的部分;和/或确定是否已高速缓冲存储用于脚本的可执行码,且在确定先前尚未高速缓冲存储用于脚本的可执行码时产生可执行码。在一个方面中,可在并行处理操作中实现预先剖析脚本的方法操作。

另一方面包含一种计算装置,计算装置包含处理器和耦合到处理器的存储器,其中处理器经配置有处理器可执行指令以执行包含以下各者的操作:在执行之前预先剖析脚本以在脚本内识别高级程序结构、产生表征所识别的高级结构的元数据、使用运行时间信息和元数据来确定脚本的需要执行的部分、使用所产生的元数据完全剖析脚本的部分以产生字节码,以及执行脚本。在一个方面中,处理器可经配置有处理器可执行指令,使得通过解译执行脚本。在另一个方面中,处理器可经配置有处理器可执行指令,使得执行脚本包含根据所产生的字节码产生可执行码以及执行所产生的可执行码。在另一个方面中,计算装置的存储器和处理器可经进一步配置以高速缓冲存储所产生的元数据、所产生的字节码和/或所产生的可执行码。在另一个方面中,处理器可经进一步配置以确定是否已高速缓冲存储脚本,且在确定先前尚未高速缓冲存储脚本时使用运行时间信息和元数据来确定脚本的需要执行的部分。在另一个方面中,处理器可经进一步配置以确定是否已完全剖析脚本,且在确定先前尚未完全剖析脚本时使用所产生的元数据完全剖析脚本的部分以产生字节码。在另一个方面中,处理器可经进一步配置以确定是否已高速缓冲存储用于脚本的可执行码,且在确定先前尚未高速缓冲存储用于脚本的可执行码时根据所产生的字节码产生可执行码。在一个方面中,处理器可经配置以在并行处理操作中实现脚本的预先剖析。

另一个方面包含一种计算装置,计算装置包含用于在执行之前预先剖析脚本以在脚本内识别高级程序结构的装置、用于产生表征所识别的高级结构的元数据的装置、用于使用运行时间信息和元数据来确定脚本的需要执行的部分的装置、用于使用所产生的元数据完全剖析脚本的部分以产生字节码的装置,以及用于执行脚本的装置。在另一个方面中,计算装置可包含用于通过解译执行脚本的装置。在另一个方面中,用于执行脚本的装置可包含用于根据所产生的字节码产生可执行码的装置以及用于执行所产生的可执行码的装置。在另一个方面中,计算装置可包含用于高速缓冲存储所产生的元数据的装置、用于高速缓冲存储所产生的字节码的装置,和/或用于高速缓冲存储所产生的可执行码的装置。在另一个方面中,计算装置可进一步包含用于确定是否已高速缓冲存储脚本的装置,其中用于使用运行时间信息和元数据来确定脚本的需要执行的部分的装置包含用于在确定先前尚未高速缓冲存储脚本时使用运行时间信息和元数据来确定脚本的需要执行的部分的装置。在另一个方面中,计算装置可进一步包含用于确定是否已完全剖析脚本的装置,其中用于使用所产生的元数据完全剖析脚本的部分以产生字节码的装置包含用于在确定先前尚未完全剖析脚本时使用所产生的元数据完全剖析脚本的部分以产生字节码的装置。在另一个方面中,计算装置可进一步包含用于确定是否已高速缓冲存储用于脚本的可执行码的装置,其中用于根据所产生的字节码产生可执行码的装置包含用于在确定先前尚未高速缓冲存储用于脚本的可执行码时根据所产生的字节码产生可执行码的装置。在一个方面中,用于预先剖析脚本的装置可包含用于在并行处理操作中预先剖析脚本的装置。

另一个方面包含一种非暂时性处理器可读存储媒体,其上存储有包含以下各者的处理器可执行指令:用于在执行之前预先剖析脚本以在脚本内识别高级程序结构的至少一个指令、用于产生表征所识别的高级结构的元数据的至少一个指令、用于使用运行时间信息和元数据来确定脚本的需要执行的部分的至少一个指令、用于使用所产生的元数据完全剖析脚本的部分以产生字节码的至少一个指令,以及用于执行脚本的至少一个指令。在另一个方面中,非暂时性处理器可读存储媒体可包含用于使用解译执行脚本的至少一个指令。在另一个方面中,用于执行脚本的至少一个指令可包含用于根据所产生的字节码产生可执行码的至少一个指令,以及用于执行所产生的可执行码的至少一个指令。在另一个方面中,所存储的处理器可执行指令可进一步包含用于高速缓冲存储所产生的元数据的至少一个指令、用于高速缓冲存储所产生的字节码的至少一个指令,和/或用于高速缓冲存储所产生的可执行码的至少一个指令。此方面可进一步包含用于确定是否已高速缓冲存储脚本且在确定先前尚未高速缓冲存储脚本时预先剖析脚本的至少一个指令、用于确定是否已完全剖析脚本且在确定先前尚未完全剖析脚本时剖析脚本的部分的至少一个指令,和/或用于确定是否已高速缓冲存储用于脚本的可执行码且在确定先前尚未高速缓冲存储用于脚本的可执行码时产生可执行码的至少一个指令。在一个方面中,所存储的处理器可执行指令可包含用于在并行处理操作中预先剖析脚本的至少一个指令。

附图说明

并入本文中且构成本说明书的一部分的随附图式说明本发明的示范性方面,且连同上文所给出的一般描述以及下文所给出的详细描述一起用以解释本发明的特征。

图1A是用于执行动态脚本设计语言脚本的方法的过程流程图。

图1B是用于执行动态脚本设计语言脚本的另一种方法的过程流程图。

图2说明适合于供本发明的方面使用的数据结构。

图3是用于执行动态脚本设计语言脚本的又一种方法的过程流程图。

图4是用于执行动态脚本设计语言脚本的另一种方法的过程流程图。

图5是适合于供各个方面使用的计算装置的组件框图。

图6是适合于供各个方面使用的实例移动装置的说明。

图7是适合于供各个方面使用的实例个人计算机的说明。

具体实施方式

将参看随附图式详细地描述各个方面。只要可能,就将在整个图式中使用相同的参考数字来指代相同或相似的部分。对特定实例和实施方案所作出的参考是出于说明性目的,且不意欲限制本发明或权利要求书的范围。

术语“计算装置”在本文中一般地用以指代以下各者中的任一者或全部:服务器、个人计算机、移动装置、蜂窝式电话、个人数据助理(PDA)、掌上型计算机、无线电子邮件接收器(例如,装置)、具备多媒体互联网功能的蜂窝式电话(例如,Blackberry)、全球定位系统(GPS)接收器、无线游戏控制器、个人计算机以及包含可编程处理器的类似个人电子装置。虽然各个方面特别可用于例如蜂窝式电话的移动装置(其具有有限的处理能力)中,但所述方面通常可用于执行以动态和/或脚本设计语言撰写的脚本和应用程序的任何计算装置中。

术语“动态语言”和“脚本设计语言”在本申请案中被一般地且可互换地使用且可指代任何动态语言、脚本设计语言,或指代用以撰写在运行时间解译和/或编译的程序(在本文中作为“脚本”)的任何解译语言。这些术语也可指代在受管理运行时间上运行且经动态编译的任何语言。因此,为了达到本申请案的目的,术语“动态语言”和“脚本设计语言”应不限于根据源代码或字节码解译的语言,或不限于连同传统上被编译成本机机器码的程序一起执行的语言。本申请案的范围内的动态语言和脚本设计语言的实例包含(例如)JavaScript、Perl、Python和Ruby,以及Java和可能在未来开发的其它语言。

本文所揭示的各个方面解决了归因于需要在执行时剖析、分析和执行动态脚本设计语言而困扰动态脚本设计语言的性能问题。各个方面通过利用在大多数应用程序中使用和执行动态语言的方式来解决性能和电力问题。明确地说,各个方面提供性能增强,这是因为以动态语言撰写的脚本可含有不在所有情况下执行的大量代码。

在静态计算机程序设计语言中,离线编译程序剖析整个程序且产生中间表示(IR)以表示程序结构。此IR通常携载额外信息,例如关于抽象语法树的注释,其在代码产生时间用以分析程序以确定程序的待执行的部分以及在此激活中将不执行的部分(即,因为在当前实施方案或激活情形中在从程序开始到结束的任何路径上不可到达而决不会执行的代码)。为了便于参考,本文中将所有类型的这些注释称作元数据。

在例如JavaScript等动态语言中,在运行时间发生剖析和编译,刚好在程序执行之前发生。剖析是分析文本以相对于给定的形式文法确定文本的文法结构的过程,且在程序解译中,剖析包含读入源脚本且基于程序语言的语言语义学将源脚本转换成内部表示。对于大多数动态语言和/或脚本设计语言,剖析产生程序的被馈送到解译程序中的字节码表示。解译程序执行字节码。在一些实施方案中,解译程序也可调用即时编译程序以产生用于代码的选定部分的机器码(例如函数)。因此,剖析和编译处理时间变成总程序执行时间的一部分。

根据日期为2009年12月的微软研究技术报告MSR-TR-2009-173“JSMeter:Characterizing Real-World Behavior of JavaScript Programs”(http://research.microsoft.com/apps/pubs/default.aspx?id=15687),现今,在计算装置中实施的高达70%的代码将不在每个实施方案中执行。这是归因于许多因素,所述因素包含:数据相依执行(即,代码中的某些路径仅在某些输入的条件下执行);错误处置代码(即,仅在发生例外事件时才执行的代码);以及经设计成基于特定操作环境或实施方案而选择的多重算法。因此,虽然针对计算装置撰写的程序常常包含用于解决多种用途或实施方案情形的元素,但实际上执行的代码通常限于特定实施方案或调用操作。

在动态语言中,剖析和字节码产生是作为执行处理的一部分而执行。因此,在动态语言中,专用于典型脚本(即,常用于计算装置的正常操作中的程序)的剖析和字节码产生的高达70%的处理时间被可能不执行的代码消耗。下文所论述的各个方面通过避免对脚本的未使用部分(即,代码的在当前实施方案或调用情形中将不执行的那些部分)的剖析和编译而为使用动态脚本设计语言的应用程序提供性能和电力节省益处。

各个方面通过将剖析过程分割成两个阶段来修改动态语言脚本的执行。在第一阶段中,在运行时间执行之前,预先剖析程序执行使用简化文法来剖析源代码的算法。在第二阶段中,在执行时,完全剖析程序执行使用语言的形式文法来完全剖析源代码以使得可执行源代码的算法。

更明确地说,在第一阶段中,预先剖析程序使用简单文法以从脚本中抽取代码的主要特征,从而产生描述存在于脚本的语言中的高级结构的脚本元数据。脚本元数据可包含函数、对象方法、最高级调用图以及各种其它高级结构细节。由预先剖析程序产生的脚本元数据然后可由完全剖析程序使用以识别代码的必须以完整语言语法和语义学完全剖析的部分。此两阶段过程在本文中可被称作动态元数据抽取。

动态元数据抽取使在运行时间进行完全剖析所花费的处理时间减到最少。动态元数据抽取也消除传统上花费在编译将不执行的代码区段上的浪费的处理时间和能量。这是因为传统编译程序/解译程序通常需要完全剖析所有代码——包含归因于数据相依执行、错误处置代码、多重算法以及其它低效率而决不会执行的代码。

各个方面可实施在实际上以任何动态语言和/或脚本设计语言撰写的脚本上。为了开发用于特定语言的预先剖析程序,开发者可识别那个语言的重要结构性质且使用那些性质来定义在程序脚本内仅识别那些重要结构性质和片段的文法。预先剖析程序可使用此文法以仅对程序的子集进行完全剖析。所定义的文法和所识别的结构性质可用以识别将不执行的脚本元素。因此,实施各个方面不需要对语言的改变或对完全剖析文法的改变。

虽然程序设计语言和完全剖析文法不需要修改,但下文所论述的方面可包含对脚本的运行时间处理的改变。可进行运行时间处理的这些改变,使得允许系统完全利用在预先剖析操作中产生的脚本元数据。换句话说,可修改在执行脚本之前执行的完全剖析操作以充分利用通过预先剖析操作产生的元数据。举例来说,在一个方面中,完全剖析操作可使用在元数据中识别的类别边界信息来有效率地抽取代码的简洁部分以用于进行完全文法剖析操作。

图1A说明用于利用动态元数据抽取执行脚本的第一方面方法1。在框12中,将可执行脚本装载到计算装置处理器中或由计算装置处理器存取可执行脚本,在框14中,计算装置处理器执行预先剖析。在预先剖析框14期间,使用简化文法来识别程序的高级结构细节且抽取识别各种细节的关键词。可将脚本分解成以元数据形式存储的关键词。然后可以逻辑方式将元数据分组在一起以形成元数据框16。元数据可包含(例如)类别名称、函数名称、类别或函数的位置、类别或函数的长度,以及在程序内识别语言的边界的其它结构信息。处理器可将元数据框保存在元数据文件中,如框16所示。

在框18中,处理器通过识别程序的主要部分的元数据识别元数据的入口点。在框18中,处理器将入口点制定到脚本中以用于在程序被调用时执行程序。在运行时间,将调用脚本中的一个或一个以上对象或函数。这些调用可在脚本外部(例如在HTML中嵌有JavaScript的网页中),或在脚本内部(例如脚本中调用另一个函数的一个函数)。制定入口点的框18中的过程允许进行在元数据中识别这些点且使用元数据信息以调用完全剖析、编译、执行等等的运行时间操作。在框30中,可完全剖析脚本的由元数据识别以供执行的部分或区段,其中将动态脚本设计语言的完全文法和语法应用于脚本。在框21中,可执行脚本。在执行代码的同时,处理器可使用元数据框来识别很可能供执行过程使用的函数、方法和变量,且在框24中开始产生被调用者元数据。在一个方面中,在框21中通过解译执行脚本。在下文参看图1B所论述的另一个方面中,执行脚本包含根据所产生的字节码产生可执行码以及执行所产生的可执行码。

图1B说明用于利用动态元数据抽取执行脚本的第二方面方法100。在框12中,将可执行脚本装载到计算装置处理器中或由计算装置处理器存取可执行脚本,在框14中,计算装置处理器执行预先剖析。在预先剖析框14期间,使用简化文法来识别程序的高级结构细节且抽取识别各种细节的关键词。可将脚本分解成以元数据形式存储的关键词。然后可以逻辑方式将元数据分组在一起以形成元数据框16。元数据可包含(例如)类别名称、函数名称、类别或函数的位置、类别或函数的长度,以及在程序内识别语言的边界的其它结构信息。处理器可将元数据框保存在元数据文件中,如框16所示。在一个方面中,在稍后执行期间,仅元数据文件中所识别的类别或函数定义可能需要完全剖析。仅在建立所识别的类别类型的对象时,或如果调用所识别的函数,那么才可发生此完全剖析。

多种不同方法可用于实现预先剖析操作和产生脚本元数据。在实例方法中,可将程序或脚本的结构考虑为由包含方法和变量的类别形成。在此构造中,最高级函数和变量可属于被识别为入口点的隐含式根类别。在此实例方法中,预先剖析框14可识别三种类型的结构的开始和结束位置:(i)类别、(ii)函数,以及(iii)变量。可将此信息存储在与图2所示的数据结构类似的数据结构中。在一个方面中,框14中的预先剖析程序的作用最终是使元数据表初始化。在这种情况下,预先剖析程序可在元数据表200中找到类别的边界,且对于每一类别,在元数据表202中找到用于那个类别的函数和变量定义的边界。在图2所说明的实例中,将元数据表实施为散列表以允许基于名称快速检索信息。

返回到图1B,在框18中,处理器通过识别程序的主要部分的元数据识别元数据的入口点。在框18中,处理器将入口点制定到脚本中以用于在程序被调用时执行程序。在运行时间,将调用脚本中的一个或一个以上对象或函数。这些调用可在脚本外部(例如在HTML中嵌有JavaScript的网页中),或在脚本内部(例如脚本中调用另一个函数的一个函数)。制定入口点的框18中的过程允许进行在元数据中识别这些点且使用元数据信息以调用完全剖析、编译、执行等等的运行时间操作。

在执行期间,可同时使用和更新在框14中由预先剖析程序搜集的元数据。通过使用在框18(即,入口点)中获得的运行时间信息以及在预先剖析框14中产生的脚本元数据,处理器可有效率地确定脚本的需要执行的部分。此情形在图1B中也予以说明。

在框20中,处理器进入回圈中,在回圈中,在所识别的元数据入口点处开始,处理器确定是否已经产生代码且代码是否准备好用于执行。如果已经存在所产生的代码(即,确定框20=“是”),那么处理器开始执行所产生的代码,如框22所示。在执行代码的同时,处理器可使用元数据框来识别很可能供执行过程使用的函数、方法和变量,且开始产生被调用者元数据,如框24所示。被调用者元数据识别必须被完全剖析以供未来执行的特征。处理器然后可返回到框20以确定被调用者元数据是否指向已经产生的代码,且重复上文所描述的过程。

在一个方面中,框20所示的确定可包含确认所有先前已编译的代码仍然有效的检验。在另一个方面中,框20可包含确认输入参数仍然相同的检验。在另一个方面中,框20可包含证实系统的代码和数据完整性以便避免执行错误的其它检查。

如果由元数据指向的脚本或代码不可执行(即,确定框20=“否”),那么处理器可在确定框26中确定是否已剖析脚本。此确定可使用脚本元数据中的信息。如果先前已剖析脚本(即,确定框26=“是”),那么处理器可在框28中进行代码产生(即,产生字节码)或由即时编译程序进行的编译以产生可执行元数据。然后可在框22中执行可执行码,如上文所描述。

如果处理器根据元数据确定尚未剖析脚本(即,确定框26=“否”),那么可在框30中完全剖析脚本的由元数据识别以供执行的部分或区段,其中将动态脚本设计语言的完全文法和语法应用于脚本。如上文所提到,用于进行完全剖析的过程可利用在预先剖析过程框14中产生的脚本元数据。一旦脚本已通过框30中的完全剖析,处理器就可在框28中进行代码产生(即,产生字节码)或由即时编译程序进行的编译以产生可执行码。然后在元数据表中链接可执行码(或经更新以指向可执行码的元数据)且在框22中执行可执行码,如上文所描述。

在一个方面中,可同时使用多个线程和/或过程,以便开拓多核心处理器和/或多处理器系统的完全能力。举例来说,在框26中,如果确定尚未剖析脚本,那么可建立单独的过程以对代码区段执行完全剖析。这允许系统继续处理剩余的脚本,而不必等待完全剖析完成。归因于完全剖析程序的串行性质,多个过程的此使用先前是不可能的。另外,为完全剖析脚本所需要的复杂语法需要存取全局资源,从而使多过程执行昂贵且困难。然而,通过使用简化语法来预先剖析脚本,现在可更容易地使代码并行化,且因此,同时执行代码。

为了扼要重述方法100,在执行阶段期间,当第一次用具体例子说明某一类别类型的对象(即,确定框20和26=“否”)时,完全剖析程序在框30中使用完全文法分析变量说明且可建立含有变量信息以及函数存根的类别类型对象。稍后在执行期间,当调用用具体例子说明的对象的方法时,完全剖析程序分析这些函数的主体(在类别元数据散列表200中捕捉)且在框28中产生用于那个函数的可执行码(解译、即时编译等等)。在每一框处,可将所产生的类型和可执行信息链接回到元数据信息以供稍后再用。在已经处理的类别类型的后续对象具体例子说明(即,确定框26=“是”)中,可完全地绕过剖析且可使用类型对象来产生可执行码。类似地,在对已经处理的函数的后续调用(即,确定框20=“是”)中,可绕过剖析且在框22中执行所存储的可执行信息。

在例如JavaScript的一些语言中,函数可表示类别和其构造程序。在这些情况下,在执行期间,可通过添加类别和其函数以及变量信息来更新元数据信息。构造此数据需要完全剖析程序源。然而,在各个方面中,可仅在代码实际上执行时实现完全剖析,且因此,除了在每种情况下进行完全剖析的当前处理方式的能量或性能开销之外,几乎不存在由所述方面增加的能量或性能开销。

为了加速元数据表查找,可完全限定程序散列表200中的名称。换句话说,如果语言支持嵌套类别或名称空间,那么外部类别/名称空间名称将添加到内部类别名称作为前缀。

取决于预先剖析程序的简化文法,可能存在不能由预先剖析文法完全辨识的情况。这些情况可添加到类别元数据散列表作为“变量”或新的“未知”范畴。在完全剖析期间,可使用相应地更新的完全语言文法和元数据信息分析此信息。

预想可建立在上文参看图1A、1B和2所描述的方面上的若干替代方面。在图3所说明的一种方面方法300中,可将在预先剖析过程框14中产生的脚本元数据存储在高速缓冲存储器54中,使得可在同一个脚本程序的后续执行中避免剖析。在此替代方法300中,当处理器存取脚本(例如,在HTTP消息中接收的HTML网页的一部分)时,处理器可在确定框52中确定先前是否已在存储器中高速缓冲存储脚本。为了确定先前是否已高速缓冲存储脚本,处理器可存取高速缓冲存储器54以确定脚本元数据先前是否已存储在存储器中。如果先前尚未高速缓冲存储脚本(即,确定框52=“否”),那么处理器可在框14中执行预先剖析过程以产生脚本元数据16,如上文参看图1B所描述。作为框14的一部分,将所产生的脚本元数据16存储在高速缓冲存储器54中。如果处理器确定已经剖析和高速缓冲存储脚本(即,确定框52=“是”),那么处理器可在框18中使用经高速缓冲存储的脚本元数据16来制定入口点元数据。

经高速缓冲存储的脚本元数据54可用于通过处理器查询高速缓冲存储器54以获得元数据或接收字节码或可执行码存储在高速缓冲存储器中的指示而在确定框20中确定是否已将脚本转换成可执行码(即,仍可执行的代码),以及在确定框26中确定先前是否已剖析脚本。

脚本元数据高速缓冲存储器54也可存储框30中的完全剖析操作的结果以及在框28中产生的可执行码。因此,使用元数据高速缓冲存储器54可使处理器能够保留完全剖析结果或可执行码,使得当在未来遇到特定脚本时,可使用经高速缓冲存储的可执行码直接执行所述特定脚本,而不执行正常的即时分析和编译。在三个替代方面中,元数据高速缓冲存储器54可:仅存储由预先剖析框14产生的元数据;存储包含元数据和在框30中产生的完全剖析输出的字节码;或存储在框28中产生的可执行码,可执行码将包含元数据、完全剖析输出以及编译输出。高速缓冲存储二进制元数据比高速缓冲存储脚本文本自身更有效率。因此,上文所提到的过程更好地使用高速缓冲存储器资源。

在其它方面中,可将脚本元数据高速缓冲存储器54维持在客户端机器上以供一个或一个以上应用程序再用、维持在可由若干客户端计算机存取的代理服务器上,或维持在可由所有客户端计算机存取的主服务器上。

维持元数据高速缓冲存储器54也准许另一个方面,其中可由离线或空闲处理器中的最佳低优先权过程实现完全剖析操作30,如框56所示。由最佳低优先权过程进行的剖析可使计算装置能够通过在运行时间之前执行框30的一些或所有完全剖析过程来完全使用处理器能力,其中所产生的字节码存储在高速缓冲存储器54中。在另一个方面中,多个线程和/或过程可在后台中进行完全剖析步骤,而主线程和/或过程在前台中产生当前可执行码,或执行先前剖析和编译的代码。

在另一个方面中,对脚本的此先前处理可包含在框56中编译线程,所述线程也存储在高速缓冲存储器54中以供在运行时间使用以使框28中所需要的代码产生或编译的量减到最少。在此方面中,低优先权离线线程可通过程序调用图进行处理且通过剖析文本并产生用于最可能在不久的未来执行的程序部分的可执行码来预先编译代码。此过程可在后台中进行,例如,在有限程序范围上进行。如此进行可通过使必须在运行时间实现的编译量减到最少来加速脚本执行。

在另一个方面中,图4所说明的方法400可包含专用于剖析操作的单独最佳线程和/或过程。方法400包含与上文参看图1所描述的操作相同的操作,其中添加了框60,框60包含与框28中的代码产生相关联的最佳剖析或线程产生过程。框60中的这些最佳剖析线程/过程可预取和分析可能需要在未来执行的脚本。框60中的最佳线程/过程可使用确定性或推测性算法用于预取操作,由此,使用关于当前执行的信息来预期未来执行路径且预测很可能在未来需要的代码区段。这些算法可在运行时间与主过程同时执行。这些算法可用以基于从当前执行所搜集的信息而确定未来执行路径。这些算法可以使执行速度和电力效率达到最大的方式进行实施。

在一个方面中,可在框60中基于试探法而使用推测性算法,其中分析先前执行和/或先前执行周期以预测未来执行路径。此推测性算法可使用“满足-预测”逻辑来产生置信区间,置信区间可用以识别很可能在未来执行中需要的脚本。在另一个方面中,可在框60中使用确定性算法以基于当前执行的执行状态和执行要求而预取脚本。举例来说,如果当前执行正执行函数X,且元数据将函数X识别为需要调用函数Y和Z,那么最佳线程可预取函数Y和Z且剖析函数Y和Z,而主线程执行函数X。在另一个方面中,可在框60中使用推测性算法与确定性算法的组合。

各个方面提供用于预先剖析过程中的简单元数据文法,所述简单元数据文法可能更能够并行地执行,例如在并行处理器计算装置上执行。由于预先剖析操作仅识别脚本程序的主要结构组分,故可将脚本的处理分配给一个以上处理器,且并行地执行脚本的处理。另外,由于并行化的复杂性和困难取决于语言的文法的复杂性,故使用简化语法会极大地简化代码的并行化。因此,所述方面可特别好地适合于在多核心处理器和/或多处理器计算机体系结构上使用。另外,预先剖析过程的输出可得到可使多核心处理器能够并行地执行程序的部分的元数据。通过在运行时间之前在预先剖析中识别主要结构元素,可实现可执行码的产生,使得允许单独地产生可并行地执行的那些部分且将那些部分分配给并行处理器。

与用于执行动态语言的当前方法相比,各个方面提供若干技术优点。这些优点包含:使用较简单文法较快速地剖析整个脚本;总程序执行所需要的处理减少且因此得到较好的性能和较少的能量消耗;剖析文法较易于最佳化和并行化;以及使用调用图剖析程序线程使剖析和执行过程能够并行地运行。

所述方面可实施在多种计算装置中的任一者上,计算装置是例如移动计算装置,例如多功能蜂窝式电话和个人计算机。所述方面可在具有相对有限处理能力的计算装置中特别有帮助,所述计算装置可受益于通过预先剖析脚本实现的性能节省。

图5中说明此计算装置500的示范性非限制性方面的实例组件和模块。计算装置500可包含电子组件的电路板580,一些或所有电子组件可集成到芯片上系统中,芯片上系统包含耦合到存储器502的控制处理器501。控制处理器501可进一步耦合到也耦合在一起的数字信号处理器511和/或模拟信号处理器521。在一些实施例中,控制处理器501和数字信号处理器511可为同一个组件或可集成到同一个处理器芯片中。显示器控制器533和触控屏幕控制器543可耦合到控制处理器501且耦合到在计算装置500内或连接到计算装置500的显示器或触控屏幕显示器503。

控制处理器501也可耦合到可卸除式存储器522(例如,在移动计算装置的情况下是SD存储器或SIM卡)和/或耦合到外部存储器504(例如磁盘驱动器、CD驱动器以及DVD驱动器中的一者或一者以上)。控制处理器501也可耦合到通用串行总线(USB)控制器512,USB控制器512耦合到USB端口514。而且,电源570可通过USB控制器512或通过不同电连接件耦合到电路板580以将电力(例如,DC电力)提供到各种电子组件。

控制处理器501也可耦合到视频编码器534,例如,逐行倒相制式(PAL)编码器、顺序传送彩色与存储(SECAM)编码器,或国家电视系统委员会(NTSC)编码器。另外,视频编码器534可耦合到视频放大器536,视频放大器536可耦合到视频编码器534和显示器或触控屏幕显示器503。而且,视频端口538可耦合到视频放大器536以使能够将计算装置500连接到外部监视器、电视或其它显示器(未图示)。

在一些实施例(特别是移动计算装置)中,控制处理器501可例如通过模拟信号处理器521耦合到射频(RF)收发器505。RF收发器505可耦合到RF天线504以用于发射和接收RF信号。RF收发器505可经配置以发射和接收一个或一个以上不同无线通信协议的通信信号,所述无线通信协议包含例如蜂窝式电话(例如,G-3、UMTS、CDMA等等)、WiFi、WiMax以及蓝牙。

控制处理器501可进一步耦合到网卡506,网卡506可耦合到网络连接器516和/或RF收发器505且经配置以通过外部网络(例如,局域网、互联网、企业内部互联网、WiFi网络、蓝牙网络、个人局域网络(PAN)等等)实现通信。网卡506可呈单独芯片或卡的形式,或可实施为控制处理器501或RF收发器505(或其两者)的一部分作为全方位通信芯片。

若干模拟装置可通过模拟信号处理器521耦合到控制处理器501,例如图5所示的小键盘508。在其它实施方案中,小键盘或键盘可包含其自身的处理器,使得与控制处理器501的接口可通过直接连接(未图示)、通过网络连接(例如,通过网卡)或通过USB端口514。

在一些实施方案中,数码相机548可耦合到控制处理器501。在示范性方面中,数码相机548可为电荷耦合装置(CCD)相机或互补金属氧化物半导体(CMOS)相机。数码相机548可建置到计算装置500中或通过外部缆线耦合到所述装置。

在一些实施方案中,音频CODEC 550(例如,立体声CODEC)可耦合到模拟信号处理器521且经配置以通过音频放大器552将声音信号发送到一个或一个以上扬声器554。音频CODEC 550也可耦合到麦克风放大器556,麦克风放大器556可耦合到麦克风558(例如,通过麦克风插孔)。头戴式受话器插孔559也可耦合到音频CODEC 550以用于将音频输出到头戴式受话器。

在一些实施方案中,计算装置500可包含单独的RF接收器电路560,RF接收器电路560可耦合到天线562以用于接收广播无线通信信号。接收器电路560可经配置以接收广播电视信号(例如,FLO TV广播),且将所接收信号提供到DSP 511以供处理。在一些实施方案中,接收器电路560可经配置以接收FM无线电信号,在此情况下,可将所接收信号传递到音频CODEC 550以供处理。

在一个方面中,用于实现上文所描述的方法操作中的一者或一者以上的处理器可执行指令可存储在内部存储器502、可卸除式存储器522和/或非易失性存储器504中(例如,如存储在硬盘驱动器、CD驱动器或可通过网络存取的其它存储器上)。这些处理器可执行指令可由控制处理器501执行,以便执行本文所描述的方法。

图6中说明移动计算装置的实例,且图7中说明笔记本式计算机的实例。典型移动计算装置600将共同地具有图6所说明的组件。举例来说,移动计算装置600可包含耦合到内部存储器602和触控表面输入装置/显示器603的处理器601。触控屏幕显示器603是例如电阻性感应触控屏幕、电容性感应触控屏幕、红外线感应触控屏幕、声学/压电感应触控屏幕,等等。各个方面不限于任何特定类型的触控屏幕显示器603或触控板技术。另外,计算装置600可具有连接到无线数据链路的用于发送和接收电磁辐射的天线604,和/或耦合到处理器601的蜂窝式电话收发器605。计算装置600也可包含用于接收用户输入的物理按钮608。

虽然各个方面可提供针对移动计算装置的显著性能增强,但其它形式的计算装置(包含个人计算机和膝上型计算机)也可受益于动态语言脚本的预先剖析。这些计算装置通常包含图7所说明的组件,图7展示典型个人膝上型计算机700。此个人计算机700通常包含耦合到易失性存储器702和例如磁盘驱动器703的大容量非易失性存储器的处理器701。计算机700也可包含耦合到处理器701的紧密光碟(CD)和/或DVD驱动器704。计算机装置700也可包含耦合到处理器601的若干连接器端口,以用于建立数据连接或收纳外部存储器装置,例如用于将处理器601耦合到网络的网络连接电路705。计算机700可进一步耦合到键盘708、例如鼠标707的指示装置,以及显示器709,这在计算机技术中为我们所熟知。

处理器601、701可为任何可编程微处理器、微计算机或可由软件指令(应用程序)配置以执行多种功能的多处理器芯片,所述功能包含本文所描述的各个方面的功能。在一些移动装置中,可提供多个处理器601、701,例如,专用于无线通信功能的一个处理器和专用于运行其它应用程序的一个处理器。通常,在存取软件应用程序和将软件应用程序装载到处理器601、701中之前,可将软件应用程序存储在内部存储器602、702中。在一些移动装置中,处理器601、701可包含足以存储应用程序软件指令的内部存储器。在一些移动装置中,安全存储器可处于耦合到处理器601、701的单独存储器芯片中。内部存储器602、702可为易失性或非易失性存储器,例如快闪存储器,或易失性与非易失性存储器两者的混合物。为了实现此描述的目的,对存储器的一般参考指代可由处理器601、701存取的所有存储器,包含内部存储器602、702、插入到移动装置中的可卸除式存储器,以及在处理器601、701自身内的存储器。

前述方法描述和过程流程图仅是被提供作为说明性实例且不意欲要求或暗示必须以所呈现的次序执行各个方面的框。所属领域的一般技术人员将了解,可以任何次序来执行前述方面中的步骤次序。例如“此后”、“然后”、“接下来”等等的词语不意欲限制框的次序;这些词语仅用以指导读者理解方法的描述。另外,例如使用数词“一”或“所述”以单数形式对所主张元件的任何参考不应被解释为将元件限于单数形式。

结合本文所揭示的方面描述的各种说明性逻辑块、模块、电路和算法步骤可实施为电子硬件、计算机软件,或电子硬件与计算机软件两者的组合。为了清楚说明硬件与软件的此互换性,上文已大体上在功能性方面描述了各种说明性组件、块、模块、电路及步骤。此类功能性是实施为硬件还是软件取决于特定应用及施加于整个系统的设计约束。所属领域的技术人员可针对每一特定应用以不同方式来实施所描述的功能性,但此类实施方案决定不应被解释为会导致脱离本发明的范围。

用以实施结合本文所揭示的方面描述的各种说明性逻辑、逻辑块、模块和电路的硬件可通过以下各者来实施或执行:通用处理器、数字信号处理器(DSP)、特殊应用集成电路(ASIC)、场可编程门阵列(FPGA)或其它可编程逻辑装置、离散门或晶体管逻辑、离散硬件组件,或其经设计以执行本文所描述的功能的任何组合。通用处理器可以是微处理器,但在替代方案中,处理器可以是任何常规处理器、控制器、微控制器或状态机。处理器还可实施为计算装置的组合,例如,DSP与微处理器的组合、多个微处理器的组合、一个或一个以上微处理器与DSP核心的联合,或任何其它此类配置。或者,一些步骤或方法可由为给定功能所特有的电路执行。

在一个或一个以上示范性方面中,所描述功能可以硬件、软件、固件或其任何组合来实施。如果以软件来实施,那么可将功能作为一个或一个以上指令或代码存储在非暂时性计算机可读或处理器可读存储媒体上或通过非暂时性计算机可读或处理器可读存储媒体进行传输。本文所揭示的方法或算法的步骤可体现于处理器可执行软件模块中,处理器可执行软件模块可常驻于非暂时性处理器可读或计算机可读存储媒体上。非暂时性处理器可读和计算机可读媒体可为可由计算机或计算装置的处理器存取的任何可用存储媒体。作为实例而非限制,此类非暂时性处理器可读或计算机可读媒体可包括RAM、ROM、EEPROM、CD-ROM或其它光盘存储装置、磁盘存储装置或其它磁性存储装置,或可用以携载或存储呈指令或数据结构形式的所要程序代码且可通过计算机或计算装置的处理器存取的任何其它媒体。如本文所使用,磁盘及光盘包含紧密光盘(CD)、激光光盘、光学光盘、数字多功能光盘(DVD)、软磁盘及蓝光光盘,其中磁盘通常磁性地复制数据,而光盘使用激光光学地复制数据。以上各者的组合也应包含在非暂时性计算机可读媒体的范围内。另外,方法或算法的操作可作为代码和/或指令的一个或任何组合或集合常驻于可并入到计算机程序产品中的非暂时性处理器可读媒体和/或非暂时性计算机可读媒体上。

提供所揭示方面的前述描述以使所属领域的任何技术人员能够制作或使用本发明。所属领域的技术人员将容易明白对这些方面的各种修改,且本文所定义的一般原理可在不脱离本发明的精神或范围的情况下应用于其它方面。因此,本发明不意欲限于本文所示的方面,而应符合与以下权利要求书以及本文所揭示的原理和新颖特征一致的最宽范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号