首页    新闻    小组    威客    人才    下载    博客    代码贴    在线编程    论坛
Crystal 1.9.0 发布!
2023年7月13日 04:29 | 阅读 1632 次

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

预编译包可在 GitHub Releases 和我们的官方发布渠道获取。安装说明请参见 crystal-lang.org/install。

数据

本次发布包含了自 1.8.2 以来由 27 位贡献者所做的 167 项修改。我们感谢所有贡献者为改进语言所付出的努力!❤️

变化

下面我们列出了语言、编译器和 stdlib 中最显著的变化。更多详细信息,请访问更新日志。

破坏: 大数与浮点数的比较

大数类型与浮点数的比较被固定为尊重特殊值,如NAN。因此,Big*(BigDecimal、BigFloat、BigInt、BigRational)和Float::Primitive(Float32、Float64)数字类型之间的比较运算符#<=>的实现现在为零。在调用这些比较时,必须显式处理 Nil 值。

窗口

编译器和标准库在改进Windows支持方面迈出了一大步。目前只剩下一些未解决的问题,我们希望在接下来的几个月内解决这些问题。

最值得注意的特性是GUI安装程序(可在发布的工件中获得)和DLL的动态链接(目前可通过编译器标志-Dprev获得

更多细节和附加功能请参见有关Crystal 1.9中Windows支持的单独文章。

语言

语言中有两个新的宏:

  • ASTNode#warning类似于#raise,但只创建警告(#13262)。
  • ::print类似于::puts,但没有尾部换行(#13336)。

标准库

默认中断处理程序已经就位,当进程被中断时触发at_exit处理程序 (#13568).

Dir.glob的文件匹配行为由带有可移植选项的File::MatchOptions控制,而不是单一的布尔参数 (#13550).

stdlib规范套件很好地利用了assert_prints规范助手,现在它也可以用于用户规范(#13599)。

新方法Regex#match!有一个非nilable返回类型(Regex::MatchData),如果期望regex匹配,这个方法会很有用!(#13285).

所有接受Regex进行匹配的方法现在也有了Regex::MatchOptions参数 (#13353).

编译器

新的编译器命令crystal clear_cache提供了一个清理编译器缓存的便捷方法(#13553)。

该版本增加了对LLVM 16的支持(#13181)。

文档生成器现在具有黑暗模式(#13512),并改进了对小视口的支持(#13515)。

贬值

  • 带有match_hidden参数的Dir.[]: 使用带有match参数的重载。
  • 带match_hidden参数的Dir.glob: 使用带有匹配参数的重载。
  • 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中移除了传统的pass manager。请使用 LLVM::PassBuilderOptions 代替。
  • LLVM::ModulePassManager: 在 LLVM 17 中移除了传统的传递管理器。使用LLVM::PassBuilderOptions代替。
  • LLVM::PassManagerBuilder: 在 LLVM 17 中移除了传统的传递管理器。使用LLVM::PassBuilderOptions代替。
  • LLVM::PassRegistry: 在 LLVM 17 中移除了传统的传递管理器。请使用 LLVM::PassBuilderOptions 代替。

我们正在发布一个新的Crystal版本,其中包含一些bug修复和改进。

预编译包可在 GitHub Releases 和我们的官方发布渠道获取。安装说明请参见 crystal-lang.org/install。

数据

此版本包含了自 1.8.2 以来由 27 位贡献者所做的 167 项修改。我们感谢所有贡献者为改进语言所付出的努力!❤️

变化

下面我们列出了在语言、编译器和stdlib方面最显著的变化。更多详情,请访问更新日志。

破坏: 大数与浮点数的比较

大数类型与浮点数的比较被固定为尊重特殊值,如NAN。因此,Big*(BigDecimal、BigFloat、BigInt、BigRational)和Float::Primitive(Float32、Float64)数字类型之间的比较运算符#<=>的实现现在为零。在调用这些比较时,必须显式处理 Nil 值。

窗口

编译器和标准库在改进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规范套件很好地利用了规范帮助

新方法 Regex#match! 的返回类型 (Regex::MatchData) 为非 nilable,如果希望 regex 能够匹配,这个方法会很有用!(#13285).

所有接受Regex进行匹配的方法现在也有了Regex::MatchOptions参数 (#13353).

编译器

新的编译器命令crystal clear_cache提供了清理编译器缓存的便捷方法(#13553)。

该版本增加了对LLVM 16的支持(#13181)。

文档生成器现在具有暗模式(#13512),并改进了对小视口的支持(#13515)。

折旧

  • Dir.[]带有match_hidden参数: 使用带有匹配参数的重载。
  • 带match_hidden参数的Dir.glob: 使用带匹配参数的重载。
  • 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代替。



评论 (0)
游客请输入验证码
最新评论
2
0
收藏