互联网技术突飞猛进,编程的语言层出不穷,本来稍微平静了几年的网络编程技术又不断出现新的东西,涤荡着整个网络世界,ruby,Python等技术使我 们本来比较老板的编程理念和概念产生了混淆和动荡。他们有什么区别和联系?怎么定义这些新生的事物?抹去额头由于生疏而津津的汗滴,从头Google一下 吧。
用户 |
前台语言:Visual Basic,Delphi,JavaScript |
平台语言:Java,C# 后台脚本语言:Perl,PHP,Python,Ruby |
系统语言:C,C++,D |
机器 |
按语言应用范围进行的物理划分 与用户交互的是前台语言,与机器交互的是系统语言,介于其中的为前台提供服务同时又须要底层系统服务的是后台语言。 其实Perl,PHP,Python和Ruby都有本身的虚拟机(virtual machine),从这种意义上说它们也可做为平台语言。但在实际应用中,它们没有Java平台和.NET平台那种整合凝聚力和核心做用,一般做为轻量级的解决方案。 理论上动态语言一样能承担大型应用,但实践上它们多做为粘合语言或用于中小型应用。用句时髦的话来形容,暂时仍是主流的配角或非主流的主角。毕竟在运行效 率、类型安全、可用资源、开发工具、技术支持等方面,它们与Java、C#相比尚有必定差距。另外它们同属‘草根’语言,虽有开源社区的大力支持,在影响 力上与后者未可同日而语。 JSP (JavaServer Pages)是由Sun Microsystems公司倡导、许多公司参与一块儿创建的一种动态网页技术标准。JSP技术是用JAVA语言做为脚本语言的,JSP网页为整个服务器端 的JAVA库单元提供了一个接口来服务于HTTP的应用程序。 在传统的网页HTML文件(*.htm,*.html)中加入Java程序片断(Scriptlet)和JSP标记(tag),就构成了JSP网页 (*.jsp)。基于J2EE平台的网络框架是大中型企业的最佳选择。java的稳定性业界有目共睹。java的强大的网络处理能力是它最坚硬的基石。 其优势表现为: ·对于用户界面的更新,其实就是由 Web Server进行的,因此给人的感受更新很快。 ·全部的应用都是基于服务器的,因此它们能够时刻保持最新版本。 ·客户端的接口不是很繁琐,对于各类应用易于部署、维护和修改。 Python 首先就以语法而论,python没有perl的灵活紧凑。只能说是中庸,感受和basic,pascal,java差很少。他能够编写运行在操做 系统的应用程序,能够编写web代码,它是一种胶水语言能嵌入到C++中,这一点在游戏开发中引用最广,你们知道C++是作网络游戏的首选,是当前作游戏 最普遍的。而Python在处理游戏特效等很迅速。Python的语法很是严格以致于业界描述它为一种清晰语言,这和perl正好背到相驰。一方面从语法 上保证了良好的编码风格;另外一方面,每一个代码块再也不须要起始的大括号或begin/end之类的,减小了的代码行数。顺便插一句,另一种优雅的语言 Haskell一样对空白符敏感,或许优雅正是来自对细节和规范的重视吧。此外许多人抱怨Python中的自引用self太多,却不知这也是它倡导显式表 达的一种体现。总的看来,Python主要的问题仍是在性能效率上不尽如人意,有待改进。 Python在编程领域的占有率一直处于稳步上升之中,根据最新的数据,Python排名第六。前五名分别是Java、C、PHP、C++ 和 VB。著名的搜索引擎 Google 也大量使用Python。更加使人吃惊的是,在Nokia智能手机所采用的Symbian操做系统上,Python成为继C++,Java以后的第三个编 程语言!2006年的Google编程大赛已经将Python做为参赛语言之一,可见Python的影响力之巨大。 Ruby Ruby是面向对象的编程语言,是脚本语言和PHP同样。她追求的是“简便快捷的面向对象编程”。Ruby是解释型语言,所以不需编译便可快捷地 编程。同时Ruby具备相似 Perl的强大的文本处理功能,她可并不仅是个玩具,您能够用她来进行实用的编程。此外,您还能够很方便地使用C语言来扩展Ruby的功能,所以能够把她 看成各类库的前端来使用。若您曾经“想要一种简单的面向对象的语言”,或者认为“Perl的功能虽然好用,但它的语法真让人受不了”,又或者以为 “lisp系列语言的思想不错,但处处都是括号真让人讨厌,最起码算式应该按照一般的样式书写”。那么,Ruby或许能让您满意。 概括以来,Ruby有如下优势: 解释器 Ruby是解释型语言,其程序无需编译便可轻松执行。 变量无类型 Ruby的变量没有类型,所以没必要为静态的类型匹配而烦恼。相应地,错误检查功能也变弱了。 不须要变量声明 全部变量均无需声明便可当即使用。另外,从变量名便可判断出是何种变量(局部变量,全局变量,实例变量)。 语法简单 语法比较简单,相似Algol系语法。 不须要内存管理 具备垃圾回收(Garbage Collect,GC)功能,能自动回收再也不使用的对象。 一切都是对象 Ruby从一开始就被设计成纯粹的面向对象语言,所以以整数等基本数据类型为首的全部东西都是对象,它们都有发送信息的统一接口。 类,继承,方法 Ruby固然具备面向对象语言的基本功能。 特殊方法可向某对象添加方法。例如,能够把GUI按钮被按下时的动做做为方法记述下来,还能够用它来进行原型库(prototypebase)的面向对象编程(有人这么干吧)。 用模块进行混合插入(Mixin) Ruby故意舍弃了多重继承,但拥有混合插入功能。使用模块来超越类的界限来共享数据和方法等。 迭代器 该功能能够将循环抽象化。 闭包 能够将某过程片断对象化。对象化后的该过程片断就称做闭包。 功能强大的字符串操做/正则表达式 以Perl为样板创造出了功能强大的字符串操做和正则表达式检索功能。 拥有超长整数 添加超长整数功能后,能够计算很是大的整数。例如计算400的阶乘也垂手可得。 具备错误处理功能 错误处理功能可使您编写代码处理出错状况。 能够直接访问OS Ruby可使用(UNIX的)绝大部分的系统调用。单独使用Ruby也能够进行系统编程。 动态加载 若OS支持的话,能够在运行时读入对象文件。 但Ruby也有下列缺点。 Ruby On Rails,优势是不像Struts那样须要大量的配置文件,一切都采起默认的配置,包括访问路径,uri等,而这也是它的缺点,不能灵活的配置。 总结就是ruby很适合作中小型web工程。他和jsp(J2EE)并不冲突,一个是低端的一个是高端的。而形成冲突的是PHP,不过php易 学、免费、通过了不少年的考验很稳定,LAMP几近经典,是大中小型企业乐于选择的,是当前用的最多的脚本语言,Google、腾讯、网易等等大型网络集 团都是使用的php这样也给那些小的企业了信心,特别是Linux集群技术的流行使得PHP更加不易受到ruby的冲击。可是不容小觑。潜力很是巨大。 RERL perl和java是同样的。 第一. Perl强大的正则表示式(regular expression)比对以及字符串操做使这个工做变得简单而没有其它语言能相比。Perl很是擅长于切割,扭转,绞,弄平,总结,以及其它的操做文字 文件。生物资料大部分是文字文件:物种名称,种属关系,基因或序列的注解,评住,目录查阅,甚至DNA序列也是类文字的。如今互相交换以以文字文件的形式 存在的可是具备不兼容的资料格式生物信息资料是一个很头疼的问题,perl的这个方面的优势,能够在这一方面解决很多问题. 第二. Perl能容错。生物资料一般是不彻底的,错误或者说偏差从数据的产生时候可能就产生了.另外生物数据的某项值栏位能够被忽略,多是空着的,或是某个栏 位也就是某个值,被预期要出现好几回(举例来讲,一个实验可能被重复的操做),或是资料以手动输入因此有错误。Perl并不介意某个值是空的或是有奇怪的 字符。正规表示式可以被写成取出而且更正错误的通常错误。固然这种弹性也多是各坏处。 还有,Perl 是组件导向的。Perl 鼓励人们将他们的软件写成小模组,不管是用 Perl 函式库模组或是正统的 Unix工具导向的方式。外部程序可以轻易的被整合进 Perl 程序,靠着管道(pipe),系统呼叫,或是插座(socket)。Perl5引进的动态载入器容许人们使用C 的函式,或者让整个编程过的函式库,被使用在 Perl直译器中。最近的成果是世界各地的智能结晶都会收录在一组模组里面,称为”bioPerl”(请参考 Perl Journal) Perl 很容易去写而且能很快开发完。直译器让你不须要宣告你全部的函数型式以及资料型态,当未定义的函式被呼叫时只会引发一个错误,除错器也能与Emacs很好的合做而且让你能用使人舒服的交谈式的开发模式。 Perl是良好的原型语言。由于它快并且脏(quick and dirty),用 Perl建构新演算的原型比直接写成一个快的须要编程过的语言来的有意义。有时候发现结果是Perl已经够快了,因此程序变不须要移植;更多情形是某人可 以用C写一个小的核心程序,编程成动态载入的模组或是外部的可执行程序,而后其它的部分用Perl来完成。这部分的例子能够参考 http://waldo.wi.mit.edu/ftp/distribution/software/rhmapper/ )。 有一点要强调的是, Perl 在写做网页 CGI 方面很是优秀,并且重要性随着各实验将资料发表在网络上以后更是增长。我在基因中心环境下使用Perl 的经验从头至尾都是值得称赞的。然而我发现 Perl也有它的问题。它的松散的程序风格致使许多错误,这些在其它严格的语言都会被抓到。举例来讲,Perl让你在一个变数在被指定值以前就能使用,这 是个颇有用的特性当你须要的时候,可是倒是一个灾难当你单纯的打错了辨识名称。一样的,很容易忘记要宣告一个函式里面的区域变数,致使不当心地改到了全域 变数。 最后,Perl 的不足之处在于创建图形化的使用者接口。虽然 Unix忠实信徒全部事情都能在命令模式下完成,大多数的终端使用者却不一样意。视窗,选单,弹跳的图案已经变成了必要的时尚。 直到最近,直到最近,Perl 的使用者界面(GUI)发展还是不成熟的。然而 Nick Ing-Simmons的努力使得 perlTK(pTK)的整合使得以Perl 驱动的使用者接口在 X-window上面成为可能。个人伙伴和我曾经在 MIT 基因中心写过几个 pTK为基础的应用程序供互连网使用者,并且从头至尾都是一个使人满意的经验。其它的基因中心则更大规模的使用 pTK,在某些地方已经成为主要的生产力。 简要总结: 比起Java平台和.NET平台,动态语言轻便灵活、开发效率高,但整合凝聚力还不够,在运行效率、类型安全、可用资源、开发工具、技术支持以及影响力等方面也有必定差距,故一般做为轻量级的解决方案。 LAMP是由Linux、Apache、MySQL和包括PHP、Perl、Python或Ruby在内的脚本语言组成的网络开发平台,具备开放灵活、开发迅速、部署方便、高可配置、安全可靠、成本低廉等优势。 Perl精练、复杂、强大、灵活、自由、隐晦、表现力强,但规范性、可读性、一致性、整洁性和可维护性较差。 Python优雅规范、简洁明晰、易学易用、类库丰富,有些人不喜欢它对空白符敏感的特性。 Ruby语法精巧、高度灵活,兼具Perl的表现力和Python的可读性,尤为注重程序员的感觉,但其性能和线程模型尚有待改进。 PHP简单、专注、实用、流行,在但相比其余三种语言,在语法和功能上稍有欠缺。 总结 比起Java平台和.NET平台,动态语言轻便灵活、开发效率高,但整合凝聚力还不够,在运行效率、类型安全、可用资源、开发工具、技术支持以及影响力等方面也有必定差距,故一般做为轻量级的解决方案。 LAMP是由Linux、Apache、MySQL和包括PHP、Perl、Python或Ruby在内的脚本语言组成的网络开发平台,具备开放灵活、开发迅速、部署方便、高可配置、安全可靠、成本低廉等优势。 Perl精练、复杂、强大、灵活、自由、隐晦、表现力强,但规范性、可读性、一致性、整洁性和可维护性较差。 Python优雅规范、简洁明晰、易学易用、类库丰富,但效率稍差,有些人不喜欢它对空白符敏感的特性。 Ruby语法精巧、高度灵活,兼具Perl的表现力和Python的可读性,尤为注重程序员的感觉,但其性能和线程模型尚有待改进。 PHP简单、专注、实用、流行,在但相比其余三种语言,在语法和功能上稍有欠缺。 RoR是一种轻量级套餐式的web应用解决方案,是由好的设计(MVC架构和CoC、DRY原则)加上好的语言(Ruby)在好的时机(web2.0和敏捷开发风行之际)打造出的好的框架。 叹号——没有最好的语言,只有最合适的语言。 逗号——没有糟糕的语言,只有糟糕的程序员。 问号——没有一种语言是万能的,只会一种语言是万万不能的。 引号——废除对语言的宗教信仰,创建对语言的哲学思惟。 句号——编程就是在人脑和电脑之间寻找最佳平衡点的过程。 程序员应该与程序语言同样,既要有本身的专长,又要向通用化和全能化发展。 编程语言惯例用法、哲学理念和编程范式造成了语言的编程风格。