什么是计算的本质,它与编程语言的关系?

论坛 期权论坛 期权     
匿名用户1024   2021-5-24 09:05   7768   5
上次在社区看到了 关于数学本质的问题http://www.zhihu.com/question/19925292,上面
陳浩大牛的回答让我有种茅塞顿开的感觉。最近在钻研编程语言的时候看到了很多关于计算本质的描述,自己有了一点想法,望大家指正:
1.所谓计算,它也是构建在一套公理体系上的,并且在此基础上不断向上演化。比如我们日常的四则运算,我的猜测是它的公理体系则是由三大类组成,一类是数字,一类是基本运算符,一类是它们组合方式。下面是我的理解。
a.数字是我们定义的一个描述数据的集合。
b.运算符是我们用来描述一个计算过程的最小单位,它不能再被拆分。这里我的感觉是好像建立起了一种从输入数据(即被运算符操作的数字)到输出数据(即计算结果数字)的映射。即在这个地方我们定义了1+1=2,2+1=3.....这些最基本元运算,他们没有为什么,因为我们规定映射就是这样。所以运算符应该是一个映射过程的符号表示。
c.组合方式应该是计算向上演化的规则,由此我们可以得到非常复杂的表达式,即如何由最基础的元运算按照一系列规则组成复合运算,也可逆向分解。比如(1+1)+1+1*5=8等不是元运算,而是复合运算,我们可以根据组合方式的规则将它划分成为最基础的元运算 ,然后求出最后的结果。
这是我对于数学上的一点思考,我数学不好,还希望大家见谅,多多指教。关于这个思考中,我对于组合方式的理解还是有些模糊,大家是否能够指出四则运算当中我们规定的组合方式到底有哪些呢?
2.如果我们站在计算机学科的角度来说,所谓的计算的本质,也许就是一个解释器,我们将数据放入其中,这个数据就是代码计算过程就是解释器的运行过程,最后我们会得到一个结果。不同的解释器对应着不同的计算模型,那么抽象而言,计算即解释器。
比如我们常说的符号计算和数值计算,其实就是指我们输入的数据是数值或是符号,然后各自对应一个自己的解释器,得出各自需要的结果。它们是不同的计算模型,但是它们都是计算。


综上所述,我的感觉是计算的本质是一个黑箱,我们把数据放入黑箱,黑箱按照人们规定的过程一步一步(即元运算)执行下去,然后得出结果。
而编程语言和计算的关系在于,编程语言可以去描述指导这个黑箱的运行过程,好的编程语言还能够给我们提供一种搭建良好黑箱的框架,编程语言是黑箱过程的具体展现。
上面就是我的一些yy,还希望大家给出自己独特的见解。由于自己刚处于学习开始阶段,所以错误一定很多,还希望大家们多多指教,感激不尽!

分享到 :
0 人收藏

5 个回复

倒序浏览
2#
有关回应  16级独孤 | 2021-5-24 09:05:01
计算就是通过演化产生新的信息,其实我们的宇宙也可以看成一个计算模型

编程语言只是演化规则的描述系统而已
3#
有关回应  16级独孤 | 2021-5-24 09:05:02
在计算这个问题上有两种范式,一种是计算理论的研究,侧重于从数学角度证明表达能力和正确性,比较典型的图灵机、lambda演算、pi演算这些都属于这个范畴。另一种是计算模型的研究,侧重于对真实系统的建模和刻画,比如冯诺伊曼模型、BSP模型、LogP模型等等。编程语言的切入点不同,同时可能会是两种范式之一或混合,比如 Lisp 更侧重于前者,C 更注重后者,而更多的语言都在寻求某种折衷。
4#
有关回应  16级独孤 | 2021-5-24 09:05:03
题主可以看一看皮亚诺的自然数公理体系,最好结合着lambda演算一起看,很简单普适的模型,可以从这个角度去看计算。

另,在这个公理体系的基础上1+1=2,1+2=3是可以被证明的,皮亚诺给出了详细证明,邱奇数可以看作是在lambda演算的基础上建立起来的一个具体实现。

计算到底是什么,目前没有准确说法,人们连数学是什么也还有争论。就计算来讲,从图灵机和lambda算子看过去,就已经是两个世界了,更何况完备的计算模型远不止这两个。
5#
有关回应  16级独孤 | 2021-5-24 09:05:04
尚无定论。粗浅地说,计算是对信息的处理。但信息的本质是什么?信息熵和热力学熵的关系。这些人类的认识都尚浅。
6#
有关回应  16级独孤 | 2021-5-24 09:05:05
分享一段我的思考,欢迎交流~
[h1]计算的本质是通信[/h1]首先,我们要理解通信是什么。运动和通信是一体两面。从微观上看,通信必定对应着一种运动。(要么是粒子的运动,要么是波的运动)


人类通信发展的历史,从声波通信、视觉通信,发展到快马送信,再到电报通信,最后到无线通信,都没有脱离运动的微观本质。它们依次是声波、电磁波、物质分子、电子、电磁波的运动。


而计算,从微观上讲,就是信号从一条【信息通路】的输入端传播到了输出端。计算的结果就是粒子运动的结果。
比如,逻辑电路的工作原理归结于电子的运动。当我们在使用逻辑电路进行计算的时候,只不过是将电子注入输入端,然后从输出端观察电子运动的结果而已。


这不就是一种通信吗?计算的本质是信息的传播(即通信),而它们的本质都是运动。


让我们用通信的视角来进一步思考计算的本质:


  • 设计计算机器,本质上就是将我们的知识,设计成一条【信息通路】。在使用的时候,就将输入信号注入输入端,让信息传播,然后在输出端观察到信息传播的结果。
  • 设计逻辑电路、甚至芯片的过程,本质上就是在将我们的知识设计成复杂的【信息通路】,控制粒子的运动(信息的传播)。
  • 编程,其实本质就是在设计一种机器。程序就是对一种机器的描述(参考sicp 4.1.5节)。而通用计算机,就根据我们的程序,将自己模拟成程序所描述的那台机器。因此,归根结底,我们的每一行代码,其实都在决定电子的【信息通路】。
  • 算盘,其实也是人类设计的一种计算机器,它的工作原理就是算珠在【信息通路】上的运动。

其他类型的运动,如果足够可控,也可以用来实现计算。比如,光子计算机,就是利用了光子的运动来实现逻辑电路。

任何一个数据系统,包括其中的存储、计算、网络,本质上都是信息的传播(通信)。在我们的潜意识中,早已经习惯了一个数据系统的结果是【略微过时】的(总是比现实世界慢一拍),就是因为【输出过时的结果】只不过是通信时延的体现,是理所当然的事情,更无法避免。


因此,我们要避免的不是通信时延(当然我们应该尽力降低它),而是:


  • 从计算的角度来说,我们要避免的是混用不同版本的数据,导致数据不一致的结果(参考上面的“如何判断是否存在数据不一致”小节)。
  • 从通信的角度来说,我们要避免的是在通信过程中新旧的信息相互干涉,形成噪声(即使用不一致的数据,计算出错误的结果)。
希望能给你提供一个全新的视角。


我在这篇文章中有更全面的阐述(用的是前端开发领域的例子) :
csr632:数据系统杂谈:React,数据一致性,计算与通信的本质


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:136515
帖子:27303
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP