校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > Golang編譯器介紹

Golang編譯器介紹

熱門標(biāo)簽:建造者2地圖標(biāo)注 濱州自動電銷機(jī)器人排名 惠州電銷防封電話卡 浙江高頻外呼系統(tǒng)多少錢一個月 黃岡人工智能電銷機(jī)器人哪個好 阿里云ai電話機(jī)器人 鄭州亮點科技用的什么外呼系統(tǒng) 釘釘有地圖標(biāo)注功能嗎 汕頭小型外呼系統(tǒng)

cmd/compile 包含構(gòu)成 Go 編譯器主要的包。編譯器在邏輯上可以被分為四個階段,我們將簡要介紹這幾個階段以及包含相應(yīng)代碼的包的列表。
在談到編譯器時,有時可能會聽到 前端(front-end)和 后端(back-end)這兩個術(shù)語。粗略地說,這些對應(yīng)于我們將在此列出的前兩個和后兩個階段。第三個術(shù)語 中間端(middle-end)通常指的是第二階段執(zhí)行的大部分工作。
請注意,go/parser 和 go/types 等 go/* 系列的包與編譯器無關(guān)。由于編譯器最初是用 C 編寫的,所以這些 go/* 包被開發(fā)出來以便于能夠?qū)懗龊?Go 代碼一起工作的工具,例如 gofmt 和 vet。
需要澄清的是,名稱 “gc” 代表 “ Go 編譯器(Go compiler)”,與大寫 GC 無關(guān),后者代表 垃圾收集(garbage collection)。

1、解析

  • cmd/compile/internal/syntax( 詞法分析器(lexer)、 解析器(parser)、 語法樹(syntax tree))

在編譯的第一階段,源代碼被標(biāo)記化(詞法分析)、解析(語法分析),并為每個源文件構(gòu)造語法樹(譯注:這里標(biāo)記指 token,它是一組預(yù)定義的、能夠識別的字符串,通常由名字和值構(gòu)成,其中名字一般是詞法的類別,如標(biāo)識符、關(guān)鍵字、分隔符、操作符、文字和注釋等;語法樹,以及下文提到的 抽象語法樹(Abstract Syntax Tree)(AST),是指用樹來表達(dá)程序設(shè)計語言的語法結(jié)構(gòu),通常葉子節(jié)點是操作數(shù),其它節(jié)點是操作碼)。
每個語法樹都是相應(yīng)源文件的確切表示,其中節(jié)點對應(yīng)于源文件的各種元素,例如表達(dá)式、聲明和語句。語法樹還包括位置信息,用于錯誤報告和創(chuàng)建調(diào)試信息。

2、類型檢查和 AST 變換

  • cmd/compile/internal/gc(創(chuàng)建編譯器 AST, 類型檢查(type-checking), AST 變換(AST transformation))

gc 包中包含一個繼承自(早期)C 語言實現(xiàn)的版本的 AST 定義。所有代碼都是基于它編寫的,所以 gc 包必須做的第一件事就是將 syntax 包(定義)的語法樹轉(zhuǎn)換為編譯器的 AST 表示法。這個額外步驟可能會在將來重構(gòu)。
然后對 AST 進(jìn)行類型檢查。第一步是名字解析和類型推斷,它們確定哪個對象屬于哪個標(biāo)識符,以及每個表達(dá)式具有的類型。類型檢查包括特定的額外檢查,例如“聲明但未使用”以及確定函數(shù)是否會終止。
特定變換也基于 AST 完成。一些節(jié)點被基于類型信息而細(xì)化,例如把字符串加法從算術(shù)加法的節(jié)點類型中拆分出來。其它一些例子是 死代碼消除(dead code elimination), 函數(shù)調(diào)用內(nèi)聯(lián)(function call inlining)和 逃逸分析(escape analysis)(譯注:逃逸分析是一種分析指針有效范圍的方法)。

3、通用 SSA

  • cmd/compile/internal/gc(轉(zhuǎn)換成 SSA)
  • cmd/compile/internal/ssa(SSA 相關(guān)的 環(huán)節(jié)(pass)和規(guī)則)

(譯注:許多常見高級語言的編譯器無法通過一次掃描源代碼或 AST 就完成所有編譯工作,取而代之的做法是多次掃描,每次完成一部分工作,并將輸出結(jié)果作為下次掃描的輸入,直到最終產(chǎn)生目標(biāo)代碼。這里每次掃描稱作一個 環(huán)節(jié)(pass);最后一個環(huán)節(jié)之前所有的環(huán)節(jié)得到的結(jié)果都可稱作中間表示法,本文中 AST、SSA 等都屬于中間表示法。SSA,靜態(tài)單賦值形式,是中間表示法的一種性質(zhì),它要求每個變量只被賦值一次且在使用前被定義)。
在此階段,AST 將被轉(zhuǎn)換為 靜態(tài)單賦值(Static Single Assignment)(SSA)形式,這是一種具有特定屬性的低級 中間表示法(intermediate representation),可以更輕松地實現(xiàn)優(yōu)化并最終從它生成機(jī)器碼。
在這個轉(zhuǎn)換過程中,將完成 內(nèi)置函數(shù)(function intrinsics)的處理。這些是特殊的函數(shù),編譯器被告知逐個分析這些函數(shù)并決定是否用深度優(yōu)化的代碼替換它們(譯注:內(nèi)置函數(shù)指由語言本身定義的函數(shù),通常編譯器的處理方式是使用相應(yīng)實現(xiàn)函數(shù)的指令序列代替對函數(shù)的調(diào)用指令,有點類似內(nèi)聯(lián)函數(shù))。
在 AST 轉(zhuǎn)化成 SSA 的過程中,特定節(jié)點也被低級化為更簡單的組件,以便于剩余的編譯階段可以基于它們工作。例如,內(nèi)建的拷貝被替換為內(nèi)存移動,range 循環(huán)被改寫為 for 循環(huán)。由于歷史原因,目前這里面有些在轉(zhuǎn)化到 SSA 之前發(fā)生,但長期計劃則是把它們都移到這里(轉(zhuǎn)化 SSA)。
然后,一系列機(jī)器無關(guān)的規(guī)則和編譯環(huán)節(jié)會被執(zhí)行。這些并不考慮特定計算機(jī)體系結(jié)構(gòu),因此對所有 GOARCH 變量的值都會運行。
這類通用的編譯環(huán)節(jié)的一些例子包括,死代碼消除、移除不必要的空值檢查,以及移除無用的分支等。通用改寫規(guī)則主要考慮表達(dá)式,例如將一些表達(dá)式替換為常量,優(yōu)化乘法和浮點操作。

4、生成機(jī)器碼

  • cmd/compile/internal/ssa(SSA 低級化和架構(gòu)特定的環(huán)節(jié))
  • cmd/internal/obj(機(jī)器碼生成)

編譯器中機(jī)器相關(guān)的階段開始于“低級”的編譯環(huán)節(jié),該階段將通用變量改寫為它們的特定的機(jī)器碼形式。例如,在 amd64 架構(gòu)中操作數(shù)可以在內(nèi)存中操作,這樣許多 加載-存儲(load-store)操作就可以被合并。
注意低級的編譯環(huán)節(jié)運行所有機(jī)器特定的重寫規(guī)則,因此當(dāng)前它也應(yīng)用了大量優(yōu)化。
一旦 SSA 被“低級化”并且更具體地針對目標(biāo)體系結(jié)構(gòu),就要運行最終代碼優(yōu)化的編譯環(huán)節(jié)了。這包含了另外一個死代碼消除的環(huán)節(jié),它將變量移動到更靠近它們使用的地方,移除從來沒有被讀過的局部變量,以及 寄存器(register)分配。
本步驟中完成的其它重要工作包括 堆棧布局(stack frame layout),它將堆棧偏移位置分配給局部變量,以及 指針活性分析(pointer liveness analysis),后者計算每個垃圾收集安全點上的哪些堆棧上的指針仍然是活動的。
在 SSA 生成階段結(jié)束時,Go 函數(shù)已被轉(zhuǎn)換為一系列 obj.Prog 指令。它們被傳遞給匯編程序(cmd/internal/obj),后者將它們轉(zhuǎn)換為機(jī)器碼并輸出最終的目標(biāo)文件。目標(biāo)文件還將包含反射數(shù)據(jù),導(dǎo)出數(shù)據(jù)和調(diào)試信息。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

您可能感興趣的文章:
  • golang flag簡單用法
  • Golang中定時器的陷阱詳解
  • 在golang中操作mysql數(shù)據(jù)庫的實現(xiàn)代碼
  • golang設(shè)置http response響應(yīng)頭與填坑記錄
  • 詳解Golang實現(xiàn)http重定向https的方式
  • Golang學(xué)習(xí)之平滑重啟

標(biāo)簽:晉中 阿壩 駐馬店 滄州 瀘州 泰安 昭通 東營

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Golang編譯器介紹》,本文關(guān)鍵詞  Golang,編譯器,介紹,Golang,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Golang編譯器介紹》相關(guān)的同類信息!
  • 本頁收集關(guān)于Golang編譯器介紹的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    久久久亚洲精华液精华液精华液| 国产精品三级在线观看| 国产精品色一区二区三区| 国产**成人网毛片九色 | 欧美男女性生活在线直播观看 | 亚洲精品中文字幕在线观看| 欧美中文字幕一区二区三区| 午夜欧美2019年伦理| 8x8x8国产精品| 国产成人av一区| 亚洲国产精品尤物yw在线观看| 日韩视频不卡中文| 国产成人激情av| 婷婷开心久久网| 国产免费久久精品| 欧美区一区二区三区| 国产aⅴ精品一区二区三区色成熟| 自拍偷拍亚洲综合| 欧美本精品男人aⅴ天堂| 91在线精品秘密一区二区| 奇米影视一区二区三区| 国产精品成人免费在线| 日韩免费看的电影| 欧美主播一区二区三区美女| 国产一区激情在线| 亚洲va韩国va欧美va精品| 中文字幕国产一区二区| 精品久久久影院| 欧美日韩国产a| 97久久超碰国产精品电影| 国产在线视频一区二区三区| 一二三区精品福利视频| 国产精品久久午夜夜伦鲁鲁| 26uuu精品一区二区在线观看| 欧美日高清视频| 在线观看日韩电影| 日本韩国一区二区三区视频| 成人av电影在线| 国产不卡视频在线观看| 激情图区综合网| 日韩精品三区四区| 日一区二区三区| 亚洲欧美日韩国产成人精品影院 | 国产乱妇无码大片在线观看| 五月天激情综合| 亚洲第一在线综合网站| 亚洲与欧洲av电影| 亚洲精品中文在线| 亚洲欧美另类久久久精品| 国产精品视频一二三区| 国产精品色呦呦| 综合激情成人伊人| 亚洲自拍与偷拍| 亚洲香蕉伊在人在线观| 亚洲一区二区三区四区中文字幕| 亚洲欧美日韩小说| 亚洲国产欧美在线| 午夜影视日本亚洲欧洲精品| 午夜精品福利在线| 日本va欧美va精品| 国产一区欧美日韩| 99re免费视频精品全部| 欧美视频一区在线| 8x8x8国产精品| 久久免费美女视频| 国产精品国产成人国产三级| 亚洲欧美日韩一区二区三区在线观看| 亚洲精品中文字幕乱码三区| 亚洲电影在线免费观看| 麻豆成人综合网| 国产v日产∨综合v精品视频| 色综合久久久久久久久久久| 欧美高清视频不卡网| 久久综合色婷婷| 亚洲精品视频自拍| 蜜乳av一区二区三区| 丁香婷婷深情五月亚洲| 在线观看三级视频欧美| 久久综合狠狠综合久久综合88| 国产精品福利av| 偷拍亚洲欧洲综合| 国产高清无密码一区二区三区| 91麻豆精品一区二区三区| 91麻豆精品国产自产在线| 久久日韩粉嫩一区二区三区| 亚洲人精品午夜| 九九精品一区二区| 91国在线观看| 欧美国产成人精品| 石原莉奈在线亚洲二区| 成人动漫一区二区在线| 91麻豆精品国产无毒不卡在线观看 | 精品久久久久久久人人人人传媒 | 欧美激情一区在线观看| 亚洲第一会所有码转帖| 国产999精品久久久久久绿帽| 欧美影院午夜播放| 国产网站一区二区三区| 亚洲国产日日夜夜| 不卡高清视频专区| 欧美videossexotv100| 中文字幕中文在线不卡住| 丝袜诱惑亚洲看片| 91在线视频播放地址| 久久久久久麻豆| 亚洲国产日韩综合久久精品| jlzzjlzz欧美大全| 久久久久久久久久久久久久久99 | 五月婷婷综合激情| 白白色 亚洲乱淫| 久久夜色精品国产欧美乱极品| 亚洲自拍偷拍九九九| 99久久免费视频.com| 久久精品人人做| 久久超碰97中文字幕| 欧美日韩国产电影| 午夜在线成人av| 91超碰这里只有精品国产| 一区二区三区 在线观看视频| 国产99久久精品| 欧美极品美女视频| 国产成人在线电影| 久久久久国产精品麻豆| 极品尤物av久久免费看| 日韩精品一区二| 国模大尺度一区二区三区| 在线播放欧美女士性生活| 午夜精品福利一区二区三区蜜桃| 欧美主播一区二区三区| 亚洲第一二三四区| 欧美一区二区在线视频| 老司机一区二区| 精品国一区二区三区| 国产麻豆精品95视频| 国产欧美视频一区二区三区| 国产不卡视频在线播放| 中文字幕一区二区三区不卡在线| 色综合夜色一区| 亚洲国产精品久久久男人的天堂| 在线观看日韩电影| 青青草原综合久久大伊人精品优势| 8x8x8国产精品| 国产成人免费av在线| 亚洲天天做日日做天天谢日日欢| 91视频在线观看免费| 一区二区日韩电影| 日韩欧美在线一区二区三区| 国产精品自拍三区| 亚洲裸体在线观看| 69av一区二区三区| 国产精品中文字幕日韩精品 | 国产精品网站在线| 欧美午夜精品久久久久久孕妇| 天天色综合天天| 久久亚洲春色中文字幕久久久| 成人动漫视频在线| 午夜视频在线观看一区| 精品国产不卡一区二区三区| 不卡的电视剧免费网站有什么| 一区二区三区精品视频在线| 日韩一区二区三区视频在线 | 毛片基地黄久久久久久天堂| 久久久久成人黄色影片| 日本国产一区二区| 国产毛片一区二区| 亚洲一区二区五区| 欧美国产精品中文字幕| 制服丝袜av成人在线看| 91网站视频在线观看| 免费av成人在线| 一区二区三区在线观看网站| 久久久久亚洲综合| 欧美电影在哪看比较好| av激情亚洲男人天堂| 久久精品国产一区二区| 一区二区三区国产豹纹内裤在线| 久久久久久一级片| 日韩精品一区在线| 欧美日韩国产成人在线免费| 99国内精品久久| 国产激情精品久久久第一区二区 | 国产麻豆欧美日韩一区| 日韩国产高清在线| 亚洲人成精品久久久久| 久久午夜国产精品| 日韩欧美第一区| 制服.丝袜.亚洲.另类.中文| 91在线国内视频| 成人av片在线观看| 懂色中文一区二区在线播放| 国产综合色精品一区二区三区| 日日夜夜免费精品| 视频一区在线播放| 亚洲v精品v日韩v欧美v专区 | 婷婷国产v国产偷v亚洲高清| 亚洲精品乱码久久久久| 国产精品福利一区二区| 中文欧美字幕免费| 欧美国产激情二区三区| 日本一区二区不卡视频|