微軟近期推出了一款全新的程式語言 Bosque,該語言參考了 TypeScript 的語法與型別,還有 ML 和 Node/JavaScript 的語意。
作者微軟電腦科學家 Mark Marron 致力於消除程式設計過程中出現的各種複雜情況,創造出了他認為超越主流結構化程式設計的 Bosque 這一語言。
結構化程式設計現在隨處可見,不管你用的是 C/C++,還是 Java、Python 與 Golang 等程式語言,在開發過程中使用的基本都是這一程式設計思想,它最初是為了替換掉程式中弊大於利的 goto 語法而產生的。
研究者使用結構化程式設計思想中的迴圈、順序與選擇等設計,最終完全替換掉了 goto 指令,並且這樣的程式設計思想也一直流行至今。
Bosque 是隨著 Mark 發表的論文《Regularized Programming with the BOSQUE Language》提出的,論文中,作者指出上世紀 70 年代興起的結構化程式設計和抽象資料型別使得開發者可以遮蔽掉底層硬體架構的特徵,專註於編寫功能程式碼,同時開發也變得更加不易出錯。
而作者在此基礎上,提出了一種新的程式設計思想——Regularized Programming(規範化/正則程式設計),透過避免低階迴圈動作的迭代處理、用代數資料轉換運運算元豐富語言等設計,超越結構化程式設計。
作者同時為此思想設計了全新的程式語言 Bosque。具體來講,現有的程式設計得到簡化,成為規範化形式,消除了主要的不確定複雜性來源。
論文基於一系列分析、執行時與程式設計器開發的經驗與驗證,以及針對開發人員的採訪,確定了開發過程中會出現的 5 個主要不確定複雜性來源:
- 可變狀態和邏輯幀:將可變性引入程式語言破壞了以單調方式推理程式的能力,這迫使程式員(和任何分析工具)需要去確定在操作之後哪些東西還是有效的,而哪些又已經失效。同時可變程式碼傳回值和對引數(或其它全域性狀態)產生副作用影響程式狀態,也使得需要推理每個操作的邏輯幀。
- 迴圈、遞迴和不變數:迴圈和遞迴是推理的最基本挑戰,因為程式碼描述了單個步驟的效果,但理解完整構造需要對一組值的量化屬性進行泛化,不變數提供了所需的連線,但是一般來說這樣的計算通用技術是無法實現的。
- 不確定的行為:不確定的行為包括未定義的、在指定的或非確定的環境行為,這需要程式員或分析工具來推理和解釋所有可能的結果。例如:排序穩定性、地圖/字典列舉順序等。這些不確定的行為增加了開發過程的複雜性,並且隨著時間的推移,慢慢地被視為應該被刪除的技術債。
- 不遵循“資料不變”:程式語言通常為陣列/元組中的單個元素或物件/記錄中的欄位提供訪問與更新運運算元,這些訪問器/更新器在單個元素的基礎上執行,導致程式員在多個步驟上更新物件的狀態,此時通常持有的不變數在恢復之前暫時是失效的。在這些情況下,必須跟蹤和恢復的細節數量會大大增加錯誤發生的可能性。
- 相等與別名:程式語言處於數學和工程的邊界,雖然語言語意被表述為數學概念,但是存在一些常見情況,例如:取用相等、按值、按取用或評估順序傳遞,這背後其實是預設了底層是馮·諾依曼架構。雖然看似微不足道,但這些選擇對可理解性產生了重大影響,比如取用相等會導致關於別名關係推理的複雜性,並使其它架構的編譯變得非常複雜。
這些不確定複雜性是程式各種 bug 的來源,增加了開發者理解和實現應用功能的複雜性,同時使程式自動推理也變得非常複雜,或完全不可行。
其中,根據科技媒體 The Register 對 Mark 的採訪,Mark 認為可變狀態、迴圈和取用相等這三者的問題是最突出的。
以取用相等為例,Mark 指出,當兩個變數指向記憶體中的同一個物件時,問題的複雜性就提高了,“看起來非常簡單,但是一旦你在語意中出現取用相等,那麼就必須不斷地考慮它和它引入的指標別名的關係。”
而最為熟悉的迴圈機制也帶來不小的複雜性,在 Bosque 中它被取消了,下邊是一個等同於 JavaScript 中 for 迴圈的例子:
//Functor (Bosque) var a = List[Int]@{...}; //Pre: true var b = a.map[Int](fn(x) => x*2); //Post: List[Int]::eq(fn(x, y) => y == x*2, a, b)
Bosque 由規範化程式設計思想而來,正是為瞭解決當前結構化程式設計中遇到的這些問題,作者把結構化程式設計的興起認為是程式設計器與開發工具的第一個黃金時代,他相信此次提出的這規範化程式設計模型將大大提高開發者的工作效率、提高軟體質量,並帶來編譯器和開發工具的第二個黃金時代。
詳情檢視論文與原始碼:
- https://www.microsoft.com/en-us/research/uploads/prod/2019/04/beyond_structured_report_v2.pdf
- https://github.com/Microsoft/BosqueLanguage
開源中國徵稿啦!
開源中國 www.oschina.net 是目前備受關註、具有強大影響力的開源技術社群,擁有超過 200 萬的開源技術精英。我們傳播開源的理念,推廣開源專案,為 IT 開發者提供一個發現、使用、並交流開源技術的平臺。
現在我們開始對外徵稿啦!如果你有優秀的技術文章想要分享,熱點的行業資訊需要報道等等,歡迎聯絡開源中國進行投稿。投稿詳情及聯絡方式請參見:我要投稿
朋友會在“發現-看一看”看到你“在看”的內容