Crystal (プログラミング言語)

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

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。