コンテンツにスキップ
Wikipedia

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

出典: フリー百科事典『ウィキペディア(Wikipedia)』
曖昧さ回避 この項目では、プログラミング言語について説明しています。その他の用法については「クリスタル」をご覧ください。
Crystal
パラダイム オブジェクト指向プログラミング、マルチパラダイムプログラミング、並行計算 ウィキデータを編集
登場時期 2014年6月18日 (10年前) (2014年06月18日)[1]
設計者 Ary Borenszweig、Juan Wajnerman、Brian Cardiff
開発者 Manas Technology Solutions
最新リリース 1.15.1 / 2025年2月4日[2]
型付け 静的型付け型推論
主な処理系 crystal
影響を受けた言語 Ruby [3] C言語RustGo [3] C# [3] Python [3]
プラットフォーム Linux [4] macOS [4] WSL [4]
ライセンス Apache License 2.0 [5]
ウェブサイト crystal-lang.org ウィキデータを編集
拡張子 .cr
テンプレートを表示

Crystal (クリスタル)は、オブジェクト指向汎用プログラミング言語である。静的型付けコンパイラ言語であり、Rubyの影響を受けた構文となっている[6] 型推論によって変数仮引数の宣言を省略することができる[6] 。Crystalの開発は活発に行われており、Apache License 2.0の下でフリーかつオープンソースのソフトウェアとして配布されている[5]

歴史

[編集 ]

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]

[編集 ]

Hello World

[編集 ]

以下はCrystalでのHello Worldの最も簡単な例である。

puts"Hello World!"

オブジェクト指向プログラミングでは以下のようになる。

classGreeter
definitialize(@name:String)
end
defsalute
puts"Hello #{@name}!"
end
end
g=Greeter.new("World")
g.salute

HTTPサーバ

[編集 ]
require"http/server"
server=HTTP::Server.newdo|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

TCP echoサーバ

[編集 ]
require"socket"
defhandle_client(client)
message=client.gets
client.putsmessage
end
server=TCPServer.new("localhost",1234)
whileclient=server.accept?
spawnhandle_client(client)
end

型推論とユニオン型

[編集 ]

以下のコードは、型が異なる要素を含む配列 (ユニオン型の配列) を定義している。Crystalでは、配列に型が異なる要素を含めることができ、個々の要素の型から共用体を自動的に生成することができる。

desired_things=[:unicorns,"butterflies",1_000_000]
ptypeof(desired_things.first)# typeof はコンパイル時の型である (Int32 | String | Symbol) を返す
pdesired_things.first.class# クラスメソッドは実行時の型である Symbol を返す

並行性

[編集 ]

チャネルはファイバー間の通信を行うために利用できる。ファイバーはspawnキーワードによって開始する。

channel=Channel(Int32).new
spawndo
puts"Before first send"
channel.send(1)
puts"Before second send"
channel.send(2)
end
puts"Before first receive"
value=channel.receive
putsvalue# => 1
puts"Before second receive"
value=channel.receive
putsvalue# => 2

脚注

[編集 ]
  1. ^ a b Ary Borenzweig (2014年6月19日). "Crystal 0.1.0 released!". 2018年9月30日閲覧。
  2. ^ 出典URL: https://github.com/crystal-lang/crystal/releases/tag/1.15.1, 閲覧日: 2025年2月10日, 題名: Release 1.15.1, 出版日: 2025年2月4日
  3. ^ a b c d e Ary Borenzweig (2016年6月14日). "Crystal 0.18.0 released!". 2018年9月30日閲覧。
  4. ^ a b c "Installation". 2018年9月30日閲覧。
  5. ^ a b "LICENSE". 2018年9月30日閲覧。
  6. ^ a b "Introduction". 2018年9月30日閲覧。
  7. ^ a b María Inti David (2016年4月1日). "The story behind #CrystalLang". 2018年9月30日閲覧。
  8. ^ Ary Borenzweig (2013年11月14日). "Good bye Ruby Thursday". 2018年9月30日閲覧。
  9. ^ Ary Borenzweig (2015年3月4日). "Internals". 2018年9月30日閲覧。
  10. ^ "Ruby のように書きやすく C のように速いプログラミング言語「Crystal」". DMM inside (2018年5月30日). 2018年9月30日閲覧。
  11. ^ "Union types". 2018年9月30日閲覧。

関連項目

[編集 ]

外部リンク

[編集 ]
全般
解説
開発 (英語版)
OS (英語版)
ソフトウェア
ホスティング
団体
標準化団体
開発支援団体
ライセンス
指針
主要例
その他
課題
特性上の課題
対立と論争
その他
一覧

AltStyle によって変換されたページ (->オリジナル) /