微軟研究院開源程式語言Verona,借鑑Rust、Cyclone等特性

2020-12-22 機器之心Pro

機器之心報導

作者:一鳴、Jamin

近日,微軟研究院開源了一個名為 Verona 的項目。這是一個面向研究的程式語言,旨在解決內存管理和計算機安全方面的問題,並借鑑了 Rust 等的新特性。

計算機安全中很多問題都和內存管理相關,很多相關研究機構正在探究一些方法。近日,微軟研究院開源了一個研究型的程式語言項目——Verona。

Verona 語言是一個開源項目,微軟研究院希望通過這個項目幫助學界研究更好的內存管理方法。據悉,該項目吸收了 Rust、Cyclone 的一些特點。

開源地址:https://github.com/microsoft/verona

Verona 語言是什麼

Verona 是一個微軟研究院發起的項目,用於研究並發方面的問題。研究者希望提供一種新的並發模型,能夠無縫地和所有權結合。

根據微軟給出的介紹,Verona 項目旨在探索有關語言和 runtime 方面的研究,以實現安全的可擴展內存管理和分區工作。

主要的研究問題如下:

如果設計的語言沒有並發突變,是否可以構建可擴展的內存管理;能否在不犧牲內存管理的情況下,使用線性區域來消除每個對象線性度的限制;能否使用語言級別的分隔?

目前 Verona 仍然是一個處於很早期的研究類項目,部分類型檢查器還有待實現,同時實現的語言功能也較少。

社區評價

項目開源後引起了社區的討論。一些開發者認為,Verona 嘗試抽象所有者模型,更接近人們的使用習慣,能夠在不失安全性的情況下創建數據結構,但是是否能夠成功有待觀察。

還有開發者認為,從微軟本身(而不是微軟研究院)的角度來看,建立一個像 Go 語言那樣的原生語言也是應該的。

Verona 要解決的問題

「系統程式語言」是一個有著廣泛範圍的問題。從高級關鍵性能系統到低級的內存管理器,以及內核模塊都有所涉及。系統編程有兩個不同的方面:

可預測性

延遲資源佔用

原始訪問(Raw access)

可將內存直接視作位(bits)和字節(bytes)硬體層面使用更少的抽象(甚至完全不需要)

並發突變和內存安全

在 Verona 項目中,研究者認為放棄並髮型突變(concurrent mutation)是可擴展內存管理的必要一步。通過消除並髮型突變,開發者就不能將並發實現成庫。通常情況下有兩種選擇,暴露「unsafe」以啟用不安全的庫去實現並發(如 Rust),或者為語言提供一個並發模型(如 Pony)。

前者意味著程式語言只能依賴較少的不變量,因為它無法理解那些非安全模塊中的代碼是如何提供並發能力的。後者意味著需要一個驚人的 Concurrency Story,因為只能有一個 Concurrency Story。

共享所有權

在 Verona 中,研究者引入一種新的並髮型編程模型:並發所有者,簡稱 cowns。它封裝了一些資源集(如內存區域),同時確保了每次由一個執行線程訪問這些資源。

在 Verona 中,我們可以將一個對象包裝在 cown 中,使其並發。

// x is some isolated object graphvarc = cown(x)// c is a cown that mediates access to x.// We have lost direct access to x here

一旦使用者將一個對象包裝在一個 cown 中,便只能通過調度的方式去訪問它。在 Verona 中,這一方法通過關鍵詞 when 完成的。

