Crystal 1.9.0 发布了!
我们发布了 Crystal 的一个新版本,其中包含一些错误修复和改进。
预构建包可在 GitHub 版本 和我们的官方发行渠道获取。有关安装说明,请参阅 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)。
标准库规范套件充分利用了规范助手 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)。
弃用
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
。