繁体   English   中英

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

[英]When designing a programming language, do designers fully specify its operational/denotational semantics?

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

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

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

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

  • LISP
  • PERL
  • TCL

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

  • 早期的C ++
  • 带有STL的C ++
  • AG Natural

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

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

通常,几乎所有语言都以规范性表示法(例如BNF)进行定义。 这个站点有很多参考

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

其中的部分内容进入了HTML5.2设计中,它解释了一些原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM