跳至内容
GitHub 代码库 论坛 RSS 新闻源

Crystal 1.9.0 发布了!

Johannes Müller

我们发布了 Crystal 的一个新版本,其中包含一些错误修复和改进。

预构建包可在 GitHub 版本 和我们的官方发行渠道获取。有关安装说明,请参阅 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)。

标准库规范套件充分利用了规范助手 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