編譯方法及其編譯器的制造方法
【專利摘要】一種編譯方法,其涉及一種編譯器,所述編譯方法主要包括以下步驟:首先需要在編譯器上編寫源代碼,然后將編寫好的源代碼在編譯器上執行,此時開始讀取源文件,所述編譯器對源文件進行編譯,當需要引用其他編譯單元時,此時引用其他編譯單元,回到上述讀取源文件步驟;不需要引用其他編譯單元時,直接對該源文件進行編譯,所述編譯器進行動態鏈接引用庫,然后進行二次編譯,將源文件編譯成機器碼,同時輸出機器碼,然后進行動態鏈接,最后由宿主平臺執行該機器碼。
【專利說明】
編譯方法及其編譯器
技術領域
[0001]本發明涉及一種計算機技術領域,尤其是涉及一種編譯方法及其編譯器。
【背景技術】
[0002]隨著大規模集成軟件架構的興起,腳本語言與傳統編譯型語言之間的集成互動越來越廣泛。而腳本語言大多數是屬于面向過程類語言(如JavaScript、VBScript等),所以行業中一直缺乏一種既能夠具備編譯型面向對象語言特征,又能夠具備傳統腳本語言優勢,并能夠與腳本語言從源代碼級別上相兼容的新興專門用于集成領域的語言。雖然美國的科學家發明了 Scala語言,在一定程度上同時具備了面向對象編譯型語言與腳本語言的特性,但它無法做到與傳統的腳本語言在源代碼級別的兼容。
[0003]因此,有必要提供一種新的技術方案以克服上述缺陷。
【發明內容】
[0004]本發明的目的在于提供一種可以有效解決上述技術問題的編譯方法及其編譯器。
[0005]為達到本發明之目的,采用如下技術方案:一種編譯方法,其涉及一種編譯器,所述編譯方法主要包括以下步驟:首先需要在編譯器上編寫源代碼,然后將編寫好的源代碼在編譯器上執行,此時開始讀取源文件,所述編譯器對源文件進行編譯,當需要引用其他編譯單元時,此時引用其他編譯單元,回到上述讀取源文件步驟;不需要引用其他編譯單元時,直接對該源文件進行編譯,所述編譯器進行動態鏈接引用庫,然后進行二次編譯,將源文件編譯成機器碼,同時輸出機器碼,然后進行動態鏈接,最后由宿主平臺執行該機器碼。
[0006]所述編譯器主要包括引導模塊、編譯模塊、設備適配模塊、內存模塊及服務供應接口擴展模塊。
[0007]所述內存模塊包括堆內存和常量池內存。
[0008]與現有技術相比,本發明具有如下有益效果:本發明編譯方法采用了與當前主流編譯型語言(如Java、C#)等類似的語法和設計風格,使得它具備了作為軟件的主要編程語言而出現在軟件研發過程中的能力。同時編譯器能夠將其在運行時自動編譯成對應平臺的與原生EcmaScript規范兼容的代碼而能夠運行在任何兼容EcmaScript規范的平臺上。在源代碼的編寫中,編程人員可以自由在腳本語言與宿主環境(Java或C#或Object-C)之間做無縫集成。同時編譯器本身即采用JavaScript語言編寫,并能夠在某些優化環境(如Google VSEngine)下被編譯成原生的機器碼以獲得可以與C++相媲美的執行效率。該編譯方法具備邊寫邊執行的能力,但其對底層宿主平臺的要求比Java和C#更小。任何一個能支持EcmaScript規范的引擎(甚至是裸機)都可以用來運行由該編譯方法開發的軟件,該編譯方法特別適合開發對設備要求苛刻的嵌入式環境。
【具體實施方式】
[0009]下面將對本發明編譯方及其編譯器做出清楚完整的說明。
[0010]本發明編譯方法主要涉及編程接口、服務供應商接口、服務實現子集、語言運行時間及宿主平臺。所述編程接口是本編譯方法的主要體現方式,用戶通過編程接口進行編程,實現其欲在宿主平臺上實現的功能,所述編程接口包括通用編程接口及專用編程接口,所述專用編程接口可以根據不同的設備及應用場景進行專門設計。所述服務供應商接口使得任何人都可以按照本編譯方法的服務供應接口為上層的編程接口提供具體的服務實現,從而使得本方法成為開放式平臺模式。語言運行時間為本編譯方法的運行時環境,主要包括了即時編譯器以及基本原生編程接口的實現。所述服務實現子集,是由各服務供應商在不同的應用場合下提供不同的服務實現,以子集的方式為本編譯方法生態圈提供重要的支撐。所述宿主平臺主要是指為本編譯方法提供底層運行的各種設備以及任何可支持JavaScript運行時的環境,比如Web瀏覽器、Google V8引擎等。
[0011]所述編譯方法主要通過一下步驟實現:首先需要在編譯器上編寫源代碼,然后將編寫好的源代碼在編譯器上執行,此時開始讀取源文件,所述編譯器對源文件進行編譯,當需要引用其他編譯單元時,此時引用其他編譯單元,回到上述讀取源文件步驟;不需要引用其他編譯單元時,直接對該源文件進行編譯,所述編譯器進行動態鏈接引用庫,然后進行二次編譯,將源文件編譯成機器碼,同時輸出機器碼,然后進行動態鏈接,最后由宿主平臺執行該機器碼。
[0012]所述編譯方法涉及一種編譯器,所述編譯器采用JavaScript語言編寫,以滿足在任何支持JavaScript規范的宿主設備上運行,以實現跨平臺的特性。所述編譯器主要包括引導模塊、編譯模塊、設備適配模塊、內存模塊及服務供應接口擴展模塊。所述引導模塊主要涉及引導過程,所述引導過程為本編譯方法運行時環境與宿主設備建立物理適配的過程,從而使得本編譯方法編譯的語言在運行時能夠將上層指令直接映射到宿舍設備的物理I/O。所述編譯模塊主要將本編譯方法的源代碼,按照類為單位,編譯成每一個獨立的JavaScript原生代碼,所述編譯模塊采用JavaScript編寫,并建立在引導模塊提供的I/O映射智商,因此具備跨平臺的編譯效能,編譯器為即時編譯。所述內存模塊分為堆內存和常量池內存,所述堆內存采用由宿主JavaScript引擎(如瀏覽器、JVM等)來進行托管,而常量池內存則為本編譯方法管理,比如類信息、方法、屬性、常量等等都受管于所述常量池內存中。所述服務供應接口模塊為本編譯方法平臺重要的擴展接口,任何人或組織都可以成為本編譯方法的服務供應者,所述服務供應接口模塊實現將本編譯方法的編程接口向宿主平臺進行映射。
[0013]以上所述,僅為本發明的【具體實施方式】,但本發明的保護范圍并不局限于此,任何熟悉本技術領域的人員在本發明揭露的技術范圍內,可輕易想到變化或替換,都應涵蓋在本發明的保護范圍之內。因此,本發明的保護范圍應以所述權利要求的保護范圍為準。
【主權項】
1.一種編譯方法,其涉及一種編譯器,其特征在于所述編譯方法主要包括以下步驟:首先需要在編譯器上編寫源代碼,然后將編寫好的源代碼在編譯器上執行,此時開始讀取源文件,所述編譯器對源文件進行編譯,當需要引用其他編譯單元時,此時引用其他編譯單元,回到上述讀取源文件步驟;不需要引用其他編譯單元時,直接對該源文件進行編譯,所述編譯器進行動態鏈接引用庫,然后進行二次編譯,將源文件編譯成機器碼,同時輸出機器碼,然后進行動態鏈接,最后由宿主平臺執行該機器碼。2.如權利要求1所述之編譯方法,其特征在于:所述編譯器主要包括引導模塊、編譯模塊、設備適配模塊、內存模塊及服務供應接口擴展模塊。3.如權利要求2所述之編譯方法,其特征在于:所述內存模塊包括堆內存和常量池內存。
【文檔編號】G06F9/45GK105893103SQ201410687717
【公開日】2016年8月24日
【申請日】2014年11月26日
【發明人】劉浩
【申請人】深圳他拍檔電子商務有限公司