コンテンツへスキップ
GitHub リポジトリ フォーラム RSSニュースフィード

Crystal 1.9.0 がリリースされました!

Johannes Müller

いくつかのバグ修正と改善を含む、新しい Crystal リリースをお届けします。

ビルド済みのパッケージは、GitHub Releases および公式の配布チャネルで入手できます。インストール手順については、crystal-lang.org/install を参照してください。

統計

このリリースには、27 人のコントリビューターによる 1.8.2 から 167 件の変更が含まれています。言語の改善にご尽力いただいたすべてのコントリビューターに感謝します! ❤️

変更点

以下に、言語、コンパイラー、stdlib における最も注目すべき変更点をリストします。詳細については、変更履歴をご覧ください。

破壊的変更: 浮動小数点数との大きな数値比較

NANなどの特殊値を尊重するように、浮動小数点数に対する大きな数値型の比較が修正されました。その結果、Big* (BigDecimalBigFloatBigIntBigRational) と Float::Primitive (Float32Float64) の数値型との間の比較演算子 #<=> の実装が now nilable になりました。これらの比較を呼び出す場合、Nil 値を明示的に処理する必要があります。

Windows

コンパイラーと標準ライブラリは、Windows サポートを改善する上で大きな一歩を踏み出しました。未解決の問題はわずかしか残っておらず、今後数か月で解決される見込みです。

最も注目すべき機能は、GUI インストーラー (リリース成果物で利用可能) と DLL の動的リンク (現在はコンパイラーフラグ -Dpreview_dll を介して利用可能) です。

詳細および追加機能については、Crystal 1.9 の Windows サポートに関する別の投稿に記載されています。

言語

言語には 2 つの新しいマクロがあります

  • ASTNode#warning#raise に似ていますが、警告を作成するだけです (#13262)。
  • ::print::puts に似ていますが、末尾の改行はありません (#13336)。

標準ライブラリ

プロセスが中断された場合に at_exit ハンドラーをトリガーするために、デフォルトの割り込みハンドラーが実装されました (#13568)。

Dir.glob のファイルマッチングの動作は、単一のブール値パラメーターではなく、移植可能なオプションを持つ File::MatchOptions によって制御されるようになりました (#13550)。

stdlib spec suite は spec ヘルパー assert_prints をうまく利用しており、ユーザー spec でも利用できるようになりました (#13599)。

新しいメソッド Regex#match! が追加されました。これは、正規表現が一致すると予想される場合に役立つ、nilable ではない戻り値型 (Regex::MatchData) を持ちます。regex.match!(x) は、regex.match(x).not_nil! の便利な代替手段です (#13285)。

マッチングのために Regex を受け入れるすべてのメソッドに、Regex::MatchOptions のパラメーターが追加されました (#13353)。

コンパイラー

新しいコンパイラーコマンド crystal clear_cache は、コンパイラーキャッシュをクリアする便利な方法を提供します (#13553)。

このリリースでは、LLVM 16 のサポートが追加されました (#13181)。

ドキュメントジェネレーターには、ダークモード (#13512) と小さなビューポートのサポートの改善 (#13515) が追加されました。

非推奨

  • Dir.[]match_hidden パラメーター: 代わりに match パラメーターを持つオーバーロードを使用してください。
  • Dir.globmatch_hidden パラメーター: 代わりに match パラメーターを持つオーバーロードを使用してください。
  • LLVM::Module#write_bitcode_with_summary_to_file: ThinLTO はサポートされなくなりました。代わりに #write_bitcode_to_file を使用してください。
  • LLVM::FunctionPassManager: レガシーパスマネージャーは LLVM 17 で削除されました。代わりに LLVM::PassBuilderOptions を使用してください。
  • LLVM::FunctionPassManager::Runner: レガシーパスマネージャーは LLVM 17 で削除されました。代わりに LLVM::PassBuilderOptions を使用してください。
  • LLVM::Module#new_function_pass_manager: レガシーパスマネージャーは LLVM 17 で削除されました。代わりに LLVM::PassBuilderOptions を使用してください。
  • LLVM::ModulePassManager: レガシーパスマネージャーは LLVM 17 で削除されました。代わりに LLVM::PassBuilderOptions を使用してください。
  • LLVM::PassManagerBuilder: レガシーパスマネージャーは LLVM 17 で削除されました。代わりに LLVM::PassBuilderOptions を使用してください。
  • LLVM::PassRegistry: レガシーパスマネージャーは LLVM 17 で削除されました。代わりに LLVM::PassBuilderOptions を使用してください。