Crystalとは
Crystalは、オブジェクト指向の汎用
プログラミング言語であり、
静的型付けの
コンパイラ言語です。
Rubyに影響を受けた構文を持ちながら、
コンパイラ言語としての高い実行速度と効率性を実現しています。
型推論によって変数や仮引数の型宣言を省略できるため、簡潔なコード記述が可能です。活発な開発が行われており、
Apache License 2.0の下でフリーかつ
オープンソースソフトウェアとして配布されています。
歴史
Crystalの開発は、
Rubyの持つ優雅さと高い生産性と、
コンパイラ言語の持つ実行速度の速さ、効率性、型安全性を両立させることを目指して2011年
6月に始まりました。当初はJoyという名称でしたが、すぐに現在のCrystalへと改名されました。
初期の
コンパイラは
Rubyで記述されていましたが、後にCrystal自身で書き直され、
2013年11月にはセルフホスティングに移行しました。最初の正式版であるCrystal 0.1.0は、
2014年6月にリリースされました。
2016年7月にはTIOBE indexに加わりました。
概要
Crystalの構文は
Rubyの影響を強く受けていますが、
Rubyの動的な特性は排除されています。バックエンドには
LLVMを利用することで効率的な
機械語を生成し、高度な
型推論とユニオン型の組み合わせによって、高水準
スクリプト言語のような簡潔な記述を可能にしています。
ガベージコレクションにはBoehm GCが採用されており、メモリ管理を自動化しています。また、マクロ、総称型、メソッド、演算子のオーバーロードといった機能も実装されています。
並行性モデルは、
Communicating Sequential Processes (CSP) に基づいており、Go言語に影響を受けたファイバー間の通信を行うための軽量なチャネルとファイバーが実装されています。
例
Hello World
最もシンプルな例は次のようになります。
crystal
puts "Hello, World!"
オブジェクト指向プログラミングでは以下のようになります。
crystal
class Greeter
def initialize(@name : String)
end
def greet
puts "Hello, #{@name}!"
end
end
greeter = Greeter.new("World")
greeter.greet # => Hello, World!
HTTPサーバ
CrystalでHTTPサーバを起動する例です。
crystal
require "http/server"
server = HTTP::Server.new do |context|
context.response.content_type = "text/plain"
context.response.print "Hello, World!"
end
puts "Listening on http://0.0.0.0:8080"
server.listen(8080)
TCP echoサーバ
TCPエコーサーバの例です。
crystal
require "socket"
server = TCPServer.new(2000)
loop do
client = server.accept
spawn do
begin
while data = client.read_string?
client.write data
end
rescue
client.close
end
end
end
異なる型を持つ要素を
配列に格納できます。以下のように、
配列の要素から自動的にユニオン型が生成されます。
crystal
array = [1, "hello", 3.14]
arrayは Array(Int32 | String | Float64) 型となる
チャネルを使用してファイバー間の通信を行うことができます。ファイバーは`spawn`キーワードで起動します。
crystal
channel = Channel(Int32).new
spawn do
channel.send(1)
end
value = channel.receive
puts value # => 1
脚注
Crystalは、
Rubyの構文を参考にしているため、
Rubyプログラマーにとって比較的学習コストが低いのが特徴です。
コンパイル言語であるため、実行速度が速く、効率的なプログラムを作成できます。
型推論により、冗長な型宣言を省略でき、可読性の高いコードを記述できます。
並行処理を容易にするための軽量なチャネルとファイバーが提供されています。
関連項目
オブジェクト指向プログラミング
Ruby
外部リンク
公式ウェブサイト
Crystal - GitHub