Loading AI tools
プログラミング言語 ウィキペディアから
Crystal (クリスタル)は、オブジェクト指向の汎用プログラミング言語である。静的型付けのコンパイラ言語であり、Rubyの影響を受けた構文となっている[6]。型推論によって変数や仮引数の型の宣言を省略することができる[6]。Crystalの開発は活発に行われており、Apache License 2.0の下でフリーかつオープンソースのソフトウェアとして配布されている[5]。
パラダイム | オブジェクト指向プログラミング、マルチパラダイムプログラミング、並行計算 |
---|---|
登場時期 | 2014年6月18日[1] |
設計者 | Ary Borenszweig、Juan Wajnerman、Brian Cardiff |
開発者 | Manas Technology Solutions |
最新リリース | 1.13.1 / 2024年7月12日[2] |
型付け | 静的型付け、型推論 |
主な処理系 | crystal |
影響を受けた言語 | Ruby[3]、C言語、Rust、Go[3]、C#[3]、Python[3] |
プラットフォーム | Linux[4]、macOS[4]、WSL[4] |
ライセンス | Apache License 2.0[5] |
ウェブサイト |
crystal-lang |
拡張子 | .cr |
Crystalの開発は、Rubyの特徴である優雅さと生産性の高さ、コンパイラ言語の特徴である実行速度の速さと効率の良さと型安全を目的として、2011年6月に開始された[7]。最初の頃はJoyという名称であったが、これはすぐに現在の名称に改名された[7]。
初期の頃はRubyによってコンパイラは書かれていたが、後にCrystal自身で書き直され、2013年11月にセルフホスティングへ移行した[8]。最初の正式版であるCrystal 0.1.0は、2014年6月にリリースされた[1]。Crystalは2016年7月にTIOBE indexへ参加した。
Crystalの構文はRubyの影響を受けたものになっているが、Rubyの動的言語な面は排除されており、バックエンドにLLVMを利用することによって、効率的な機械語を生成することができる[9][10]。他のコンパイラ言語と比較して、高度な型推論とユニオン型の組み合わせによって、高水準スクリプト言語のような簡潔な記述を実現している[11]。Crystalはガベージコレクションを備えており、Boehm GCの提供も行われている。Crystalにはマクロ・総称型・メソッド・演算子のオーバーロードが実装されている。Crystalの並行性モデルは、Communicating Sequential Processes (CSP) に基づいており、Goに影響されたファイバー間の通信を行うための軽量なチャネルとファイバーが実装されている[3]。
以下はCrystalでのHello Worldの最も簡単な例である。
puts "Hello World!"
オブジェクト指向プログラミングでは以下のようになる。
class Greeter
def initialize(@name : String)
end
def salute
puts "Hello #{@name}!"
end
end
g = Greeter.new("World")
g.salute
require "http/server"
server = HTTP::Server.new do |context|
context.response.content_type = "text/plain"
context.response.print "Hello World! The time is #{Time.now}"
end
server.bind_tcp("0.0.0.0", 8080)
puts "Listening on http://0.0.0.0:8080"
server.listen
require "socket"
def handle_client(client)
message = client.gets
client.puts message
end
server = TCPServer.new("localhost", 1234)
while client = server.accept?
spawn handle_client(client)
end
以下のコードは、型が異なる要素を含む配列 (ユニオン型の配列) を定義している。Crystalでは、配列に型が異なる要素を含めることができ、個々の要素の型から共用体を自動的に生成することができる。
desired_things = [:unicorns, "butterflies", 1_000_000]
p typeof(desired_things.first) # typeof はコンパイル時の型である (Int32 | String | Symbol) を返す
p desired_things.first.class # クラスメソッドは実行時の型である Symbol を返す
チャネルはファイバー間の通信を行うために利用できる。ファイバーはspawn
キーワードによって開始する。
channel = Channel(Int32).new
spawn do
puts "Before first send"
channel.send(1)
puts "Before second send"
channel.send(2)
end
puts "Before first receive"
value = channel.receive
puts value # => 1
puts "Before second receive"
value = channel.receive
puts value # => 2
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.