第一句子大全,网罗天下好句子,好文章尽在本站!

每一种编程语言都是胶水语言

时间:2023-12-26

编程,实际上是一个搭积木的过程。目标需求,就是搭积木的最终目的。无论是第三方的框架,还是CPU的指令集,都是积木。不同编程语言的本质区别,在于各自

友情提示:本文共有 1918 个字,阅读大概需要 4 分钟。

编程,实际上是一个搭积木的过程。

目标需求,就是搭积木的最终目的。

无论是第三方的框架,还是CPU的指令集,都是积木

不同编程语言的本质区别,在于各自积木的粒度不同。

汇编的粒度是CPU的单条指令,所以它可以精确地控制内存的堆栈,和程序的执行流程。

C的粒度就要粗一些,没法像汇编一样控制的那么精细,在shellcode这种需要耍花样的地方,C语言是没法用的。

Linux上的shellcode怎么写

不过在大多数的场合,它都可以满足要求。它依然可以直接操作内存的每一个字节。

更高级的语言,一般都有面向对象机制。数据被语言本身当作一个对象,而不直接暴露底层的内存细节。这种情况下是很难直接控制内存的。

高级语言的模块细节,都依赖于C/C++写成的底层框架。例如python的深度学习模型,依赖于C++实现的tensorflow框架。

从更一般化的角度来看,一种语言并不比另一种语言更难学,也不比另一种语言更好学。因为它们都是利用现有的积木去搭目标需求,区别只在于各有各的积木,但搭法都是类似的。

也就是说,所有的编程语言都是胶水语言。

当然,如果目标需求是做一个浏览器,那么你没必要非得用汇编这种细粒度的语言去写。因为这会极大的增加编码量,还有出错率

但如果要优化浏览器里的H264解码部分的FFT变换,那么也没法用C++去写,因为它没法直接操作CPU的MMX指令集。

在写目标需求的时候,所有语言都是胶水语言

在设计编程语言和第三方框架的时候,实际上就是在设计各种各样的积木。积木的设计原则,就是让胶水的用量尽可能小。

所以说,第三方框架必然会随着业务需求的变化而不断的更新,使用起来也会越来越简单。

越来越难用的框架,最后肯定会没人用的。

积木被设计好的情况下,怎么用胶水去粘目标需求,都是NP问题

象棋肯定是设计的积木,所以下象棋本质上也是NP问题。

马为什么走日?

因为只有马走日,马的跳跃距离灵活性才是最好的折中,棋手才最容易思考马该怎么走。即,棋手才能更好地搭积木。

马如果一下子跳3格,那么马腿就太长了。你要踩到对方的某个棋子,那个计算量太大,对人是巨大的脑力负担。

马如果一下子跳1格,就跟士一样了。攻击范围太小,威力大降。

而且和士象一样走斜对角,太过对称了,缺少变化。变化太少,就是对棋子威力的一种降低。

所以设计马这个棋子时,只能让它走日。

不管是中国象棋还是国际象棋,都是不约而同的这么设计的。

只有这么设计,棋手才更容易下出好棋来。

编程语言的设计,与棋类游戏的设计,是类似的。

第三方库的API肯定要尽量设计的简单易用,能够让程序员组合出大多数的通用需求。

编译器,实际上是对汇编程序员的一种取代。因为编译器可以使用一种指令选择算法,去自动的搭积木。

在汇编层面,积木就是一条条的CPU指令。CPU指令集一般不怎么改变,所以积木的形状是固定的。

在计算一个高级语言的算式时,这个算法就可以选尽量少的指令条数,尽量少的寄存器个数,尽量少的内存访问次数。

它不需要给出最优解,只需要给出可行解就行。

运筹学上的一个典型问题是,背包问题。就是把体积和重量不同的两种物体,装在一个背包里,让背包内的东西价值最大。

这是个排列组合问题。

排列组合的数量,与物体的个数的阶乘成正比。也就是它本身不是多项式时间可以解决的。

非多项式时间,Non-Poly,NP。

根据直觉估计,想在多项式时间内求出解来,只能是近似解,而不是最优解。因为阶乘和多项式的复杂度具有本质上的差异。

我个人认为,NP问题是没法按照求最优解的思路解决的。

否则,统计物理学就没必要去搞什么玻色-爱因斯坦统计了,直接去搞粒子的排列组合就行了。但实际上只能搞统计。

(另一种是费米-狄拉克统计,也就是费米子玻色子分别服从的规律)

“道法自然”,既然自然界就是这么搞的,那么人类也不可能搞出新花样来。

实际中解决这类问题的常用算法就是动态规划,分几步求解,每步的求解时间是多项式的。在代码上来看,就是for循环的层数是有限的,并且没有递归

程序员写代码的过程,本质上来说也是这么一个过程。你消耗的时间,肯定与需求本身的模块数量成比例。

程序越复杂,模块越多,写起来越慢。

但你绝对会尽量降低模块之间的耦合度,让程序变成一个动态规划问题,而不是排列组合问题。

当代码写不出来的时候,说明你设计的积木(模块)不合理,胶水太难粘了(笑)。

所以说,人类的科技史,就是把哪些东西设计成一块积木,以及怎么组合积木的历史。

积木不一定是tensorflow,也可以是三极管。

