在设计编程语言时,设计人员是否完全指定其操作/名词语义?

时间:2019-01-17 23:00:18

标签: programming-languages semantics formal-languages

对于出现在学术会议上的语言,例如POPLICFP,通常会明确指定该语言的语义(以operationaldenotational语义的形式)。我试图找到流行语言(例如C,Python,JavaScript)的文档语义,但找不到任何语义。

当开发具有“沉重”(相对于设计为概念证明的语言而言相对较重)功能的语言时,这些语言的设计者(或委员会成员)是否在未指定其语义的情况下添加了功能?大多数流行的编程语言都是这种情况吗?

如果是这样,我认为这实际上是有道理的,因为并非每个想要为开发语言做出贡献的人都需要成为PL研究人员。但是我想知道在现实世界中存在什么样的权衡取舍。

2 个答案:

答案 0 :(得分:1)

一些动态编程语言的语义正在出现,因为它们的语法核心很少,并且主要由其库定义(实际上用于编程的语言比语法定义的语言大得多)。例如:

  • LISP
  • PERL
  • TCL

某些语言的语法含糊不清,以至于语义最终只能由特定的实现来定义。例子:

  • 早期的C ++
  • 带有STL的C ++
  • AG天然

任何具有宏功能的编程语言,或者通常与宏预处理程序一起使用的语言,最终都会由所使用的宏重新定义语义(例如,在 Domain Specific Languages 中)。在运行时还定义了允许在运行时更改分析行为的动态语言。

在面向对象的语言(以及其他根据对象类型进行分派的语言)中,表达式的语义取决于所涉及对象的类型,对于构建的对象,这些语义可能与等效表达式的语义大相径庭。 in和标准类型。

答案 1 :(得分:0)

几乎所有语言都通常使用规范性符号(例如BNF)进行定义。 This site has references to many

其中一部分是消除歧义并确保语法一致性。没有编译器或渲染器,将很困难。

部分内容进入design of HTML5.2,其中解释了一些原因。