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

2021-08-19 12:57:27 字數 2185 閱讀 7768

原文:p: a programming language designed for asynchrony, fault-tolerance and uncertaint

作者:shaz qadeer

翻譯:雁驚寒

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

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

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

p語言工具鏈流程圖

p的程式設計師在上層編寫協議及其規範。p編譯器提供針對競態條件的自動化測試和承載了指定協議的可執行程式。p在如下這幾個方面提供了一流的支援,包括:對併發進行建模、指定安全和活性屬性​、系統性的搜尋並檢查程式是否滿足其規範。對於這些功能來說,p與leslie lamport的tla+和gerard holzmann的spin相似。但與tla+和spin不同的是,p程式也可以編譯成可執行的c**。這種能力在高階模型和低階實現之間起到了橋梁的作用,也讓程式設計師可以更容易地接受正式的建模模型和規範。

通訊狀態機

在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應用於諸如機械人技術之類的應用,該類應用的複雜性主要源於不確定輸入下的決策。處理大量不確定的輸入目前正在研究之中。我們正在研究符號和概率技術來應對這一挑戰。

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

對於go來說,我們還能使用golang。

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

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

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

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

重視不確定性

面臨兩種選擇時,多數人認為最重要的是從中選擇,然而設計 無論是軟體設計還是其他設計 並不是這樣的。當你面對兩種可能性時,應該仔細考慮設計中存在的不確定性。不確定性可以促使你推遲決定 譯註1 收集更多的資訊 促使你使用分隔 partition 和抽象 abstract 的方法來降低設計決策的重要性 譯...

不確定性推理

不確定性推理 是指建立在不清楚,不明確的知識和證據基礎上的推理,不完備 不精確的知識推理,模糊知識推理。多種原因導致同一結論。解題方案不唯一,現實生活中的問題有很多解決方案,這些方案之間很難決定誰優誰劣,所以選擇認為較優的方案,就屬於一種不確定性推理。所需知識不完備,不精確。所需知識描述模糊。知識的...

不確定性學習(2)

續上。定義的常量 不確定性很小的一些量,比如 一些物理常量,我們認為他們是確定的,因此為定義的常量。決策變數 決策者可以直接控制的數量,也稱為控制變數或者政策變數。決策變數根據定義沒有真值,其值的確定依賴於決策者。價值引數 代表了決策者以及其代表人群的偏好。價值引數不應該被認為經驗數量 將價值引數的...