首頁  >  文章  >  後端開發  >  Go語言負責人離職後,一門國產語言誕生了

Go語言負責人離職後,一門國產語言誕生了

PHPz
PHPz轉載
2023-04-10 12:21:031197瀏覽

事件回顧 

#上週,GoogleGo語言計畫負責人Steve Francia宣布辭去職務,而他給出理由是:Go專案的工作停滯不前,讓他感到難受。有趣的是,部分國內的Gopher(Go語言愛好者的自稱)對Go語言也產生了新想法。例如,國內第一批Go語言愛好者之一的柴樹杉、全球Go貢獻者榜上長期排名TOP 50的史斌等Gopher,他們決定以Go語言為藍本,發起新的程式語言:凹語言™(凹讀音“Wa”)。

目前凹語言™的程式碼已經在Github開源,並且提供了簡單可執行的範例。根據其倉庫的介紹,凹語言™的設計目標有以下幾個:1、披著Go和Rust語法外衣的C 語言2、凹語言™源碼文件後綴為.wa3、凹語言™編譯器兼容WaGo語法,凹語法與WaGo語法在AST層面一致(二者可產生相同的AST並無損的互相轉換)4、凹語言™支援中文/英文雙語關鍵字,即任一關鍵字均有中文版和英文版,二者在文法層面等價

Go語言負責人離職後,一門國產語言誕生了

凹語言™示意,圖片來源@GitHub

根據柴樹杉、史斌等人的說法,Go語言「克制」的風格是他們對程式語言美學的最大公約數。因此,凹語言™計畫啟動時大量借鑒了Go的設計想法和具體實現。

當然,他們也表示,選擇Go語言作為初始的藍本,是有限投入下不得不做出的折衷。他們希望隨著專案的發展,累積更多原創的設計,為自主創新的大潮貢獻一點力量。雖說柴樹杉、史斌等人是資深的Gopher,偏愛Go語言並不難理解,但我們還是忍不住好奇:究竟Go語言有多神奇,讓他們對Go語言這麼著迷?

為什麼選取Go語言 

#許多使用過Go語言的開發者對Go的評價上看,Go語言在設計上有以下四個特點。

1、簡單易用
#不同於那些透過相互借鑒不斷增加新功能的主流程式語言(如C 、Java等),Go的設計者在語言設計之初就拒絕走語言特性融合的道路,而選擇了「做減法」。

他們把複雜留給了語言自身的設計和實現,留給了Go核心開發組,而將簡單、易用和清晰留給了廣大使用Go語言的開發者。因此,Go語言呈現出:

  • 簡潔、常規的語法(不需要解析符號表),僅有25個關鍵字;
  • #沒有頭檔;
  • 明確依賴(package);
  • 沒有循環依賴(package);
  • 常數只是數字;
  • 首字母大小寫決定可見性;
  • 任何類型都可以擁有方法(沒有類別);
  • 沒有子類型繼承(沒有子類別);
  • 沒有算術轉換;
  • 沒有建構子或析構函數;
  • 賦值不是表達式;
  • ##在賦值和函式呼叫中定義的求值順序(無「序列點」概念);
  • 沒有指標算術;
  • ##記憶體總是初始化為零值;
  • 沒有型別註解語法(如C 中的const、static等)
  • ……

2、偏好組合#

C 、Java等主流物件導向語言,透過龐大的自上而下的類型體系、繼承、明確介面實作等機制,將程式的各個部分耦合起來,但在Go語言中我們找不到經典物件導向的語法元素、類型體系和繼承機制。

那Go語言是如何將程式的各個部分耦合在一起呢?是組合。

在語言設計層面,Go使用了正交的語法元素,包括Go語言無類型體系,類型之間是獨立的,沒有子類型的概念;每個類型都可以有自己的方法集合,類型定義與方法實作是正交獨立的。
各類型之間透過類型嵌入,將已經實現的功能嵌入新類型中,以快速滿足新類型的功能需求。在透過新類型實例呼叫方法時,方法的匹配取決於方法名字,而不是類型。
另外,透過在接口的定義中嵌入接口類型來實現接口行為的聚合,組成大接口,這種方式在標準庫中尤為常用,並且已經成為Go語言的一種慣用法。

