Google釋出go程式語言
Google釋出go程式語言,目前為實驗版本。快速編譯,型別和訪存安全,併發,快樂編碼,開源。
// a simple Helloworld program: hello.go
package main
import "fmt"
func main()
{
fmt.Printf("Hello, iCompiler/n")
}
Go於2007年9月開始設計,主要設計者為Robert Griesemer,Rob Pike和Ken Thompson。後來Ian Lance Taylor實現了基於GCC的go編譯器gccgo。Russ Rox的加入推動了語言和庫的實際可用性。設計團隊相當豪華。
Robert Griesemer參與設計Chrome瀏覽器中的Javascript執行引擎V8,V8採用即時編譯技術和分代(generational)的stop-the-world垃圾收集機制。Rob Pike乃大名鼎鼎的人物,曾在貝爾實驗室工作,是Unix作業系統、Plan9作業系統、Limbo程式語言和UTF-8編碼的主要設計者,寫過憤青式的文章Systems Software Research is Irrelevant,還有兩本書The Unix Programming Environment和The Practice of Programming。Ken Thompson是圖靈獎獲得者,是Unix作業系統、Plan9作業系統、UTF-8編碼和B程式語言(C的前身)的創立者之一。在google,Ken和Robert還設計過過用於大規模資料分析的Sawzall語言。Ian Lance Taylor是GCC社群的超級活躍人物,是gold聯結器和GCC過程間優化LTO的主要設計者之一,是Zembu公司的創始人之一。Russ Rox在MIT的博士論文是關於Xoc編譯器的設計。
高效編譯,高效執行和簡單編碼是開發者的期待。Go是面向系統程式設計的語言,其設計動機基於以下情景。C語言的標頭檔案引起的依賴管理無法進行快速編譯,C++和Java中麻煩的型別系統使得人們更傾向於python和javascript中的動態型別,垃圾收集和並行等基本概念沒有在目前的系統程式語言中得到很好的支援。因此go的設計簡化標頭檔案的依賴管理,使用輕量級的型別系統,型別沒有繼承,支援垃圾收集和併發,從而提供在多核系統上設計系統軟體的方案。在併發支援方面,go提供了儲存模型文件描述原子性,使用sync包支援互斥,基於通訊(而不是共享記憶體)來共享儲存。
為何不通過庫擴充套件已有的語言(比如C和C++)?他們認為C和C++的設計存在太多問題,比如缺乏垃圾收集,標頭檔案巢狀和依賴鏈太長,缺乏併發支援等。目前Intel設計的面向資料並行的Ct程式設計系統是通過擴充套件C++來實現,Cilk++是通過擴充套件c/c++實現。歡迎感興趣的讀者探討!目前Go只是實驗版本,仍有一些開放性的問題,比如是否支援例外和範型。Go Language Design FAQ中有很多關於語言設計權衡的解釋。
對於一個程式語言,開發者重點要關注編譯器(compiler)和執行時(runtime)。Go編譯器支援Linux和Mac OS X兩種作業系統,以及x86-64、x86和ARM三種體系結構。google現在的很多設計都支援ARM,這是因為Android系統的一個重要後端就是ARM。Go編譯器有兩套實現,一個為gc,另一個為使用GCC後端的gccgo。由於go的一些設計者來自Plan9團隊,編譯器的命名也使用了Plan9中的編譯器命名傳統,比如6g是x86-64上的編譯器,8g是386上的編譯器,5g是ARM上的編譯器。他們曾經考慮使用LLVM編譯器來實現go,由於大且慢,無法滿足效能目標而放棄。他們特別強調go是一個實現編譯器的好語言!Go執行時包括mark-and-sweep垃圾回收器,陣列和字串分片支援,段式棧支援,和go函式庫實現。目前gccgo所帶的執行時基於glibc實現,不支援段式棧管理和垃圾回收,由於棧大小固定,因此一次能建立的go函式數量受限。gc的編譯速度比gccgo快,執行時系統更健壯,但是生成程式碼質量稍微遜色。目前推薦開發者使用gc來玩go。
Let’s go!http://golang.org
6g hello.go 6l hello.6 ./6.out
相關文章
- 全新程式語言V釋出
- 支援泛型的Go語言1.18釋出泛型Go
- Go是Google的語言,而不是我們的語言Go
- Go 語言 Excel 類庫 Excelize 2.0.0 版本釋出GoExcelize
- Go 語言 Excel 文件類庫 excelize 釋出 1.4.1 版本GoExcelize
- Go 語言開發工具 LiteIDE X35 釋出,支援 Go modulesGoIDE
- Excelize 釋出 2.7.1 版本,Go 語言 Excel 文件基礎庫ExcelizeGo
- Excelize 釋出 2.5.0 版本,Go 語言 Excel 文件基礎庫ExcelizeGo
- Excelize 釋出 2.0.1 版本,Go 語言 Excel 文件基礎庫ExcelizeGo
- 這是一個程式語言的釋出貼
- Go 語言 Excel 文件類庫 excelize 釋出1.4.1版本GoExcelize
- 程式語言註釋大法
- Go語言(1)——程式結構Go
- Go語言————1、初識GO語言Go
- Python 3.8.0a2 釋出,物件導向程式語言Python物件
- 基於 Go 語言的社群系統:mlog-club1.0.3 釋出Go
- Excelize釋出2.0.1版本,Go語言Excel文件基礎庫ExcelizeGo
- 基於Go語言的社群系統:mlog-club1.0.3 釋出Go
- Google 釋出最新開放大語言模型 Gemma 2,現已登陸 Hugging Face HubGo模型GemmaHugging Face
- Go 語言實戰: 編寫可維護 Go 語言程式碼建議Go
- Go 語言程式設計規範Go程式設計
- Go語言併發程式設計Go程式設計
- Go程式語言評估報告Go
- [譯] Go 語言實戰: 編寫可維護 Go 語言程式碼建議Go
- GO語言————2、GO語言環境安裝Go
- 如何使用Go語言寫出物件導向風格的程式碼Go物件
- Go語言程式設計快速入門Go程式設計
- 部署Go語言程式的N種方式Go
- Go 語言如何解決程式碼耦合Go
- Go 語言專案程式碼品質Go
- GO語言————4.2 Go程式的基本結構和要素Go
- 【Go語言入門系列】(八)Go語言是不是面嚮物件語言?Go物件
- Go_go語言初探Go
- Google 大佬們為什麼要開發 Go 這門新語言?Go
- go 語言常量Go
- go語言使用Go
- Go語言mapGo
- go 語言切片Go
- Go 語言實現 gRPC 的釋出訂閱模式,REST 介面和超時控制GoRPC模式REST