ポスト・モダンなプログラミング言語¶
今回の比較対象¶
- Elixir
- Julia
- Crystal
その他の言語(今回非対象)¶
- Go
- Rust
- TypeScript
比較¶
Elixir | Julia | Crystal | |
登場年 | 2012 | 2012 | 2013 |
現行安定バージョン | 1.0.5 | 0.3.10 | 0.7.4 |
設計者 | José Valim |
|
Ary Borenszweig |
スポンサー | Plataformatec, The Pragmatic Bookshelf(Dave Thomas) | N/A | N/A |
パラダイム | マルチパラダイム(関数型, プロセス指向) | マルチパラダイム(手続型, 関数型) | マルチパラダイム(オブジェクト指向, 命令型, 関数型) |
型付け | 強い, 動的 | 強い, 動的, 付随型アノテーション, 型推論 | 強い, 動的 |
影響を受けたとされる言語 | Erlang, Ruby, Clojure | MATLAB, Scheme, Lisp, C, Fortran, Wolfram Language, Python, Perl, R, Ruby, Lua | Ruby, C, Lisp |
よく比較対象となる言語 | Erlang, Ruby | Python, R, C++ | Ruby |
想定される主な用途(主観) | 通信系サーバーアプリケーション | 数値計算, 科学計算, データサイエンス | CやC++の置き換え |
Elixir | Julia | Crystal | |
REPL | iex | julia | N/A |
コンパイル | JIT, AOT | JIT | JIT, AOT |
コンパイラ | Erlang, HiPE | LLVM | LLVM |
Homoiconicity | true | true | true |
動作環境 | BEAM, ネイティブ(HiPE) | ネイティブ | ネイティブ |
メモリ管理 | BEAMのライフサイクルを利用したGC相当処理 | GC (Cによる独自実装) | GC (LibGCを利用) |
ポリモーフィズム | プロトコルによる型と関数定義の継承 | パラメーター型や抽象型によるデータ構造とインタフェースの継承 | ダックタイピングによる振る舞いの継承 |
メタプログラミング支援 | 真のLispマクロ | 真のLispマクロ | 真のLispマクロ |
並行コンピューティング支援 | 双方向メッセージパッシングによるBEAMプロセス間通信, Erlang/OTPとの相互運用 | 片方向メッセージパッシングによるプロセス間通信 | N/A |
リアルタイム性 | スーパーバイザーによるソフトリアルタイムシステム | クラスタマネージャーによるソフトリアルタイムシステム | N/A |
FFI: Foreign Function Interface | Erlang/OTP | C, Fortran | C |
Unicode(UTF-8)対応 | 標準 | 完全対応しているが標準はASCII | N/A |
バイナリ操作 | 標準で可能 | N/A | N/A |
Integer空間(最大) | 64bit | 128bit | 64bit |
ドキュメンテーション | moduledoc, docstring | N/A | crystal docs |
Elixir | Julia | Crystal | |
パッケージ管理 | hex | METADATA.jl | crystal deps |
ビルドツール | mix | 無し | crystal init |
テストフレームワーク | ExUnit による BDD向けユニットテスト | Base.Test による BDD向けユニットテスト | crystal spec |
キラーアプリケーション | Phoenix Framework | Gadfly, IJulia | N/A |
RDBMS用O/Rマッパー | Ecto | N/A | N/A |
データベースドライバ(MySQL/MariaDB) | mariaex など | N/A | N/A |
データベースドライバ(PostgreSQL) | postgrex | JuliaDB/PostgreSQL.jl | N/A |
HTTPクライアント | HTTPortion など | HTTPClient | N/A |
XMLパーサ | sweet_xml など | LightXML | N/A |
JSONパーサ | poison など | JSON | N/A |
Elixir | Julia | Crystal | |
海外プロダクション利用の話 | BitCoinサーバー | N/A | N/A |
国内プロダクション利用の話 | あるらしい | 金融(FX)関連 | N/A |
海外イベント | ElixirConf, Erlang Factory, Strange Loop | JuliaCon, Julia Summer of Code, Google Summer of Code 2014, Strange Loop | N/A |
国内イベント | Shinjuku.ex, サッポロビーム, RubyKaigi | JuliaTokyo | N/A |
Elixir¶
Pros¶
- Erlang/OTPの機能をフルで利用可能, 完全な並行性
- 真のマクロが実現する、Erlang/OTPよりも強力で扱い易いメタプログラミング
- Erlang同様の強力なパターンマッチング
- スクリプト言語と同等の開発効率
- Erlangに対する実行速度のペナルティ無し
- スクリプト言語よりも高速な処理速度
Cons¶
- OTPに対する理解の最短ルートはErlangの学習
- Rubyユーザーに強い訴求力を持つが、書けば書くほどRubyとは異なる言語