我们正在发布第一个 1.0 后版本,努力兑现我们每 3 个月定期发布一次的承诺,由于会议而有所延迟,并特别注重保持语言稳定性。下面我们列出了最重要或最有趣的变化,但没有提到几个错误修正。有关详细信息,请访问发行说明。在这个版本中,我们包含了自 1.0.0 版本以来由 28 个贡献者发布的 166 个 PR。我们感谢为改进语言及其标准库所做的所有努力! ❤️ Splats 现在可以嵌入到可枚举的文字和类型定义中 (#10429)。几个例子: t1 = { 1 , 'a' } t2 = { true , * t1 } # => {true, 1, 'a'} typeof ( t2 ) # => Tuple(Bool, Int32, Char) def f1 ( x : { Bool , * { Int32 , Char }}); end # 也适用于类型注释 def f2 ( x : Tuple ( Bool , * { Int32 , Char })); end ae = 'a' .. 'e' ccae = [ '<' , * ae , '>' ] # => ['<', 'a', 'b', 'c', 'd', ' e', '>'] a = 1 .. 10 b = 5 .. 15 Set { * a , * b } # => Set{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15} while 表达式的类型现在是主体内所有 break 表达式的并集,如果条件不是真正的文字,则加上 Nil;如果条件失败,while 表达式将返回 nil。中断表达式的类型计算类似于块内的中断或返回(如果为空,则为 Nil,如果有多个值,则为元组)(#10566)。 # 首先 STDIN 中的第一个非空行 first_non_blank_line = while line = 得到断行,除非 line 。空白的? end puts first_non_blank_line 现在可以使用特殊实例变量@top_level (#10682) 访问顶级模块:
NumberLiteral 现在包含一个 to_number 方法来获取纯数字,没有任何字符串化 #10802:我们包含了一个小的突破性更改,因为文档和关于 Path#global? 的代码之间存在不匹配。以前的 Path#global 现在已被弃用,取而代之的是 Path#global?,其名称更能代表它(#10812)。有一个新的宏方法 ASTNode#nil?用于查询对象是 NilLiteral 还是 Nop (#10850, #10616)。有一些更改不应该对用户产生直接影响。需要注意的最重要的一点是,为了帮助获得更好的错误消息和文档,一些方法使用预期类型进行了注释。添加键入注释可能会在特定情况下破坏现有代码,因此,如果您遇到这种情况,请立即告诉我们。此外,我们正在增加对原生 Windows 的支持,这需要进行多次重构。现在可以使用 new 从不同的表示中创建数字,如 Float32.new("1.1", whitespace:false) ((#10422)。此外,我们使用新的 Steppable 模块概括了 Number#step,该模块包含在Char、Number、Time 和 Time::Span (#10279). 最后,现在可以使用 #truncate 和 Array,有效地从两端移除元素 (#10712)。
段错误处理程序现在在 Crystal 中实现,实际上意味着 Crystal 的编译过程更简单:它不需要以前的外部 libcrystal。对于包维护者来说,这意味着构建 libcrystal.a(它是 make deps 配方的一部分)现在已经过时了。此库的 C 代码已被删除,需要更新打包说明。构建任意 Crystal 程序不再需要 make deps;现在它只构建 llvm_ext.a,只需要链接到 LLVM(例如在构建编译器本身时)。感谢 84codes、尼古拉汽车公司和所有其他赞助商的持续支持,我们能够做到这一切。为了保持和加快发展速度,捐赠和赞助是必不可少的。 OpenCollective 可用于此目的。如果您想成为直接赞助商或寻找其他方式来支持 Crystal,请联系 [email protected]。我们提前感谢您!我们正在发布第一个 1.0 后版本,努力兑现我们每 3 个月定期发布一次的承诺,由于会议而有所延迟,并特别注重保持语言稳定性。下面我们列出了最重要或最有趣的变化,但没有提到几个错误修正。有关详细信息,请访问发行说明。在这个版本中,我们包含了自 1.0.0 版本以来由 28 个贡献者发布的 166 个 PR。我们感谢为改进语言及其标准库所做的所有努力! ❤️ Splats 现在可以嵌入到可枚举的文字和类型定义中 (#10429)。几个例子: t1 = { 1 , 'a' } t2 = { true , * t1 } # => {true, 1, 'a'} typeof ( t2 ) # => Tuple(Bool, Int32, Char) def f1 ( x : { Bool , * { Int32 , Char }}); end # 也适用于类型注释 def f2 ( x : Tuple ( Bool , * { Int32 , Char })); end ae = 'a' .. 'e' ccae = [ '<' , * ae , '>' ] # => ['<', 'a', 'b', 'c', 'd', ' e', '>'] a = 1 .. 10 b = 5 .. 15 Set { * a , * b } # => Set{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15} while 表达式的类型现在是主体内所有 break 表达式的并集,如果条件不是真正的文字,则加上 Nil;如果条件失败,while 表达式将返回 nil。中断表达式的类型计算类似于块内的中断或返回(如果为空,则为 Nil,如果有多个值,则为元组)(#10566)。
# 首先 STDIN 中的第一个非空行 first_non_blank_line = while line = 得到断行,除非 line 。空白的? end puts first_non_blank_line 现在可以使用特殊的实例变量@top_level (#10682) 访问顶层模块:NumberLiteral 现在包含一个 to_number 方法来获取纯数字,没有任何字符串化 #10802:我们包含了一个小的突破性变化,因为文档和关于 Path#global? 的代码不匹配。以前的 Path#global 现在已被弃用,取而代之的是 Path#global?,其名称更能代表它(#10812)。有一个新的宏方法 ASTNode#nil?用于查询对象是 NilLiteral 还是 Nop (#10850, #10616)。有一些更改不应该对用户产生直接影响。需要注意的最重要的一点是,为了帮助获得更好的错误消息和文档,一些方法使用预期类型进行了注释。添加键入注释可能会在特定情况下破坏现有代码,因此,如果您遇到这种情况,请立即告诉我们。此外,我们正在增加对原生 Windows 的支持,这需要进行多次重构。现在可以使用 new 从不同的表示形式创建数字,如 Float32.new("1.1", whitespace:false) ((#10422)。
此外,我们使用新的 Steppable 模块概括了 Number#step,该模块包含在 Char、Number、Time 和 Time::Span (#10279) 中。最后,现在可以使用 #truncate 和 Array,有效地从两端删除元素 (#10712)。段错误处理程序现在在 Crystal 中实现,实际上意味着 Crystal 的编译过程更简单:它不需要以前的外部 libcrystal。对于包维护者来说,这意味着构建 libcrystal.a(它是 make deps 配方的一部分)现在已经过时了。此库的 C 代码已被删除,需要更新打包说明。构建任意 Crystal 程序不再需要 make deps;现在它只构建 llvm_ext.a,只需要链接到 LLVM(例如在构建编译器本身时)。感谢 84codes、尼古拉汽车公司和所有其他赞助商的持续支持,我们能够做到这一切。为了保持和加快发展速度,捐赠和赞助是必不可少的。 OpenCollective 可用于此目的。如果您想成为直接赞助商或寻找其他方式来支持 Crystal,请联系 [email protected]。我们提前感谢您!由 Disqus 提供支持的评论