世界を動かす技術を、日本語で。

ポニー:アクターモデルに基づく、安全な能力管理を持つ高性能プログラミング言語

概要

Pony はオープンソースで高性能なプログラミング言語。 オブジェクト指向アクターモデル を採用。 能力ベースのセキュリティ が特徴。 Pony Playground でブラウザからすぐ体験可能。 独自性や歴史についても解説。

Ponyとは

  • Ponyオープンソース のプログラミング言語
  • オブジェクト指向アクターモデル を組み合わせた設計
  • Capabilities-secure (能力ベースのセキュリティ)を実現
  • 高性能 な実行速度
  • Pony Playground でブラウザ上からすぐに試せる環境
  • 他の言語と異なる点や利用メリットの存在
  • Pony 誕生の初期歴史も公開
    • “An Early History of Pony”で詳細を確認可能

Ponyの特徴

  • アクターモデルによる 並行処理 の容易さ
  • 型安全性メモリ安全性 の両立
  • ガーベジコレクション 不要のメモリ管理
  • 能力ベース でオブジェクトへのアクセスを厳密に制御
  • 高いパフォーマンス安全性 の両立

Ponyを使う理由

  • 並列処理安全性 が求められるシステム開発への適性
  • オープンソース のため自由な利用・拡張が可能
  • 学習コスト が低く、すぐに体験できるPony Playgroundの存在
  • 革新的な設計思想と 最新のプログラミングパラダイム の導入

Ponyの歴史

  • Pony の初期開発経緯や背景
    • “An Early History of Pony”で詳細解説
  • 言語設計の目的や課題解決へのアプローチ
  • コミュニティ主導の進化

まとめ

  • Pony は最新技術を取り入れた 革新的プログラミング言語
  • 高性能 かつ 安全性 を重視した設計
  • 初心者 から 上級者 まで幅広く利用可能

Hackerたちの意見

こういう言語のウェブサイトには、ホームページにコードの例を載せてほしいな。言語の「雰囲気」を感じたいから。やっとチュートリアルでコードを見つけたよ。https://tutorial.ponylang.io/getting-started/hello-world

その通り!「言語を試す」デモは、すぐに編集可能な実行環境に入って、構文ハイライトやAPIドキュメントのツールチップ、コード補完があるといいよね。できるだけわかりやすく、スムーズに理解できるようにしてほしいな。

例のポニーアプリケーションはこちら: https://github.com/ponylang/ponyc/tree/main/examples プレイグラウンド: https://playground.ponylang.io/ HPにも載ってるけど、https://www.ponylang.io/ の記事リンクは/discover/に飛ぶのが残念。

これがどんな言語なのか、どこにコードが隠れてるのか気になってた。チュートリアルも、コードを見るまでにいくつかのページをクリックしないといけないから、もっとコードを前面に出した方がいいと思う。無駄な説明は減らして、コードを増やすのがオススメだね。

構文はこの言語で一番面白くない部分で、hello-worldの例もほとんど構文を示してない。この「About」ページのこの部分が注目されるね。「プログラミング言語を書くな。それがルール#1だ。みんな、必要ないって言って、構文について議論するだけだから。」

これを例として挙げるのはちょっと無理があるよ…ただのハローワールドじゃん、それだけ。せめて条件分岐とか、何か見せてよ。わかったよ、君の言語はすごいんだね。じゃあ、今見せてくれる?

Nimのホームページはいい感じだと思うよ。言語の概要を説明する箇条書きといくつかのコード例があってさ。Nimが優れてるとは言わないけど、最近そのページを見て、すごく良かったと思った。 https://nim-lang.org/

8月15日と16日に、サウスカロライナ州グリーンビルで開催されるカロライナコードカンファレンスでポニーについての講演があるよ。 https://carolina.codes

ファクターのホームページが大好きなんだけど、そこにはランダムな非トリビアル(つまり、小さいけど「ハローワールド」ではない)コードのスニペットが含まれているんだよね。 https://factorcode.org/

それを言うのは面白いね。Pony言語の投稿にはほとんど毎回このコメントが含まれてるし、いつも「https://tutorial.ponylang.io/に行く必要がある」って謝ってる。でもそこにはソースがまだないんだよね。https://github.com/KittyMac/PonyCAT/blob/master/pony-cheat-s... プロジェクトは、どんな形でも採用されるのが敵対的に見える。

