gpt4 book ai didi

c# - 为什么 C# 和 ECMAScript 规范在可读性上存在很大差异?

转载 作者:可可西里 更新时间:2023-11-01 01:44:49 26 4
gpt4 key购买 nike

我一直在研究 ECMAScript 规范,发现它非常难以阅读和理解。我必须不断地回溯以将概念留在脑海中。在阅读 C# 规范时,我能够研究该语言的组件,而无需经常在文档中移动。

ECMAScript Specification

C# Specification

最佳答案

因为我是唯一一个经常在 SO 上发帖并且同时是 C# 语言设计委员会和 ECMAScript 技术委员会成员的人,所以我可能可以提供一些见解。

首先,感谢您对 C# 规范的客气话。我们非常努力地保持它的可读性,很高兴知道我们已经成功了。

其次,我注意到 C# 规范并不总是那样。 C# 2.0 规范是作为 C# 1.0 规范的附录编写的。泛型、迭代器块和匿名方法对规范的许多部分产生了广泛的影响。阅读 2.0 规范并且不得不在两章之间跳转来理解真正的重载解析算法真的很痛苦。 Mads 在 C# 3.0 中做了大量编辑工作,首先将所有 C# 2.0 更改集成到规范中的合理位置,这样您就不必到处乱跳了。

第三,您所描述的很大一部分是两个规范的主要架构师的目标和风格不同的结果。想象一下“技术性”的范围,一方面是关于形式正确性的论文主要是用希腊字母写的,另一方面是针对初学者的杂志文章。我们将 C# 规范设计为位于该范围内的特定位置。我们不希望它成为初学者程序员教程,但希望它成为初学者 C# 程序员引用的合理文档。安德斯特别希望避免他所谓的“规范的高等数学”。

考虑到规范的目标受众,这是一组合理的目标:专业程序员,他们中的一些人想要学习 C#,一些人想要准确地了解某些东西是如何工作的。该规范具有模糊的教程方面和精确的语义描述方面,以便为这两个选区服务。

Waldemar Horwat,ECMAScript 3 规范的主要作者,对 E3 规范有相当不同的目标——不是更糟糕的目标,而是不同的目标。 E3 规范的目标是更接近数学上精确的范围。您会注意到,规范的每个部分实际上都由本质上的伪代码算法组成,这些算法用相当大量的数学散文精确地描述了每个操作对系统的影响。

例如,您会注意到 E3 规范谈到了“数学”数字与其二进制表示之间的区别。 E4 规范的一个草案甚至指出,如果类型也是值,那么将“类型”定义为一组值的天真的定义存在集合论问题。这种事情在 C# 规范中完全不合适;它并不寻求强大的理论数学基础来确保其正确性。您会注意到 C# 规范甚至没有任何地方定义“类型”——它的编写假设读者将是专业开发人员,他们 (1) 已经知道哪些类型用于实际目的,并且 (2) 既不知道也不关心集合论或范畴论对“类型”的任何定义的数学基础有什么看法。

ECMAScript 过程的目标是让高度相似语言的多个供应商走到一起,并就所有这些实现之间的共同点达成一致的精确描述。 E3 规范从未打算成为任何类型的教程,主要针对语言和工具实现者,而不是语言用户。

Waldemar 的 E4 规范走得更远。如果我没记错的话,他首先指定了一种非常精确、简单且语义清晰的“规范语言”。然后他用 Common Lisp 为该语言编写了一个解释器。然后他用他的规范语言编写了 E4 规范。结果是他可以将规范本身编译成一个有效的 ECMAScript 解释器。这正是我们在 C# 规范中试图避免的那种“高等数学”。如果您想要非常精确和准确,这是一种很棒的规范方法,但这是编写语言用户可以学习的文档的糟糕方法。

这是否回答你的问题?

关于c# - 为什么 C# 和 ECMAScript 规范在可读性上存在很大差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2748757/

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