微软推出新语言Bosque,超越结构化程序设计
微軟近期推出了一款全新的編程語言 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 開發者提供一個發現、使用、并交流開源技術的平臺。
現在我們開始對外征稿啦!如果你有優秀的技術文章想要分享,熱點的行業資訊需要報道等等,歡迎聯系開源中國進行投稿。投稿詳情及聯系方式請參見:我要投稿
推薦閱讀
紅帽接手維護OpenJDK 8與11
Stack Overflow 2019開發者調查報告發布
Windows 10源碼一覽!
騰訊重磅開源DCache,分布式NoSQL存儲系統
fork()成為負擔,需要淘汰
我,開源中國,「在看」↓↓↓
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的微软推出新语言Bosque,超越结构化程序设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 张队长主讲这堂 .NET Core技术培
- 下一篇: 解决vs2019中暂时无法为.net c