どの言語の投稿でもこのコメントを見るけど、全然理解できない。言語の背後にある動機にもっと興味があるんだ。もし構文がAPLやForth、Prologのものであったら、Javaに見えないからってすぐに無視するの?言語の動機が魅力的なら、構文が段階的に説明されるチュートリアルに飛び込むことができると思うんだ。構文を理解する前に判断できるとは思えない。カールブレースとbegin/end、または好きじゃない略語(例えばdef, fun, defun, function, procedure)みたいな単純な構文で言語を受け入れたり拒否したりするの?

GC(ORCA)と共有モデルが注目されてるね。Zulip[0]もあって、週に一回のオフィスアワーもあるみたい。Sylvan Clebschは今、Project Verona[1]に取り組んでるよ。0. https://ponylang.zulipchat.com 1. https://www.microsoft.com/en-us/research/project/project-ver...

ズリップ(できればセルフホスティング)があるのはいいね、スラックみたいなクソみたいな選択肢に比べて。プライバシーを気にしてる人たちがいるってことを示してる。ズリップのチャットなら行ってみたいけど、スラックは絶対パスだな。

これが一番好きなプログラミング言語かもしれない。もっとサポートがあれば使いたいな。特にリファレンス機能がアクターモデルにすごく合ってると思う。でも、残念ながら大企業が後ろにいるわけじゃないし、魅力的なニッチなユースケースもないみたい(例えば、まだGCされてるし)。

数年前にこれで遊ぶのが大好きだったけど、しばらく忘れてたな。因果モデルは素晴らしかったけど、今はバックプレッシャーをどう扱うのかな?

PonyとRustの違いは、Ponyが簡単に参照サイクルを許可しているところだね。Ponyの革新的なポイントの一つはiso参照。iso参照は、オブジェクトグラフがそのiso参照からだけアクセスできることを意味してる。これで可変データの共有を避けられるんだ。

それに、素晴らしいガーベジコレクタがあって、能力の仕組みや、参照の扱い方から考えても十分良いと思うよ。

プロジェクトに合ったプログラミング言語を選ぶことについての良いポッドキャストがあるよ。これが最終的な選択に関係してるから、ぜひ聞いてみてね :) https://corecursive.com/055-unproven-with-sean-allen/

また文句言うみたいでごめんけど、ざっと見た感じ、実際の情報がない自慢話ばっかりだね。「なぜポニー?」をクリックしたら、いつ使うのか知りたいんだよ。自分で使うかどうか決めたいのに、時間を投資すべきかどうかがはっきりわかるページが見つからなかった。こういうのが欲しいな: - 例 - 使ってる企業/プロジェクト - この言語の目指してること - この言語の得意なこと

あまり会話を脱線させたくないけど、元のデザイナーであるシルヴァン・クレブシュは、今はマイクロソフトリサーチでヴェロナみたいな言語に取り組んでるよ。[0] 彼が最後に関わった論文は、ダイナミック言語に領域を追加することについてで、Pythonを例に実装してるんだ。 https://www.microsoft.com/en-us/research/publication/dynamic... [0] - https://www.microsoft.com/en-us/research/project/project-ver...

マイクロソフトは、オーリアンズ(.NET用)とダプラーアクター(コンテナ化されたワークロード用)の2つのアクターモデル「フレームワーク」を持っているのが注目だね。

ヴェローナはまだ注目されてるの?静かなプロジェクトみたいだね。

HNのモデレーターにお願い:リンクを https://www.ponylang.io/discover/ から https://www.ponylang.io/ に変更してほしいです。別のコメントでも言われているように、2番目のリンクでは「ブラウザで試す」がすぐに見つかるけど、最初のリンクでは2クリック必要で、そのうちの1回目はちょっと驚くようなホームページに戻るクリックなんだよね…残念ながら、ここにいる熱心な言語ファンたちは、コード例がどれだけアクセスしづらいかにかなりイライラしているみたい。すぐに構文を見て、$their_fave_langとの比較について鋭いコメントをしたいのに、言語の設計を詳しく説明した文書を4分から5分も読まなきゃいけないし、場合によってはマウスを10回もクリックしなきゃならない。もしポニーのチームの誰かがこれを見ていたら:ちょっと馬鹿げているけど、実際に素敵なウェブサイトを作ってたくさんの明確な情報があるから、「ブラウザで試す」リンクを左のバーガーメニューに追加することを考えてみて。そうすれば、みんながそれを見つけやすくなるし、HNの議論がPLファンたちによって無駄に脱線することもなくなるよ。

