TWI525543B - 混合式動態碼編譯裝置、方法及其服務系統 - Google Patents
混合式動態碼編譯裝置、方法及其服務系統 Download PDFInfo
- Publication number
- TWI525543B TWI525543B TW102142236A TW102142236A TWI525543B TW I525543 B TWI525543 B TW I525543B TW 102142236 A TW102142236 A TW 102142236A TW 102142236 A TW102142236 A TW 102142236A TW I525543 B TWI525543 B TW I525543B
- Authority
- TW
- Taiwan
- Prior art keywords
- dynamic code
- compilable
- code
- block
- blocks
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/37—Compiler construction; Parser generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
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)
- Devices For Executing Special Programs (AREA)
Description
本發明提供一種動態碼編譯裝置,且特別是一種混合式動態碼編譯裝置、方法及其服務系統。
目前網路與電子技術發展快速,以致於人們可以輕易地使用終端裝置瀏覽網頁,以獲得需要的服務與資訊。網頁的內容可以透過文件標示語言(Text Markup Language)來編輯,且文件標示語言更可以是超文件標示語言(Hyper Text Markup Language,HTML),以呈現結構化的訊息(例如,標題、段落和列表等)。
然而,文件標示語言一般適用於編輯靜態或非互動的網頁,而不易或無法編輯動態或互動的網頁,因此,便有動態直譯式程式語言被提出,例如JavaScript。JavaScript是一種動態型別、弱型別、基於原型的語言,且內建支援型別。JavaScript可以直接嵌入HTML頁面,亦可以寫成單獨的檔案(其副檔名為「js」)以利於結構和行為的分離。JavaScript可以用來將動態文字嵌入於HTML頁面、對瀏覽器事件作出響應、讀寫HTML網頁中的元素、在資料被送出到伺服器之前驗證資料、檢測訪客的瀏覽器訊息或控制小型文字檔案(cookies)。
目前,Mozilla公司提出了一種JavaScript的最佳化方案,其係透過定義好的「ASM.js」檔案的內容來比對收到的JavaScript
碼,以將收到的JavaScript碼透過底層虛擬機器(Low Level Virtual Machine,LLVM)進行轉碼為C/C++語言碼,以利於終端裝置(例如,iOS、Windows或Android系統的電子裝置)執行所述C/C++語言碼,從而顯示動態或互動的網頁。然而,若收到的JavaScript碼不存在於「ASM.js」檔案中的碼庫(codebase),則所接收到的JavaScript碼將無法被轉碼,因此,Mozilla公司的方案仍缺乏彈性。
除此之外,Google公司提供了一種JavaScript引擎,稱為V8引擎。V8引擎可以在JavaScript執行之前,將JavaScript編譯成了機器碼,而非位元組碼或是進行直譯,以此提升效能,但仍不能避免載入的時間消耗。另外,JavaScript碼本身無法控制記憶體的釋放,而可能導致記憶體漏洩(memory leak)。因此,V8引擎被設計成具有垃圾回收(Garbage Collection,GC)處理的功能。
垃圾回收處理是一種自動的記憶體管理機制,當一個電腦上的動態記憶體上的變數、物件或字串等資料不再被需要時,就應該予以釋放,以讓出記憶體空間。垃圾回收處理策略可以分為全域停止型(Stop-the-World,STW)、同步型(concurrent)與增進型(incremental)。全域停止型垃圾回收處理策略係在系統認為需要進行垃圾回收處理時,將目前執行的程式停止,並進行垃圾回收處理。同步型垃圾回收處理策略係在程式執行時同時進行垃圾回收處理,而沒有停止程式的問題,但相對地,其僅能進行簡單的垃圾回收處理,故整體效率不佳。增進型的垃圾回收處理策略採用了上述全域停止型與同步型的垃圾回收處理策略,並做出了取捨,其在平時類似同步型垃圾回收處理策略,僅簡單的垃圾回收處理,但在系統認為需要時,停止程式執行,並以全域停止型垃圾回收處理策略進行全整之垃圾回收處理。
由上述可知,全域停止型與增進型的垃圾回收處理策略不受
外部控制,而同步型的垃圾回收處理策略則導致整體效率不佳。目前V8引擎雖採用了增進型的垃圾回收處理策略降低停止程式執行的衝擊,但其在執行全域停止型的垃圾回收時,仍不受外部控制,故仍會造成程式於不可預期的時點停止執行,並造成使用者經驗不佳。
本發明實施例提供一種混合式動態碼編譯裝置,所述混合式動態碼編譯裝置包括語法解析器(parser)、靜態碼(native code)產生器與動態碼改寫器(rewriter),其中所述語法解析器耦接所述靜態碼產生器與所述動態碼改寫器。語法解析器用以接收第一動態碼,對所述第一動態碼進行語法解析,以將所述第一動態碼分為多個可編譯的區塊與多個不可編譯的區塊。靜態碼產生器將所述多個可編譯的區塊轉碼為靜態碼。動態碼改寫器用以對所述多個不可編譯的區塊進行改寫,以產生第二動態碼,其中第二動態碼具有所述第一動態碼與所述靜態碼之間進行溝通的多個功能傳呼(function call)。
本發明實施例另提供一種混合式動態碼編譯裝置方法,所述混合式動態碼編譯裝置方法具有以下步驟。步驟A:接收第一動態碼,對所述第一動態碼進行語法解析,以將所述第一動態碼分為多個可編譯的區塊與多個不可編譯的區塊。步驟B:將所述多個可編譯的區塊轉碼為靜態碼。步驟C:對所述多個不可編譯的區塊進行改寫,以產生第二動態碼,其中第二動態碼具有所述第一動態碼與所述靜態碼之間進行溝通的多個功能傳呼。
本發明實施例還提供一種服務系統,所述服務系統包括計算機裝置、伺服器與終端裝置,其中所述伺服器連接於所述計算機裝置,且所述終端裝置連接於所述伺服器。其中所述計算機裝置、伺服器與所述終端裝置的其中一者或其組合用以執行上述混
合式動態碼編譯裝置方法。
綜合以上所述,本發明實施例所提供的混合式動態碼編譯裝置、方法及其服務系統有效地提升終端裝置處理動態碼的效率。
為使能更進一步瞭解本創作之特徵及技術內容,請參閱以下有關本創作之詳細說明與附圖,但是此等說明與所附圖式僅係用來說明本創作,而非對本創作的權利範圍作任何的限制。
1‧‧‧混合式動態碼編譯裝置
11‧‧‧語法解析器
12‧‧‧輔助分析器
13‧‧‧優化器
14‧‧‧靜態碼產生器
15‧‧‧動態碼改寫器
2、2’、2”‧‧‧服務系統
20‧‧‧網頁開發者
21、21’‧‧‧計算機裝置
22、22’‧‧‧伺服器
23‧‧‧網際網路
24a~24e、24a’~24e’‧‧‧終端裝置
S31~S36、S41~S43‧‧‧步驟流程
圖1是本發明實施例之混合式動態碼編譯裝置的方塊圖。
圖2A是本發明實施例之服務系統的示意圖。
圖2B是本發明另一實施例之服務系統的示意圖。
圖2C是本發明另一實施例之服務系統的示意圖。
圖3是本發明實施例之混合式動態碼編譯方法的流程圖。
圖4是本發明實施例之混合式動態碼編譯方法中垃圾回收處理的流程圖。
本發明實施例提供一種混合式動態碼編譯裝置及方法,所述動態碼編譯裝置及方法可以透過硬體或軟體的方式來實現。所述動態碼編譯裝置及方法接收動態碼,例如JavaScript碼,並且使用語法解析動態碼,以將動態碼分為多個可編譯的區塊與多個不可編譯的區塊。接著,所述動態碼編譯裝置及方法將多個可編譯的區塊轉換為靜態碼,例如C/C++碼或是JavaScript之靜態客戶端(native client)應用程式介面(Application Programming Interface,API),並且將多個不可編譯的區塊進行改寫,以產生改寫後的動態碼,其中改寫後的動態碼保留了原始動態碼與靜態碼之間進行溝通的功能傳呼。
接著,終端裝置可以透過瀏覽器或其他的解碼設備(例如
iOS、Windows或Android系統的網頁瀏覽器)直接解析靜態碼,且改寫後的動態碼則可以透過終端裝置的動態碼引擎進行解析。由於改寫後的動態碼保留了原始動態碼與靜態碼之間進行溝通的功能傳呼,因此終端裝置在解析靜態碼與改寫後的動態碼之後,可以完整地執行原始的動態碼之內容,以呈現原始的動態碼對應之動態或互動的網頁。
另外,上述混合式動態碼編譯裝置及方法還可以解析動態碼,取得對應動態碼所使用之系統提供的應用程式介面之標註,以攔截垃圾回收處理的功能傳呼,並且解析所述標註以產生靜態碼與修改後的動態碼,以始終端裝置可以依據網頁開發者的設計來控制釋放記憶體。換言之,上述混合式動態碼編譯裝置及方法可以允許網頁開發者可以依據需求,透過上述標註加速伺服器的處理速度,或控制終端裝置之記憶體的釋放,以避免終端裝置有記憶體漏洩的情況。
除此之外,本發明實施例還提供一種使用上述混合式動態碼編譯裝置或方法的服務系統。上述混合式動態碼編譯裝置或方法可以實現於服務系統的計算機裝置、伺服器與終端裝置的其中一者或其組合,以將網頁開發者所撰寫動態碼進行語法解析,並將動態碼中可編譯的部分(多個可編譯的區塊)轉為靜態碼,以及將動態碼中不可編譯的部分(多個不可編譯的區塊)進行改寫。如此,終端裝置將可以使用靜態碼與改寫的動態碼來呈現原始動態碼所對應之動態或互動的網頁。換言之,終端裝置呈現動態或互動的網頁之處理速度與記憶體使用效率可有效地被提升。
請參照圖1,圖1是本發明實施例之混合式動態碼編譯裝置的方塊圖。混合式動態碼編譯裝置1包括語法解析器11、輔助分析器12、優化器13、靜態碼產生器14與動態碼改寫器15。語法解析器11連接輔助分析器12、優化器13與動態碼改寫器15,且優化器13連接靜態碼產生器14。
輔助分析器12用以接收文件標示語言,例如超文件標示語言,並且分析文件標示語言,以產生輔助資訊給語法解析器11,其中輔助資訊例如為動態碼與網頁介面之間的互動資訊。語法解析器11接收動態碼,例如JavaScript碼,透過輔助資訊的協助對動態碼進行解析,以區分出多個可編譯的區塊(亦即,動態碼中可編譯的部分)與多個不可編譯的區塊(亦即,動態碼中不可編譯的部分)。優化器13接收多個可編譯的區塊,並對所述多個可編譯的區塊進行優化。靜態碼產生器14接收被優化後的多個可編譯的區塊,並將優化後的多個可編譯的區塊轉換為靜態碼。
另外,動態碼改寫器15將多個不可編譯的區塊進行改寫,以產生改寫後的動態碼,其中改寫後的動態碼具有原始動態碼與與靜態碼之間進行溝通的多個功能傳呼。由於改寫後的動態碼保留了原始動態碼與靜態碼之間進行溝通的功能傳呼,因此終端裝置在解析靜態碼與改寫後的動態碼之後,可以完整地執行原始的動態碼之內容,以呈現原始的動態碼對應之動態或互動的網頁。
接著,進一步地說明語法解析器11如何將動態碼區分為多個可編譯的區塊與多個不可編譯的區塊之細節作法。雖然動態碼(如JavaScript碼)與靜態碼(C/C++碼)在特性有極大的差異,但在語法結構上卻非常類似,因此語法解析器11可以透過遍訪(traverse)抽象樹(Abstraction Tree,AST)將動態碼依據語言結構儲存(亦即整理動態碼的語法結構),以加速編譯流程,並據此將結構化碼(structured code)提取出來。另外,因為動態碼存在之物件或類別可能不會被明確地宣告,亦即動態碼的物件或類別可能為隱含的物件或類別,因此語法解析器11須將動態碼中的物件或類別資訊解析出來,才能夠將動態碼的物件或類別以利於靜態語言的對照。除此之外,除了傳統編譯技術的用途外,語法解析器11可以記錄曾出現過的變數,以作為型別推論(type inference)的基礎。由此可知,語法解析器11可將動態碼中結構化碼、物
件或類別資訊與變數資訊提取出來,以藉此建構多個區塊,並且所述多個區塊的部份可以成為可編譯的部份,而被轉碼為靜態碼。
更進一步地說,語法解析器11透過符號表檢視上述結構化碼、物件或類別資訊與變數資訊所形成的多個區塊是否為可編譯的區塊。符號表記錄有符號類型與其是否可編譯的關係,舉例來說,區域變數(local variable)被記錄為可編譯,全域變數(global variable)被記錄為不可編譯,內建變數(built-in variable)中的評估變數(eval)被記錄為不可編譯,而內建變數的其他類變數則視實際實現方式被記錄為不可編譯或可編譯。倘若區塊中有全域變數或內建變數中的評估變數,則判斷所述區塊不可編譯。相反地,若區塊僅有區域變數,則判斷所述區塊為可能可編譯的區塊。接著,語法解析器11將可能可編譯的區塊進行型別推論,倘若可能可編譯的區塊的型別無法被決定,則判定所述可能可編譯的區塊為不可編譯的區塊。倘若可能可編譯的區塊的型別可以被決定,則判斷可能可編譯的區塊為可編譯的區塊。
另外,本發明實施例的混合式動態碼編譯裝置1還允許讓網頁開發者進行垃圾回收處理,以依據網頁開發者的需求來控制終端裝置之記憶體的釋放,亦即提供了一個應用程式介面給網頁開發者,允許網頁開發者呼叫系統進行垃圾回收處理。因此,透過內建特定功能於語法解析器11中,語法解析器11可以在對動態碼進行語法分析時,取得對應動態碼所使用之系統提供的應用程式介面之標註,以攔截垃圾回收處理的功能傳呼,例如攔截V8引擎之全域停止型的垃圾回收處理功能傳呼,並且解析標註判斷網頁開發者是否針對特定物件進行垃圾回收處理,以對應產生可以使終端裝置進行垃圾回收處理的靜態碼與修正後的動態碼。另外,語法解析器11亦可以不攔截系統原本就需要進行全域停止型的垃圾回收處理功能傳呼,而僅是解析標註判斷網頁開發者是
否針對特定物件進行垃圾回收處理,以對應產生可以使終端裝置進行垃圾回收處理的靜態碼與修正後的動態碼,以讓終端裝置可以根據系統與網頁開發者的指示決定何時應該釋放記憶體。以V8引擎為例,對應地,終端裝置的V8引擎的前端語法分析器會被修正,以使終端裝置能夠在接收到靜態碼與改寫後的動態碼後,根據網頁開發者所撰寫的標註觸動垃圾回收處理機制。
於此實施例中,上述輔助分析器12與優化器13並不是混合式動態碼編譯裝置1的必要元件。上述輔助分析器12可以被移除,且語法解析器11未必需要輔助分析器12所產生的輔助資訊來解析動態碼。上述優化器13亦可以被移除,且靜態碼產生器可以直接對未進行優化的多個可編譯的區塊進行轉碼,以產生所述靜態碼。總而言之,輔助分析器12與優化器13的有無並非用以限制本發明。
在此請注意,混合式動態碼編譯裝置1可以透過積體電路的方式實現於單一晶片中,或者可以是由多個電路所組成,又或者是由基於軟體程式碼所構成的多個模組所實現。舉例來說,混合式動態碼編譯裝置1可以是一個由軟體供應商所實現的軟體套件,又或者硬體供應商所販售之外接(例如透過通用序列匯流排(Universal Serial Bus,USB))或內建於計算機裝置、伺服器或終端裝置的硬體裝置。總而言之,混合式動態碼編譯裝置1的詳細實現方式並非用以限制本發明。
請接著參照圖2A,圖2A是本發明實施例之服務系統的示意圖。服務系統2包括計算機裝置21、伺服器22、網際網路23與多個終端裝置24a~24e。計算機裝置21透過網際網路23有線或無線連結伺服器22,而伺服器22透過網際網路23有線或無線連結多個終端裝置24a~24e。終端裝置24a~24e例如為個人電腦、筆記型電腦、智慧型手機、功能型手機或平板電腦等,且其類型並非用以限制本發明。
於本發明實施例中,上述混合式動態碼編譯裝置係內建或外接於伺服器22。因此,網頁開發者20可以透過計算機裝置21撰寫文件標示語言與動態碼,例如超文件標示語言與JavaScript碼,並且網頁開發者20所撰寫的文件標示語言與動態碼會被上傳給伺服器22。
伺服器22使用其內建或外接的混合式動態碼編譯裝置將動態碼分為可編譯的部份與不可編譯的部份,其中可編譯的部份被轉碼為靜態碼,而不可編譯的部份則被進行改寫,以產生改寫後的動態碼,其中改寫後的動態碼具有原始動態碼與靜態碼進行溝通的功能傳呼。
接著,伺服器22可以透過網際網路23將混合式動態碼編譯裝置所產生的靜態碼與改寫後的動態碼傳送給所述多個終端裝置24a~24e,以使終端裝置24a~24e根據靜態碼與改寫後的動態碼以呈現網頁開發者20所撰寫之原始的動態碼所對應之動態或互動的網頁。另外,伺服器22還可以透過網際網路23將文件標示語言送給終端裝置24a~24e。
在此請注意,本發明並不限制混合式動態碼編譯裝置係內建或外接於伺服器22。請參照圖2B,圖2B是本發明另一實施例之服務系統的示意圖。相較於圖2A,於圖2B的實施例中,服務系統2’的伺服器22’並未內建或外接有混合式動態碼編譯裝置,而是計算機裝置21’內建或外接有混合式動態碼編譯裝置。換言之,計算機裝置21’直接將網頁開發者20所撰寫之文件標示語言與動態碼轉換為靜態碼與改寫後的動態碼,且將靜態碼與改寫後的動態碼透過網際網路23傳送給伺服器22’。接著終端裝置24a~24e根據靜態碼與改寫後的動態碼以呈現網頁開發者20所撰寫之原始的動態碼所對應之動態或互動的網頁。
請參照圖2C,圖2C是本發明另一實施例之服務系統的示意圖。相較於圖2A,於圖2C的實施例中,服務系統2”的伺服器
22’並未內建或外接有混合式動態碼編譯裝置,而是終端裝置24a’~24e’內建或外接有混合式動態碼編譯裝置。網頁開發者20使用計算機裝置21將撰寫的文件標示語言與動態碼透過伺服器22’與網際網路23送至終端裝置24a’~24e’。終端裝置24a’~24e’所內建或外接的混合式動態碼編譯裝置將動態碼轉換為靜態碼與改寫後的動態碼。接著終端裝置24a’~24e’根據靜態碼與改寫後的動態碼以呈現網頁開發者20所撰寫之原始的動態碼所對應之動態或互動的網頁。
雖然上述多個實施例係以混合式動態碼編譯裝置內建或外接於計算機裝置、伺服器或終端裝置為例進行說明。然而,要說明的是,本發明並不限制於此,在考量各裝置的運算能力不同的情況下,混合式動態碼編譯裝置的各元件可以分別實現於計算機裝置、伺服器與終端裝置的至少其中兩者之中,以離散的方式處理所述動態碼。甚至,混合式動態碼編譯裝置可以被內建或外接於計算機裝置、伺服器與終端裝置中,而且每一個混合式動態碼編譯裝置彼此進行溝通,並且處理部份的動態碼,並產生部份的靜態碼與部份的改寫後之動態碼。
請接著參照圖3,圖3是本發明實施例之混合式動態碼編譯方法的流程圖。圖3之混合式動態碼編譯方法可以執行於具有計算能力的電子裝置,或者以上述混合式動態碼編譯裝置來實現。總而言之,本發明並不限制混合式動態碼編譯方法的執行對象。
首先,在步驟S31中,接收文件標示語言,並且分析文件標示語言,以產生輔助資訊。接著,在步驟S32中,接收動態碼,並且以選擇性地參考輔助資訊來解析動態碼,以將動態碼分為多個區塊,其中動態碼可能被內嵌於文件標示語言中,且透過分析文件標示語言來提取所述動態碼,或者動態碼本身為獨立於文件標示語言之外的檔案。另外,動態碼中多個結構化碼、物件(或類別)資訊與變數資訊形成上述多個區塊。
接著,在步驟S33中,基於建立的符號表檢查區塊中的變數類型,以判斷所述區塊是否無法編譯。舉例來說,若區塊中有全域變數或內建變數中的評估變數,則判斷所述區塊為不可編譯的區塊,並接著執行步驟S36。相反地,若區塊僅有區域變數,則判斷所述區塊為可能可編譯的區塊,並接著執行步驟S34。
然後,在步驟S34中,對可能可編譯的區塊進行型別推論,以判斷所述可能可編譯的區塊是否為可編譯的區塊。倘若可能可編譯的區塊的型別無法被決定,則判定所述可能可編譯的區塊為不可編譯的區塊,並執行步驟S36。倘若可能可編譯的區塊的型別可被決定,則判定所述可能可編譯的區塊為可編譯的區塊,並執行步驟S35。
接著,在步驟S35中,根據多個可編譯的區塊產生靜態碼,亦即將多個可編譯的區塊轉換為靜態碼。除此之外,在步驟S36中,對多個不可編譯的區塊進行改寫,以產生改寫後的動態碼,其中改寫的動態碼包括原始的動態碼與靜態碼之間進行溝通的功能傳呼。如此,終端裝置可以接收靜態碼與改寫後的動態碼,並根據可以靜態碼與改寫後的動態碼完整地執行原始的動態碼之內容,以呈現原始的動態碼對應之動態或互動的網頁。
然後,請參照圖4,圖4是本發明實施例之混合式動態碼編譯方法中垃圾回收處理的流程圖。如同前面所述,本發明實施例的混合式動態碼編譯方法亦可以提供網頁開發者自行控制垃圾回收處理的功能。圖4的步驟S41~S43係執行於解析動態碼之步驟,且圖4的步驟S41~S43的存在與否並非用以限制本發明,亦即提供網頁開發者自行控制垃圾回收處理的功能之與否並非用以限制本發明。當本發明實施例的混合式動態碼編譯方法開啟提供網頁開發者自行控制垃圾回收處理的功能後,所述混合式動態碼編譯方法會取得對應動態碼所使用之系統提供的應用程式介面之標註,以攔截垃圾回收處理的功能傳呼。
在步驟S41中,判斷所述物件對應的動態碼是否有網頁開發者標記進行記憶體釋放的標註。若判斷所述物件對應的動態碼有網頁開發者標記進行記憶體釋放的標註,則執行步驟S42。若判斷所述物件對應的動態碼未有網頁開發者標記進行記憶體釋放的標註,則執行步驟S43。在步驟S42中,判斷所述物件須進行垃圾回收處理,並且對應地產生所述物件須進行垃圾回收處理的標註於對應的區塊中。在步驟43中,判斷所述物件無須進行垃圾回收處理,並且對應地產生所述物件無須進行垃圾回收處理的標註於對應的區塊中。如此,終端裝置可以根據上述標註判斷所述物件是否需要進行垃圾回收處理,以符合網頁開發者所期待的記憶體控制方式,從而增加終端裝置的執行效率,並且避免記憶體漏洩發生。
在此請注意,於圖4的實施例中,混合式動態碼編譯方法係攔截所有垃圾回收處理的功能傳呼。然而,本發明亦可以選擇僅將屬於持久性(persistent)的物件之垃圾回收處理的功能傳呼進行攔截。換言之,原來屬於區域性(local)的物件仍還是交給系統的垃圾回收處理的功能傳呼進行處理,僅有持久性(persistent)的物件之垃圾回收處理的功能傳呼被攔截,且持久性(persistent)的物件須透過網頁開發者是否有標註進行記憶體釋放來決定是否進行垃圾回收處理。
以V8引擎為例進行說明,在V8引擎中,物件參考(object reference)係由Handle函數模組進行管理。Handle函數模組包括了物件參考的指標,以透過指標來指示物件的所在位置。Handle函數模組會將物件分為持久性與區域性的物件。在本發明實施例中,V8引擎可以被進行修改,以使混合式動態碼編譯方法僅對持久性的物件進行記憶體釋放的控制。換言之,區域性的物件的存活範圍(live range)若超過定義之HandleScope的範圍,則區域性的物件會自行地被系統進行垃圾處理。然而,原來僅能透過系
統來控制記憶體釋放持久性的物件,則可以讓網頁開發者透過標註來進行垃圾處理。另外,要說明的是,上述V8引擎可被修正成,持久性的物件僅根據網頁開發者所下的標註來進行垃圾處理,或者上述V8引擎可被修正成,持久性的物件可以同時依據系統的控制與網頁開發者所下的標註來進行垃圾處理。
綜上所述,本發明實施例所提供的混合式動態碼編譯裝置、方法及其服務系統有效地提升終端裝置處理動態碼的效率,並且有效地透過網頁開發者的標註來對物件進行垃圾回收處理,以避免終端裝置有記憶體漏洩的情況。另外,上述混合式動態碼編譯裝置可以使用硬體或軟體的方式來實現,且其實現複雜度不高,故不會有龐大的成本。
較佳地,於本發明實施例中,上述混合式動態碼編譯裝置可以設置於服務系統中的伺服器中,以避免網頁開發者所使用者的計算機裝置在進行轉碼編譯時,會有龐大的運算量。除此之外,透過上述的設置方式,將可以使得伺服器業者可以提供網頁設計者將動態碼轉換靜態碼與改寫後的動態碼之服務。
以上所述僅為本發明之實施例,其並非用以侷限本發明之專利範圍。
1‧‧‧混合式動態碼編譯裝置
11‧‧‧語法解析器
12‧‧‧輔助分析器
13‧‧‧優化器
14‧‧‧靜態碼產生器
15‧‧‧動態碼改寫器
Claims (19)
- 一種混合式動態碼編譯裝置,包括:一語法解析器,用以接收一第一動態碼,對所述第一動態碼進行語法解析,以將所述第一動態碼分為多個可編譯的區塊與多個不可編譯的區塊;一靜態碼產生器,耦接所述語法解析器,將所述多個可編譯的區塊轉碼為一靜態碼;以及一動態碼改寫器,耦接所述語法解析器,用以對所述多個不可編譯的區塊進行改寫,以產生一第二動態碼,其中第二動態碼具有所述第一動態碼與所述靜態碼之間進行溝通的多個功能傳呼。
- 如請求項第1項之混合式動態碼編譯裝置,其中所述語法解析器提取所述第一動態碼中多個結構化碼、物件或類別資訊與變數資訊,並據此產生多個區塊,且所述語法解析器將所述多個區塊分為所述多個可編譯的區塊與所述多個不可編譯的區塊。
- 如請求項第2項之混合式動態碼編譯裝置,其中所述語法解析器基於建立的一符號表判斷所述多個區塊的每一者是否為可能可以編譯的區塊,且接著對所述多個可能可以編譯的區塊的每一者進行型別推論,以判斷所述多個可能可以編譯的區塊的每一者是否為所述可以編譯的區塊。
- 如請求項第3項之混合式動態碼編譯裝置,其中若所述區塊具有一全域變數或一內建變數中的一評估變數,則所述語法解析器判斷所述區塊的為所述不可編譯的區塊,若所述區塊僅 有區域變數,則所述語法解析器判斷所述區塊為所述可能可編譯的區塊。
- 如請求項第3項之混合式動態碼編譯裝置,其中若所述可能可編譯的區塊的型別可被決定,則所述語法解析器判斷所述可能可編譯的區塊為所述可編譯的區塊,若所述可能可編譯的區塊的型別無法被決定,則所述語法解析器判斷所述可能可編譯的區塊為所述不可編譯的區塊。
- 如請求項第1項之混合式動態碼編譯裝置,其中所述語法解析器在對第一動態碼進行語法分析時,取得對應第一動態碼所使用之系統提供的一應用程式介面之一標註,並且根據所述標註使得產生的所述靜態碼與所述第二動態碼可以使得一終端裝置依據所述標註得知何時應該釋放其記憶體。
- 如請求項第6項之混合式動態碼編譯裝置,其中所述語法解析器更攔截多個持久性的物件之垃圾回收處理的多個功能傳呼,且所述語法解析器對相關於垃圾回收處理的所述多個功能傳呼作處理,並且根據所述標註使得產生的所述靜態碼與所述第二動態碼可以使得所述終端裝置依據所述標註得知何時應該釋放所述多個持久性的物件之記憶體。
- 如請求項第1項之混合式動態碼編譯裝置,更包括:一優化器,耦接於所述語法解析器與所述靜態碼產生器之間,用以優化所述多個可編譯的區塊,且所述靜態碼產生器用以將優化後的所述多個可編譯的區塊轉碼為所述靜態碼。
- 如請求項第1項之混合式動態碼編譯裝置,更包括: 一輔助分析器,耦接於所述語法解析器,用以接收並分析一文件標示語言,以產生一輔助資訊,使所述語法解析器得以透過所述輔助資訊的協助對所述第一動態碼進行解析。
- 一種混合式動態碼編譯方法,包括:步驟A:接收一第一動態碼,對所述第一動態碼進行語法解析,以將所述第一動態碼分為多個可編譯的區塊與多個不可編譯的區塊;步驟B:將所述多個可編譯的區塊轉碼為一靜態碼;以及步驟C:對所述多個不可編譯的區塊進行改寫,以產生一第二動態碼,其中第二動態碼具有所述第一動態碼與所述靜態碼之間進行溝通的多個功能傳呼。
- 如請求項第10項之混合式動態碼編譯方法,其中於所述步驟A中,提取所述第一動態碼中多個結構化碼、物件或類別資訊與變數資訊,以據此產生多個區塊,與將所述多個區塊分為所述多個可編譯的區塊與所述多個不可編譯的區塊。
- 如請求項第11項之混合式動態碼編譯方法,其中於所述步驟A中,基於建立的一符號表判斷所述多個區塊的每一者是否為可能可以編譯的區塊,且接著對所述多個可能可以編譯的區塊的每一者進行型別推論,以判斷所述多個可能可以編譯的區塊的每一者是否為所述可以編譯的區塊。
- 如請求項第12項之混合式動態碼編譯方法,其中於所述步驟A中,若所述區塊具有一全域變數或一內建變數中的一評估變數,則判斷所述區塊的為所述不可編譯的區塊,若所述區塊僅有區域變數,則判斷所述區塊為所述可能可編譯的區塊。
- 如請求項第12項之混合式動態碼編譯方法,其中於所述步驟A中,若所述可能可編譯的區塊的型別可被決定,則判斷所述可能可編譯的區塊為所述可編譯的區塊,若所述可能可編譯的區塊的型別無法被決定,則判斷所述可能可編譯的區塊為所述不可編譯的區塊。
- 如請求項第12項之混合式動態碼編譯方法,其中於所述步驟A中,在對第一動態碼進行語法分析時,取得對應第一動態碼所使用之系統提供的一應用程式介面之一標註,並且根據所述標註使得產生的所述靜態碼與所述第二動態碼可以使得一終端裝置依據所述標註得知何時應該釋放其記憶體。
- 如請求項第15項之混合式動態碼編譯方法,其中於所述步驟A中,更攔截多個持久性的物件之垃圾回收處理的多個功能傳呼,且所述語法解析器對相關於垃圾回收處理的所述多個功能傳呼作處理,並且根據所述標註使得產生的所述靜態碼與所述第二動態碼可以使得所述終端裝置依據所述標註得知何時應該釋放所述多個持久性的物件之記憶體。
- 如請求項第10項之混合式動態碼編譯方法,更包括:步驟D:優化所述多個可編譯的區塊,其中優化後的所述多個可編譯的區塊被轉碼為所述靜態碼。
- 如請求項第10項之混合式動態碼編譯方法,更包括:步驟E:接收並分析一文件標示語言,以產生一輔助資訊,其中所述輔助資訊用以協助對所述第一動態碼進行解析。
- 一種服務系統,包括:一計算機裝置;一伺服器,連接於所述計算機裝置;以及一終端裝置,連接於所述伺服器;其中所述計算機裝置、伺服器與所述終端裝置的其中一者或其組合用以執行:步驟A:接收一第一動態碼,對所述第一動態碼進行語法解析,以將所述第一動態碼分為多個可編譯的區塊與多個不可編譯的區塊;步驟B:將所述多個可編譯的區塊轉碼為一靜態碼;以及步驟C:對所述多個不可編譯的區塊進行改寫,以產生一第二動態碼,其中第二動態碼具有所述第一動態碼與所述靜態碼之間進行溝通的多個功能傳呼。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW102142236A TWI525543B (zh) | 2013-11-20 | 2013-11-20 | 混合式動態碼編譯裝置、方法及其服務系統 |
CN201310627787.XA CN104657189B (zh) | 2013-11-20 | 2013-11-28 | 混合式动态码编译装置、方法及其服务系统 |
US14/104,056 US9182953B2 (en) | 2013-11-20 | 2013-12-12 | Hybrid dynamic code compiling device, method, and service system thereof |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW102142236A TWI525543B (zh) | 2013-11-20 | 2013-11-20 | 混合式動態碼編譯裝置、方法及其服務系統 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201520897A TW201520897A (zh) | 2015-06-01 |
TWI525543B true TWI525543B (zh) | 2016-03-11 |
Family
ID=53174620
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW102142236A TWI525543B (zh) | 2013-11-20 | 2013-11-20 | 混合式動態碼編譯裝置、方法及其服務系統 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9182953B2 (zh) |
CN (1) | CN104657189B (zh) |
TW (1) | TWI525543B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160210135A1 (en) * | 2013-07-31 | 2016-07-21 | Smiths Detection Inc. | Dynamic sensor driver loading over a wireless network |
US9747250B2 (en) * | 2015-03-25 | 2017-08-29 | International Business Machines Corporation | Effective memory management for host objects in a runtime environment with embedded garbage-collected based dynamic language |
CN106484489A (zh) * | 2015-09-01 | 2017-03-08 | 阿里巴巴集团控股有限公司 | 一种扩展编程语言特性的方法及装置 |
US9477451B1 (en) | 2015-11-06 | 2016-10-25 | International Business Machines Corporation | Generating dynamic measurement metadata for efficient compilation and optimization on a target device |
KR101705996B1 (ko) * | 2015-11-26 | 2017-02-13 | 성균관대학교산학협력단 | 자바스크립트 소스 코드를 최적화하기 위한 자바스크립트 소스 코드 정적 분석 장치 및 방법 |
CN106293863B (zh) * | 2016-07-26 | 2019-10-25 | 北京北森云计算股份有限公司 | 多语言云编译实现系统功能动态扩展替换的方法及系统 |
CN106502880B (zh) * | 2016-09-20 | 2019-05-17 | 东软集团股份有限公司 | 一种内存泄漏调试方法及装置 |
JP6932779B2 (ja) * | 2016-11-23 | 2021-09-08 | Line株式会社 | 検知結果が有効であるかないかを検証する方法およびシステム |
CN110659057B (zh) * | 2019-09-24 | 2021-10-22 | 腾讯科技(深圳)有限公司 | 应用程序热更新方法、装置、存储介质及计算机设备 |
US10922060B1 (en) * | 2019-09-26 | 2021-02-16 | Fmr Llc | Application source code reuse apparatuses, methods and systems |
CN112015430B (zh) * | 2020-09-07 | 2024-08-16 | 平安国际智慧城市科技股份有限公司 | JavaScript代码翻译方法、装置、计算机设备及存储介质 |
US11995458B1 (en) * | 2021-06-03 | 2024-05-28 | Bentley Systems, Incorporated | Compiling user code as an extension of a host application in a browser environment |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6339782B1 (en) * | 1997-11-21 | 2002-01-15 | International Business Machines Corporation | Persistence mechanism and method for objects |
US6367068B1 (en) * | 1998-11-13 | 2002-04-02 | Microsoft Corporation | Dynamic parsing |
JP3940665B2 (ja) * | 2002-11-27 | 2007-07-04 | 株式会社東芝 | ハイブリッドシミュレーション装置およびプログラム |
CN1296824C (zh) * | 2004-10-28 | 2007-01-24 | 威盛电子股份有限公司 | 程序编码方法及其系统 |
US9170787B2 (en) * | 2008-06-27 | 2015-10-27 | Microsoft Technology Licensing, Llc | Componentization of compiler functionality |
US8443345B2 (en) * | 2008-11-26 | 2013-05-14 | International Business Machines Corporation | Dynamic processing of embedded compiled programming language code |
US20120143589A1 (en) * | 2010-12-07 | 2012-06-07 | Andrew Ward Beale | Multi-modal compiling apparatus and method for generating a hybrid codefile |
US8752035B2 (en) * | 2011-05-31 | 2014-06-10 | Microsoft Corporation | Transforming dynamic source code based on semantic analysis |
US8539463B2 (en) * | 2011-07-28 | 2013-09-17 | Qualcomm Innovation Center, Inc. | Apparatus and method for improving the performance of compilers and interpreters of high level programming languages |
US8875089B2 (en) * | 2011-12-05 | 2014-10-28 | Microsoft Corporation | Workspace model for interrelated projects |
CN103176807A (zh) * | 2011-12-22 | 2013-06-26 | 盛乐信息技术(上海)有限公司 | 网页应用执行的提速方法及系统 |
CN103177199A (zh) * | 2011-12-22 | 2013-06-26 | 盛乐信息技术(上海)有限公司 | 网页应用代码保护方法及系统和执行的提速方法及系统 |
-
2013
- 2013-11-20 TW TW102142236A patent/TWI525543B/zh active
- 2013-11-28 CN CN201310627787.XA patent/CN104657189B/zh active Active
- 2013-12-12 US US14/104,056 patent/US9182953B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
TW201520897A (zh) | 2015-06-01 |
US9182953B2 (en) | 2015-11-10 |
CN104657189A (zh) | 2015-05-27 |
US20150143348A1 (en) | 2015-05-21 |
CN104657189B (zh) | 2017-12-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI525543B (zh) | 混合式動態碼編譯裝置、方法及其服務系統 | |
AU2014275115B2 (en) | Debugging native code by transitioning from execution in native mode to execution in interpreted mode | |
US9569342B2 (en) | Test strategy for profile-guided code execution optimizers | |
US8819649B2 (en) | Profile guided just-in-time (JIT) compiler and byte code generation | |
CN106293675B (zh) | 系统静态资源加载方法及装置 | |
US8191038B1 (en) | Using a templating language to produce a host language factory for a safe subset of a templated language | |
US20130205282A1 (en) | Transferring program execution from compiled code to interpreted code | |
US20130262978A1 (en) | Html5 i-frame extension | |
CN102637135A (zh) | 用于编译层叠样式表的方法和设备 | |
CN111831384A (zh) | 语言切换方法和装置、设备及存储介质 | |
CN103176807A (zh) | 网页应用执行的提速方法及系统 | |
US20080209395A1 (en) | Automatic code replacement | |
CN114153459A (zh) | 接口文档生成方法及装置 | |
US9152400B2 (en) | Eliminating redundant reference count operations in intermediate representation of script code | |
CN109189388A (zh) | 页面配置方法、服务器及计算机可读介质 | |
CN114398673A (zh) | 应用程序的合规检测方法、装置、存储介质与电子设备 | |
US20150161160A1 (en) | Application Localization | |
CN110109671A (zh) | 一种webpack标签尺寸样式转换方法及装置 | |
CN117348876B (zh) | 基于freeRTOS嵌入式系统的应用开发方法、系统及介质 | |
CN110110299B (zh) | 文本变换方法、装置以及服务器 | |
EP2535813B1 (en) | Method and device for generating an alert during an analysis of performance of a computer application | |
CN111539200B (zh) | 一种生成富文本的方法、装置、介质和电子设备 | |
CN114490370A (zh) | 兼容多语言的测试方法、装置以及电子设备 | |
US20070233737A1 (en) | System for determining whether screen displayed by program satisfies specification | |
KR20140147438A (ko) | 마크업 파싱 장치, 방법 및 기록 매체 |