胶水不一定是python,也可以是电路板。

产物不一定是人脸识别程序,还可以是电脑。

这也是编译器的最后一个问题,即编程本身到底蕴含着什么

想了解更多精彩内容,快来关注闲聊代码

本文如果对你有帮助,请点赞收藏《每一种编程语言都是胶水语言》,同时在此感谢原作者。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
显示评论内容(7)
  1. 聖盟帝國づx2024-01-18 01:17聖盟帝國づx[江西省网友]163.142.85.177
    @你是我的借口确实,对于各种不同的需求,编程语言就像是不可或缺的胶水。
    顶4踩0
  2. 你是我的借口2024-01-14 18:42你是我的借口[香港网友]203.187.184.103
    @第七月编程语言就像是组装各种不同的组件,让它们协同工作。
    顶2踩0
  3. 第七月2024-01-11 12:07第七月[云南省网友]210.78.197.46
    对,通过编程语言,能够实现不同功能间的有机结合。
    顶7踩0
  4. 漂流的岛2024-01-08 05:32漂流的岛[内蒙古网友]203.19.176.212
    @蓁。编程语言就像是把各种不同的部件黏在一起,构建出复杂的系统。
    顶0踩0
  5. 蓁。2024-01-04 22:57蓁。[香港网友]103.57.109.245
    @流.岚每种编程语言都有自己的特点,但都能很好地连接起来,确实像是胶水。
    顶4踩0
  6. 流.岚2024-01-01 16:22流.岚[澳门网友]45.64.112.96
    是啊,编程语言就像是让不同系统和应用之间互相黏合的好工具。
    顶22踩0
  7. 漠上孤烟2023-12-29 09:47漠上孤烟[香港网友]124.31.120.124
    没错,编程语言就像是连接各种技术和功能的胶水一样。
    顶9踩0
相关阅读
令小白头痛的C语言 到底该怎么学?

令小白头痛的C语言 到底该怎么学?

#c语言#C语言作为现在大多数理工科本科生的必修课,很多从未有过编程概念的同学也不得不开始学习这门课程。但是由于授课老师水平参差不齐,有些学生学着学着便开始直呼“头痛”,不得不说是十分真实了。作为必修课,...

2007-11-15 #经典句子

c语言字符串定义

c语言字符串定义

...编译器/解释器等,很多优秀的项目或课程实验是以C/C++为编程语言。所以从后续的学习来说,学习C语言是后续学习的前置条件。2、不是说C语言就是必须优先掌握的,它也不是学习CS的唯一途径。老师选择先教C语言,并不影响其...

2015-11-25 #经典句子

放弃C语言 重新回到C语言?看看一个优秀程序员的编程之路

放弃C语言 重新回到C语言?看看一个优秀程序员的编程之路

...略。很难夸大周期对生产力的重要性。遗憾的是,大多数编程语言讨论都忽略了这一点,在这些讨论中,重点往往仅放在代码行和源可写性/可读性上。现实情况是,C的工具和交互周期是所有同类语言中最快的。无处不在的调试...

2010-05-21 #经典句子

关于人类语言的10个问题 语言最早起源于什么时期?

关于人类语言的10个问题 语言最早起源于什么时期?

关于人类语言的10个问题,语言最早起源与什么时期?青蛙呱呱叫,小鸟啼啭鸣,万物生灵发出各种不同的叫声、吼声和啼鸣声,构成大自然最和谐美妙的声音。但是只有我们人类是唯一拥有复杂语言的灵长类动物,这是为什么...

2023-08-26 #经典句子

ACL 2018|南非西北大学:面向资源稀缺语言的NLP Web服务

ACL 2018|南非西北大学:面向资源稀缺语言的NLP Web服务

...术解读的第135篇论文ACL 2018 System Demonstrations面向资源稀缺语言的NLP Web服务NLP Web Services for Resource-Scarce Languages南非西北大学North-West University, South Africa本文是南非西北大学发表于 ACL 2018 的工作,提出了一个项目,将现有文本核心...

2023-06-26 #经典句子

C语言趣味编程:使用while循环结构计算圆周率pi

C语言趣味编程:使用while循环结构计算圆周率pi

循环结构是编程语言中的一种基本程序结构,C语言中有两种表示方法,分别可通过for循环和while循环结构实现。上篇文章已经讲了for循环的使用方法,详细请参考:这次通过一个计算圆周率pi的例子给大家介绍C语言中while循环结...

2023-11-06 #经典句子

为什么 C 语言仍然占据统治地位?

为什么 C 语言仍然占据统治地位?

...言的统治地位。为C需要被替换掉的观点争辩是简单的。编程语言研究和软件开发实践都暗示了如何比C更好地去做事。但历经数十年的研究和开发,C语言的地位却依旧稳固。很少有其他语言能够在性能、裸机兼容性或通用性等方...

2023-05-04 #经典句子

计算语言学漫游指南 | 语言学午餐

计算语言学漫游指南 | 语言学午餐

...英语、日语等,一般不包括人工设计的语言,如世界语、编程语言等。应用与前景看了上面对计算语言学的描述,小伙伴们可能会觉得它有点抽象,没什么用。实际却并非如此!小编认为,相比其他语言学分支,计算语言学的研...

2014-04-22 #经典句子