當前位置:
首頁 > 知識 > Pony 編程語言簡介

Pony 編程語言簡介

Pony 編程語言簡介

打開今日頭條,查看更多圖片

Pony,一種「Rust 遇上 Erlang」的語言,讓開發快捷、安全、高效、高並發的程序更簡單。

-- Sean T Allen

Pony,一種「Rust 遇上 Erlang」的語言,讓開發快捷、安全、高效、高並發的程序更簡單。

在 Wallaroo Labs ,我是工程副總裁,我們正在構建一個用 Pony 編程語言編寫的 高性能分散式流處理器 。大多數人沒有聽說過 Pony,但它一直是 Wallaroo 的最佳選擇,它也可能成為你的下一個項目的最佳選擇。


「一門編程語言只是另一種工具。與語法無關,與表達性無關,與範式或模型無關,僅與解決難題有關。」 —Sylvan Clebsch,Pony 的創建者

我是 Pony 項目的貢獻者,但在這裡我要談談為什麼 Pony 對於像 Wallaroo 這樣的應用是個好選擇,並分享我使用 Pony 的方式。如果你對我們為什麼使用 Pony 來編寫 Wallaroo 甚感興趣,我們有一篇關於它的 博文 。

Pony 是什麼?

你可以把 Pony 想像成某種「Rust 遇上 Erlang」的東西。Pony 有著最引人注目的特性,它們是:

  • 類型安全
  • 存儲安全
  • 異常安全
  • 無數據競爭
  • 無死鎖

此外,它可以被編譯為高效的本地代碼,它是在開放的情況下開發的,在兩句版 BSD 許可證下發布。

以上說的功能不少,但在這裡我將重點關注那些對我們公司來說採用 Pony 至關重要的功能。


為什麼使用 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 可能是一個好選擇。解決並發應用問題是 Pony 之所以存在的理由。如果你能用一個單線程的 Python 腳本就完成所需操作,那你大概不需要它。如果你有一個困難的並發問題,你應該考慮 Pony 及其強大的無數據競爭、並發感知類型系統。

你將獲得一個這樣的編譯器,它將阻止你引入許多與並發相關的錯誤,並在運行時為你提供出色的性能特徵。


開始使用 Pony

如果你準備好開始使用 Pony,你需要先在 Pony 的網站上訪問 學習部分 。在這裡你會找到安裝 Pony 編譯器的步驟和學習這門語言的資源。

如果你願意為你正在使用的這個語言做出貢獻,我們會在 GitHub 上為你提供一些 初學者友好的問題 。

同時,我迫不及待地想在 我們的 IRC 頻道 和 Pony 郵件列表 上與你交談。

要了解更多有關 Pony 的消息,請參閱 Sean Allen 2018 年 7 月 16 日至 19 日在俄勒岡州波特蘭舉行的 第 20 屆 OSCON 會議 上的演講: Pony,我如何學會停止擔心並擁抱未經證實的技術 。



via: https://opensource.com/article/18/5/pony

作者: Sean T Allen 選題: lujun9972 譯者: beamrolling 校對: wxy

本文由 LCTT 原創編譯, Linux中國 榮譽推出


點擊「了解更多」可訪問文內鏈接

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

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


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

Python Web 應用程序 Tornado 框架簡介
將 Python 結合到數學教育中

TAG:Linux技術 |