一亩三分地

 找回密码 注册账号

扫描二维码登录本站

BBS
Offer多多
Salarytics
交友
Learn
Who's Hiring?
疫情动态
指尖新闻
Instant
客户端
微信公众号
扫码关注公众号
留学申请公众号
扫码关注留学申请公众号
Youtube频道
留学博客
关于我们
123
返回列表 发新帖
楼主: zhangzitong001
收起左侧

国内程序员说的“语义”到底是什么意思

[复制链接] |只看干货 |技术交流
我的人缘0

升级   24.57%

comeshare 2020-8-2 13:05:09 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (72)
 
 
0% (0)    👎
zhangzitong001 发表于 2020-7-28 12:20
个人更偏向于理解成 context 上下文  
翻译过来成为semantics还是理解不了

context 是 “语境” aka, 上下文.

semantics “语义”   aka, 这个编程语言说的是啥.

syntax “语法”.    aka, 这个编程语言应该怎么说.
回复 微信

使用道具 举报

我的人缘0

升级   79.85%

magicsets 2020-8-2 13:26:15 | 显示全部楼层
本楼: 👍   100% (16)
 
 
0% (0)   👎
全局: 👍   99% (1172)
 
 
0% (8)    👎
Kafka的exactly-once semantics实际上是比较常见的滥用semantics这个词的情况,其大概意思就是你按照Kafka规定的某种方式去调用它的API,那么观察到的系统的输入输出会满足一些规律/约束(也就是exactly-once)。

一般我们说某某语言满足XXX-semantics,那么XXX实际上是描述该语言的语义的某种性质的形容词,而“语义”本身首先得有个形式上(formal)的定义。比如说数据库系统的SQL语言的语义可以是扩展的relational calculus with bag-semantics,而Kafka各种讨论exactly-once semantics的文章都没有给出一个Kafka semantics的定义 —— Kafka甚至都没有设计一个语言,只是提供了一堆API加参数设定而已。

那么所谓“语义”直观上到底长什么样?这里随便找个SQL语言的例子:https://homepages.inf.ed.ac.uk/libkin/papers/pvldb17.pdf
上面这篇文章里给出的一堆公式就是定义语义的例子。当然这里只是给个直观印象,可以不去理解它到底是在说什么,下面我会写一点更简单的解释。

首先,“语义”是与“语法”成对存在的概念,语法简单来说是指由字符构造字符串的规则,而语义则是解释所构造的字符串的意义。注意这里有个套娃:我们描述语法A的语义的时候也是要用某种语言B的,B一般是数学语言(各种字母、符号与运算符等等),就好像我们用C去写Python的解释器一样,

而Semantics这个词常用的领域有几个:
(1) 语言学(linguistics),一般是研究自然语言的语义
(2) 数理逻辑(mathematical logic),考虑的是形式语言(formal language)的语义
(3) 程序设计语言理论(programming language theory),考虑的是程序设计语言的语义

