Crystal 1.9.0 がリリースされました!
いくつかのバグ修正と改善を含む、新しい Crystal リリースをお届けします。
ビルド済みのパッケージは、GitHub Releases および公式の配布チャネルで入手できます。インストール手順については、crystal-lang.org/install を参照してください。
統計
このリリースには、27 人のコントリビューターによる 1.8.2 から 167 件の変更が含まれています。言語の改善にご尽力いただいたすべてのコントリビューターに感謝します! ❤️
変更点
以下に、言語、コンパイラー、stdlib における最も注目すべき変更点をリストします。詳細については、変更履歴をご覧ください。
破壊的変更: 浮動小数点数との大きな数値比較
NANなどの特殊値を尊重するように、浮動小数点数に対する大きな数値型の比較が修正されました。その結果、Big* (BigDecimal、BigFloat、BigInt、BigRational) と Float::Primitive (Float32、Float64) の数値型との間の比較演算子 #<=> の実装が 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.globとmatch_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を使用してください。