現代程式語言用什麼語言寫成?
對於指令碼型語言通常是c寫的,包括解析器(編譯器和執行器)和大部分基礎的標準庫(比較高階的庫才會用本語言寫)。從這個意義上來說,指令碼語言只是c的wrapper,正因為如此,所以才會有人喊python的sort居然比go快之類的說法,其實就算是python的sort快,那也只證明了c比go快。但也有一些語言的解析器用c++寫(比如V8)。
對於編譯型語言,通常編譯器也是c寫的(但編譯器對效能要求不高,理論上可以用任何語言完成)。執行器則分為兩種情況:一種編譯為機器碼的,執行器自然是cpu(比如c++、go這類)。另一種編譯為bytecode的,這種執行器一般用c寫,但是由於效能方面的考慮,通常會執行器(也就是vm)會把bytecode變成機器碼讓cpu直接執行。至於標準庫,編譯型語言通常傾向於用本語言完全重寫,而不是去依賴c庫。
Go語言是編譯型語言裡面比較奇葩的。由於Go語言的目標是成為下一個C語言,所以整個Go語言的實現過程中,儘量減少了對c語言的依賴,大部分的工具鏈都是用Go語言自身來完成。其基本思路是:用gcc或其他標準c的編譯器,編譯出一個Go特有的c編譯器,然後用這個特有的c編譯器,來編譯Go語言工具鏈中那些不得不用c寫的部分,包括go的編譯器。
有人問c是用什麼寫的。實際上現在多數c編譯器都是c寫的,大家去看看gcc的程式碼就知道了。其實,現在彙編編譯器一般也是c寫的。
對於編譯型語言,通常編譯器也是c寫的(但編譯器對效能要求不高,理論上可以用任何語言完成)。執行器則分為兩種情況:一種編譯為機器碼的,執行器自然是cpu(比如c++、go這類)。另一種編譯為bytecode的,這種執行器一般用c寫,但是由於效能方面的考慮,通常會執行器(也就是vm)會把bytecode變成機器碼讓cpu直接執行。至於標準庫,編譯型語言通常傾向於用本語言完全重寫,而不是去依賴c庫。
Go語言是編譯型語言裡面比較奇葩的。由於Go語言的目標是成為下一個C語言,所以整個Go語言的實現過程中,儘量減少了對c語言的依賴,大部分的工具鏈都是用Go語言自身來完成。其基本思路是:用gcc或其他標準c的編譯器,編譯出一個Go特有的c編譯器,然後用這個特有的c編譯器,來編譯Go語言工具鏈中那些不得不用c寫的部分,包括go的編譯器。
有人問c是用什麼寫的。實際上現在多數c編譯器都是c寫的,大家去看看gcc的程式碼就知道了。其實,現在彙編編譯器一般也是c寫的。
從雞生蛋的角度,編譯器的進化史應該是這樣的:先用機器碼直接寫第一個彙編編譯器,然後彙編編譯器編出第一個c編譯器。有c編譯器後可以反過來用c重寫彙編編譯器和c編譯器,做更多的功能增強。這個過程理論上每出現一種新cpu指令集、新作業系統就需要重新來一遍。但是人是聰明的。所以交叉編譯這樣的東西產生了,這就避免需要把整個編譯器進化史重新演繹一遍。
假設我們的現代語言為X
1:用C++寫一個X的編譯器
2:用X寫一個X的編譯器
3:用第一個編譯器編譯第二個編譯器
4:扔掉第一個編譯器
從此,你就得到了X寫的X編譯器的binary,以後不斷改進,不斷用上一個binary來編譯改進後的編譯器生成下一個binary。基本上都是這麼幹的。
相關文章
- 什麼是程式語言
- 中文程式語言——易語言,到底是用來幹什麼的?易語言值得學習嗎?易語言的優勢有什麼?
- 為什麼寫爬蟲用Python語言?爬蟲Python
- 何為程式語言?為什麼要學C語言?C語言
- 雜談現代高階程式語言
- 用 PHP 寫一個"程式語言"PHP
- 如果用程式語言來寫作文
- 用python語言寫程式有什麼好用的編輯器?Python
- 什麼是Go語言?Go語言有什麼特點?Go
- 什麼是程式語言?程式語言都有哪些?以及主要用途
- 如果null很糟糕,那為什麼現代程式語言還要實現它?Null
- 搞安全開發都是用什麼程式語言?
- 看什麼程式語言都是天堂
- [譯]用javascript實現一門程式語言-語言構想JavaScript
- 為什麼自制指令碼語言是程式語言的最高境界?指令碼
- PureBasic 現代 BASIC 程式語言編輯器
- 程式語言基本組成
- 用19種程式語言寫Hello World
- python語言與其他語言有什麼不同?Python
- 組合語言1 - 什麼是組合語言?組合語言
- 用JavaScript實現一門程式語言 2 (λanguage語言簡介)JavaScript
- Python是什麼語言?Python底層語言是什麼?Python
- 各行業都愛用什麼程式語言開發?行業
- 什麼是r語言R語言
- go語言能做什麼Go
- 到底該學習什麼程式語言
- 為什麼需要更多的程式語言
- 常見的程式語言python怎麼樣?各程式語言有什麼區別?Python
- 快速排序用C語言可以這麼寫排序C語言
- 把程式語言看做語言
- 將GO編繹成JavaScript,用GO語言來寫前端程式碼GoJavaScript前端
- 用C語言寫的程式不安全C語言
- 用C語言編寫windows服務程式C語言Windows
- Scala 函數語言程式設計(一) 什麼是函數語言程式設計?函數程式設計
- 《黑神話·悟空》是用什麼程式語言開發的?
- python爬蟲是什麼?為什麼用python語言寫爬蟲?Python爬蟲
- 為什麼會有這麼多程式語言
- 為什麼我們需要一門新語言——Go語言Go