互联网技术日新月异,编程的语言层出不穷,原本稍微平静了几年的网络编程技术又不断出现新的东西,涤荡着整个网络世界,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和敏捷开发风行之际)打造出的好的框架。

叹号——没有最好的语言,只有最合适的语言。

逗号——没有糟糕的语言,只有糟糕的程序员。

问号——没有一种语言是万能的,只会一种语言是万万不能的。

引号——废除对语言的宗教信仰,建立对语言的哲学思维。

句号——编程就是在人脑和电脑之间寻找最佳平衡点的过程。

程序员应该与程序语言一样,既要有自己的专长,又要向通用化和全能化发展。

编程语言惯例用法、哲学理念和编程范式形成了语言的编程风格。

JSP,PHP,Python,Ruby,Perl概要及各自特点的更多相关文章

  1. 正则表达式匹配可以更快更简单 (but is slow in Java, Perl, PHP, Python, Ruby, ...)

    source: https://swtch.com/~rsc/regexp/regexp1.html translated by trav, travmymail@gmail.com 引言 下图是两种 ...

  2. 配置Notepad++直接运行Python、Perl、C、C++、Java

    运行(F5),输入命令并保存 cmd /k python "$(FULL_CURRENT_PATH)" & ECHO. & PAUSE & EXIT cmd ...

  3. Makefile中怎样调用python和perl文件为自己提供须要的数据

    Makefile中怎样调用python和perl文件为自己提供须要的数据,利用print函数对外输出数据 实例代码例如以下 perl.pl #!/usr/bin/perl print("he ...

  4. Python与Perl的相似与差别

    Python version 3.7版本 00.命令行交互 命令行交互 Perl Python perl -e <Perl代码>     #Unix/Linux/Windows/DOS 直 ...

  5. [JavaScript,Java,C#,C++,Ruby,Perl,PHP,Python][转]流式接口(Fluent interface)

    原文:https://en.m.wikipedia.org/wiki/Fluent_interface(英文,完整) 转载:https://zh.wikipedia.org/wiki/流式接口(中文, ...

  6. 编程开发(C/C++&Java&Python&JavaScript&Go&PHP&Ruby&Perl&R&Erlang)

    使用Docker快速部署主流编程语言的开发.编译环境及其常用框架,包括C.C++.Java.Python.JavaScript.Go.PHP.Ruby.Perl.R.Erlang等. 在今后采用编程语 ...

  7. .NET/ASP.NET/C#/WCF/SQL Server/My SQL/Java/JSP/JDBC/Spring/Spring MVC/PHP/Python/Ruby/Shell/Agile/CSS/HTML/HTTP/Unix/Linux大量PDF书籍/电子书籍下载, Effective Java 下载

    223本电子书籍,囊括了.NET/ASP.NET/C#/WCF/SQL Server/My SQL/Java/JSP/JDBC/Spring/Spring MVC/PHP/Python/Shell/A ...

  8. Vim 7.4.1952 with Python/Ruby/Lua/Perl/C Syntax built for Ubuntu 16.04 x86_64

    The default Vim provided by Ubuntu 16.04 even did not have Python support. That's insane. I say, wha ...

  9. php手册 | python手册 | perl手册 | c#.net手册 | c++手册 | ruby手册 | jquery手册 | js手册 | prototype手册 | mysql手册 | smarty手册 | css手册 | html手册 | nginx手册 | apache手册 | shell手册 | svn手册

    收集各种实用类手册: http://shouce.jb51.net/shell/

随机推荐

  1. 【8.19校内测试】【背包】【卡特兰数】【数位dp】

    早上随便搞搞t1t3就开始划水了,t2一看就是组合数学看着肚子疼...结果t1t3都a了??感天动地. 从小到大排序,从前到后枚举i,表示i是整个背包中不选的物品中代价最小的那个,即i不选,1到i-1 ...

  2. 在centos6.0上通过nginx远程执行shell

    nginx本身不支持直接调用shell脚本,我们可以通过安装fastcgi程序,让nginx把调用shell的http请求交给fastcgi程序去处理,然后nginx 再将结果返回给用户方式间接调用s ...

  3. Python 实现简单的感知机算法

    感知机 随机生成一些点和一条原始直线,然后用感知机算法来生成一条直线进行分类,比较差别 导入包并设定画图尺寸 import numpy as np import matplotlib.pyplot a ...

  4. mysql中如何比较日期

    做项目,需求是要做一个统计的功能,首次进入默认显示今天以及七天前的数据,这个很好解决. 然后就是用户点击日历插件选择日志,根据日期来统计当天的情况,我数据库里存的时间是使用的时间戳 前台获取到的日期是 ...

  5. Spring集合 (List,Set,Map,Properties) 实例

    下面例子向您展示Spring如何注入值到集合类型(List, Set, Map, and Properties). 支持4个主要的集合类型: List – <list/> Set – &l ...

  6. JS返回数组种类和个数(面试常问)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. 全面的framebuffer详解二

    转:http://blog.chinaunix.net/uid-28297667-id-3773729.html (二)一个LCD显示芯片的驱动实例 以Skeleton LCD 控制器驱动为例,在LI ...

  8. 开始整理iOS职位面试问题及答案

    Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承;可以实现多个接口,通过实现多个接 ...

  9. FIS3配置fis-conf.js

    设置规则的配置接口: fis.match(selector, props); 1.添加md5戳:对 js.css.png 图片引用 URL 添加 md5 戳: fis.match('*.{js,css ...

  10. UVa 1329 - Corporative Network Union Find题解

    UVa的题目好多,本题是数据结构的运用,就是Union Find并查集的运用.主要使用路径压缩.甚至不须要合并树了,由于没有反复的连线和改动单亲节点的操作. 郁闷的就是不太熟悉这个Oj系统,竟然使用库 ...