有大量的编程语言。他们中的一些人长大后变得非常受欢迎。人们越来越多地使用这种语言。此类语言的创建者(或创始组织/社区)可能会尝试实施更改以使语言更好。但是有时由于向后兼容性而很难进行一些更改,并且这种丑陋的东西已经在该语言中存在多年了,并为许多用户所使用。
在语言设计阶段是否有任何架构原则或步骤可以帮助使其更稳定,以使语言设计人员不会害怕破坏向后兼容性?
有大量的编程语言。他们中的一些人长大后变得非常受欢迎。人们越来越多地使用这种语言。此类语言的创建者(或创始组织/社区)可能会尝试实施更改以使语言更好。但是有时由于向后兼容性而很难进行一些更改,并且这种丑陋的东西已经在该语言中存在多年了,并为许多用户所使用。
在语言设计阶段是否有任何架构原则或步骤可以帮助使其更稳定,以使语言设计人员不会害怕破坏向后兼容性?
Answers:
语言稳定性不是技术决定。它是语言作者和用户之间的合同。
作者宣传给定的版本或多或少稳定。语言越不稳定,作者可以进行的更改就越多。对这种语言感兴趣的每个用户都可以决定是否要花时间学习新功能或开发可能被下个月的更新破坏的应用程序。
使用不稳定的语言可能会很有趣,因为您对新概念感兴趣,或者希望通过提供反馈来提供帮助。如果您是一家企业,则可能更愿意等待技术变得更稳定之后再投入时间,而您更在乎诸如上市时间和用户体验之类的东西。
因此,这是一个沟通与信任问题。看一下锈语言的发展。他们清楚自己正在更改什么以及保持什么。当他们想要延迟对给定功能的决策时,他们使用所谓的功能门。另一方面,Angular团队对他们的2.0版本发布感到非常愤怒,因为更改幅度超出了预期。
甚至库作者也必须就其api的稳定性进行交流。几乎其他任何人使用的技术都必须在稳定性和完美性之间取得平衡。汽车制造商无法更改踏板的位置,笔记本电脑设计师也不会出于相同原因而发明新的键盘布局:如果您无法决定用户使用产品的方式,就不会对用户有所帮助。
考虑使语法可扩展的工具,例如宏。宏并不是一件好事,而且功能可能太强大了。某些语言从一开始就具有非常灵活的语法,这减少了对宏的需求。需要考虑以下两种情况:
|>
不离开语言?我可以为此运算符选择优先级和关联性吗?考虑保持语义可扩展的工具。共同的需求是:
use v5.20
,这将启用Perl v5.20的所有向后不兼容的功能。您还可以显式加载单个功能,例如use feature 'state'
。相似:Python的from __future__ import division
。class
引入一个类并不意味着我将不能拥有名为的局部变量class
。实际上,这导致引入变量或方法声明的关键字,与使用类型名引入声明的类似C的传统相反。另一种替代方法是$variables
在Perl和PHP中为您使用sigils 。我认为一个非常重要的步骤是提升软件包管理器,同时还可以管理语言本身的版本。
例如,我将SBT用于Scala或Leiningen用于Clojure。他们两个都让我声明了每个项目要使用的语言版本。因此,以最新版本的语言启动绿色项目非常容易,同时如果有的话,可以以更舒适的速度升级现有项目。
当然,根据语言的不同,您可能还需要等待将相关的库移植到所需的版本(例如,在Scala中发生这种情况),但这仍然使事情变得更容易。