与编程语言/API 相关的常用“语义”的简单定义?

Posted

技术标签:

【中文标题】与编程语言/API 相关的常用“语义”的简单定义?【英文标题】:Simple definition of "semantics" as it is commonly used in relation to programming languages/APIs? 【发布时间】:2011-03-17 16:59:38 【问题描述】:

今天我突然想到,虽然我在提及语言元素和命名约定时采用并且不经常使用术语“语义”,但我没有任何正式定义的意义。

My attempt to find a formal definition in the programming domain让我眼前一亮。

我从我遇到它的上下文以及它在语言学方面更常见的用法中了解它的含义,我通常使用该术语来指代含义或语言元素的表现力,或术语对其命名的意图、行为或功能的忠实度

不过,这个定义是我自己的想法。我是人类学/英语专业的学生,​​从未上过计算机科学课程。这是用 CS 教的吗?

有没有更准确的定义可以归结为一两句话,而不是一篇详尽而令人筋疲力尽的文章?

【问题讨论】:

In terms of programming, what do semantics mean?的可能重复 【参考方案1】:

从编程语言的理论和实践来看,语言元素是有语义的。命名约定没有。语义与对任何事物的“忠实”无关,只是如果一个实现是正确的,它有时被称为“忠实于语义”。

除此之外,很难一概而论,因为语义有很多不同的风格。

Christopher Strachey 是真正推动这种想法的人,通常是一个短语(想想 declarationdefinitionstatement expression) 由较小的子短语组成,并且较大短语的含义(语义)应该是组成子短语含义的函数。在这种风格中,每个语法结构良好的副短语都有一个语义。听起来这就是您要找的东西。

还有其他风格的语义,称为“操作语义”,给定一个程序,语义告诉您该程序将如何在抽象机器上执行(或者在另一种变体中,语义不是说程序将如何执行执行,但只执行结果)。

有“公理语义”,大致是关于您可以证明关于单个程序的哪些事实。公理语义是有效证明技术的集合。由实施来确保所有可证明的声明都是真实的。

还有“静态语义”,泛指在编译时强加的任何要求,以使程序被视为“良好”或“格式良好”。诸如“必须在使用变量之前定义变量”之类的东西是静态语义。但大多数情况下,当人们说静态语义时,他们的意思是类型检查。

最后,可以说抽象数据类型、类或接口等的“语义”。这种用法要宽松得多,但它们归结为对允许的行为的规范。我建议您在这种情况下避免使用“语义”一词,而是使用“合同”或“规范”一词。这样可以避免混淆。


评论:尝试将复杂的主题归结为一两句话并不总是有帮助。当涉及到编程语言时,不要在 Wikipedia 上寻找好的信息。***的意思很好,但它们往往很复杂、令人困惑,或者完全是错误的。

【讨论】:

【参考方案2】:

这是语言元素的含义,就它们在计算方面的正式含义而言(通常,这是操作语义)。这意味着它可以有效地表达您的语言中的一个术语,假设一种基础类型的模型取决于我们所讨论的语义。

从***页面可以看出,您主要有 3 种语义:

操作语义通过指定抽象虚拟机在执行一个术语时的行为方式来表达语言的含义。 (例如:+:从堆栈中弹出两个元素并推送总和。这是正式的,它是不是你应该真正考虑它的方式,它只是为了给你一个想法)。这是描述“普通”编程语言语义的最常用的一种。例如,对于 Java,对于每个可能的术语,您都可以拥有一个 JVM 指令序列,该指令旨在被执行以对该术语进行建模。 可能当您询问语义的含义时,这就是您正在寻找的那个。 指称语义是一种不同的方法:您为语言的每个术语赋予一个由数学函数表示的含义。因此,对于前面的示例,您将有一个与 + 关联的函数 f,其中包含术语的语义(有效含义)是什么 公理语义是一种注释语言术语的方法,表示它们如何改变您想要在程序中验证的某些逻辑公式的有效性。您应该考虑阅读this,因为所使用的推理规则和公理在您开发这种语义的方式上相似,但以实用的方式进行了解释

从这个描述中,您了解到语义是在上下文中明确定义的东西,并且您需要指定的上下文,否则您无法为语言提供其术语作用的正式定义..

【讨论】:

【参考方案3】:

引用自here 的定义是编程语言的语义描述了语法和计算模型之间的关系。。这几乎正​​是您推断的定义。症结所在,也是让你目瞪口呆的地方,正是定义了计算模型。

有许多不同的正式计算模型,每种模型都会导致不同形式的语义。操作语义可能最接近大多数人非正式地对语义建模的方式,让每个代码片段都通过解释器运行并更改抽象例程的状态。这种方法在并发或非确定性等的许多模型中都失效了,因此还有其他语义学更适合这些情况。

【讨论】:

以上是关于与编程语言/API 相关的常用“语义”的简单定义?的主要内容,如果未能解决你的问题,请参考以下文章

python常用模块——xml(未整理完)

词法语法与语义相关知识

API相关基础知识

语义相似度相关文章链接

用于两个“单词”之间语义相似性/相关性的 Java API

java常用类详细介绍及总结:字符串相关类日期时间API比较器接口SystemMathBigInteger与BigDecimal