动态语言和静态语言的本质区别是什么?

动态语言是微机时代的代表,为编写KB级项目而设计的,从技术上讲非常过时。windows95出现之后,绝大多数动态语言都死掉了。

微机时代计算机并不是独立学科,而是属于电工学的一个分支。所以严格意义上,当时没有程序员,只有写代码的电工。

微机时代的计算机使用软盘储存数据,最大容量才1.4MB,程序都特别简单,一个完整的商业操作系统才几百kb。当时的三大操作系统(MS-DOS、Amiga、Unix)均在500kb以下。

由于动态语言的语法简洁,可以有效节省磁盘空间,因此在那个储存空间非常紧张,计算机还十分脑残的年代,非常有优势,处于统治地位。

但从windows95诞生,计算机进入图形化时代,程序就开始变得越来越庞大。商业软件从平均几十KB,增大到几MB,几十MB,甚至几百MB。计算机成为独立学科,职业程序员大量出现。微机时代宣告结束,IT时代到来。

从此,动态语言越来越难以编写出合格的程序。硬盘普及,磁盘空间不再紧张。智能IDE出现之后,静态语言开始全面崛起,终结了动态语言的统治地位。

动态语言和静态语言最大的区别,在于可读性、可维护性的不同。

小学生刚刚学习写作文的时候,总有很多字不会写。有的老师会让学生,把不会写的字,画成一个圈儿,即O。

一个句子,原本应该写成写成今天下雨了。而有些小学生不会写雨字。就可以写成今天下O了。这个O可以代表任何东西,当然也包括雨。

对于判作业的老师来说,这个O就是动态的。直到老师猜出这个O是雨之后,才能确定这个句子是不是病句。

这种画圈儿的规则,是一把双刃剑,整体讲是弊大于利的。好处是可以让学生只掌握很少的汉字,就能开始学习写作文。但缺点是圈儿一旦变多,就会失控。常常连作者自己都分不清,每个圈儿分别代表啥?写的时候很容易,可第二天连自己都看不懂。

而对于高年级的学生,就不允许使用O了。遇到不会写的字,就要去查字典,只有写出所有的字,才能把作文写完。对于判作业的老师来说,这就是静态的,有没有病句,一眼便知。虽然写出作文的门槛提高了,但表述更加清晰,无论任何时间翻出来,都能一目了然。

编程语言比我们的例子要复杂,但道理是一样的,区别就是它不能只画O,而是不同的东西,需要用不同的名字表示,为了便于说明,下面的名字都使用一个字母来命名。

比如一个句子是板凳宽,扁担长,板凳不让扁担绑在板凳上。

用动态语言表示,则写成A宽,B长,A不让B绑在A上。

写起来很省事,但读起来就费劲了。因为A和B可以代表任何东西,凭什么一定就是板凳宽,扁担长,而不是肥皂宽,牙刷长?

而用静态语言表示,则是板凳A宽,扁担B长,A不让B绑在A上。

通过对比发现,静态语言比动态语言,多了一开始的板凳和扁担这两个词语。相当于从一开始,就标明了A是板凳,B是扁担。虽然要多写四个字,但可以避免歧义,增强可读性。

只要用脑子记住A是板凳,B是扁担,岂不就能达到同样的效果?仅仅记住两个名字,当然毫无难度。可是随着程序越来越大,要记的名字越来越多,二十个、两百个、两千个,脑子就炸了。

于是静态语言便崛起了,最初就是为了让IDE来记名字。

当你写下板凳A宽的时候,IDE就偷偷记下一条信息:A是个板凳。

等下次调用的时候,鼠标放在A上,IDE就告诉你:它是一个板凳。

嗯嗯,一点也不神奇。。。

可如果换成动态语言,IDE就不会给你提示。因为从IDE的角度来看,A并不是板凳,而是一个O。

为了解决这个问题,就需要加注释,来提醒自己。可这样做也是不靠谱的。因为如果对代码进行封装,所需要注释的文字量,就会超过代码量本身,到时候你根本不是写代码加注释,而是写注释加代码。

总之,动态语言只适合写非常非常小的程序,中型以上的程序,通常要使用静态语言编写,才会比较容易维护。我个人只在编写1000行以内的小工具时,才会使用动态语言,如Python、Lua等。但即便如此,还是常常一不小心,就陷入第二天看不懂的窘境。

当然,不适合并不代表绝对不能,就像徒手搬砖只适用于小型建筑,大中型建筑要使用工程机械,这说法我一般认为是正确的。但总有一些人会举极端的例子来反驳,说万里长城金字塔是用手磊出来的,这就实在没意思了。。。

动态语言存在的的第二个问题,就是容易产生BUG,并且很难在第一时间发现。

