P語言: 為異步、容錯和不確定性而生的編程語言


原文P: A programming language designed for asynchrony, fault-tolerance and uncertaint
作者:Shaz Qadeer
翻譯:雁驚寒

cover

譯者注:P語言是一款由微軟、加州大學伯克利分校和倫敦帝國學院共同研發完成的編程語言,它在處理並發、故障切換等方面具有很強的優勢。本文介紹了P語言的起源、特性及其使用場景。以下是譯文。

新興應用程序的復雜性需要使用新興的方式去理解,然后才能高效地去構建、測試和調試。現在的應用程序常常會使用雲資源,采用人工智能技術,並嵌入到物理設備中。這三個因素的結合使得軟件開發變得非常困難。

通常來說,這些現代應用程序都具有異步性,主要表現在:為了提高性能,請求者在當前操作完成之前可繼續執行后面的操作。異步不可避免地會產生並發,並帶來一些臭名昭著的坑,例如競態條件和海森堡bug(軟件錯誤,通常與時序相關,但在調查其原因的時候該錯誤可能會消失,這是因為當前環境已經產生了變化)。為了應對異步計算帶來的挑戰,我們開發了P,一種用於在異步事件驅動應用程序中建模和制定協議的編程語言。該項目是微軟研發人員以及加州大學伯克利分校倫敦帝國學院的學術研究人員之間通力合作的結果。

A flowchart of the P programming language tool chain

P語言工具鏈流程圖

P的程序員在上層編寫協議及其規范。P編譯器提供針對競態條件的自動化測試和承載了指定協議的可執行程序。P在如下這幾個方面提供了一流的支持,包括:對並發進行建模、指定安全和活性屬性​、系統性的搜索並檢查程序是否滿足其規范。對於這些功能來說,P與Leslie Lamport的TLA+Gerard Holzmann的SPIN相似。但與TLA+和SPIN不同的是,P程序也可以編譯成可執行的C代碼。這種能力在高級模型和低級實現之間起到了橋梁的作用,也讓程序員可以更容易地接受正式的建模模型和規范。

P: programming language communicating state machines

通信狀態機

在P中,程序設計模型的基礎是依賴事件進行通信的並發執行狀態機,而每個事件包含了類型化的有效負載值。基於線性輸入和獨特指針的內存管理系統提供了安全的內存管理和data-race-free並發執行機制。在這方面,P類似於現代編程語言,比如Rust

P在微軟軟件開發中的首次應用是在Windows 8.1和Windows Phone中承載USB 3.0驅動程序。這些驅動程序管理了Windows生態系統中的一個最重要的外圍設備,並在當前數億台設備上運行。P在驅動程序的設計早期啟用了數百種競態條件和海森堡bug的檢測和調試,並在當前廣泛應用於Windows的驅動程序開發之中。P在Windows內核中的早期的積極經驗推動了P#的出現,P#是一個使用C#擴展來提供狀態機和系統測試的框架。與P相比,P#采用了最小化的語法集合,並最大限度地利用外部庫來提供建模、制定規范和測試等功能。

P正在改變Azure雲基礎架構的開發。Azure與其他雲提供商一樣,面臨着由意想不到的競態條件和軟硬件故障引起的海森堡bug所帶來的挑戰。這些錯誤會導致實時服務的中斷,這是雲服務提供商及其客戶需面對的巨大問題。P和P#目前已經在已部署的服務中查找和調​​試海森堡bug,並在系統部署前進行設計和驗證服務。P允許工程師在大型Azure服務的組件之間精確地模擬異步接口。它還能協助工程師發現並調試他們當前桌面上的問題,否則在部署服務后這些問題可能需要耗費幾個月甚至幾年的時間來解決。

P能夠進行充分的故障切換測試,這使其特別適合於進行容錯分布式服務驗證,也就是說,在意外故障發生時驗證服務是否能恢復並繼續運行。網絡消息的丟失和單個狀態機的故障都會被建模為事件。P將故障建模為事件使得故障注入變得更加地自動化,並可以在存在大量事件和錯誤的情況下對故障切換進行系統性的測試,而這幾乎無需程序員出力。

P在系統測試方面的能力使其能夠徹底搜查由於並發發送事件的順序不確定性而引起的所有可能。然而,該能力在處理顯式數據輸入方面存在一定的限制,特別是當該輸入的多樣性異常龐大的時候。 這種限制使得難以將P應用於諸如機器人技術之類的應用,該類應用的復雜性主要源於不確定輸入下的決策。處理大量不確定的輸入目前正在研究之中。我們正在研究符號和概率技術來應對這一挑戰。

下載P語言

更多下載,請訪問:微軟P語言及其工具

Reddit上的精彩相關評論:

  1. 所有的編程語言設計者在對語言進行命名的時候都應該考略到可搜索性。C這個名字就起的很不好。為什么現在的編程語言在搜索引擎上都那么難搜索呢,比如“go”和“p”。
  2. 對於go來說,我們還能使用golang。
  3. 這個好像跟Erlang挺像的?希望它的語法更好用。
  4. 微軟再一次證明了他們很不擅長起名。
  5. 明年將發布 P 360,然后再發布 P 1。
  6. 以后你就可以說:我在用P寫代碼,我需要用P來工作,請安裝P。

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com