Crystal (プログラミング言語) Crystal (プログラミング言語)の概要

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

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/03/08 13:53 UTC 版)

Crystal
パラダイム オブジェクト指向プログラミング、マルチパラダイムプログラミング、並行計算 
登場時期 2014年6月18日 (9年前) (2014-06-18)[1]
設計者 Ary Borenszweig、Juan Wajnerman、Brian Cardiff
開発者 Manas Technology Solutions
最新リリース 1.11.2 / 2024年1月18日[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の特徴である優雅さと生産性の高さ、コンパイラ言語の特徴である実行速度の速さと効率の良さと型安全を目的として、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}!"
  end
end

g = 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}"
end

server.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 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

  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.11.2, 閲覧日: 2024年1月19日, 題名: Release 1.11.2, 出版日: 2024年1月18日
  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日閲覧。


「Crystal (プログラミング言語)」の続きの解説一覧



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「Crystal (プログラミング言語)」の関連用語

Crystal (プログラミング言語)のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



Crystal (プログラミング言語)のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのCrystal (プログラミング言語) (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2024 GRAS Group, Inc.RSS