精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Go 1.3+ 編譯器變革

開發 前端
“gc"Go工具鏈來自Plan 9編譯器的工具鏈。組裝器、C編譯器和鏈接器基本沒變。Go的編譯器(cmd/gc,cmd/5g,cmd/6g,cmd/8g)是配合工具鏈寫的新的C程序。

概述

目前Go編譯器是C寫的,是時候換成Go啦。

背景

“gc"Go工具鏈來自Plan 9編譯器的工具鏈。組裝器、C編譯器和鏈接器基本沒變。Go的編譯器(cmd/gc,cmd/5g,cmd/6g,cmd/8g)是配合工具鏈寫的新的C程序。

項目起始時,用C而不是Go寫編譯器有很多好處。突出的比如,首先,那時候Go還不存在,沒法兒寫編譯器。而且實際上,就算存在,也會經常有明顯的不兼容的變化。用C不用Go可以避免初始和持續開發導致的問題。然而如今Go 1已經穩定,所以這些持續的問題減少了很多。

持續開發的問題已經消除,為了讓Go實現的編譯器比C更有吸引力,另一些工程問題出現:

  • 寫正確的Go代碼比寫正確的C代碼更容易。
  • 調試錯誤的Go代碼比調試錯誤的C代碼更容易。
  • 使用Go編譯器需要對Go有一定理解。而用C編譯器還需要一定理解C。
  • Go使并發執行比C更方便。
  • Go有更好的標準支持模塊化,自動重寫,單元測試和性能分析。
  • Go比C更有趣(fun)。

基于以上理由,我們相信是時候用Go寫Go編譯器啦。

計劃設想

我們打算用自動化翻譯工具來用Go重寫現在C的編譯器。這個翻譯需要一些階段,將從Go 1.3開始持續到未來的發行版。

第一階段。開發和調試一個自動化翻譯工具。這可以在日常開發時同步進行。而且,人們還可以在這個階段為C編譯器繼續改進。這個工 具工作量很大,不過我們有信心完成這個特殊使命的工具。有許多C的觀念沒法兒直接轉換成Go;macros(宏),unions(聯合,共用 體,),bit fields(位域)可能最先考慮。比較幸運(不是巧合),這些功能功能用的少,都會被翻譯掉。指針運算和數組也需要一些轉換工作,盡管編譯器里很少。編 譯器里主要是tree(樹)和linked list(鏈表)。翻譯工具會保留注釋和C代碼的結構,所以翻譯后的代碼和當前的編譯器代碼一樣可閱讀。

第二階段。用翻譯工具轉換C代碼到Go,并刪除C源碼。這時我們已經開始翻譯,但是Go還是運行在C編譯器上。非常樂觀的,這可能發生在Go 1.3。不過更可能是Go 1.4。

第三階段。使用一些工具,可能來自gofix和the Go oracle,拆分編譯器到包,清理和文檔化代碼,添加適當的單元測試。這是編譯器會是地道的Go程序。目前打算在Go 1.4實現。

第四a階段。使用標準的分析和測試工具優化編譯器的CPU和內存使用。可能要引入并行。如果真這樣,Race Detector(Go的并行競爭檢測工具,)會有很大幫助。這目標在Go 1.4,可能部分會延后到1.5。基本的優化分析會在第三階段完成。

第四b階段。(和四a幾段同時進行)當編譯器依照明顯的界限分割成包之后, 需要明確引入一個中介碼,在結構無關的無序樹(Node*s)和結構相關的有序鏈表(Prog*s)之間。這個中介碼應該不依賴整體架構,但是包含準確的 執行順序信息,可以用于有順序但是結構無關的操作的優化,比如清理多余的nil檢測和出界檢測。這些過程基于SSA(靜態單賦值),你可以從Alan Donovan的 go.tools/ssa 包中了解更多。

第五階段。替換go/parser和go/types到最新(全新)的版本。Robert Griesemer參考現在的經驗,討論了設計新的parser和types的可能。如果聯系他們到編譯器后端,相信對設計新的API有很大幫助。

自展(Bootstrapping)

用Go語言實現的Go的編譯器,從一開始就要考慮如何自展。我們考慮的規則就是Go1.3編譯器必須由Go1.2編譯,Go1.4的編譯器必須由Go1.4編譯,以此類推。

這時,我們就有了一個清晰的流程來生成當前的程序:編譯Go1.2的工具鏈(由C編寫),然后使用它編譯Go1.3的工具鏈,以此類推。這里需要一 個腳本來做這個事情,來保證只會消耗CPU的時間而非某個人的時間。這樣的自展,每個機器只會做一次,Go1.x的工具鏈將會在本地保留,并在執行 all.bash來編譯Go1.(x+1)工具鏈的時候被再次使用。

顯然,隨著時間的推移這種自舉方式是不充分的。在后面的多個版本被發布之前,為編譯器寫一個后端來生成C代碼也許是一個更有意義的事情。這些C代碼 不要求效率或可讀性,只要正確即可。這些C代碼將會被簽入,就像我們簽入由yacc生成的y.tab.c文件一樣。這樣,自展過程就會變成:先用gcc編 譯C代碼生成一個自展編譯器,然后使用這個自展編譯器來編譯真正的編譯器。類似于另一個自展過程,這個自展編譯器將會在本地保留,并在每次執行 all.bash的時候重復使用(不用重新編譯)。

替代選擇

還有一些比較明顯的替代方案,需要我們說明一下為什么放棄了這些選擇。

從一開始寫一個編譯器。現在的編譯器有一個非常重要的特征:他們能夠正常工作(或者其至少能夠滿足所有用戶的要求)。盡管Go語言比較簡單,但是編譯器中有很多細微的細節優化和改寫,直接丟棄10或數年的在這上面的努力是比較愚蠢的。

對編譯器進行人工翻譯。我們已經以人工的方式翻譯了一小部分C/C++代碼到Go語言了。這個過程是枯燥而且易錯的,且這些錯誤非常的細微及難以發 現。相反,使用機械翻譯會形成一些比較一致的錯誤,而這些錯誤是易于發現的;而且不會因為枯燥的過程開小差。Go編譯器的代碼明顯的比我們翻譯的代碼多很 多:超過60,000行C代碼,機械翻譯會使這個過程容易一些。就像Dick Sites在1974年說的一樣:“相比寫程序,我寧愿寫一個程序來幫我寫 程序。“ 使用機械來翻譯編譯器也方便于在準備好切換之前,我們可以繼續開發完善現有的C程序。

只翻譯后端并鏈接到go/parser和go/types.從前端傳給后端的數據結構所包含的 信息中,go/parser和go/types所能提供的除了API就沒其他的東西了。如果使用這些庫來替代前端,需要寫代碼來轉換go/parser和 go/types所能提供數據結構到后端,這是一個非常寬泛且易出錯的工作。我們相信使用這些庫是有意義的,但更明智的是,等到將編譯器代碼調整的更像 Go程序,分成確定邊界的、包含說明文檔和單元測試子包之后再使用。

放棄現有的編譯器,使用gccgo(或者go/parser + go/types + LLVM,  …)。現有的編譯器是Go語言顯得比較靈活的一個重要組成部分。如果嘗試使用基于大量代碼的GCC或LLVM來開發Go程序,感覺會有礙到Go語言的靈 活性。另外,GCC是大量C代碼(現在有部分C++)、LLVM是大量C++代碼的程序。以上列舉的、用于解釋不使用現有編譯框架代碼的幾個原因,也都適 用于更多的類似的代碼庫。

C語言的長期使用

臨近結束,這個計劃還留下了由C寫成的Plan9的工具鏈的一部分。在長期發展中,還是將所有的C從代碼樹排除掉比較好。本章節推測了一下這件事將會如何發生,但不保證其指定會發生或者按照這種套路發生。

