如何在golang中實現(xiàn)自舉-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!

創(chuàng)新互聯(lián)于2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站制作、做網(wǎng)站網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元溪湖做網(wǎng)站,已為上家服務(wù),為溪湖各地企業(yè)和個人服務(wù),聯(lián)系電話:028-86922220

這篇文章運用簡單易懂的例子給大家介紹如何在golang中實現(xiàn)自舉,代碼非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

golang實現(xiàn)自舉的方法:首先安裝【Go 1.4】或更高版本;然后使用現(xiàn)有的Go工具鏈創(chuàng)建【Go 1.5】工具鏈的一個基本版本;最后進一步用它構(gòu)建【go_bootstrap】和其余的標準庫和標準組件。

golang實現(xiàn)自舉的方法:

自舉(Bootstrapping) 是這樣的過程,“用要編譯的目標編程語言編寫其編譯器(或匯編器)”。一般而言,自舉有幾個優(yōu)勢,比如:

  • 用于測試被自舉的語言;

  • 支持使用通常更為高級、提供更多高級抽象的語言來編寫編譯器;

  • 編譯器也可以得益于語言層面的任何改進。

如前所述,Google在一年前就開始了從Go源碼樹中去除C代碼的努力,轉(zhuǎn)換計劃分為5個步驟:

  • 第1階段——開發(fā)一個從C語言到Go語言的翻譯器,將現(xiàn)有的C編譯器翻譯成Go語言的。這一階段利用了一個事實:原來的編譯器沒有大量使用一些很難移植到Go語言的特性,比如宏、聯(lián)合和指針運算等。

  • 第2階段——轉(zhuǎn)換編譯器的源碼樹,得到一個Go語言的編譯器,但是比較原始,而且是C風格的。

  • 第3階段——將前面得到的編譯器轉(zhuǎn)換為符合Go語言習慣的程序,主要通過識別包,添加文檔和單元測試實現(xiàn)。

  • 第4階段——優(yōu)化編譯器,解決編譯器和CPU的內(nèi)存使用問題,可能引入并行化。此外,嘗試在今天使用的不依賴架構(gòu)的無序樹(Node*s)和依賴架構(gòu)的有序列表(Prog*s)之間引入一個新的中間表示,目的是改進編譯器在消除冗余的nil檢查和邊界檢查等情況下的優(yōu)化能力。

  • 第5階段——用最新版的go/parser和go/types替換前端。

Russ提到,他們還考慮了一些替代方案,不過基于各種因素都排除了,在一年前的這份文檔中都有描述。

Go的自舉

編譯器的自舉通常會引發(fā)“先有雞還是先有蛋”的問題,必須提供一種方式來編譯我們要創(chuàng)建的語言。

Go的情況是,要構(gòu)建Go 1.5,必須先安裝Go 1.4或更高版本,然后使用現(xiàn)有的Go工具鏈創(chuàng)建Go 1.5工具鏈的一個基本版本。一旦有了(Go 1.4)編譯的Go 1.5工具鏈,就可以再用它來構(gòu)建自身了,可以進一步用它構(gòu)建go_bootstrap和其余的標準庫和標準組件。這個過程加入了一個中間步驟——生成的工具鏈再被用于構(gòu)建其自身,它可以應(yīng)用于未來的任何Go版本。

為進一步了解Go實現(xiàn)自舉的計劃,InfoQ采訪了Russ。

實現(xiàn)自舉看上去是Go語言的一個很大的里程碑。在語言的演進過程中,為什么決定在這個階段做這個事情呢,可以詳細介紹一下嗎?

Go是一門不錯的通用語言,但在設(shè)計時考慮的適用場合是編寫大規(guī)模、高并發(fā)的服務(wù)端軟件,就像運行在Google的服務(wù)器上的那些。如果更早實現(xiàn)自舉,Go編譯器就是第一個大型的Go語言程序,這對語言設(shè)計存在不利影響,會讓我們遠離真正的目標。

沒有更早實現(xiàn)自舉,還有一些技術(shù)原因,比如可移植性,從源代碼編譯比自舉更容易,而且我們也能盡早有一個穩(wěn)定的編譯器實現(xiàn)。

使用Go來構(gòu)建Go,與使用C相比,你認為對哪些具體領(lǐng)域有較為明顯的改進?

Ken Thompson曾經(jīng)對我說,用Go編寫程序感覺比用C更簡單。一個原因是,Go消除了好幾類常見的C bug,比如懸掛指針、內(nèi)存泄漏、緩沖區(qū)溢出、深度遞歸時的棧溢出、誤用void*和意外的數(shù)值轉(zhuǎn)換等。

與任何標準的C工具鏈相比,標準的Go工具鏈對模塊化、單元測試和性能分析支持更好,不過讓我最興奮的是在修改內(nèi)部API或重構(gòu)時,應(yīng)用自動化程序重寫(如gofix)的前景。

在“Go 1.3+ Compiler Overhaul”這篇文檔中,你描述了分5個步驟將現(xiàn)有的編譯器從C遷移到Go的過程。請問到目前為止,已經(jīng)完成了哪些步驟了?其余步驟打算何時完成?

對Go項目而言,將語言的運行時從C轉(zhuǎn)換到Go更為重要,所以我們先做了這個?,F(xiàn)在我們正回到編譯器。

從文檔角度看,我們目前處于第2階段。翻譯器已經(jīng)完成,而且?guī)椭覀冝D(zhuǎn)換了運行時。我們正在將其應(yīng)用于編譯器。我們希望完成Go 1.5編譯器的轉(zhuǎn)換。清理工作會在Go 1.5之后的項目中進行。

關(guān)于如何在golang中實現(xiàn)自舉就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

文章名稱:如何在golang中實現(xiàn)自舉-創(chuàng)新互聯(lián)
當前網(wǎng)址:http://bm7419.com/article18/cdshdp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、云服務(wù)器ChatGPT網(wǎng)站內(nèi)鏈、Google面包屑導航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)