对于出现在学术会议上的语言,例如POPL或ICFP,通常会明确指定该语言的语义(以operational或denotational语义的形式)。我试图找到流行语言(例如C,Python,JavaScript)的文档语义,但找不到任何语义。
当开发具有“沉重”(相对于设计为概念证明的语言而言相对较重)功能的语言时,这些语言的设计者(或委员会成员)是否在未指定其语义的情况下添加了功能?大多数流行的编程语言都是这种情况吗?
如果是这样,我认为这实际上是有道理的,因为并非每个想要为开发语言做出贡献的人都需要成为PL研究人员。但是我想知道在现实世界中存在什么样的权衡取舍。
答案 0 :(得分:1)
一些动态编程语言的语义正在出现,因为它们的语法核心很少,并且主要由其库定义(实际上用于编程的语言比语法定义的语言大得多)。例如:
某些语言的语法含糊不清,以至于语义最终只能由特定的实现来定义。例子:
任何具有宏功能的编程语言,或者通常与宏预处理程序一起使用的语言,最终都会由所使用的宏重新定义语义(例如,在 Domain Specific Languages 中)。在运行时还定义了允许在运行时更改分析行为的动态语言。
在面向对象的语言(以及其他根据对象类型进行分派的语言)中,表达式的语义取决于所涉及对象的类型,对于构建的对象,这些语义可能与等效表达式的语义大相径庭。 in和标准类型。
答案 1 :(得分:0)
几乎所有语言都通常使用规范性符号(例如BNF)进行定义。 This site has references to many。
其中一部分是消除歧义并确保语法一致性。没有编译器或渲染器,将很困难。
部分内容进入design of HTML5.2,其中解释了一些原因。