Crystal Lang 1.0 release

2021-03-23 03:19:59

经过多年的辛勤工作后,晶体的第一个主要释放的释放。全球人民的数千次贡献,终于可以为1.0真正重要的是什么可以找到共识,什么可以等待未来发布。到目前为止,充满了丰富,有争议的,令人愉快和无穷无尽的对话,即最终成为可能为更多用户建立更有用的语言。

但是有1.0版本意味着什么?毕竟,在这个里程碑之后,接受有价值的贡献和不断发展的语言的过程将不会停止。让我们深入地了解社区此版本的真正含义,特别是那些已经在生产环境中使用了Crystal的真正含义。

语言稳定性可能是最终晶体1.0最突出和最预期的原因之一。我们在这些年内获得了愿意在生产中使用这些语言的人们的众多评论,但只有在我们可以在一天到下一个人开始违反它的承诺。

在此版本之后,每个人都可以期待,至少对于任何未来的1.x版本,您的代码仍然可以编译和工作而没有任何显着的不兼容。语言和标准库功能将无法以任何方式删除或更改,可以防止现有代码编译和工作。内置标准库将继续富集,但总是以落后的兼容性。

没有人可以阻止这个优秀的社区每天都有突破性的想法。但这些贡献现在属于一个单独的分支,其中Crystal 2.0的愿景将开始每天发芽并增长。

为了提高项目的可预测性,我们计划将维护版本(AKA错误修复)作为补丁版本释放。例如,第一个维护版本将是1.0.1,它只包括现有功能的修复。

将为随后的未成年版本保留新功能:1.x。同样,始终保持与以前版本的向后兼容性。

将平行维护多少1.x版本?我们还不知道。这将取决于几个因素,包括核心团队成员的可用性。目前,我们设想保持至少两个小版本。即使发布1.1.0,也可能会发布1.0.x。

由于在1.x→1.x + 1之间的“没有破坏更改”规则,迁移到新的次要版本应该相对容易,迁移计划最终与新版本一起发布。

水晶目前有一些功能,尚未获得官方支持。我们计划在我们对他们的稳定性充满信心之前继续改进它们。这些功能将继续在每个版本上提供,并且您可以在未来的1.x发行版中期望官方祝福。

已经在Windows平台上进行了巨大的进展。但还有很多工作要做。但是,这些工作都不会影响* nix平台的语义或图书馆。因此,由于该领域不完整,我们决定不延迟1.0。

我们不断鼓励Windows社区继续参与这种环境中的水晶支持。

支持在多个内核上运行Crystal Runtime仍然是通过使用-dpreview_mt标志可用的初步功能。但仍有许多改进尚待在多核环境中保证语言的预期业绩和质量。

并且它不仅要启用的标志,可以让现有代码并行运行。必须编写成语和准则,以确保理智的迁移到多核环境中。未来的1.x版本可以预期更多这一点。

将晶体移植到ARM平台始终是重要的,主要用于嵌入式和移动设备。谁没有梦想在这一位美丽的语言中有一天为iOS和Android编写应用程序?但是,苹果在计算机中使用ARM的最新公告使这个平台更加重要。

已经采取了重大步骤来改善晶体代码的交叉编译,甚至我们的CI甚至是ARM服务器上的每一个提交的大部分水晶规范!但是,一些工作仍在等待以提高交叉编译的经验,甚至在我们对臂机上的“生产准备好”标记中有信心之前需要一些核心库。

自0.36.1自0.36.1以来降落在1.0.0的变化集中在抛光上,但值得一提到其中一些作为迁移过程。不要错过释放的剩余变更。

如果我们算上项目成立以来,+450个贡献者+9000个问题/公关的+13000次,更重要的是,一个正在分享经验,想法和梦想的伟大社区。

元组允许具有文字索引的类型安全的访问器,因为编译器知道每个组件的类型是。在#10379中,这知识也可用于文字范围。