其中(1)、(2)这里就不讨论了。(2)是CS理论基石,比如著名的哥德尔完备性定理(Gödel's completeness theorem,注意还有个“不完备性定理”更著名)就是说在一阶谓词演算系统中,一个在所有模型中语义为真的公式一定可以通过语法层面的证明在有限步骤内推出。

(3)的相关知识一般在Programming language concepts(国内一般叫“程序设计语言原理”或者“程序设计语言概论”)这门课上会讲,主要分为三类:
(3.a) 过程语义(procedural semantics)
(3.b) 指称语义(denotational semantics)
(3.c) 公理语义(axiomatic semantics)

这三种语义理论上分别对应三大语言范式:过程式、函数式与逻辑式。不过在实践中都是混用的,我们也可以用指称语义去描述过程式语言中一个函数的行为,或者用过程语义去描述逻辑式语言的一段代码(例如Prolog里面的cut操作)。

其中(3.a)是最常用的理解一段代码行为的方式,程序员入门时一般都是学习的过程语义。也就是想象有台虚拟机一行一行执行代码,每执行一行代码会改变这台虚拟机的状态(也就是各种变量的值),然后控制流(control flow,例如if、for loop)会决定下一行要执行的代码是什么。过程语义的缺点是太复杂琐碎,理论上难以分析,除非是超级简化的情况如老祖宗图灵机 —— 学计算理论(theory of computation)这门课的时候会让你用过程语义去证明图灵机的一些性质。

(3.b)又叫数学语义(mathematical semantics),在理论以及实践中都很实用,经验丰富的程序员也会主动用denotational semantics去理解代码、设计抽象、架构系统。上面那个讲SQL语义的论文就是denotational semantics的例子。它主要是将一段代码的输入输出描述成数学对象,然后用数学语言表达代码的行为。比如说一个sum函数,其输入就是“数组”这么一个数学对象,而语义可以表达为“数组中元素之和”(Σ)这么一个数学算子(operator),我们不用关心这个“和”的计算过程:比如说,可以从第一个元素累加到最后一个元素,也可以倒过来从最后一个元素累加到第一个元素。

Denotation semantics的一个简单的例子是整数四则运算,可以看看这个:http://homepage.divms.uiowa.edu/~slonnegr/plf/Book/Chapter9.pdf

(3.c)的话在PL领域非常常见,PL论文一大俗就是要放点公理语义在上面。直观印象就是一堆大横线描述逻辑推导过程,还是上面那本书的例子:http://homepage.divms.uiowa.edu/~slonnegr/plf/Book/Chapter11.pdf

最后回到Kafka的讨论,如果Kafka要严谨地定义exactly-once semantics,那大概至少需要这三点:
(1) 列出Kafka的完整语法(各种API)。
(2) 在语法结构上定义出语义。使用denotational semantics的话,也就是要明确a domain of mathematical objects(对于Kafka来说应该是消息流加上一些分布式状态),以及将语法(调用API的代码字符串)映射到数学对象状态的函数集合S
(3) 定义exactly-once semantics,其本质上是描述函数集合S某些性质的一个定理


补充内容 (2020-8-3 06:56):
有一点说错了是没有“过程语义”这个词.. 应该是“操作语义”(operational semantics)

评分

参与人数 9大米 +13 收起 理由
大蜜蜜 + 1 给你点个赞!
肥颓 + 2 给你点个赞!
nalzok + 1 赞一个
rewfaltq + 1 赞一个
feifeimary + 2 很有用的信息!
kiwiyhua + 1 很有用的信息!
X88 + 3 给你点个赞!
TSMTSM + 1 赞一个
Wizardmarine + 1 赞一个

查看全部评分

回复

使用道具 举报

我的人缘0

升级   28.75%

本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   82% (260)
 
 
17% (55)    👎
Exactly once就是有且仅有一次的意思。
回复

使用道具 举报

我的人缘0

升级   20.71%

waterine 前天 13:24 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   99% (395)
 
 
0% (1)    👎
语义semantics这个词在实际工作中很常用,在一般software engineering(非PL)领域就是指某个特定语法(实现)背后的逻辑、意义或者目的。比如一个函数用了查表法实现,但他的语义不一定是查询,可能是一个变换,查表只是为了效率。比如一个userId字段,语法/实现同样是特定算法生成字符串,语义可能是database pk,可能是local id,可能是UI display name。
回复

使用道具 举报

我的人缘0

升级   48%

zzzzzzhl 昨天 02:55 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   97% (1403)
 
 
2% (42)    👎
semantics
我专业的某一个方向是专门做这个的 语义就被翻译成semantics
仅供参考
回复

使用道具 举报

我的人缘0

升级   17.5%

追寻 昨天 15:14 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   85% (12)
 
 
14% (2)    👎
就是semantics 的意思,特别是在举的kafka的例子里面。你可以cross check下就知道了,网上搜kafka delivery semantics, 你就可以搜到exactly once, at most once, at least once.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

隐私提醒:
■为防止被骚扰甚至人肉,不要公开留微信等联系方式,请以论坛私信方式发送。
■特定版块可以超级匿名:https://pay.1point3acres.com/tools/thread
■其他版块匿名方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

手机版|||一亩三分地

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

Some icons made by Freepik from flaticon.com

快速回复 返回顶部 返回列表