這是Go語言的一個創新設計:介面只是方法集合,且與實作者之間的關係是隱式的,如此可讓程式各部分之間的耦合降至最低。
3、並發與輕量

Go語言的三位設計者Rob Pike、Robert Griesemer和Ken Thompson曾認為C 標準委員會在思路上是短視的,因為硬體很可能在未來十年內發生重大變化,將語言與當時的硬體緊密耦合起來是十分不明智的,是沒辦法給開發人員在編寫大規模並發程式時帶去太多幫助的。
因而他們把將面向多核心、原生內建並發支援作為新語言的設計原則之一。

Go語言原生支持並發的設計哲學體現在下面兩點。
(1)Go語言採用輕量級協程並發模型,使得Go應用在面向多核心硬體時更具可擴展性。 (2)Go語言為開發者提供的支援並發的語法元素和機制。
4、工程導向

#Go語言的設計者在Go語言最初設計階段,就將解決工程問題作為Go的設計原則之一,進而考慮Go語法、工具鏈與標準庫的設計,這也是Go與那些偏學院派、偏研究性程式語言在設計思路上的一個重大差異。
這讓Go語言的規範夠簡單、靈活,有其他語言基礎的程式設計師都能快速上手。更重要的是Go自帶完善的工具鏈,大大提升了團隊協作的一致性。例如Gofmt自動排版Go程式碼,很大程度上杜絕了不同人寫的程式碼排版風格不一致的問題。把編輯器配置成在編輯存檔的時候自動執行Gofmt,這樣在寫程式碼的時候可以隨意擺放位置,存檔的時候會自動變成正確排版的程式碼。另外還有Gofix,Govet等非常有用的工具。

總之,Go在語言層面的簡單讓Go收穫了不遜於C /Java等的表現力的同時,也獲得了更好的可讀性、更高的開發效率等在軟體工程領域更為重要的元素。

#

凹語言™的未來 

#雖然今天,Go憑藉其優越的性能,已成為主流程式語言之一(超過75%CNCF項目,包括#KubernetesIstio,都是用Go寫的,另外,Go 也是主要的雲端應用程式語言之一),Go語言在中國也相當受歡迎,但我們還是不禁擔心脫胎於Go的凹語言™,會有美好的未來嗎?


預測未來從來都是困難的,不過,好在凹語言™的前面有一個先行者-Go 語言,我們不妨基於Go的發展,來大致推測凹語言™的未來。

Go 是七牛雲CEO許式偉發明的程式語言,於2020年7月正式發布,2021年10月推出1.0版本,目前最新發布版本是今年6月13日發布的1.1版本。也就是說,從正式發佈到現在,經過近兩年的時間,Go 還處於初始階段,距離大規模應用還有一定距離,那麼可以預見,凹語言™在未來相當長的時間裡,不會進入廣大開發者的視野中。

另外,根據ECUG Con 2022大會上許式偉發表的看法,雖然大家都比較看重程式語言的性能,但單從性能來看的話,許式偉認為Python在腳本語言裡面只能算二流,Python其實不快。 在許式偉看來,對新生的語言來說,最重要它選擇的目標群。

Go 選擇的目標人群是全民,許式偉稱其為“連兒童也能掌握的語言”,因而Go 從工程與STEM教育的一體化開始奠定用戶基礎。

正是Go 的這幾個特性,讓一部分開發者看好Go 的未來。而對Go 的正向預期,會成為Go 進一步發展的助力。

對凹語言™來說,這個道理也是適用的:凹語言™的發展重點可能不在於性能,而在於其選擇哪些人群作為目標受眾,以及透過何種方式獲得種子使用者。

如果日後凹語言™的專案方會公佈這些訊息,那麼凹語言™的未來還是可以期待的。

以上是Go語言負責人離職後,一門國產語言誕生了的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除