Jay*_*Jay 9 computer-science programming-languages definition semantics
今天我想到,尽管我在引用语言元素和命名约定时已经采用并且不经常使用术语"语义",但我没有任何正式定义的意义.
我试图在编程领域找到一个正式的定义让我眼前一亮.
我从我遇到它的语境中以及它在语言学方面的更常见用法中感受到它的含义,我通常使用该术语来指代语言元素的含义或表达力,或者保真度.命名的命名与其命名的意图,行为或功能.
不过,这个定义是我自己的想法.我是一名人类学/英语专业,从未上过计算机科学课程.这是在CS教的吗?
是否有更准确的定义可以归结为一两个陈述,而不是一篇详尽而令人筋疲力尽的文章?
它的含义的语言元素在他们正式的用语的含义方面的计算(通常,这是操作语义).这意味着它表达了你的语言术语有效地做了什么,假设一种潜在的模型依赖于我们所讨论的语义.
从维基百科页面可以看出,你主要有3种语义:
+从堆栈弹出两个元素并推送总和.这不是正式的,不是你应该如何考虑它,它只是给你一个想法).这是用于描述"普通"编程语言的语义的最常用的一种.例如,对于Java,您可以为每个可能的术语提供一系列JVM指令,用于对该术语进行建模.可能当你问到语义的含义时,这就是你要找的那个.+其中包含该术语的语义(有效含义)从这个解释中你可以理解语义是在上下文中定义得很好的东西,你需要一个指定的上下文,否则你就不能给你语言一个正式的术语定义.
从编程语言的理论和实践的角度来看,语言元素具有语义.命名约定没有.并且语义与任何事物的"保真度"无关,除非可能是如果实现是正确的,它有时被称为"忠实于语义".
除此之外,很难概括,因为有太多不同风格的语义.
还有其他语义风格,称为"操作语义",给定一个程序,语义告诉你如何在抽象机器上执行该程序(或者在另一个变体中,语义不是说程序将如何执行而只是结果是什么).
有"公理语义",大概是关于个人计划可以证明的事实.公理语义是有效证明技术的集合.由实施来确保所有可证明的索赔都是真实的.
还存在"静态语义",其通常意味着在编译时强加的任何要求,以使程序被认为是"好"或"良好形成".像"变量必须在使用之前定义"之类的东西是静态语义.但大多数人说静态语义时他们的意思是类型检查.
最后,可以说出抽象数据类型,类或接口等的"语义".这种用法是一个很好的松散,但它们可以归结为允许哪些行为的规范.我建议你在这种情况下避免使用"语义"一词,而是使用"合同"或"规范"这个词.这样可以避免混淆.
评论:尝试将一个复杂的主题归结为一两句话并不总是有帮助的.当谈到编程语言时,不要在维基百科上寻找好的信息.维基百科的人意味着很好,但他们往往是复杂的,令人困惑的,或者只是错误的.