gpt4 book ai didi

ruby - 为什么用 Ruby 2.1 编写的代码必须能够被 Ruby 2.0 解释器解析?

转载 作者:太空宇宙 更新时间:2023-11-03 16:29:03 27 4
gpt4 key购买 nike

在 Ruby Core 中,已为 Ruby 2.1 提出了一种用于卡住字符串的新文字符号 "foo"f,但是 now人们担心用这种语法编写的代码不能被 Ruby 2.0 解析。为什么这是一个问题? Ruby 难道没有尝试只向后兼容吗?也就是说,如果用 Ruby 2.0 编写的代码可以被 Ruby 2.1 解释器解析,这还不够吗?为什么用 Ruby 2.1 编写的代码必须能够被 Ruby 2.0 解释器解析?

最佳答案

这是一个很好的问题。我已经关注核心 ML 一段时间了,我认为这里主要关注的是新的卡住文字语法是语法更改,而不仅仅是功能更改。

让我稍微扩展一下答案。首先,让我们记住我们谈论的是次要版本更改,它不应该破坏与以前代码的兼容性。事实上,您可能会争辩说,事实上,这根本不会发生。 Ruby 2.0 代码在 Ruby 2.1 中运行良好,但反之则不然。

您还提到,新版本可能包含先前版本中不可用的功能。但我相信这正是担忧的起点。

新语法不仅引入了功能更改,还引入了语法更改。这意味着如果您尝试用 Ruby 2.1 代码提供给 Ruby 2.0 解析器,它可能会失败。出于我们已知的所有原因(兼容性、迁移、维护等),这可能不是一个好主意。

这与在 Ruby 2.1 中创建一个 Ruby 2.0 不可用的新方法有很大不同。在这种情况下,2.1 确实会比 2.0 具有更多的功能,但是如果您为以前的解释器提供相同的代码库,它就不会提示。您没有更改语言语法,只是丰富了核心库。而且,在这种情况下,很容易使您的 2.0 代码更类似于 2.1:只需实现缺少的方法。

这不可能通过语法更改来实现,因为您需要重新实现解析器。

如果您在这一点下查看 Ruby 更改,您会发现在次要版本之间引入了非常少的语法更改。

像粗短的 lambda、关键字参数、新的散列符号这样的变化,它们都是在引入时发生了重大变化。

一般而言,与功能级别的更改相比,语法级别的更改可能会导致更多的维护问题。这是我对新的卡住文字语法背后的原因以及他们最终使用 .freeze instead of the new syntax 的原因的解释。 . freeze 已经存在于以前的 Ruby 版本中,但即使它们带有全新的方法,也不会在解析时评估方法,并且可以轻松地向后移植。

关于ruby - 为什么用 Ruby 2.1 编写的代码必须能够被 Ruby 2.0 解释器解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19235588/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com