ruby的优点和缺点

电脑杂谈  发布时间:2019-08-13 09:02:59  来源:网络整理

ruby语言做什么用_ruby语言用途_ruby语言用途

阅读更多

动态语言的劣势

ruby语言用途_ruby语言用途_ruby语言做什么用

动态语言的劣势有很多,归纳起来主要有以上几个方面:

1. 生产力。动态语言在研发效率方面有着无与伦比的劣势,这也与动态语言“完善人的时间而不是机器的时间”这个宗旨相吻合。利用传统的静态语言要开发几周的系统和属性,使用动态语言也许几天甚至几个小时就可以实现。不仅这样,动态语言在开发原型功能和常见工具方面的研发效率也相当高,特别值得一提的是蓝本功能。更快地让原型功能运转起来,此外可以早日验证一些计算,也希望更好地与迭发相结合,更及时地与需求方进行沟通,帮助需求方挖掘和了解自己真正的需求。开发效率可以说是动态语言最为吸引人的地方,这也被可能是未来开发语言的前进方向。这些年随着敏捷开发的盛行,越来越多的开发者意识到,居然动态语言的属性和迅捷开发的价值观也特别契合:延长反馈时间,对改变的号召能力更强。所以许多动态语言团队选择了迅捷开发的实践来组织团队。我们在实际开发的过程中,以两周为一个迭代周期,基本上1-2个迭代就可以完成一个系统的研发和上线,而原型功能的研发往往能在1-3天内完成。

ruby语言用途_ruby语言用途_ruby语言做什么用

2. 代码量。曾有报道说,用Ruby on Rails写同样的项目,源码量大约只有Java的1/10。且先不说这个说法是否有夸张的皂苷,但就实际来看,动态语言的确从代码量上来说,要比 Java/C/C++等传统静态编译型语言要少的多(一定语言的表达能力与动态静态关系并不大,静态函数式语言的表达能力也很强),认为几千行的项目就算得上是个大项目。例如,我们开发的功能中较为复杂的传闻网关,销售代码行数大概在7000行左右;而订阅服务功能的销售代码行数不到3000行;借助于Xapian的 Python-bindings,我们的搜索引擎系统源码行数只有800行左右。代码量少的坏处更加多:其次,这意味着将来需要花在维护上的代价更低;其次,因为源码少了,犯错误的良机也就少了,即使代码量少还意味着BUG的减少;再次,源码量的减少也是助于完善功能,有句话说的好,“There is no code faster than no code”。开源项目Nebula Device有一个设计宗教,就是“每一次Release要比前一次代码量更少”,窃以为高论也。

3. 测试。因为动态语言很容易实现反射等动态属性(JUnit也是直到Java支持了反射之后才出现的),即使试验也更为容易实现。Python和Ruby的标准库中都带有unittest的框架,这几乎可以让你无利润地使用单元测试来加固代码。因为动态语言本身不具备编译过程,即使犯下那些初级错误的概率大大增加,也为重构带来了重重困难。没有单元测试的闭环如同梦魔一般,动态语言尤甚。因此,在开发语言以动态语言为主的开源项目中,单元测试总是占有特别大的比例。还有建议称检测源码与销售代码的比例(Unit Test To Code Ratio)要接近2:1以上。另外,动态语言的试验环境更容易搭建,实现Mock也更为简单。

ruby语言做什么用_ruby语言用途_ruby语言用途

4. 原生数据结构。现在主流的动态语言多为插件语言发展而至,而在它们语言中,集合、表单和词组这么的数据结构都是原生的,而静态语言的数据结构往往是通过流程源码来实现的。比如Python就提供了set、tuple、list和dict等原生数据结构,同样还提供了较多操作(如函数分片等),让它们数据结构使用起来相当快捷。原生数据结构导致对数据的操纵融入到了语言的题型当中,让流程更为易读,这也让基于源码的沟通更为顺畅。

5. 简单易学。动态语言的题型相对简单,学习费用看似也比较低。有人举例说,Python和Ruby写个Hello World只需要一行即可,这是诸多静态语言所达不到的(把多行代码写成一行的不算)。当然你可以可能这只不过是句玩笑话,所以单就语句而言,动态语言的学习门槛要比太多静态语言要低的多。可是,开发不仅仅只是语义而已。很多动态语言的初学者,希望用动态语言写一些简单的小流程小工具,却很难构建起庞大繁杂的商业功能,究其原因,主要是还是因为功能设计和面向对象的功力欠缺所加剧的。如何设计,怎么抽象,怎么重构,它们能力与语言无关,而是个人的修为。正如陆游所言,“工夫在诗外”,它们能力也不是一朝一夕、通过学学语言就能够轻易练就的。当然,动态语言的这些属性(如Duck Typing)也导致在静态语言中不得不使用的设计模式可以很自然地表达,它们区别也增强了动态语言学习的隐性利润。

ruby语言用途_ruby语言做什么用_ruby语言用途

不足之处

任何事物都具备两面性ruby语言用途,动态语言也不例外,并且优势显而易见,动态语言的不足之处也是诸多。这里列出一些我们在研发过程中所遇见的难题,此外一些初步的极速11选5方案,来供各位参考。