運行時包(runtime)。 runtime包的大部分都是用C寫成,基于一些同樣的原因,Go編譯器也是用C實現。但是,runtime包遠比 編譯器的代碼量要小,且它現在已經是用Go和C混合編寫。將C代碼轉換為Go代碼時,一次轉化一部分貌似也是可行的。其中,主要部分有:調度器 (scheduler),垃圾回收(the garbage collector),散列映射表(hash map)的實現,和channel的實現。(這里Go和C代碼混合的很融洽,是因為這里使用的6c而不是gcc來編譯的C代碼。)

C編譯器。 Plan 9的C編譯器本身就是用C寫成,如果我們要從Go包實現里面移除所有的C代碼,那么我們將移除這些編譯工具:“go tool 6c”等等,另外,.c的文件也將不被支持出現的Go包的目錄里面。我們應該提前聲明這樣的計劃,以便使用C的第三方包有時間去移除這類C代碼的使用。 (Cgo,由于使用了gcc來替代6c,所以它仍然可以作為一個途徑來在Go包中使用C實現部分功能。)在Go1的兼容性文檔中沒有包含工具鏈修改的描 述,也就是說去掉C編譯器是被允許的。

 

匯編器。 Plan 9的匯編器也是用C實現的,但這個匯編器只不過是一系列解析樹組成的簡單解析器,這使得不論手動還是自動將它翻譯成Go語言都比較簡單。

連接器。 Plan 9的連接器也是由C寫成。最近的一些工作,已經將大部分的連接器工作放到的編譯器中,而且,也已經有個計劃將剩余的部分重寫成一個新的、更簡單的Go程序。轉移到編譯器的部分連接器代碼,現在需要隨著編譯器的原有代碼一起進行翻譯。

基于Libmach的工具: nm, pack, addr2line, 和objdump。 Nm現在已經使用Go語言重寫。Pack和addr2line可以任何一天被重寫。Objdump現在依賴于libmach的反匯編器,但這些轉換為Go也是比較簡單的,不論是使用機械還是人工翻譯。所以基于這幾點,libmach本身將來也可以被移除。

原文鏈接:https://docs.google.com/document/d/1P3BLR31VA8cvLJLfMibSuTdwTuF7WWLux71CYD0eeD8/preview?sle=true

責任編輯:陳四芳 來源: 開源中國編譯
相關推薦

2021-09-06 07:59:13

Go編譯器語言

2021-08-22 17:18:58

Go代碼泛型代碼

2022-08-22 07:38:01

Go語言函數

2010-01-21 09:11:38

C++編譯器

2010-01-18 10:34:21

C++編譯器

2010-03-23 11:17:16

Python 動態編譯

2017-03-20 18:01:55

編譯器匯編

2009-08-10 17:12:54

C#編譯器

2013-03-29 10:02:37

編譯器語言編譯開發

2021-05-13 18:53:34

Go編譯器Uber

2010-10-20 13:43:37

C++編譯器

2019-08-06 08:20:07

編譯器工具開發者

2009-07-06 12:49:33

JSP編譯器

2010-01-18 10:28:15

C++編譯器

2009-08-14 11:34:26

Mono C#編譯器

2009-08-04 15:52:58

ASP.NET編譯器

2022-05-18 09:31:42

編譯器開源代碼生成

2010-07-29 14:18:57

Flex編譯器參數

2019-11-15 15:20:27

Golang編譯器前端

2013-12-10 10:53:47

shellcode
點贊
收藏

51CTO技術棧公眾號

