use*_*931 4 language-agnostic programming-languages language-specifications
Wikipidea说,Perl有一个显性实现,可用作其规范的参考,而C语言则由标准ANSI ISO指定.
我学会了C语言而没有阅读单行标准,这是正常的吗?
我想知道标准(即自然语言文档)如何能够描述编程语言而不涉及任何主导实现.
从规范中找到学习编程语言的人是极其罕见的.该规范主要针对编译器作者(他们需要逐字逐句地保证正确性)以及作为该语言合法性的最终仲裁者.大多数语言规范都非常密集和技术性,并且不是学习用语言编程的好方法.通常,只有非常高级的语言用户才能阅读规范.
此外,在参考实现方面定义的语言非常少.大多数语言都是相对于某些抽象执行环境定义的.例如,C++规范说明了这一点
本国际标准中的语义描述定义了参数化的非确定性抽象机器.本国际标准对符合实施的结构没有要求.特别是,它们不需要复制或模拟抽象机器的结构.相反,需要符合实现来模拟(仅)抽象机器的可观察行为,如下所述.
换句话说,C++规范描述了C++程序如何在纯粹的理论意义上表现.这为规范作者提供了如何定义语言的巨大余地.例如,他们可以谈论"对象"和"指针",但没有说明它们实际上是如何实现的.他们甚至不需要说明C++运行的物理机器是如何工作的,因为他们可以定义机器以便按照他们想要的行为,然后将其留给实际的编译器编写器将该抽象机器转换到物理机器上.
有些语言是针对虚拟机定义的(一个很好的例子就是Java).他们可以通过说出Java程序如何与虚拟机交互,然后将VM实现的细节留给VM实施者来讨论Java程序相对于该虚拟机的行为.
其他一些语言,例如ML,具有纯粹数学的定义.语言的语义被描述为状态之间的抽象数学变换,这意味着如果语言是相对于参考编译器定义的,则可以证明ML的属性不容易显示.
总而言之 - 语言规范是很少有程序员真正阅读的复杂文档.它们主要用于编译器作者,并且通常在一些不考虑机器的抽象术语中定义程序.这样,语言可以以可移植的方式定义,因为您可以通过将正式描述转换为机器操作来在任何机器上进行一致的实现.
希望这可以帮助!