我一直在研究Ecmascript规范,并发现很难阅读和理解。我经常不得不回溯以保持概念的脑海。阅读C#规范时,我能够研究语言的组成部分,而无需不断地围绕文档移动。

eCMAScript规范

C#规范

有帮助吗?

解决方案

由于我是唯一一个经常发布的人,因此他既是C#语言设计委员会又是Ecmascript技术委员会的成员,所以我可能可以提供一些见解。

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

其次,我注意到C#规范并不总是这样。 C#2.0规格写为 附录 到C#1.0规范。仿制药,迭代器块和匿名方法对规范的许多部分产生了广泛的影响。阅读2.0规格并必须在两章之间跳动以了解真正的过载分辨率算法,这是一次真正的痛苦。 MADS在C#3.0中进行了大量的编辑工作,以首先将所有C#2.0更改整合到规格中合理的位置,因此您不必在整个地方跳来跳去。

第三,您所描述的很大一部分是两种规范主要建筑师的目标和样式差异的结果。想象一下,一系列“技术性”,其中包括一篇关于正式正确性的论文,一方面主要用希腊字母写,而杂志的文章则为初学者而言。我们设计了C#规范以落在该频谱上的特定位置。我们不希望它成为初学者的程序员教程,但确实希望它成为初学者C#程序员咨询的合理文档。安德斯(Anders)特别希望避免他所说的“规格更高数学”。

这是一组合理的目标,鉴于我们的目标受众的目标受众:专业程序员,其中一些人想学习C#,其中一些人想精确查找某些事情的工作原理。该规范具有模糊的教程方面和精确的语义描述方面,以服务这两个选区。

Ecmascript 3规格的主要作者Waldemar Horwat的目标是E3规格的目标截然不同 - 不是更糟糕的目标,而是不同的目标。 E3规格的目标是要更倾向于 在数学上精确 频谱的末端。您会注意到规范的每个部分实际上都由基本上是伪代码算法来描述,这些算法恰好用数学丰富的散文描述了每个操作对系统的影响。

例如,您会注意到E3规范会讨论“数学”数字及其二进制表示之间的差异。 E4规格的一项草稿甚至还没有注意到,如果类型也是值,则存在设定的理论问题,即“类型”作为一组值的定义。在C#规格中,这种事情将完全不合时宜。它不寻求具有强大的理论数学基础来确保其正确性。您会注意到,C#规格甚至没有定义“类型”,它是在以下假设的,即读者将成为Pro Devs(1)(1)已经知道哪种类型是出于实际目的,并且(2)知道也不关心什么设定理论或类别理论必须对任何“类型”定义的数学基础有充分的基础。

ECMAScript过程的目的是让多个高度相似语言的供应商聚集在一起,并同意所有这些实施中共同基础的确切描述。 E3规范从未打算成为任何形式的教程,主要针对语言和工具 实施者, ,而不是语言 用户.

Waldemar的E4规格进一步发展。如果我没记错的话,他首先要用清晰的语义指定一种非常精确,简单的“规格语言”。然后,他在通用LISP中为该语言写了一位口译员。然后他用他的规格语言编写了E4规格。结果是他可以 将规范本身编译成工作. 。这正是我们在C#规范中试图避免的“更高数学”。如果您想变得非常精确和准确,这是一种很棒的规范方法,但这是撰写文档的可怕方法 语言用户 可以学习。

这是否回答你的问题?

其他提示

您可能正在经历两种语言规格的可读性,因为它们是由不同的人群编写的,并讨论采用不同对象范式的语言。

JavaScript规范是由委员会撰写的,该语言几年后有机地进化。 C#规范是由一小部分公司工程师撰写的,而语言以受控方式增长。

C#是以类为中心的OOP,JavaScript为以原型为中心。如果您不像另一个人那样熟悉一个,那么一开始可能很难理解某些材料,尤其是当它进入实施细节时。这不一定表明规范的清晰度和可读性存在问题。

相对于传统语言JavaScript非常奇怪。实际上,没有太多的流行语言像JavaScript是基于原型的。 JavaScript是完全基于对象的,所有对象本质上都是关联数组,功能也是一流的对象。这通常不是您期望从一种语言中看到的,但是Ajax和浏览器侧编程JavaScript的普及已成为Web的语言。尽管本可以避免这些奇怪的规格,但我相信JavaScript可以导致一些有趣且创意的编码。例如,封闭是大多数新开发人员都难以理解的事情,但是根据我的经验,它们非常有用。语言的语义有时是傻瓜开发人员认为JavaScript是C的味道,但很快他们意识到这是不正确的。

对我来说,C#是编程语言的顶峰。这是正确的,并且与学术期望有关。 MS是该语言的主要驱动力真是可惜。像我一样,我敢肯定,还有许多其他人会享受适当的平台实现,并支持C#在NONE基于Windows的系统上的C#(Mono是朝着正确的方向移动)。

如果您渴望学习JavaScript而不是JavaScript框架,那么我真的建议您坚持直接讨论JavaScript的书籍。但是,如果您打算入门,并且不太关心JavaScript @bwawok的书籍建议是正确的方法。

好吧,您是我认识的第一个尝试根据ECMA文档学习语言的人。无论如何,我想说的区别主要是由于人们编写规范的技巧。 C#显然更容易指定(由于动态性质较低 - 已经指出),但是最后... ... IIRC JavaScript是由委员会设计的(许多人也在规格上写作),而C#最终是由一个人完成的,也许是一路上有1-2位作者和一些助手,但最后是安德斯·赫杰尔斯伯格(Anders Hejlsberg)(希望我拼写正确)。委员会的设计并不得不对事情进行投票,有时可能导致文档的最佳“设计”。

因此,最后,我认为这是关于书写不同规格的技巧,而一个人比另一个更难阅读的规格。

部分原因是您链接到的标准实际上是Ecmascript。 JavaScript,JScript和ActionScript都是Ecmascript的实现,并且编写了Ecmascript以涵盖每个部分的共同部分。相比之下,C#主要是由微软的三人(根据ECMA-334标准)设计的。

除此之外,您必须将 委员会 那写了Ecmascript标准。

简而言之,这可能是因为它们是由不同作者写的。 C#规格是由Microsoft撰写的,他对使其变得良好(以便接受)具有既得利益,而Ecmascript Spec是在使用该语言后由委员会撰写的。

最好的部分是,C#将从一台计算机到另一台计算机运行(是的,在.NET版本中可能会遇到较小的差异,但是内容通常会表现出来)。 JavaScript将在Internet Explorer vs Firefox与Chrome之间非常不同。

例如,您有一个带有元素的网页

<input type="text" name="fred" />

然后您运行JavaScript

document.getElementById("fred")

Internet Explorer会为您提供元素(即使这是错误的行为,也没有弗雷德ID的元素),但是Firefox会给您带来零。

这很可能是因为语言如何增长。 C#是由1家公司制造的,开发人员被迫遵守标准,否则其代码将行不通。 JavaScript以不同的方式以许多不同的浏览器实施,人们可以自由地添加或删除或更改功能。

总而言之,由于其历史,JavaScript比其他语言要花更多的时间来学习。查看像jQuery这样的好库,以抽象浏览器差异,您应该足够快地掌握它。从文档中学习只是学习语言的一小部分...进行一些编码并了解其工作原理,这将是有道理的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top