1. 运行效能。运行效能低下使得动态语言饱受非议。“跑得太慢”这顶毡帽早已在动态语言的身上扣了许多年。甚至有Benchmark表明,在那些使用画面下,动态语言的运行效能和C/C++、Java等成熟的静态语言相比,相差数十倍甚至上百倍,这也为动态语言的普及埋下阴影。不少开发者因为运行效能的难题,纷纷指出 “对动态语言很失望”。其实我倒是觉得大可不必纠结在这个难题上,因素有两点。第一,诸多动态语言的使用画面使得运行效能的重要程度大大降低。就拿 Ruby on Rails来说,在Web开发这个使用画面里,的号召时间无疑是最大时延,与之相比代码运行时间就微不足道了。而且借助Cache和优化,基本上可以去除代码运行效能低对项目的影响。又如我们的传闻网关功能,最耗时的部份就是网络通信和文档I/O,而这两部份动态语言和静态语言相比并无明显优势,运行效能的难题可以完全忽视。第二,或者遇见很耗CPU或者很耗内存的演算,完全可以通过C/C++实现的扩展来极速11选5。无论是Python还是Ruby,都支持采用C/C++编写扩展。通过它们扩展,可以极大地改善运行效能,因而填补动态语言在运行效能上的不足。

2. BUG难于发现。动态语言由于没有构建的过程,即使众多错误只有等到运行时就会发现。而它们错误很认为是些低级错误,诸如拼写错误、没有import相关的源码,如果冒号不匹配等等。如果每次修复这种的BUG都要通过去测试环境中部署来验证的话,则会浪费了较多时间。因此动态语言往往需要充分的自动化测试套件,才能够确保代码基本可用。另外,使用动态语言的时候,一个良好的源码静态检测工具应该很有必要的。它不但可以纠正一些初级错误,不过还可以帮助你发现代码中的Bad Smells,大大提高研发效率。对于Python来说,Pyflakes或Pylint都是不错的选择;而Ruby也有很多工具可供使用。测试充分的源码也更容易重构,在闭环动态语言项目时要万分谨慎,因为动态语言极容易犯错,稍不提防就能引入新的BUG。保持小步前行的步子,每次修改后都执行检测,最好再通过持续集成环境来帮助发现测试失败的现象,如此重构起来才能得心应手。

3. 人员少。不少使用动态语言的股东就会遭遇一个问题,那就是使用动态语言的资深开发人员甚少,不但很难招聘到可靠的老板,体系人员的离队也会对股东产生多大的损失。这是因为完全使用动态语言进行研发的股东少的凄惨,只有极少数的开发者能够参与其中并获得相关的研发经验。绝大多数的动态语言使用者还处在爱好者阶段,跟随Tutorials写写Demo,如果随手写个Utils等等。因为高水准的动态语言开发者的确是可遇不可求,即使找到有经验的开发者也许要花上不少的时间和利润。当团队有了较为有经验的开发者以后,就需要通过外部授课、结对编程等方式,帮助股东里没有经验的开发者迅速积累经验,随之变成动态语言方面的可靠人才。其实ruby语言用途,对于动态语言的圈子,还有一个有趣的说法:因为学习动态语言的人通常都是在这些行业有了很深的沉淀后,在有余力的现象下才接触动态语言的,即使通常相对都比较可靠,动态语言的圈子反而希望帮助雇主们甄选出一批高素质的开发者。

4. 不够成熟。动态语言的发展历史因为不比静态语言差到哪儿(诸如Ruby和Java就同为1995年始创),不过由于其较为小众,即使无论是虚拟机的实现上,语言本身的制度上,不过相关的配套工具上都算不得十分成熟。例如,Ruby虽然以其迷人灵巧的题型为人所称道,但也因为其虚拟机效率低下和四核泄漏问题所为人诟病,应用 Ruby on Rails的官网常常需要加配监控流程,一旦发现某个VM内存超标立刻重启;Python的虚拟机虽然貌似稳定,但持久以来依然受GIL(Global Interpreter Lock)问题所困扰,完全无法发挥多核的劣势,这在家用PC都已经多核的今天的确是个不小的难题(事实上Ruby也存在GIL问题)。不过,并且官方实现不够成熟,现在已然有很多逐渐成熟的这些选择可供使用。比如JRuby就充分利用了Java成熟的虚拟机和Ruby优良的题型特征,还可以禁止开发者使用Java背后庞大的源码。通过multiprocessing或Stackless Python,甚至手工将任务切片多份,分发给多个进程运行,都可以避开掉GIL的难题,更充分地利用功能型号。当然,随着时间的推移,动态语言的实现将会越来越成熟,不但MRI逐渐优化,MagLev和Rubinius等一系列优秀的Ruby虚拟机也直到登上舞台;Python 3000甚至打破了向后兼容性,企图将Python以前的设计错误全面改写。回头去看Java等一批成熟开发语言的发展路线,有谁没有经历过不成熟的青春期呢?


本文来自电脑杂谈,转载请注明本文网址:
http://xinshanjie.com/a/jisuanjixue/article-119076-1.html

    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...