欧美日韩中文一区二区| 黄色在线网站噜噜噜| 国产一区欧美一区| 国内精品久久久久久久| 免费黄色片网站| 日韩一区二区三区高清在线观看| 精品美女久久久久久免费| 日韩欧美三级一区二区| 精品女同一区二区三区| 久久综合图片| 欧美精品激情在线观看| 日韩av片在线| 欧美理伦片在线播放| 在线播放亚洲一区| 91蝌蚪视频在线观看| 香蕉久久aⅴ一区二区三区| 国产午夜精品一区二区三区视频 | 亚洲一二三区在线| 少妇高潮一区二区三区69| 精品一区二区三区av| 97超碰色婷婷| 黄色三级生活片| 亚洲一区二区三区中文字幕在线观看| 精品久久久久久久久久国产| 四虎免费在线观看视频| 国产在线免费观看| a在线欧美一区| 亚洲自拍欧美色图| 亚洲手机在线观看| 美女视频一区免费观看| 欧美激情视频一区| 久久国产美女视频| 99国内精品久久久久久久| 亚洲天堂av电影| 白丝女仆被免费网站| 成人爽a毛片| 欧美哺乳videos| 天天做天天干天天操| 懂色aⅴ精品一区二区三区| 色欧美日韩亚洲| 日韩av黄色网址| 末成年女av片一区二区下载| 亚洲v日本v欧美v久久精品| 天堂а√在线中文在线| h视频在线免费观看| 亚洲日本韩国一区| 欧美 国产 精品| www免费在线观看| 亚洲免费色视频| 欧美与动交zoz0z| av影片免费在线观看| 中文字幕国产一区| 亚洲一区二区四区| 欧美日韩在线看片| 中文字幕永久在线不卡| 成年人免费观看的视频| 麻豆系列在线观看| 亚洲精品久久久蜜桃| 麻豆映画在线观看| 青青草原国产在线| 婷婷夜色潮精品综合在线| 国产96在线 | 亚洲| 大菠萝精品导航| 色天天综合色天天久久| 中文久久久久久| 欧美一级做一级爱a做片性| 欧美精品一级二级三级| 日韩a一级欧美一级| 在这里有精品| 亚洲欧美在线一区二区| 我想看黄色大片| 中文字幕免费一区二区| 久久久久这里只有精品| 青青青国产在线 | 色综合色综合网色综合| 久久高清免费视频| 久久婷婷影院| 成人福利视频网| 人妻与黑人一区二区三区| 久久亚洲一区二区三区明星换脸 | 色综合久久久久网| 黄大色黄女片18第一次| 日韩免费高清视频网站| 国产视频亚洲视频| a一级免费视频| 日韩视频精品在线观看| 国产精品视频一区国模私拍 | 久久观看最新视频| 日本不卡免费高清视频在线| 欧美日韩在线免费视频| 成人做爰www看视频软件| 国内精品久久久久久99蜜桃| 久久精品男人天堂| 探花视频在线观看| 国产一区二区三区在线观看免费 | 国产欧美 在线欧美| 亚洲精品一级片| 日本一区二区成人在线| 一二三四中文字幕| 88xx成人永久免费观看| 日韩视频免费观看高清在线视频| 麻豆精品免费视频| 欧美日韩mv| 国产色婷婷国产综合在线理论片a| 男人天堂手机在线观看| 自拍偷自拍亚洲精品播放| 91视频 -- 69xx| 国内不卡的一区二区三区中文字幕| 日韩风俗一区 二区| 亚洲色婷婷一区二区三区| 久久久蜜桃一区二区人| 国产伦精品一区二区三区高清| av在线电影播放| 欧美日韩国产中文精品字幕自在自线| 久久久精品高清| 久久93精品国产91久久综合| 97国产一区二区精品久久呦| 99国产精品久久久久久久成人| 久久精品视频免费观看| 国产精品网站免费| 在线播放一区二区精品视频| 欧美成人免费一级人片100| 中文字幕 国产精品| 91免费看片在线观看| 久艹视频在线免费观看| 色妞ww精品视频7777| 日韩中文字幕精品视频| 日韩精选在线观看| 久久久三级国产网站| 极品粉嫩国产18尤物| 99热这里只有精品首页 | 亚洲国产精品一区二区第一页 | 精品毛片三在线观看| av天堂一区二区| 欧美视频日韩| 成人永久免费| 七七成人影院| 日韩欧美国产三级| 538精品在线观看| 国产呦萝稀缺另类资源| 中文字幕中文字幕99| 欧美另类激情| 精品国偷自产在线视频99| 一区二区视频在线免费观看| 中文字幕久久午夜不卡| 国内国产精品天干天干| 99精品国产一区二区三区| 国产精品嫩草影院一区二区| av在线1区2区| 69堂成人精品免费视频| 国产精品 欧美激情| 国产一区在线观看麻豆| 国产xxxx振车| 免费日韩一区二区三区| 91av视频在线观看| 久草视频在线看| 欧美日韩亚洲综合一区二区三区| www中文在线| 国产麻豆精品一区二区| 国产美女主播在线播放| 嫩草影视亚洲| 国产精品白丝jk黑袜喷水| 美日韩精品免费| **在线精品| 日韩中文第一页| 99久久久久久久| 亚洲国产精品久久人人爱| 最近中文字幕无免费| 视频一区二区国产| 自拍偷拍99| 国产厕拍一区| 日韩av123| 久久亚洲天堂| 亚洲国产欧美在线成人app| 五月天婷婷激情| 成人免费一区二区三区视频 | 中文成人激情娱乐网| 欧美第一黄色网| 秋霞av在线| 555夜色666亚洲国产免| 国产午夜精品无码| 国产日本一区二区| 三大队在线观看| 久久亚洲电影| 国产 国语对白 露脸| 婷婷激情久久| 96成人在线视频| 日本免费久久| 久久99亚洲热视| 国产一二三区在线视频| 精品美女在线观看| 亚洲系列在线观看| 欧美色视频日本高清在线观看| 来吧亚洲综合网| 2021久久国产精品不只是精品| 波多野结衣xxxx| 中文亚洲字幕| 欧美性猛交内射兽交老熟妇| 波多野结衣在线播放一区| 成人免费看片网址| 国产91精品在线| 欧美在线视频导航| 日韩伦理电影网站| 色妞久久福利网| 亚洲欧美日韩成人在线| 日韩一区二区三免费高清| av大全在线观看| 亚洲综合一区二区精品导航| 国产在线免费av| 91毛片在线观看| 日本精品一二三区| 韩国av一区二区三区在线观看| 99re在线视频免费观看| 精品成人免费| 黑人巨茎大战欧美白妇| 成人影视亚洲图片在线| 日韩av大全| 妖精视频一区二区三区免费观看| 国产福利一区二区三区在线观看| 国产精品777777在线播放| 国产精品日韩av| 国产高清不卡| 2019亚洲日韩新视频| wwww在线观看免费视频| 欧美激情亚洲自拍| 欧洲成人综合网| 色综合视频一区中文字幕| 成人黄色在线电影| 久久精品色欧美aⅴ一区二区| av在线免费观看网站| 亚洲色图17p| 久热av在线| 亚洲日韩欧美视频一区| 清纯唯美亚洲色图| 亚洲图片在区色| 国产系列在线观看| 亚洲视频网站在线观看| 可以在线观看的av| 亚洲一区av在线播放| 国产露出视频在线观看| 在线a欧美视频| 视频三区在线| 久久久www成人免费精品张筱雨| 国产精品一卡二卡三卡| 色综合导航网站| 888av在线视频| 欧美日本啪啪无遮挡网站| 天使と恶魔の榨精在线播放| 欧美激情视频一区二区| 8x8ⅹ拨牐拨牐拨牐在线观看| 97在线观看视频| 三上悠亚激情av一区二区三区| 国产精品h片在线播放| 成人黄色毛片| 91久色国产| 国产精品毛片视频| 欧美日本韩国国产| 清纯唯美综合亚洲| 男女爱爱视频网站| 亚洲午夜精品久久久久久app| 久激情内射婷内射蜜桃| 亚洲欧美日韩国产一区| 自拍偷拍 国产| 国内成人免费视频| 在线观看成人动漫| 久久亚洲一级片| 国产免费一区二区三区四区| 亚洲综合久久av| 色屁屁影院www国产高清麻豆| 在线亚洲高清视频| 99热这里只有精品5| 亚洲成人av资源网| 国产一区二区三区福利| 欧美大胆a视频| 午夜激情在线播放| 国产伊人精品在线| 久久综合五月婷婷| 亚洲欧美日韩国产yyy| 欧美日韩国产一区精品一区| 亚洲色成人一区二区三区小说| 久久精品国产**网站演员| 国内自拍偷拍视频| 亚洲国产精品v| 日韩av片在线播放| 欧美日韩激情一区二区| 亚洲毛片在线播放| 中文字幕精品在线| 超黄网站在线观看| 成人疯狂猛交xxx| 亚洲va久久| 欧美日韩dvd| 天堂av在线一区| 无码av免费精品一区二区三区| 欧美激情综合五月色丁香小说| 久久综合色综合| 欧美日韩一本到| 奇米影视888狠狠狠777不卡| 欧美久久久精品| 成人国产精品入口免费视频| 极品校花啪啪激情久久| 亚洲国产精品91| 亚洲免费av一区二区三区| 白白色亚洲国产精品| 国产麻豆视频在线观看| 日本韩国精品一区二区在线观看| 高h放荡受浪受bl| 美女撒尿一区二区三区| 91天天综合| 日本黑人久久| 久久av最新网址| 欧美xxxxx精品| 伊人色综合久久天天| 国产精品老熟女视频一区二区| 夜夜躁日日躁狠狠久久88av| 亚洲欧洲高清| 国产伦精品一区二区三区高清| 欧美freesex交免费视频| 奇米影视四色在线| 国产女主播一区| 色屁屁影院www国产高清麻豆| 亚洲精品mp4| 久久不射影院| 91欧美日韩一区| 99久久亚洲精品蜜臀| 男人添女人下面免费视频| 久久久久高清精品| 亚洲欧美偷拍视频| 精品视频在线导航| 色是在线视频| 精品国产一二| 一本久久综合| 在线免费观看成年人视频| 天天综合色天天综合色h| 午夜精品久久久久久久99| 欧美成人性生活| 这里视频有精品| 欧美精品久久久久久久免费| 成人动漫视频在线| 国产 欧美 日韩 在线| 亚洲精品在线免费观看视频| 福利写真视频网站在线| 国产欧美日韩亚洲| 国产精品久久久一区二区| 亚洲精品成人无码熟妇在线| 日韩人在线观看| 国产三级在线| 国产一区在线播放| 欧美成人一品| 99久久免费看精品国产一区| 午夜精品福利一区二区三区蜜桃| 四虎在线免费看| 日韩av第一页| 色综合久久网| 国产男女无遮挡猛进猛出| 亚洲黄色性网站| 刘玥91精选国产在线观看| 7777精品视频| 国内精品久久久久久久影视简单| 亚洲国产日韩欧美在线观看| 亚洲精品一二三| 熟妇高潮一区二区三区| 日本精品在线视频| 外国成人激情视频| 影音先锋资源av| 一本色道久久综合亚洲91| 91精彩视频在线观看| 亚洲va欧美va国产综合久久| 亚洲国产高清一区二区三区| 中国毛片在线观看| 在线播放91灌醉迷j高跟美女| 波多野结衣在线播放| 青娱乐一区二区| 国内外成人在线视频| 日本亚洲欧美在线| 一区二区在线视频播放| 日日夜夜精品视频| www日韩在线观看| 亚洲免费大片在线观看| 视频午夜在线| 成人久久久久久久| 一区二区三区高清视频在线观看| 亚欧精品视频一区二区三区| 日韩手机在线导航| 日韩色淫视频| 亚洲 自拍 另类小说综合图区| 国产日产精品一区| 秋霞网一区二区| 国产一区玩具在线观看| 亚洲综合电影一区二区三区| 伊人久久久久久久久久久久久久| 日韩av网站电影| 国产日韩在线观看视频| 农村妇女精品一二区| 亚洲精品videosex极品| 国产女人在线观看| 国产精品日韩欧美一区二区| 另类综合日韩欧美亚洲| 成人免费区一区二区三区| 久久亚洲精品一区二区| 国产一区毛片|