假如我们遇到一个游戏,它是用静态语言编写的,其中有一段代码是这样的(伪代码):

角色 A=李逍遥;

怪物 B=树妖;

技能 C=御剑术;

武器 D=钢剑;

然后我们编写了一段代码:A装备着D,发动了C,击败了B

这段代码很容易翻译,就是李逍遥装备着钢剑,发动了御剑术,击败了树妖。

假如我们一时不小心,把代码写成李逍遥装备着树妖,发动了钢剑,击败了御剑术的话,会怎么样?

这时候IDE会立刻报错,并提示有三个错误:

1,树妖是怪物,不能装备

2,钢剑是武器,不能当做技能使用

3,御剑术是技能,无法被击败

所以你只好先排除这三个问题之后,再继续写代码。套用前面的例子,也就是高年级学生查字典了。

由于绝大多数的问题,都必须在写代码的过程中,通过查字典排除掉,所以只要你的程序可以顺利写完,运行起来也基本不会有太大的问题了。

但如果这个程序是使用动态语言编写的,则不会报错。既然B可以是任何东西,那凭什么必须是钢剑,而不能是树妖?这完全符合动态语言的语法规则,IDE当然不会报错。

直到你的程序写完,BUG一堆一堆的冒出来,IDE却始终认为你的代码完全正确。

所以使用动态语言,有很多错误,IDE是不会帮你检查的。你就要在每一个可能出错的地方,加上注释,提醒自己A是啥东西,B又是啥东西。。。。。最后你会发现,若要保证你自己写的程序不出BUG,而且日后还可以正常维护的话,那么你需要写的注释,比代码本身还多。写着写着,你就不像在编程了,而像在写一本说明书。

本文由 哥弟网 原创,转载请注明出处:http://www.gdnhd.com/10024.html

(0)
上一篇 2022年7月21日 上午5:09
下一篇 2022年7月21日 上午5:10

相关推荐

  • 中际旭创(300308)行业龙头优势明显高端产品成果显著

    中际旭创发布2022年半年度业绩预告,归属于上市公司股东的净利润预计达4.5-5.3亿元,同比增长32.03-55.51%;扣除非经常性损益后的净利润预计达4.0-4.8亿元,同比增长29.85-55.82%。 北美数通客户需求稳健 行业龙头充分受益 2022年上半年,Google、Amazon等北美主要数据中心客户为应对流量增长,加速部署200G、400G…

    行业 2022年7月18日
    2300
  • 原创当下,哪些行业最有“钱途”?“答案”来了!有你所从事的行业吗

    原标题:当下,哪些行业最有钱途?答案来了!有你所从事的行业吗 能够拥有一份高薪又稳定的工作,应该是每个人的心愿。毕竟,对于我们这些普通的人来说,工资是自己唯一的收入来源。为了能够找到一份稳定又体面的工作,很多人都会拼命的学习,毕竟有句老话说得好,知识改变命运。 不过,今年这个这个特殊的情况,成为了许多大学生求职路上的拦路虎。据相关数据显示,截止7月份,还有2…

    2022年7月19日
    2000
  • 行业透视​TOP50房企商票持续逾期的项目公司增至1115个!

    当前房企商票逾期增量放缓,逾期增长或迎来拐点,但行业流动性压力是否会边际缓和还有待观察。 近日上海票交所公布《截至2022年6月30日的持续逾期名单》,其中存在商票持续逾期的房地产项目公司数量从5月的1562个增至6月的1666个,占全部商票逾期企业的62.5%,房地产成为商票违约的重灾区。 值得注意的是,6月较5月环比净增加101个商票逾期的房地产项目公司…

    2022年7月18日
    2300
  • 动态滤波器卷积|DynamicConv

    paper:https://arxiv.org/abs/1912.03458 该文是MSRA的研究员提出的一种动态卷积。它是在卷积的基础上进行了魔改,不同于传统卷积采用单一卷积核方式,作者提出了一种动态卷积机制,它有助于提升模型的特征表达能力。 Abstract ​ 相比高性能深度网络,轻量型网络因其低计算负载约束(深度与通道方面的约束)导致其存在性能降低,…

    行业 2022年7月21日
    1900
  • 系统的动态性是指什么?

    系统是由组件、组件间的连接以及系统的功能目标三个基本要素构成的,它们相互协同接受外部对其施加的影响,同时也会向外部释放影响。 当外部对其施加的影响等于其向外部释放的影响相等时,系统就会处于一个相对平衡的状态;当外部对其施加的的影响大于其向外部释放的影响时,系统就会处于一种动能增强状态;当外部对其施加的影响小于其向外部释放的影响时,系统就会处于一种动能消减状态…

    行业 2022年7月21日
    1900

发表回复

您的电子邮箱地址不会被公开。

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信