Crystal
詳細情報
| タイトル | Crystal |
|---|---|
| URL | https://crystal-lang.org/ |
| バージョン | ver 1.21.1 |
| 更新日 | 2026/09/27 |
| 追加日 | 2016/02/08 |
| 種別 | フリーソフト |
| 説明 | Ruby風のシンタックス&静的な型を持つプログラミング言語 |
レビュー
概要
Crystalは、Rubyに着想を得た構文を持ちながらコンパイル型言語の高いパフォーマンスを実現する、汎用オブジェクト指向プログラミング言語です。「A language for humans and computers」をスローガンに掲げ、人間にとっての書きやすさ・読みやすさと、機械にとっての実行効率の両立を目指して設計されています。
Crystalは2011年頃にAry Borenszweig(Manas Technology Solutions)らによって開発が始まり、2014年にオープンソースとして公開されました。RubyのようなシンプルなDSLフレンドリーな構文を維持しつつ、LLVM(Low Level Virtual Machine)をバックエンドに採用し、C/C++に匹敵する実行速度を実現しています。最新バージョンは1.19.1(2026年1月リリース)です。
主要な特徴・機能
- Rubyライクな構文: Rubyに慣れた開発者がすぐに習得できる直感的な構文を採用
- 静的型付けと型推論: コンパイル時に型チェックを行い、バグを早期発見。高度な型推論により型注釈をほとんど書かずに済む
- 高速な実行速度: LLVMコンパイラインフラを使用し、ネイティブコードにコンパイルして高いパフォーマンスを発揮
- ヌルポインタ安全: コンパイル時にnilチェックを強制し、ヌルポインタによる実行時エラーを防止
- ファイバーと並行処理: CSP(通信順序プロセス)モデルとチャネルを用いた安全な並行プログラミング
- Cバインディング: 既存のCライブラリを直接呼び出せる相互運用性
- 強力なマクロシステム: コンパイル時のメタプログラミングによりAST操作や型検査が可能
- Shardsパッケージマネージャー: Git リポジトリをベースにした分散型の依存関係管理ツールを標準搭載
対象ユーザー
- Rubyに慣れているが、より高パフォーマンスな言語を求める開発者
- Webアプリケーション・CLIツール・システムプログラムを高い生産性で開発したいエンジニア
- 静的型付けの安全性と動的型付け言語の書きやすさを両立したい開発者
ライセンス情報
CrystalはオープンソースソフトウェアとしてApache License 2.0のもとで公開されています。ソースコードはGitHub(github.com/crystal-lang/crystal)で管理されており、コミュニティによる活発な開発・貢献が行われています。商用・非商用を問わず無料で使用できます。
スクリーンショット
更新グラフ
バージョン履歴
Bugfixes
stdlib
-
(concurrency) [regression] Simplify
Sync::Mutex#synchronizeproc type constraints (#16904, #16937, thanks @ysbaddaden) -
(runtime)
Range#sampleeventually loses randomness (#16909, thanks @ysbaddaden)
Infrastructure
- Changelog for 1.20.2 (#16945, thanks @straight-shoota)
Bugfixes
stdlib
- (crypto) Fix issues in OpenSSL Kernel TLS (#16888, thanks @ysbaddaden)
- (crypto) OpenSSL Kernel TLS support should be opt-in (#16897, thanks @ysbaddaden)
-
(networking) [regression] Add
HTTP::Headers#to_jsonand#to_yaml(#16890, thanks @straight-shoota) -
(runtime) [regression]
Range#sampleeventually loses randomness (#16853, thanks @ysbaddaden) - (runtime) don't parse debug sections from bare threads (#16877, thanks @ysbaddaden)
compiler
- (parser) [regression]
Security
stdlib
-
(networking)
HTTP::Serveris no longer vulnerable to request smuggling (#16862, thanks @ysbaddaden)
Bugfixes
stdlib
-
[regression]
Range#sampleeventually loses randomness (#16866, thanks @straight-shoota, @ysbaddaden)
Infrastructure
- Changelog for 1.19.2 (#16893, thanks @ysbaddaden)
-
(ci) Drop
update: truefrommsys2/setup-msys(#16868, thanks @straight-shoota)
Security
stdlib
-
(networking) Fix
HTTP::Serveris no longer vulnerable to request smuggling (GHSA-wqh5-7w63-pm68)
Features
lang
-
(macros) Add
#selectand#rejecttoHashLiteralandNamedTupleLiteral(#16558, thanks @Blacksmoke16) - (macros) Refine error message for unsupported named arguments in macros (#16576, thanks @hahwul)
stdlib
-
(cli) Add short option bundling for
OptionParser(#16770, thanks @Qard) -
(crypto) Add Kernel TLS support to custom
OpenSSL::BIO(
Bugfixes
stdlib
- (concurrency) [regression] Fix kqueue timer duration calculation (#16581, thanks @skuznetsov)
- (concurrency) [regression] time calculations in IOCP and Monitor thread (#16583, thanks @ysbaddaden)
Infrastructure
- Changelog for 1.19.1 (#16590, thanks @ysbaddaden)
Breaking changes
stdlib
- (crypto) Require OpenSSL 1.1.1+ or LibreSSL 3+ (#16480, thanks @ysbaddaden)
Features
lang
- (macros) [breaking] Add compiler flag values (#16310, thanks @straight-shoota)
-
(macros) Add yielding variant of
StringLiteral#gsub(#16378, thanks @Blacksmoke16) -
(macros) Support
StringLiteral#split(RegexLiteral)(#16423, thanks @HertzDevil) -
(macros) Add
StringLiteral#match(#16464, thanks @HertzDevil) -
(macros) Make all overloads of
ArrayLiteral#[]
Bugfixes
stdlib
-
(files) [regression] Revert type restriction for
IO#read_bytes(#16231, thanks @straight-shoota) -
(runtime) Fix
Fiber::ExecutionContext.default_workers_countto avoid taking into account unsupported values (#16227, thanks @Sija)
Infrastructure
- Changelog for 1.18.2 (#16243, thanks @matiasgarciaisaia)
Bugfixes
stdlib
-
(networking) [regression] Revert adding type restrictions on
HTTP::WebSocket#sendetc. (#16218, thanks @straight-shoota)
compiler
- (parser) [regression] Fix allow space after base type in enum def (#16217, thanks @straight-shoota)
Infrastructure
- Changelog for 1.18.1 (#16224, thanks @matiasgarciaisaia)