跳至內容
GitHub 儲存庫 論壇 RSS 新聞訂閱

Crystal 1.9.0 版本發布!

Johannes Müller

我們推出新的 Crystal 版本,其中包含多個錯誤修復和改進。

預先建置的套件可在 GitHub Releases 和我們的官方發行管道上取得。請參閱 crystal-lang.org/install 以取得安裝說明。

統計

此版本包含由 27 位貢獻者提供的 自 1.8.2 以來的 167 項變更。我們感謝所有貢獻者為改進此語言所做的努力!❤️

變更

以下我們列出語言、編譯器和標準函式庫中最顯著的變更。如需更多詳細資訊,請瀏覽更新日誌

重大變更:大數字與浮點數的比較

修正了大數字型別與浮點數的比較,以符合特殊值 (例如 NAN)。因此,Big* (BigDecimalBigFloatBigIntBigRational) 與 Float::Primitive (Float32Float64) 數字型別之間的比較運算子 #<=> 的實作現在可為空值。當呼叫這些比較時,必須明確處理 Nil 值。

Windows

編譯器和標準函式庫在改進 Windows 支援方面邁出了一大步。僅剩少數未解決的問題,我們預計將在未來幾個月內解決它們。

最顯著的功能是 GUI 安裝程式(可在發行版本成品中取得)和 DLL 的動態連結(目前可透過編譯器旗標 -Dpreview_dll 取得)。

有關 Crystal 1.9 中的 Windows 支援的單獨文章中列出了更多詳細資訊和其他功能。

語言

語言中有兩個新的巨集

  • ASTNode#warning#raise 類似,但只會產生警告 (#13262)。
  • ::print::puts 類似,但沒有尾隨換行符號 (#13336)。

標準函式庫

如果程序被中斷,現在會啟動預設的中斷處理常式來觸發 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