`
jiaoronggui
  • 浏览: 1305969 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
博客专栏
B7c2eb31-a8ea-3973-a517-d00141f39b89
项目管理软件-redmin...
浏览量:115308
4a63e153-250f-30f6-a051-97cfc67cb3d3
IT职业规划
浏览量:197838
社区版块
存档分类
最新评论

动态语言优缺点

阅读更多

动态语言的优势

1. 生产力。 动态语言在开发效率方面有着无与伦比的优势,这也与动态语言“优化人的时间而不是机器的时间”这个理念 相吻合。利用传统的静态语言要开发几周的功能和特性,使用动态语言也许几天甚至几个小时就可以实现。不仅如此,动态语言在开发原型系统和常用工具方面的开 发效率也非常高,尤其值得一提的是原型系统。

2. 代码量。 曾有报道说,用Ruby on Rails写同样的项目,代码量大概只有Java的1/10。且先不说这个说法是否有夸张的成分,但就实际来看,动态语言的确从代码量上来说,要比 Java/C/C++等传统静态编译型语言要少的多(当然语言的表达能力与动态静态关系并不大,静态函数式语言的表达能力也很强),可能几千行的项目就算 得上是个大项目。

3. 测试。 因为动态语言很容易实现反射等动态特性(JUnit也是等到Java支持了反射以后才出现的),因 此测试也更为容易实现。Python和Ruby的标准库中都带有unittest的框架,这几乎可以让你无成本地使用单元测试来加固代码。因为动态语言本 身不具有编译过程,因此犯下某些低级错误的几率大大增加,也为重构带来了重重困难。没有单元测试的重构如同梦魇一般,动态语言尤甚。

4. 原生数据结构。 现在主流的动态语言多为脚本语言发展而来,而在这些语言中,集合、列表和词典这样的数据结 构都是原生的,而静态语言的数据结构往往是通过程序类库来实现的。比如Python就提供了set、tuple、list和dict等原生数据结构,同时 还提供了大量操作(如数组分片等),让这些数据结构使用起来非常方便。原生数据结构使得对数据的操控融入到了语言的语法当中,让程序更为易读,这也让基于 代码的沟通更为顺畅。

5. 简单易学。 动态语言的语法相对简单,学习成本看似也比较低。有人举例说,Python和Ruby写个Hello World只需要一行即可,这是很多静态语言所达不到的(把多行代码写成一行的不算)。

 

动态语言的缺点

1. 运行效率。 运行效率低下使得动态语言饱受诟病。“跑得太慢”这顶帽子已经在动态语言的头上扣了许多年。甚 至有Benchmark表明,在某些应用场景下,动态语言的运行效率和C/C++、Java等成熟的静态语言相比,相差数十倍甚至上百倍,这也为动态语言 的普及埋下阴影。不少开发者因为运行效率的问题,纷纷表示 “对动态语言很失望”。其实我倒是觉得大可不必纠结在这个问题上,原因有两点。

第一,很多动态语言的应用场景使得运行效率的重要程度大大降低。就拿 Ruby on Rails来说,在Web开发这个应用场景里,数据库的响应时间无疑是最大时延,与之相比代码运行时间就微不足道了。而且通过Cache和优化,基本上可 以消除代码运行效率低对项目的影响。又如我们的消息网关系统,最耗时的部分就是网络通信和文件I/O,而这两部分动态语言和静态语言相比并无明显劣势,运 行效率的问题可以完全忽略。

第二,如果遇到很耗CPU或者很耗内存的运算,完全可以通过C/C++实现的扩展来解决。无论是Python还是Ruby,都支持采用C/C++编写扩展。通过这些扩展,可以极大地提高运行效率,从而弥补动态语言在运行效率上的不足。

2. BUG难于发现。 动态语言由于没有构建的过程,因此很多错误只有等到运行时才会发现。而这些错误很可能是些低级错误,比如拼写错误、没有import相关的类库,或者括号不匹配等等。如果每次修复这样的BUG都要通过去测试环境中部署来验证的话,则会浪费了大量时间。

 

3. 专业人员少。 不少使用动态语言的公司都会遭遇一个问题,那就是使用动态语言的资深开发人员很少,不但很难 招聘到靠谱的员工,核心人员的离队也会对公司造成很大的损失。这是因为完全使用动态语言进行开发的公司少的可怜,只有极少数的开发者能够参与其中并获得相 关的开发经验。绝大多数的动态语言使用者还处在爱好者阶段,跟着Tutorials写写Demo,或者随手写个Utils等等。

因为高水平的动态语言开发者的确是可遇不可求,因此寻找有经验的开发者也许要花上不少的时间和成本。当团队有了较为有经验的开发者以后,就需要通过内部培训、结对编程等手段,帮助公司里没有经验的开发者迅速积累经验,逐渐成为动态语言方面的靠谱人才。

其实,对于动态语言的圈子,还有一个有趣的说法:因为学习动态语言的人往往都是在其他领域有了很深的积累后,在有余力的情况下才接触动态语言的,因此往往相对都比较靠谱,动态语言的圈子反而能够帮助雇主们甄选出一批高素质的开发者。

4. 不够成熟。 动态语言的发展历史虽然不比静态语言差到哪里(比如Ruby和Java就同为1995年始创),然而由于其较为小众,因此无论是虚拟机的实现上,语言本身的机制上,还是相关的配套工具上都算不得十分成熟。

 

 

小结

通过实践我们发现,动态语言既不是什么洪水猛兽,也不是什么奇巧玩物,它们已经逐渐成长为称手的兵器,帮助开发者们快速完成项目,进而达成商业目 标。使用动态语言,已经让我们切切实实感受到了它的开发效率为我们所带来的好处。在商业机会瞬息万变的今天,谁能以最快的速度实现自己的想法,谁能尽快应 对市场带来的变化,谁就能离成功更进一步。

诚然,动态语言目前还存在很多问题。但瑕不掩瑜,如果在使用时可以意识到这些问题,并善加处理的话,动态语言也可以成为复杂商业系统的主角,在企业 开发中占据自己的地位。而且随着开源社区的努力,很多问题正逐一被解决。我们有理由相信,在不远的未来,动态语言一定会有一片更为广阔的天空。

 

转载地址:http://developer.51cto.com/art/201007/210244.htm

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics