在编程方面,语义是什么意思?

时间:2009-05-27 17:00:30

标签: compiler-construction theory

这是来自Eric Lippert's blog的句子:

  

鉴于这种不幸的情况,它   有意义强调存储   首先是机制,然后是   语义第二。

很容易得到dictionary definition“语义”的意思,但它在计算机术语方面意味着什么?

7 个答案:

答案 0 :(得分:26)

  

但就计算机行话来说意味着什么?

基本上是一样的。例如:

x = 5;

以上是语法(表示)。该术语的含义(即语义)是将值5赋给称为x的符号(变量,无论如何)。不同的语言提供不同的语法来提供相同的语义。例如,上面的赋值将写为

x := 5;
Pascal中的

x <- 5

用其他几种语言。在所有情况下,含义基本相同。但有时,相同的语法也可以具有不同的含义,具体取决于语言和/或上下文。例如,VB将equals运算符重新定义为两个不同的东西。首先是一项任务,如上所述。

其次,在下面的代码片段中,不是分配,而是采用比较两个值的含义:

If x = 5 Then Console.WriteLine("x is 5")

答案 1 :(得分:6)

字典定义适用。

语义是(是?)所有关于词的含义。

例如,如果使用.NET类型KeyValuePair来表示除键和值之外的其他内容,则会出现语义问题。它可能有用......它可能是最好的解决方案,但它在语义上并不准确。

这正是他在博文中所谈论的内容。我们首先用C语言列出返回类型,但实际上返回是最后的。这在语义上是不准确的。

答案 2 :(得分:6)

语义是我们的意思,程序应该做什么。 Sytax是我们表达语义的语言特定约束。

理论上,只要程序的语义是正确的,使用什么语言写它就没关系。

答案 3 :(得分:4)

就编程语言术语而言,有几种语义概念:

  • 静态语义告诉您哪些语法程序也很好。许多语言要么没有静态语义(Scheme,Ruby,Python,Icon,Lua,Perl),要么具有静态语义,主要是关于实现类型系统(Java,C,C#,Haskell)。 “使用前需要声明”是另一种可能的静态语义。静态语义回答了“这个程序有意义吗?”的问题,并在编译时这样做。

  • 动态语义告诉您以下两件事之一:

    • 鉴于程序是有意义的,它的含义是什么? 含义已经通过许多不同的方式在数学上进行了定义。经典的动态语义可以定义程序输入和程序输出之间的函数(或关系)。意义函数(“指称语义学”)由Dana Scott和Christopher Strachey开创;意义关系(“公理语义学”)由Tony Hoare开创。斯科特和霍尔获得了图灵奖; Strachey可能会有,但他很年轻。介绍的好方法是阅读Tony Hoare的书计算科学论文
    • 鉴于程序有意义,执行时会如何表现?。这种语义通常被称为“操作语义”,并描述了在某种抽象机器上执行程序。同样,有许多种类。今天,操作语义是首选工具,因为有强大的证明技术,因此,例如,使用操作语义可以证明托管代码中永远不会出现内存错误。 Robin Milner获得了他的图灵奖,部分原因是用于描述并发或多线程程序(CCS和pi演算)的不同操作技术。如果你跳过证明,他在1999年出版的关于通信和移动系统的书也非常好读: - )

如果您在手册或文章中读到“语义”一词,并且上下文是非正式的英语而不是精确的数学描述,那么作者可能会提到动态操作行为 - 如果您愿意的话,可以非正式地描述操作语义。这种非正式的描述对编译器编写者和编程人员非常有帮助。

答案 4 :(得分:3)

据我了解,语义是“对人类意味着什么”。这是它所支持的 ,而不是如何

答案 5 :(得分:3)

换句话说,鉴于文章的背景,他说,C#的开发人员更好地专注于在声明变量时内部存储数据的方式而不关心关于指定声明变量的精确方法非常重要。

换句话说,在C#

中执行此操作
static int customerCount

您告诉编译器为可静态访问的整数准备存储,然后告诉它将该存储标记为customerCount

而在VB中你会使用这一行

dim shared customerCount as Integer

在理论上告诉编译器你有一个名为customerCount的变量,它应该存储并使其静态可用,顺便说一下,它恰好是一个整数。

这一切都是一种很好的区别。

答案 6 :(得分:3)

博客的更多内容:

  

因此在C中你放了存储空间   首先是元数据(静态int   customerCount;)而不是   首先是语义学(它可能是   var customerCount:static int;)。

他说“static int”出现在“customerCount”之前。调用“static int”存储元数据和“customerCount”语义存储元数据是关于变量保持什么的信息 - 隐含在其中的是它占用了多少位,它可能包含的值,是否在实例之间共享以及它的波动性。

变量名语义是代码读者关于应该存储在变量中的内容的信息。变量的含义是什么。您可以将其称为“x”,程序也可以正常工作,但程序员很难理解它。将其称为“customerCount”为变量提供了意义,这就是语义。