當前位置:
首頁 > 科技 > P語言:為非同步、容錯和不確定性而生的編程語言

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

作者 | Shaz Qadeer


翻譯 | 雁驚寒

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


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


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


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

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



P語言工具鏈流程圖


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

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


通信狀態機


在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語言:https://github.com/p-org/P


更多下載,請訪問微軟P語言及其工具:https://github.com/p-org

Reddit上的精彩相關評論:


所有的編程語言設計者在對語言進行命名的時候都應該考略到可搜索性。C這個名字就起的很不好。為什麼現在的編程語言在搜索引擎上都那麼難搜索呢,比如「go」和「p」。


對於Go來說,我們還能使用Golang。


這個好像跟Erlang挺像的?希望它的語法更好用。


微軟再一次證明了他們很不擅長起名。


明年將發布 P 360,然後再發布 P 1。


以後你就可以說:我在用P寫代碼,我需要用P來工作,請安裝P。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 CSDN 的精彩文章:

NoSQL資料庫的主主備份
100%代碼覆蓋率的悲劇
如何看待Kotlin成為Android官方支持開發語言?
巧用React Fiber中的渲染字元串新功能

TAG:CSDN |

您可能感興趣

C 的語言編程
如何選擇適合自己的編程語言?
怎樣解決編程語言之間的差異性問題?
編程語言排行中找不見它的編程語言VBA
在編程語言排行中找不見它,VBA編程語言
趣味漫畫:如何使用不同的編程語言來造一匹馬
扒一扒那些和編程語言無關的技術
邪惡的編程咒語
國產編程語言《易語言》是怎麼一步一步變遊戲外掛「代言人」的?
對於沒有編程經驗的人,R 語言是否很難掌握?
如何選擇大數據的編程語言
焦慮的 BAT、不安的編程語言,揭秘程序員技術圈生存現狀!
如何使用多種編程語言而又不失理智
常見的AI編程語言優缺點比較,程序員千萬不要入錯行!
程序員是否應該創造面向 IDE 而非人類的編程語言?
5 種編程語言可能註定失敗
如果編程語言是飛機
為什麼學了編程語言還是不會做軟體?
我們為何需要更安全的系統編程語言?
看似簡單但容易忽視的編程常識