Common Lisp的悲剧:为什么流行语言变得复杂

改编自2015年讨论 在这里,Common Lisp只是许多很好的例子之一。


JavaScript的未来?

自2007年以来,我一直在JavaScript标准委员会(TC39)上工作。 我们赞赏这种语言的简单性,但是随着时间的流逝,人们已经不再保持警惕。 复杂性开始不受控制地增长。 我们应该找出为什么这种情况会自然发生,价格是多少以及如何处理。 本文不仅针对TC39的同事,还针对所有希望影响JavaScript或任何面临类似压力的标准的开发路径的人。 从我们的错误中学习!

Algol,Smalltalk,Pascal和Early Scheme被认为是小巧而漂亮的语言。 正确地批评了早期的C和JavaScript并称其为Beautiful。 但是它们也很小,因此非常感谢。 当语言较小时,我们的评估通常取决于以下感觉: “我可以学习并掌握一切” ,然后: “我什么都知道。 我喜欢这里没有未知的细节 但是在C和JavaScript的情况下,任何人都不太可能完全掌握该语言,因为这些细节实际上非常复杂。 但是,“小语言”的感觉在许多方面决定了日常使用的满意度。

EminaScript-5标准保留了JavaScript极简主义的美感。 我积极参与了EcmaScript-5和EcmaScript-2015的开发,在这两种情况下,我都为自己的贡献感到自豪。 EcmaScript-2015的大小已显着增长,但带来了一些改进。 考虑到我们的出发点,如果不增加JavaScript的大小,就不可能改进JavaScript。 我不后悔导致EcmaScript-5膨胀到EcmaScript-2015的大多数附加组件。 如果您回去,可能在许多情况下,我会建议添加类似内容。

每个添加项都必须克服很高的标准。 从心理学上讲,这是有道理的,因为我们研究了EcmaScript-5的极简主义。 当语言较小时,每个附加功能都会直观地感觉为语言大小的显着增加。 支持者始终可以看到功能的特定优势。 对于较小的语言,每个人都仍然可以看到新功能对总数增加的贡献。

一旦一种语言超出了某种复杂性(例如LaTeX,Common Lisp,C ++,PL / 1),现代编程就变得像从无限的功能中切出供个人使用的功能子集一样,我们绝不会掌握和调解其中的大部分功能这样。 一旦该语言被认为是“无限的”,新功能的特定好处仍然可以理解。 但是与其他复杂性相关的总成本不再显而易见。 那些讨论新功能的人不再觉得它们。

$无限+ 1 ==无限$

偶数 $大数+ 1 ==大约相同的大数$

这是一千次割伤的死亡,这使得这些怪物得以不受任何限制地成长。

因此,我要求所有影响语言的人在考虑一项新功能时都考虑一个更高的标准,而不是“拥有这样的机会,不是吗?” 我相信EcmaScript-2015位于边界地区,仍然可以防止猖border的增长,但前提是我们必须以任何提出的新功能的高标准开始相互限制。 作为一个社区,我们需要对EcmaScript 2015已经达到的规模有更普遍的恐慌感。 理想情况下,随着舌头的增长,当大小接近无退缩点时,恐慌应增加而不是减少。

一些差异



保持最小的不均匀压力

随着我们从基本语言转向图书馆,极简主义的相关性逐渐减弱。 整体上,标准语言可以表示为以下结构:

  • 基本语法 :无法通过本地扩展到另一种语法来准确表示的特殊形式。
  • 语义状态 :通过计算操作的状态。
  • 内核内置程序:内置库的一部分,提供自定义代码无法自行提供的功能。
  • 非内核内在函数:可以用JavaScript实现的内置库,但是内置于内核中的语义状态或模块取决于它们。 例如,通过代理,您可以在用户代码中实现数组。 但是内置在内核中的其他模块已经对Array有依赖性,这使该特定数组比任何建议的替换都享有特权。
  • 语法糖 :可以通过基本语法的本地扩展来表达的语法。
  • 为方便起见,全局库 :可以使用无特权的用户代码实现,但要考虑原始全局名称空间中的标准全局命名路径。
  • 为方便起见,标准模块 :社区开发的模块已作为标准获得批准。

根据我不断增长的成本和对简约的迫切需求,我按顺序列出了它们。 所有这些都需要纪律。 只有在最后一点上,我们才能无限增长,但是建议候选人接受社区的测试,并首先接受事实。 理想情况下,TC39委员会将不再成为瓶颈,因为事实上和法律上的外部流程将能够独立开发标准模块以方便使用。

Source: https://habr.com/ru/post/zh-CN454486/


All Articles