個人的には、真のPLファンなら、構文よりもセマンティクスに興味があると思う。:) ポニーのウェブサイトにあるリンク先のドキュメントの問題は、セマンティクスを説明していないわけじゃなくて(ちゃんと説明してる!)、静的型が何か全く分からない人向けに書かれているように見えることだね。[1] 構文とセマンティクスを簡潔に示してほしい。たとえ後者が全員が理解できる用語を使わないとしても。その後で詳細なチュートリアルがあるから。[1]: https://news.ycombinator.com/item?id=44722779

構文をすぐに見て、$their_fave_langとどう比較するかについて洞察に満ちたコメントを急いでここに戻すことができる代わりに、彼らは言語の設計を明確に説明する文書を読むのに最大4分、場合によっては5分もかけなきゃいけないし、マウスをクリックするのも10回以上強いられることもある。インターフェースデザインへようこそ!君の考え方は、試しても間違ってると言わざるを得ない :) 例えばAmazonで物を買うのはこうだよ:1. 車の写真をクリック 2. 「今すぐ購入」をクリック 君のやり方、またはPonyのウェブサイトデザイナーのアプローチを適用するとこうなる:1. 車が何かを10ページにわたって読む 2. 12ページに埋もれたリンクをクリックして買う どっちのアプローチがもっと売上を上げると思う?

言語には、特別な点を簡潔に説明したものがすぐにアクセスできる必要があるっていう意見には賛成なんだけど、ポニーみたいな言語では構文も大事だけど、面白いのはセマンティクスなんだよね。ガイドの最初の10ページくらいをざっと見た感じだと、ポニーはアクターを持つオブジェクト指向言語で、参照の可変性の概念が組み込まれているみたい。どんな参照があるの?デッドロックは不可能だって言ってるけど、どうやって?セッションタイプとかあるの?nullが存在しないって言ってるけど、どうやって?線形型付けとかあるの?能力をどう表現するの?要するに、この言語についてもっと学びたいかどうかを判断するために必要な静的および動的セマンティクス(つまり型システムとランタイムセマンティクス)を1ページでまとめてほしい。言語はクールに見えるけど、今まで見たドキュメントは、読者が静的型付けが何かすら知らない前提で書かれている気がする。知識のある人を興味を引くためには、すでにいくつかの言語に慣れている人たちにアピールできるピッチがあるといいと思う。

同意するけど、ポニーのセマンティクスのユニークな点を簡潔に説明するのは本当に難しいよね。数年前に試みた短い説明はこちら: https://news.ycombinator.com/item?id=33980738

Ponyの一ページの概要は持ってないけど、車の中で何回か「https://corecursive.com/055-unproven-with-sean-allen/」を聞いたことがあって、それで試してみたいと思ったんだ。

誰も言ってないことに気づいたんだけど、構文が意味を簡潔に表現するために存在するってこと。もし君が興味深い意味をすぐに感じさせたいなら、どうやってそれを構文的に表現するか見せてほしい。Rustの借用チェッカーを文章で説明するのは簡単かもしれないけど、&mutを使ったコードのスニペットを見せてくれれば、直感的に重要な概念がここで起こってるってわかるんだ。だから、フロントページのトップに例を載せてほしいんだよね。

チェック付きの数学の構文が大好きなんだ。a + bでラップアラウンド、a +? bでアンダーフローやオーバーフローの例外を発生させて、a +~ bで最大のパフォーマンスを出す。アンダーフローやオーバーフローの動作は未定義(浮動小数点数も±InfやNaNで未定義の動作になる)なんだけどね。例えばRustと比べると(これは現代の厳密な数学の良い例の一つだけど)、すごく簡潔で好きだな。欲しいのは飽和演算なんだ。無駄だと思う人もいるけど、「完璧な結果」という観点から見るとそうかもしれないけど、最も近い表現可能な数を提供してくれるし、ほとんどのアナログ機器がそうやって動くから、人間にとっては直感的なんだよね。

RustとPonyで足し算のデフォルトが違うのは面白いね。