when (var x = c){// Access internals of cown(c) using name x in hereBuiltin.print("Hello\n")}Builtin.print("Goodbye\n")

分區

Verona 使用分區和對象組,作為所有權中的基本概念。研究者沒有將對象所有權指定為一個 reference 有一個對象,而是將其概括為一個引用可以對應擁有一個分區,而一個分區是一組對象。在一個分區內,任何對象都可以引用該分區內的任何其他對象。但是研究者對拓撲結構沒有限制。當整個分區的 reference 消失時,則回收整個分區。

在類型中,使用 iso(isolated)去表示這是對某個分區的引用。對於可變的則使用 mut 表示,在類型中表示可變但不可擁有的引用。當 mut 用於欄位類型時,引用指向與欄位對象位於同一分區。當對參數類型使用 mut 時,引用會指向未知分區中的對象。這借鑑了 Rust 中的一種類型。

當分配一個對象時,指定它是否應該在自己的分區中:

var x = new Node;

或者與另一個對象在同一分區中:

var y = new Node in x

分區可以嵌套,並形成一個分區樹,其中的根分區要麼在堆棧中或在 cowns 中。

系統測試

由 P 和 P# 啟發,Verona 的 runtime 和系統測試在設計時深度結合。Verona 的並發模型讓所有的並發交互都在 runtime 上進行。

基礎的應用原本是針對 runtime 的測試,但是研究者想到了一種語言上的替代編譯器,由於幫助測試。它由 veronac-sys 和 interpeter-sys 構建,需要以下額外的參數:

--run-seed N--run-seed_upper N

所以

veronac-sys.exe --run testsuite/demo/run-pass/dining_phil.verona --run-seed 100 --run-seed_upper 200

使用如下命令,便可以運行 100 個交叉存取(一種內存加速方法)樣例。

veronac-sys.exe --run testsuite/demo/run-pass/dining_phil.verona --run-seed 100 --run-seed_upper 200

據項目介紹稱,這一項目希望能夠通過開源和研究界展開更多的合作。目前項目仍在早期階段,對於微軟本身使用的工程項目不會有影響。

相關焦點

  • 微軟正式開源受 Rust 啟發的新程式語言 Verona
    一個月前,微軟研究人員 Matthew Parkinson 曾提到:微軟正在開發基於 Rust 的新程式語言,該項目被命名為 Verona
  • 微軟在GitHub上開放了Rust啟發的Project Verona程式語言
    微軟最近透露出它正在從流行的Rust程式語言中汲取一些想法來創建一個新的轟動,該項目以項目Verona的名義為「安全基礎結構編程」創建了一種新語言。英國劍橋計算機實驗室的微軟研究員馬修·帕金森(Matthew Parkinson)在去年下半年的一次演講中首次詳細介紹了維羅納項目,並承諾微軟將儘快開源該項目。
  • 微軟解釋為什麼 Rust 是系統編程的最佳選擇
    在該系列最新一篇文章中,MSRC 團隊首席雲開發布道師 Ryan Levick 解釋了為什麼他們認為 Rust 程式語言目前是業界採用的最佳選擇,不僅僅是因為它能夠以內存安全的方式編寫系統級程序。「首先,已經有很多出色的內存安全語言在微軟內外廣泛使用,包括 .NET 語言(像是 C# 或 F#)和其他語言(例如 Swift、Go 和 Python)。
  • 想要改變世界的 Rust 語言
    並且在後面的系列文章中逐步探討,為什麼微軟認為 Rust 語言目前是業界的最佳選擇。微軟的這一系列文章,看樣子比 Facebook 的 Libra 項目更加吸引眼球。大家都認為微軟要計劃使用 Rust 了,但其實微軟早已在內部使用 Rust,比如 Azure IoT Edge 項目,已經在 GitHub 開源。
  • 微軟開源早期程式語言 GW-BASIC
    微軟通過一篇博客文章宣布開放 GW-BASIC 的原始碼。並表示,自從 MS-DOS 1.25 和 2.0 開源後,社區中要求同樣開源 BASIC 語言的呼聲頗高。因此微軟選擇將 1983 年以來的 8088 彙編語言開源出來,但僅作歷史參考和教育用途,不再接收任何修改源碼的拉取請求。GW-BASIC 是 BASIC 的一個方言版本,誕生於 1983 年 2 月 10 日,作為 MS-DOS 的一個組成部分而問世。
  • 繼C/C+之後,微軟如何全面採用 Rust 的?
    從Windows、Office到Azure雲,微軟的所有核心產品都在它上面運行。由於C ++不是一種內存安全的語言,因此在其代碼庫中會彈出很多內存錯誤,並且需要花費大量時間來修復它們。 去年,Microsoft開始研究可以幫助解決其內存安全問題的替代程式語言。作為這些努力的結果,Microsoft已開始嘗試在某些情況下將Rust集成到其代碼庫中。
  • 都說Rust程式語言難學,那我們Ubuntu系統裡安裝下試試
    近日,程式語言Rust的官方在全球做了一個調查,然後發布了 2020 年 Rust 調查報告。這個又引發大家一陣對Rust的討論。這個曾經很小眾的程式語言,發布以後近些年越來越受開發者和企業的認可。在大型項目底層開發等領域C/C++「一統江湖」的年代,Rust能媲美這兩種底層的強大的語言,實力著實不可小覷。安全、性能、並發等特性的優勢,讓使用過的開發者都讚不絕口,眾口一詞給出肯定的態度。不過與之相應的是,Rust程式語言的學習難度。這個廣受好評的程式語言,其學習門檻之高也廣受大家「詬病」。的確,即便是比較資深的程式設計師,上手Rust都有一定的難度。
  • Rust Cookbook 中文版 - Rust 生態中使用各類 crate 來完成編程任務的良好實踐
    《Rust Cookbook 中文版》是 Rust 程序設計語言(Rust 2018 簡體中文版文檔)的簡要實例示例集合:展示了在
  • Rust 語言入門
    相對於前輩產品(最重要的是 C,它比 Rust 早了 38 年),Rust 是一種較新的語言,但它的血統造就了它的多模式方法。Rust 被視為一種類似 C 的語言,但它包含的其他特性帶來了相較其前輩產品的優勢。首先,Rust 受到了 Cyclone(C 的一種安全方言,一種命令式語言)的重大影響,包含來自 C++ 的面向對象特性的一些方面。
  • 想學編程不知道學什麼語言?幾大流行程式語言比較
    很多軟體開發的職位都有著很高的薪資,因此有很多人開始自學或者去找培訓機構來學習編程,希望自己也能進入軟體開發這一行業來提高自己的收入。那麼編程的語言到底哪一個適合我們去學習,哪個能讓我們很快的能夠熟練並且能夠走上工作崗位的?下面我就來給大家對比一下幾個熱門的程式語言。
  • 30種不同的程式語言怎麼寫「Hello, World」
    TypeScript是一種由微軟開發的開源、跨平臺的程式語言。它是JavaScript的超集,最終會被編譯為JavaScript代碼。Scala是一門多範式的程式語言,一種類似java的程式語言,設計初衷是實現可伸縮的語言、併集成面向對象編程和函數式編程的各種特性。
  • Rust 語言 2019 調查報告發布:它為什麼流行不起來?
    從 2019 年下半年至今,不到一年的時間內,Rust 語言確實接二連三地掀起過一些波瀾。從微軟探索將 Rust 作為 C 和 C++ 的安全替代方案開始,Rust 吸引了越來越多的目光:內核維護者表示願意接受用 Rust 開發 Linux 驅動;AWS 也伸出橄欖枝,宣布贊助 Rust;微軟更進一步,在今年年初開發並開源了受 Rust 啟發的新程式語言 Verona;最近,蘋果也站出來擁抱它,將 C 代碼移植到 Rust。
  • Facebook 發布開源程式語言——Hack
    據國外媒體報導,Facebook周四發布一款名為「Hack」的全新程式語言,並聲稱該語言將能使代碼的編寫和測試更加高效快速。 Facebook已在公司內部使用該語言超過一年時間,現在將以開源的形式將其正式發布。
  • 5 月程式語言指數榜:Python首次超越Java,微軟修復記事本bug
    2.5 月程式語言指數榜:Python 首次超越 Java 奪下冠軍這個 5 月,國外兩個流行的程式語言參考指標榜單都出現了十分有意思的變化。在 TIOBE 5 月程式語言榜中,Scala 厚積薄發,一舉進入 TOP 20 。
  • 編程高手必須會的5種程式語言,進來看看你會幾種?
    同樣,我們也可以通過」語言「來控制計算機,讓計算機為我們做事情,這樣的語言就叫做程式語言。程式語言也有固定的格式和詞彙,我們必須經過學習才會使用,才能控制計算機。那麼我們今天就來介紹其中的五種語言,小夥伴們隨著小編一起來看吧!
  • 北大青鳥:2020年5月中國程式語言排行榜,哪種編程工資最高呢?
    :0.71% 簡介:Scala是一門多範式的程式語言,一種類似java的程式語言 ,設計初衷是實現可伸縮的語言 、併集成面向對象編程和函數式編程的各種特性。Perl借取了C、sed、awk、shell腳本語言以及很多其他程序語言的特性,其中最重要的特性是它內部集成了正則表達式的功能,以及巨大的第三方代碼庫CPAN。簡而言之,Perl像C一樣強大,像awk、sed等腳本描述語言一樣方便,被Perl語言愛好者稱之為「一種擁有各種語言功能的夢幻腳本語言」、「Unix中的王牌工具」。
  • Rust 語言新人入門指南
    如果你來自 Haskell/Ocaml 等函數式語言社區,你會有相當的親切感。對於有豐富 C++ 開發經驗的同學來說,上手可能相對比較容易。了解一般來說,要決定學習一門新語言之前,會先大體了解下這門語言的特點和目前的發展情況。
  • 2020 年 6 月程式語言排行榜,Rust 第一次進入榜單前 20.
    TIOBE 2020 年 6 月份的程式語言排行榜已經公布。Rust 之前排名約在 30 位左右,5 月份開始上升到第 21 位,本月直接進入了榜單前 20,這也是它首次進入榜單前 20。在上周 Stack Overflow 公布了 2020 開發者調查報告中,Rust 在開發者最喜愛的程式語言中排行榜首:Rust 相關學習資料:https://www.runoob.com/rust/rust-tutorial.html6 月份跟 5 月份比較沒有很大的變化,C 語言本月還是排在第一,R 語言從第 10 位上升到第 9 位,與 SQL 對調了位置。
  • Rust可太香了!AWS為此拿下其編譯器團隊負責人
    巨頭對 Rust 興趣濃厚 Rust 是一種較為年輕的程式語言,直到 2015 年才發布 1.0 版本,但其人氣絲毫未受影響。根據來自 65000 多名開發人員的調查反饋,Rust 連續五年位居 Stack Overflow「最受歡迎」程式語言榜首。
  • 最受歡迎的12種程式語言
    C語言的一些特性來源於B語言或基本組合程式語言-BCPL。   C語言是強大的程式語言之一。 它廣泛用於在Linux,UNIX和Windows等作業系統上開發系統應用程式。 它也用於其他平臺,如資料庫系統,解釋器,作業系統開發,文本編輯器,列印假脫機程序,圖形包,電子表格,編譯器和彙編程序,語言解釋器,實用程序,文字處理器和網絡驅動程序。