編碼的世界 / 優質文選 / 文明

設計一款編程語言有多難?Ruby 創始人揭秘


2022年7月24日
-   


作者 | DAVID CASSEL
譯者 | 彎月,責編 | 鄭麗媛
頭圖 | CSDN 下載自視覺中國
出品 | CSDN(ID:CSDNnews)
以下為譯文: 最近,Ruby編程語言的創始人兼主設計師、雲平台即服務公司Heroku的Ruby首席架構師松本行弘在一次演講中表示,由松本行弘領導的Ruby社區對該編程語言的發展進行了深入思考。此次30分鐘的演講中還提到了該編程語言即將迎來激動人心的新發展。
松本表示:“在過去的四五年間,我一直在談論Ruby 3的未來。也許很多人已經厭倦了這種老生常談。但是今年Ruby 3真的要來了,今年12月25日聖誕節Ruby 3將正式發布。”在聖誕節當天發布Ruby語言升級是該語言的一項傳統。
“如果一切順利的話,我們將於12月正式發布Ruby 3,除非出現非常糟糕的意外。”

設計師的困境


來自世界各地(從印度到印度尼西亞,從巴西到柏林)的數百名觀眾觀看了松本的直播,很多人發表了熱情洋溢的評論。他們聚集在一起觀看為Ruby的發展付出了25年心血的松本的演講。據說,Ruby 3本來計劃於東京奧運會的前夕推出,但由於奧運會被推遲到2021年,因此核心開發人員懷疑Ruby 3是否也應該推遲一年。
“但是經過一番討論,我們決定於今年發布Ruby 3,因為作為開源社區,我們必須向前邁進。我們必須不斷前進,開源社區通常不能停止發展,否則,就會面臨死亡……”。
松本深刻地描述了所有語言設計師所面臨的困境。“每個人都喜歡新事物,因此,作為程序員和工程師,我也喜歡新事物。此外,我非常喜歡語言,所以我喜歡研究新的編程語言,比如Elixir、Rust、Go等。我為這些語言感到非常興奮。”然而,這也為Ruby語言的變革帶來了壓力。松本說:“Ruby有點年頭了,它於1995年發布。我們只是凡人。我們犯了一些錯誤。因此作為語言設計師,我們希望糾正過去的錯誤。”
但與此同時,“沒有人希望經歷痛苦。”在所有Web應用程序都在使用Ruby現有版本的情況下,強迫開發人員升級有點危險,“沒有人喜歡痛苦。從這個意義上講,Ruby應該是穩定的。這似乎有點矛盾吧?”
“因此,Ruby語言的設計以及語言的計劃很難克服這種矛盾。這種矛盾是我們發自內心的。”
他講述了其他面臨類似困境的編程語言,包括Python、PHP和ECMAScript,並指出這些社區花費了多年的心血才讓大家接受了這些變化。例如Python 3,社區花費了十多年的時間,而PHP 6甚至被取消了。他們在發布之前放棄了重大更改,然後從PHP 5直接跳到了PHP 7。EMCAScript4也被取消了。
松本解釋說,如果不進行更改,人們可能會離開社區。“他們會因為無聊而停止使用Ruby。”但同時他也擔心,如果升級到更高版本帶來的痛苦太多,那麼他們可能也會離開社區,因為他們會決定“也許我們的下一個項目應該采用Rust、Go或其他編程語言。”
“因此,設計一種語言很困難,但是無論如何我們都必須向前邁進,以創造未來。”

讓Ruby重振光輝


