Crystal 1.9.0 版本發布!
我們推出新的 Crystal 版本,其中包含多個錯誤修復和改進。
預先建置的套件可在 GitHub Releases 和我們的官方發行管道上取得。請參閱 crystal-lang.org/install 以取得安裝說明。
統計
此版本包含由 27 位貢獻者提供的 自 1.8.2 以來的 167 項變更。我們感謝所有貢獻者為改進此語言所做的努力!❤️
變更
以下我們列出語言、編譯器和標準函式庫中最顯著的變更。如需更多詳細資訊,請瀏覽更新日誌。
重大變更:大數字與浮點數的比較
修正了大數字型別與浮點數的比較,以符合特殊值 (例如 NAN
)。因此,Big*
(BigDecimal
、BigFloat
、BigInt
、BigRational
) 與 Float::Primitive
(Float32
、Float64
) 數字型別之間的比較運算子 #<=>
的實作現在可為空值。當呼叫這些比較時,必須明確處理 Nil
值。
Windows
編譯器和標準函式庫在改進 Windows 支援方面邁出了一大步。僅剩少數未解決的問題,我們預計將在未來幾個月內解決它們。
最顯著的功能是 GUI 安裝程式(可在發行版本成品中取得)和 DLL 的動態連結(目前可透過編譯器旗標 -Dpreview_dll
取得)。
有關 Crystal 1.9 中的 Windows 支援的單獨文章中列出了更多詳細資訊和其他功能。
語言
語言中有兩個新的巨集
標準函式庫
如果程序被中斷,現在會啟動預設的中斷處理常式來觸發 at_exit
處理常式 (#13568)。
Dir.glob
的檔案比對行為由具有可攜式選項的 File::MatchOptions
控制,而不是單一的布林參數 (#13550)。
stdlib spec 套件充分利用了 spec helper assert_prints
,現在也可用於使用者規格 (#13599)。
有一個新的方法 Regex#match!
,其具有不可為空值的傳回型別 (Regex::MatchData
),如果預期會比對到正規表示式,則此方法很有用。regex.match!(x)
可方便地取代 regex.match(x).not_nil!
(#13285)。
所有接受 Regex
以進行比對的方法現在也具有 Regex::MatchOptions
的參數 (#13353)。
編譯器
新的編譯器命令 crystal clear_cache
提供了一個方便的方式來清除編譯器快取 (#13553)。
此版本新增了對 LLVM 16 的支援 (#13181)。
文件產生器現在具有暗黑模式 (#13512) 以及對小型視埠的改進支援 (#13515)。
棄用
- 具有
match_hidden
參數的Dir.[]
:請改用具有match
參數的多載。 - 具有
match_hidden
參數的Dir.glob
:請改用具有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
。