Crystal_(プログラミング言語)
[Wikipedia|▼Menu]
.mw-parser-output .hatnote{margin:0.5em 0;padding:3px 2em;background-color:transparent;border-bottom:1px solid #a2a9b1;font-size:90%}

この項目では、プログラミング言語について説明しています。その他の用法については「クリスタル」をご覧ください。

Crystal
パラダイムオブジェクト指向プログラミング、マルチパラダイムプログラミング、並行計算 
登場時期2014年6月18日 (9年前) (2014-06-18)[1]
設計者Ary Borenszweig、Juan Wajnerman、Brian Cardiff
開発者Manas Technology Solutions
最新リリース1.12.1 / 2024年4月11日[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!"

オブジェクト指向プログラミングでは以下のようになる。class Greeter def initialize(@name : String) end def salute puts "Hello #{@name}!" endendg = Greeter.new("World")g.salute
HTTPサーバ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}"endserver.bind_tcp("0.0.0.0", 8080)puts "Listening on http://0.0.0.0:8080"server.listen
TCP echoサーバrequire "socket"def handle_client(client) message = client.gets client.puts messageendserver = 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).newspawn do puts "Before first send" channel.send(1) puts "Before second send" channel.send(2)endputs "Before first receive"value = channel.receiveputs value # => 1puts "Before second receive"value = channel.receiveputs value # => 2
脚注^ a b Ary Borenzweig (2014年6月19日). “Crystal 0.1.0 released!”. 2018年9月30日閲覧。
^ 出典URL: https://github.com/crystal-lang/crystal/releases/tag/1.12.1, 閲覧日: 2024年4月22日, 題名: Release 1.12.1, 出版日: 2024年4月11日
^ a b c d e Ary Borenzweig (2016年6月14日). “Crystal 0.18.0 released!”. 2018年9月30日閲覧。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:34 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef