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
を使用してください。