tuple = {1,"你好" ,' x' v =元组[0 .1]#> {1,"你好"} typeof(v)#=>元组(Int32,String)

不再允许字符串和字符文字在转义序列中具有Unicode代理半音。您可以使用\ x仍然可以表达任意值,所以" \ ud800"应该是" \ xed \ xa0 \ x80"阅读更多#10443。

STD-lib摆脱了大多数弃用定义,直到#10386为0.36.1。这包括删除:

Getter和Property宏将在可能时添加返回类型注释。添加此延迟初始化属性时,不再接受NIL作为有效值。它令人困惑,你可能没有依赖这一点。阅读更多#10405。

有一些迭代可以添加更多舍入选项来编号并匹配其他语言中可用的功能。 Number#Round接受RoundingMode参数以选择要使用的确切条件。如果您更喜欢它们,则有新的方法。round_even,numand_away。违约舍入已更改为Round_even(A.K.A.: Round最近的领带即使是偶数)匹配其他Libc,Java,Julia和IEEE-754建议书。

ties_even:朝向最接近的整数。如果邻近的整数都是等距的,则朝向偶数邻居(银行家的舍入)。

ties_away:朝向最接近的整数。如果邻近的整数都等距离,则远离零。

具有无限远的浮动,或转换超出范围的浮点具有更准确的行为。阅读更多#10420。

枚举#flat_map,迭代器#flat_map现在使用混合元素类型。作为一般指导,在处理多种类型的元素时,请检查您的设计。您可能会从其他语言翻译代码,在那里常见,但在水晶中,它可能不是最热的事情。无论哪种方式,在#10329中有更多的空间,了解在使用现有语言特征时允许越来越多的用例越来越多的情况。

Enum Serialization现在已作为强调字符串表示。如果您想要旧的行为,请使用枚举:: valueConverter。如果添加枚举成员,则使用下划线字符串表示更稳定,因此我们将其鼓励它作为良好的默认值。阅读更多#10431。

XML模块中定义的类型从struct更改为类,以允许将来改进GC与Libxml的交互方式。阅读更多#10436。

有关如何处理饼干的变化。在#10486中,http :: cookies.from_headers方法被分成单独的服务器和客户端替代方案。由于安全原因,Cookie名称和值不再被编码/解码。阅读更多#10442和#10485。它留给框架和应用程序,以便选择cookie的默认编码。

此版本在Bintray的APT和RPM存储库邮寄中可用,以及Github释放工件。 Bintray的日落让我们惊讶。我们需要再次移动以更改存储库位置。幸运的是,我们从之前的过程中学到了足够的东西,而不是一切都丢失了。我们将尝试保持安装脚本API稳定。

由于84Codes,Nikola Motor Company和其他所有赞助商的持续支持,我们已经能够完成这一切。为了维护和增加发展步伐,捐赠和赞助至关重要。 OpenCollective可用于此。如果您想成为直接的赞助商或找到支持水晶的其他方式,请伸出[email protected]。我们提前感谢您!

经过多年的辛勤工作后,晶体的第一个主要释放的释放。全球人民的数千次贡献,终于可以为1.0真正重要的是什么可以找到共识,什么可以等待未来发布。到目前为止,充满了丰富,有争议的,令人愉快和无穷无尽的对话,即最终成为可能为更多用户建立更有用的语言。

但是有1.0版本意味着什么?毕竟,在这个里程碑之后,接受有价值的贡献和不断发展的语言的过程将不会停止。让我们深入地了解社区此版本的真正含义,特别是那些已经在生产环境中使用了Crystal的真正含义。

语言稳定性可能是最终晶体1.0最突出和最预期的原因之一。我们在这些年内获得了愿意在生产中使用这些语言的人们的众多评论,但只有在我们可以在一天到下一个人开始违反它的承诺。

在此版本之后,每个人都可以期待,至少对于任何未来的1.x版本,您的代码仍然可以编译和工作而没有任何显着的不兼容。语言和标准库功能将无法以任何方式删除或更改,可以防止现有代码编译和工作。内置标准库将继续富集,但总是以落后的兼容性。

没有人可以阻止这个优秀的社区每天都有突破性的想法。但这些贡献现在属于一个单独的分支,其中Crystal 2.0的愿景将开始每天发芽并增长。

为了提高项目的可预测性,我们计划将维护版本(AKA错误修复)作为补丁版本释放。例如,第一个维护版本将是1.0.1,它只包括现有功能的修复。

将为随后的未成年版本保留新功能:1.x。同样,始终保持与以前版本的向后兼容性。

将平行维护多少1.x版本?我们还不知道。这将取决于几个因素,包括核心团队成员的可用性。目前,我们设想保持至少两个小版本。即使发布1.1.0,也可能会发布1.0.x。

由于在1.x→1.x + 1之间的“没有破坏更改”规则,迁移到新的次要版本应该相对容易,迁移计划最终与新版本一起发布。

水晶目前有一些功能,尚未获得官方支持。我们计划在我们对他们的稳定性充满信心之前继续改进它们。这些功能将继续在每个版本上提供,并且您可以在未来的1.x发行版中期望官方祝福。

已经在Windows平台上进行了巨大的进展。但还有很多工作要做。但是,这些工作都不会影响* nix平台的语义或图书馆。因此,由于该领域不完整,我们决定不延迟1.0。

我们不断鼓励Windows社区继续参与这种环境中的水晶支持。

支持在多个内核上运行Crystal Runtime仍然是通过使用-dpreview_mt标志可用的初步功能。但仍有许多改进尚待在多核环境中保证语言的预期业绩和质量。

并且它不仅要启用的标志,可以让现有代码并行运行。必须编写成语和准则,以确保理智的迁移到多核环境中。未来的1.x版本可以预期更多这一点。

将晶体移植到ARM平台始终是重要的,主要用于嵌入式和移动设备。谁没有梦想在这一位美丽的语言中有一天为iOS和Android编写应用程序?但是,苹果在计算机中使用ARM的最新公告使这个平台更加重要。

已经采取了重大步骤来改善晶体代码的交叉编译,甚至我们的CI甚至是ARM服务器上的每一个提交的大部分水晶规范!但是,一些工作仍在等待以提高交叉编译的经验,甚至在我们对臂机上的“生产准备好”标记中有信心之前需要一些核心库。

自0.36.1自0.36.1以来降落在1.0.0的变化集中在抛光上,但值得一提到其中一些作为迁移过程。不要错过释放的剩余变更。

如果我们算上项目成立以来,+450个贡献者+9000个问题/公关的+13000次,更重要的是,一个正在分享经验,想法和梦想的伟大社区。

元组允许具有文字索引的类型安全的访问器,因为编译器知道每个组件的类型是。在#10379中,这知识也可用于文字范围。

tuple = {1,"你好" ,' x' v =元组[0 .1]#> {1,"你好"} typeof(v)#=>元组(Int32,String)

不再允许字符串和字符文字在转义序列中具有Unicode代理半音。您可以使用\ x仍然可以表达任意值,所以" \ ud800"应该是" \ xed \ xa0 \ x80"阅读更多#10443。

STD-lib摆脱了大多数弃用定义,直到#10386为0.36.1。这包括删除:

Getter和Property宏将在可能时添加返回类型注释。添加此延迟初始化属性时,不再接受NIL作为有效值。它令人困惑,你可能没有依赖这一点。阅读更多#10405。

有一些迭代可以添加更多舍入选项来编号并匹配其他语言中可用的功能。 Number#Round接受RoundingMode参数以选择要使用的确切条件。如果您更喜欢它们,则有新的方法。round_even,numand_away。违约舍入已更改为Round_even(A.K.A.: Round最近的领带即使是偶数)匹配其他Libc,Java,Julia和IEEE-754建议书。

ties_even:朝向最接近的整数。如果邻近的整数都是等距的,则朝向偶数邻居(银行家的舍入)。

ties_away:朝向最接近的整数。如果邻近的整数都等距离,则远离零。

具有无限远的浮动,或转换超出范围的浮点具有更准确的行为。阅读更多#10420。

枚举#flat_map,迭代器#flat_map现在使用混合元素类型。作为一般指导,在处理多种类型的元素时,请检查您的设计。您可能会从其他语言翻译代码,在那里常见,但在水晶中,它可能不是最热的事情。无论哪种方式,在#10329中有更多的空间,了解在使用现有语言特征时允许越来越多的用例越来越多的情况。

Enum Serialization现在已作为强调字符串表示。如果您想要旧的行为,请使用枚举:: valueConverter。如果添加枚举成员,则使用下划线字符串表示更稳定,因此我们将其鼓励它作为良好的默认值。阅读更多#10431。

XML模块中定义的类型从struct更改为类,以允许将来改进GC与Libxml的交互方式。阅读更多#10436。

有关如何处理饼干的变化。在#10486中,http :: cookies.from_headers方法被分成单独的服务器和客户端替代方案。由于安全原因,Cookie名称和值不再被编码/解码。阅读更多#10442和#10485。它留给框架和应用程序,以便选择cookie的默认编码。

此版本在Bintray的APT和RPM存储库邮寄中可用,以及Github释放工件。 Bintray的日落让我们惊讶。我们需要再次移动以更改存储库位置。幸运的是,我们从之前的过程中学到了足够的东西,而不是一切都丢失了。我们将尝试保持安装脚本API稳定。

由于84Codes,Nikola Motor Company和其他所有赞助商的持续支持,我们已经能够完成这一切。为了维护和增加发展步伐,捐赠和赞助至关重要。 OpenCollective可用于此。如果您想成为直接的赞助商或找到支持水晶的其他方式,请伸出[email protected]。我们提前感谢您!

评论由Disqus提供动力