注意 ここにある内容はpony2.x時代にドキュメントに書かれていた物なので、もう古い可能性が高いです。最新の情報は公式ドキュメントを参照してください。
全国の静的型付けじゃないと手が震えてしまうみなさんこんにちは。 アクターでも型を付けたいですね。
ということでそんな感じのことが出来るPonylangの紹介をしたいと思います。といいつつチュートリアル読みながら勉強したことをまとめた勉強メモ的な記事です(´・_・`)
今回はとりあえずHello worldまでです。
Ponyとは
Pony is an object-oriented, actor-model, capabilities-secure, high performance programming language.
なんだかすごそうです。
トップに挙げられているこの言語の特長は
- 型安全
- Ponyで使われている型システムについての証明 -> http://www.ponylang.org/papers/fast-cheap.pdf
- メモリセーフ
- 例外安全
- ランタイムエクセプション無し。全部キャッチされる
- データ競合フリー
- ロックやアトミック演算のようなものはなし
- 代わりに型がデータ競合が起きないことを保証してくれる
- デッドロックフリー
- そもそもロックがないのでデッドロックがない
- コンパイルされる
- C/C++との親和性
- 標準ライブラリ
- Erlang, Scalaより高速
- ツールサポート
- Atom, Sublime, Vim(pending), Visual Studio(pending)
- LLDB, GDB
- チュートリアル
- MLあり
- Sandboxあり
- OSS&論文発表
Ponyでは上記の利点の最初の5つを併せてcapabilities-secure
と呼んでいるようです。
Ponyチュートリアル
最速のアクターモデル言語としても使えそうですし、型安全なアクターモデル((akkaもAkka Typedを使えば型安全にはなります。Ponyは、型だけでなくreference capabilityのような概念も含めた安全性を提供しているのが特長です)としても使えて最強な感じがしました。
もちろん今流行のreactive-streams実装もあります。 GitHub - ponylang/reactive-streams: Pony implementation of http://www.reactive-streams.org/
どうですか。使ってみたくなりませんか。私はなりました。₍₍ (ง´・_・`)ว ⁾⁾ ということで公式チュートリアルです。
インストール
http://tutorial.ponylang.org/getting-started/installation/
brew install ponyc
だけで完了です。
llvmが依存になっているので、そういうことなのでしょう。
エディタはvimパッケージがpendingらしいのでatomを使いました(´・_・`)
はろぽに₍₍ (ง´・_・`)ว ⁾⁾
http://tutorial.ponylang.org/getting-started/helloworld/
下記のコードをおもむろにmain.pony
として書きます。ファイル名は.pony
で終わっていればなんでも良いようです。
actor Main new create(env: Env) => env.out.print("Hello, world!")
なんと同じディレクトリに居るならファイル名を指定せずにponyc
だけでコンパイルしてくれるようです。モダンですね(?)
$ ponyc Building . -> /Users/matsu_chara/Documents/sand/helopony Building builtin -> /usr/local/Cellar/ponyc/0.1.7/packages/builtin Generating Optimising Writing ./helopony.o Linking ./helopony
なんと.o
ファイルが生成されて自動でリンクしています。make
のようなビルドシステムは不要と書いてありました。すごい。
ちなみにheloponyはディレクトリ名です。
そして
./helopony Hello, world!
のように実行できます。
はろぽにの中身₍₍ (ง´・_・`)ว ⁾⁾
actor Main
ではアクターを宣言しています。ponyにはクラスもあるようです。違いはbehaviours
と呼ばれる非同期メソッドを持てることにあるようです。
new create(env: Env) =>
はコンストラクタの宣言です。コンストラクタが名前を持つので色々なコンストラクタを宣言することが出来ます。(new
はそのためのキーワード)
env.out.print("Hello, world!")
はお察しのとおりです。
まとめ
ということで型やアクターなどのおもしろそうな部分は次週に続きます。