您好,登錄后才能下訂單哦!
今天小編給大家分享一下Pony是什么的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
Pony 是一個面向對象的基于 AcTor 模型的安全而且高性能的編程語言。Pony 提供 Sublime 和 Atom 編輯插件,同時很快將提供 VIM 和 Visual Studio 支持。可使用 LLDB 和 GDB 進行調試。
Pony 兼容 C 程序,其編譯器可從 Pony 庫中生成 C 的頭文件,這樣 C/C++ 程序可方便調用 Pony 庫。
你可以把 Pony 想象成某種“Rust 遇上 Erlang”的東西。Pony 有著最引人注目的特性,它們是:
類型安全存儲安全異常安全無數據競爭無死鎖此外,它可以被編譯為高效的本地代碼,它是在開放的情況下開發的,在兩句版 BSD 許可證下發布。
以上說的功能不少,但在這里我將重點關注那些對我們公司來說采用 Pony 至關重要的功能。
使用大多數我們現有的工具編寫快速、安全、高效、高并發的程序并非易事。“快速、高效、高并發”是可實現的目標,但加入“安全”之后,就困難了許多。對于 Wallaroo,我們希望同時實現四個目標,而 Pony 讓實現它們更加簡單。
Pony 讓并發變得簡單。部分是通過提供一個固執的并發方式實現的。在 Pony 語言中,所有的并發都是通過 Actor 模型 進行的。
Actor 模型以在 Erlang 和 Akka 中的實現最為著名。Actor 模型出現于上世紀 70 年代,細節因實現方式而異。不變的是,所有計算都由通過異步消息進行通信的 actor 來執行。
你可以用這種方式來看待 Actor 模型:面向對象中的對象是狀態 + 同步方法,而 actor 是狀態 + 異步方法。
當一個 actor 收到一個消息時,它執行相應的方法。該方法可以在只有該 actor 可訪問的狀態下運行。Actor 模型允許我們以并發安全的方式使用可變狀態。每個 actor 都是單線程的。一個 actor 中的兩個方法絕不會并發運行。這意味著,在給定的 actor 中,數據更新不會引起數據競爭或通常與線程和可變狀態相關的其他問題。
Pony actor 通過一個高效的工作竊取調度程序來調度。每個可用的 CPU 都有一個單獨 Pony 調度程序。這種每個核心一個線程的并發模型是 Pony 嘗試與 CPU 協同工作以盡可能高效運行的一部分。Pony 運行時嘗試盡可能利用 CPU 緩存。代碼越少干擾緩存,運行得越好。Pony 意在幫你的代碼與 CPU 緩存友好相處。
Pony 的運行時還會有每個 actor 的堆,因此在垃圾收集期間,沒有 “停止一切” 的垃圾收集步驟。這意味著你的程序總是至少能做一點工作。因此 Pony 程序最終具有非常一致的性能和可預測的延遲。
Pony 類型系統引入了一個新概念:引用能力,它使得數據安全成為類型系統的一部分。Pony 語言中每種變量的類型都包含了有關如何在 actor 之間分享數據的信息。Pony 編譯器用這些信息來確認,在編譯時,你的代碼是無數據競爭和無死鎖的。
如果這聽起來有點像 Rust,那是因為本來就是這樣的。Pony 的引用功能和 Rust 的借用檢查器都提供數據安全性;它們只是以不同的方式來接近這個目標,并有不同的權衡。
決定是否要在一個非業余愛好的項目上使用一門新的編程語言是困難的。與其他方法想比,你必須權衡工具的適當性和不成熟度。那么,Pony 和你搭不搭呢?
如果你有一個困難的并發問題需要解決,那么 Pony 可能是一個好選擇。解決并發應用問題是 Pony 之所以存在的理由。如果你能用一個單線程的 Python 腳本就完成所需操作,那你大概不需要它。如果你有一個困難的并發問題,你應該考慮 Pony 及其強大的無數據競爭、并發感知類型系統。
你將獲得一個這樣的編譯器,它將阻止你引入許多與并發相關的錯誤,并在運行時為你提供出色的性能特征。
以上就是“Pony是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。