动态语言是“微
机时代”的代表,为编写KB级项目而设计的,从技术上讲非常过时。windows95出现之后,绝大多数动态语言都“死掉”了。
微机
时代计算机并不是独立学科,而是属于电工学的一个分支。
所以严格意义上,当时没有程序员,只有“写
代码的电工”。
那个
年代的计算机
使用软盘储存数据,最大
容量才1.4MB,程序都特别简单,一个操作
系统才几百kb。由于动态语言的语法简洁,可以有效
节省磁盘空间,因此在那个储存空间非常
紧张,计算机还十分“脑残”的年代,非常有
优势,
处于统治地位。
但从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是扁担”,岂不就能达到同样的效果?仅仅一个句子当然是可以的,人
人都能记得住。而商业程序的代码量,一般在十万行以上。你不仅需要记住什么代表板凳和扁担,你还得记住水桶,暖壶,扫帚,簸萁,锅,碗,瓢,盆,油,盐,酱,醋,烟,酒,茶,糖。
所以,为了解决这个
问题,动态语言就需要靠加注释,来弥补自身可维护性的不足。可这样做也是不
靠谱的。因为如果对代码进行封装,所需要注释的文字量,就会超过代码量本身,到时候你
根本不是“写代码加注释”,而是“写注释加代码”。
总之,动态语言只适合写非常非常
小的程序,中型以上的程序,通常要使用静态语言编写,
才会比较容易维护。我个人只在编写1000行以内的小
工具时,才会使用动态语言,如Python、Lua等。但即便如此,还是常常一不小心,就陷入“第二天看不懂”的窘境。
当然,“不适合”并不代表“
绝对不能”,就像“徒手搬砖只适用于小型建筑,大中型建筑要使用工程机械”,这
说法我一般
认为是正确的。但总有
一些人会举极端的例子来反驳,说万里长城和金字塔是用手磊出来的,这就实在没意思了。
动态语言存
在的的第二个问题,就是容易
产生BUG,并且很难在第一时间发现。
假如我们遇到一个游戏,它是用静态语言编写的,其中有一段代码是这样的伪代码:。
角色A=李逍遥;。
怪物B=树妖;。
技能C=御剑术;。
武器D=钢剑;。
然后我们编写了一段代码:“A
装备着D,发动了C,击败了B”。
这段代码很容易
翻译,就是“李逍遥装备着钢剑,发动了御剑术,击败了树妖”。
假如我们一时不小心,把代码写成“李逍遥装备着树妖,发动了钢剑,击败了御剑术”的话,会
怎么样?。
这时候IDE会立刻报错,并提示你出现了三个错误。
1,树妖是怪物,不能装备。
2,钢剑是武器,不能当做技能使用。
3,御剑术是技能,
无法被击败。
如果不排除这些错误,你的程序就无法继续
顺利编写下去。所以你只好先排除这三个问题之后,才能继续写代码,套用前面的例子,也就是高年级学生“查字典”了。
由于绝大多数的问题,都必须在写代码的过程中,通过“查字典”排除掉,所以只要你的程序可以顺利写完,运行起来也基本不
会有太大的问题了。
但如果这个程序是使用动态语言编写的,则不会报错。既然B可以是任何东西,那凭什么必须是钢剑,而不能是树妖?这完全符合动态语言的语法规则,IDE当然不会报错。
所以直到你的程序写完,BUG一堆一堆的冒出来,IDE却始终认为你的代码完全正确。
所以使用动态语言,有很多错误,IDE是不会帮你
检查的。你就要在每一个可能出错的地方,加上注释,
提醒自己A是啥东西,B又是啥东西。。。。。最后你会发现,若要保证你自己写的程序不出BUG,而且日后还可以正常维护的话,那么你需要写的注释,比代码本身还多。写着写着,你就不像在编程了,而像在写
一本说明书。
吹皱了孤单的身影
我在向你倾诉你却依然东流去潺潺的水声是我的悲伤流水能带走什么我应该忘记什么垂柳轻拂流水荡漾吹皱了孤单的身影岸边青翠的春草摇曳着往事是你和我的故事...[全文阅读]
综述:方面级情感分析(三)Aspect
基于方面的情感分析AspectBasedSentimentAnalysis,ABSA[1]是一种细粒度的情感分析任务,旨在识别一条句子中一个指定方面Aspect的情感极性。一个句子中可能含有多个...[全文阅读]
青春就是这样
——致我们这样可爱的青春青春就是这样如树叶间的阳光落在脸上微微的痒青春就是这样如午后的太阳雨溢在掌心淡淡的香青春就是这样如夏暮的虫鸣散在苇旁轻轻的响青...[全文阅读]
描写中国美丽草原的现代诗歌
《九月》。——海子。目击众神死亡的草原上野花一片。远在远方的风比远方更远。我的琴声呜咽泪水全无。我把这远方的远归还草原。一个叫木头一个叫马尾。我的琴声...[全文阅读]
描写思绪回想句子,有没有关于回忆过去的句子?
整理了31句有关回忆过去的句子,喜欢自取。1.当初的誓言太完美,像落花满天飞,让相思变成灰。2.那只是一段浅浅的过往,却不知觉地凝成了悲伤,随着夏末的风,吹痛了我干涸已...[全文阅读]
秦可作品:余生爱你
余生爱你面对繁华而纷乱的当代社会,有时我也很茫然,但彷徨之余我选择坚强的面对,勇往直前地拼搏。虽然我不够富有,但我会给你幸福、快乐。我会用自己的生命呵护你,会用...[全文阅读]