Crystalは、最近、最初のメジャーバージョンをリリースした。Crystalは、Rubyの簡潔さと親しみやすさをCの効率と融合させることを目的とした、新しいオブジェクト指向のコンパイル済みシステムプログラミング言語である。Crystal 1.0は、Rubyに近い構文を持ち、静的に推測される型、Cバインディング、マクロを備えている。 Crystalは、Ruby/Rails、Elixir/Phoenixのバックグラウンドを持つ開発者を引き付ける可能性がある。
Crystalチームは、新しい言語の背後にある論拠を次のように説明した。
私たちは、コード記述についてRubyの効率性が好きです。
私たちは、コード実行についてCの効率性が好きです。
私たちは両方の長所を求めています。
どこにでも型を指定しなくても、コンパイラに意味を理解してもらいたいのです。
完全なOOPが必要です。
ああ、コードの実行速度を上げるためにCコードを記述したくありません。
Rubyとの完全な互換性は目標ではないと述べられているが、Crystalの構文はRubyと似ている。フィボナッチ関数は、Crystalで次のようにされる。
def fibonacci(n : UInt64)
return 1_u64 if n <= 1
fib(n - 1) + fib(n - 2)
end
puts fib(46)
Crystalは、内部でLLVMを使用してネイティブコードにコンパイルする。Crystalはサイトでベンチマークを公開していないが、ユーザーコミュニティは有望な結果を報告している。その一部はHacker Newsで高く評価されている。
Crystalのすべてはオブジェクトである。つまり、いくつかのメソッドに応答するタイプを持つエンティティである。オブジェクトにカプセル化された状態の断片には、メソッドを呼び出すことによってのみアクセスできる。Crystalの型システムでは、null参照チェック、メソッド(および演算子)のオーバーロード、共用体型、ジェネリック、列挙型、エイリアス、スプラット、タプルなどを使うことができる。コンパイラは型推論を使用して、開発者が型を明示的に記述する必要性を最小限に抑える。ただし、開発者は、場合によってはタイプアノテーションを使ってコンパイラを支援する必要がある。さらに、明示的な型はドキュメントとして役立ち、コンパイル時間を大幅に短縮する可能性がある。
Crystalを使用すると、開発者はCコードを記述しなくても、既存の大規模なCエコシステムをCバインディングで再利用できる。例は次のとおりである(say_hi_c
ディレクトリにhi
関数を含むCオブジェクトファイルが含まれていると仮定)。
require "./say_hi_c/*"
@[Link(ldflags: "#{__DIR__}/say_hi_c/sayhi.o")]
lib Say
fun hi(name : LibC::Char*) : Void
end
Say.hi("Auth0")
Crystalのマクロシステムはコード生成を簡素化し、定型文を減らすために使うことができる。Crystalは現在、メッセージ駆動型の並行性(ファイバーがチャネルを介して通信する)をサポートしていますが、並列処理はサポートしていない。複数のコアでCrystalランタイムを実行する機能は、ARMサポートとWindowsで利用できるようになることとともにロードマップにある。完全に静的にリンクされた実行可能ファイルの構築は、現在Alpine Linuxでのみサポートされている。
ある開発者は、Crystalで実現できるユースケースを次のように示した。
デーモンや鈍いカーネルなどの低レベルのシステムを作成する場合、Cを使用するのが最もパフォーマンスが高くなります。しかし、比較的小さいことを達成するのに長い時間がかかり、前述の理由により涙が流れる可能性が非常に高くなります。ここでCrystalの出番です。
他にも、どのように暗号通貨を作成するかを示すためにCrystalを使う開発者が多い。
より良いデモのために、パフォーマンスを犠牲にすることなく、Rubyのような生産的な言語を使用したかったのです。暗号通貨には時間のかかる計算(つまり、マイニングとハッシュ化)があります。そのため、C++やJavaなどのコンパイル言語が「実際の」暗号通貨を構築するための言語として選択されています。そうは言っても、開発を楽しくし、読みやすさを向上させるために、よりクリーンな構文の言語を使用したかったのです。Crystalのパフォーマンスはとにかく良い傾向にあります。
開発者は、成長するWebフレームワークのエコシステムを使ってWebアプリケーションを構築できる。最も注目すべきものは、Amber、Lucky、Kemalである。
Crystal言語(元々はJoyという名前)は2011年に始まった。当初の目標は、Rubyの生産性とコンパイルされた言語の速度と型の安全性を組み合わせることであった。最初の公式バージョンは2014年にリリースされた。Crystal 1.0は2021年3月にリリースされた。CrystalはApache Licenseバージョン2.0の下でライセンスされている。開発者は、オンラインプレイグラウンドでCrystalをすばやく試すことができる。