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