在演講中,松本還概述了保持兼容性的計劃,同時“加快Rust的速度,提高Ruby程序員的效率。”他確定了三個明確而具體的目標,這些目標代表了即將發布的Ruby 3的特征:快速、並發與正確。
為了加快Ruby的速度,開發團隊將著手改進其JIT編譯器(用於生成原生代碼)。為了實現並發,他們沒有選擇其他語言的解決方案,而是打算嘗試自己的一種方法。Node.js添加了Promise來通知異步操作的完成,而ECSMAScript 7添加了帶有關鍵字async和await的控制機制,但Ruby 3將實現人們期待已久的異步i/o功能“fiber”,作為更好的控制異步線程的方法。”由於在fiber之間切換上下文很快,因此可以提高性能。“
他們認為這種方法能夠提升性能的另一個原因是:它是由Ruby的falcon應用服務器的創建者開發的,松本認為這個項目非常快。但這並不是他們提高性能的唯一方法。他們還實現了“Ractor”(即Ruby Actor),類似於JavaScript提供背後“Web worker”腳本的方式。每個Ractor都可以並行運行,松本解釋說,這利用了現代多核系統中的並行處理。
Ruby的第三個目標是正確性,這個目標指的是提早檢查錯誤,主要由類型分析器負責實現,它將生成Ruby簽名(松本將之類比為TypeScript中描述類型的d.ts文件)。Ruby 3將為其核心庫提供類型簽名,可用於類型檢查,還可以用於增強將來的IDE。
但是它也有其局限性。松本解釋道:“我們不追求類型系統的完整性和合理性,因為Ruby就是Ruby。Ruby基本上是動態類型的,這意味著,即使我們現在有了漸進式類型系統,也無法進行任何完全正確的類型檢查,所以只能放棄。我們不會在語法中添加類型聲明。”

三種新功能


Ruby 3的語法發生了一些變化。松本對三個新特性非常滿意,他表示:“Ruby會越來越好。首先是複雜的模式匹配語法,你不必解構數組和哈希,因為可以編寫模式,非常簡便。”

第二個新功能可以給等號右側的變量賦值。他說,雖然從外觀來看,我們會覺得有點“不自然”,IDE也會有點不適應,因為一般表達式都以變量開頭,即使將值分配給很長的一個代碼塊也是如此。“如果可以反過來,將賦值變成右值運算,那麼看起來會很自然,但我們並不建議在所有地方使用。你不必用右值賦值來替換每個賦值操作,但是在某些情況下,這非常方便。”

Ruby 3中的第三個新功能是編號的塊參數,“你不必再給臨時的本地塊參數起名字。”

松本表示:“穩定性很重要”,所以他並沒有表示Ruby 3之後會有任何重大的語法變化。相反,他們將專注於改進Ruby現有的支持工具,例如用於語言服務器協議的Solargraph,用於靜態類型檢查的Sorbet,以及幫助開發人員編寫出符合Ruby規範的代碼的Rubocop 。“這些工具證明,工具越好帶來的用戶體驗就越好。因此,我們必須繼續努力。我認為我們需要更多的工具,然後我們還需要改進這些工具。”松本還希望看到更好的類型檢查工具和格式化工具,或者更好的性能調整和調試工具。此外,對於如何加快Ruby的速度,松本還有一些其他想法,例如在位於虛擬機上方設置另一個輕量級JIT編譯器,比如MIR或DynASM。

更加輕量級的Ruby


最後,在有關Ruby 3的討論中,松本還提到了另一個想法:“雖然這只是一個瘋狂的主意,但我正在考慮建立一個更加輕量級的Ruby子集,這個子集不僅更簡單更嚴格,而且更快或更容易優化。”
這個Ruby子集可以向下兼容,即可以在所有現有已有的Ruby版本中運行(盡管並非所有版本的Ruby都可以在這個輕量級的Ruby中運行)。在解釋其基本原理時,松本展示了一張幻燈片,上面寫著:“這款輕量級的Ruby運行得更快。”他表示:“這只是一個初步的想法。還不是十分明確。我們必須保持兼容性,但是如果我們止步於這個Ruby子集,那麼可能會缺乏靈活性,但是應該更容易優化。” 
松本還表示:“我有很多瘋狂的想法,我們會逐個嘗試,讓Ruby變得越來越好。”
原文:https://thenewstack.io/ruby-creator-yukihiro-matsumoto-on-the-challenges-of-updating-a-programming-language
本文為 CSDN 翻譯,轉載請注明來源出處。

更多精彩推薦
☞穀歌軟件工程師薪資百萬,大廠薪資有多高?
☞CSDN 創始人蔣濤:選擇長沙作“大本營”,打造開發者中心城市
☞杜甫在線演唱《奇跡再現》、兵馬俑真人還原……用AI技術打破次元壁的大穀來參加騰訊全球數字生態大會啦!
☞開放源碼,華為鴻蒙HarmonyOS 2.0來了
☞20張圖,帶你搞懂高並發中的線程與線程池!
☞跨鏈,該怎麼跨?

點分享點點贊點在看

熱門文章