随着信息技术的不断发展,计算机语言家族也在不断壮大。从早期的汇编、C/C++到现在比较流行的面向对象语言,如Java、C#等,再到最近炙手可热的动态语言,如Python、ruby等,真可谓是五花八门。大量计算机语言的产生使我们有了更多的选择,但也会带来另外一个问题,就是在面对不同的应用时,不知道应该选择谁更合适。
其实,这也很简单。只要知道我们的目标是什么,再根据不同语言的特点进行分析,就可很容易地选择更适合我们的语言。一般来讲,软件应用主要有以下4种。
1. 企业应用
2. GUI应用
3. 网络应用
4. Mobile应用
有的软件只符合以上4种应用的一种,有的则符合多种。为了结合当前比较流行的计算机语言,本文只对Java、c#和动态语言进行相应的比较和分析。在这里的动态语言主要讨论Python、ruby和perl。下面就对上述的4种应用分别进行分析。
一、企业应用
操作数据库的能力
企业应用主要是指信息管理系统。既然是管理,那就需要处理大量的数据。而这些数据一般是保存在数据库中的。这就要看这些语言对数据库的操作能力了。
对于Java和C#来说,数据库访问能力就不用说了。由于它们出身名门,因此,几乎所有的数据库厂商都提供了Java和C#接口。对于C#来说,主要是ADO接口。对于Java来说主要是JDBC接口。那么对于动态语言呢?
Python:
这种语言操作数据库的方法非常丰富。如果在windows下使用Python,连接数据库的方法是非常多的。下面列出了其中的三种连接数据库的方法。
1. 由于Python可以调用windows中的com组件,因此,可以很方便地访问windows下的数据库组件,如DAO、RDO或ADO。
2. 使用Python数据库模块。
有很多数据库提供了用于操作这种数据库的Python模块。如oracle提供了cx_oracle模块。可以从http://www.oracle.com/technology/global/cn/tech/opensource/projects.html下载。
3. 使用calldll直接调用windows下的API函数。如直接调用ODBC接口函数。但这种方法比较难于使用,并不适合初学者。
如果在非windows环境下,可以使用第二种方法操作数据库。当然,Python访问数据库的方法还不止这些,本文不再一一阐述。总之,Python操作数据库的能力是毋庸质疑的。
Ruby:
这种语言早在1993年就已经问世了,但由于缺乏英语文档,所以一直到rails框架和ruby相结合后才使ruby在全球流行起来。目前也有不少支持ruby的操作数据库的程序库可以使
用。感性趣的朋友可以到http://raa.ruby-lang.org/cat.rhtml?category_major=Library;category_minor=Database上下载相关的库。
Perl:
这种语言也和Python、ruby一样,有一个数据库接口(DBI)。绝大多数数据库都提供了perl的DBI。
因此,Java、c#和以Python、perl和ruby为代表的动态语言访问数据库的方式虽然各有不同,但是它们的操作数据库的能力是很强的。只是动态语言访问数据库的方式有一些原始,不如c#、Java等传统的语言那样从更高的层面展现给用户。但它们对数据库的操作能力已经足以应付大多数应用了。
对Web应用支持得如何
Web应用目前在企业中应用得比较广泛。Web应用也就是我们常说的B/S结构的应用。这种应用需要一个可以接收客户端请求的应用服务器(一种服务端程序)。从理论上讲,任何程序设计语言都可以为Web应用提供服务,只要有支持它们的应用服务器。当然上述的几种语言也不例外。
目前最常用的应用程序服务器有Microsoft的IIS和开源的Apache。这两种服务器类似。都可以为其写扩展程序,使其可以支持任何语言。除了用C#编写的Asp.net只能运行在IIS上外,Java和大多数动态语言都同时拥有IIS和Apache两种扩展。即在IIS和Apache上都可运行。当然,对于Java和动态语言来说,更常用的应该是Apache。而不少动态语言除了可以在Apache上运行外,还有其它更能发挥其作用的应用服务器,如Ruby拥有Rails服务框架。Rails拥有很多有价值的功能,如操作数据库,对象持久化等。
Java除了可以运行在IIS和Apache上,也有很多商业的和非商业的Jsp/Servlet服务器,如WebLogic、Jboss和Tomcat等。因此,支持使用Java编写的Jsp/Servlet的应用服务器是最丰富的。
从上述可知,如果要是只在windows上布置web应用的话,当然C#是最好的选择。但是用于开发它的Visual Studio是收费版本(虽然有Express版,但是功能有限)。因此,如果要降低成本,可以选择Jsp。但由于近几年一些动态语言的兴起,使一些Jsp程序员和Asp.net程序员转向了动态语言。这些动态语言之所以很热,有一个重要原因,就是因为其在Web开发领域的高效率和功能强大。如在Rails上使用Ruby开发web应用效率就非常的高。因为Ruby on Rails有很多模板,因此,如果生成一个一般的web应用,只需要几条语句就可以办到,就算生成较复杂的web应用,它的工作量也不是很大。因此,使用动态语言开发web应用,可以大大提高生成率,有时甚至是数量级的提高。
支持哪些服务
对于大的企业应用,很容易地操作数据库和高效的web应用是远远不够的,还要有功能更强大的服务系统支持。
服务有很多种,如对象持久化、数据库连接池管理、远程对象(方法)调用,消息队列处理等。而这些应用能够满足一个企业更多的需要。
这些服务对于上述的语言来讲就有着很大差异。下面就一一阐述:
C#:
到目前为止,人们比较关注的只是Asp.net。当然,C#不只能编写Asp.net程序。使用C#也可以编写如.Net Remoting的程序,它有些类似于远程方法调用。但是它只是原始的调用,并没有一些高级的功能,如保存状态、关系映射等。而对于其它的服务,Microsoft并未提供完善的解决方案。
Java:
支持Java的服务就非常多了。从早期的EJB(包括Session Bean、Entity Bean和Message Bean)到Message Queue、数据库连接池以及非常多的用于各种服务的库。如JDO、Hibernate等。
动态语言:
虽然动态语言最近很热,但是可用的服务并不多。这也是制约动态语言继续向企业迈进的障碍之一。当然,也有一些面向动态语言的服务框架。如Rails有可为Ruby提供对象持久化、数据库映射等服务。但是还没有像EJB等功能更强大的服务。
综合上述,如果您的企业应用比较大的话。使用Java是最合适的。因为Java的服务产品线是最全的。即有免费开源的、也有商业支持的。但是有时将动态语言和Java配合使用,可能会有更好的效果。如可以使用动态语言设计web应用,然后在需要服务的地方通过Java来实现。当然,使用C#也是一个不错的选择,只是这就将您永远固定在Windows上的,您会为此付出一笔不小的费用。
二、GUI应用
图形用户接口程序是目前最常用的程序风格之一(这里GUI指C/S中的GUI)。毋庸质疑,GUI是Microsoft做的最好。如果在Windows下进行GUI开发,当然首选是Visual Studio。但是有时我们需要设计跨平台的GUI程序,那么使用Java是一个不错的选择。目前Java有三套GUI程序库,其中Swing和Awt是Sun设计的。而Swt是另外一套图形库,它最初是用在Eclipse中,从性能和美观上来说,Swt应该是最好的。看一看Eclipse的界面是可以证明这一点了。只是Java在IDE方面没有像Visual Studio那样好的支持,虽然也有一些IDE,如JBuilder、Eclipse等。但是它们的功能和Visual Studio比起来还是略逊一筹。我个人认为,Java之所以一直和企业应用联系在一起,而不和GUI应用联系在一起的原因就是没有好的用于设计GUI的IDE,而并不是Java的GUI功能差。
现在来谈一下动态语言的GUI能力,大多数动态语言本身并没有GUI的功能,而是借用了其它的GUI库来实现的。如Python可以使用Pyqt或wxPython来实现GUI的功能。其中wxPython是一个免费开源的C++跨平台GUI库的,详细信息可以访问http://www.wxwidgets.org。
综上所述,动态语言虽然也可以设计GUI库。但是有两个原因在制约着它的发展。
1. 没有强大的IDE支持。
2. 效率上不如Java和C#设计的GUI程序。
但是使用动态语言做一些对效率要求不高、并且不是很大的跨平台GUI程序还是很不错的。而如果开发大型的跨平台GUI程序,Java应该是最好的选择。当然,如果只在windows下开发,使用C#和Visual Studio会使开发效率大大提高。
三、网络应用
随着网络的普及,网络应用程序成指数级地增长。一种语言如果要想得到广泛的应用。至少得拥有两项功能之一,它们就是网络和数据库。这两项功能是被应用最为广泛的。综观各种流行的语言,没有一种不在这两项功能上下足了功夫。
在网络功能上C#和Java几乎不相上下。而动态语言中的Python的网络功能最为强大。在Google刚成立时,最初的Spider(一种大范围地下载网页的程序)就是使用Python实现的。
因此,在网络应用上,可以根据您的喜好选择任何目前流行的语言。因为它们的网络访问能力都是非常强的。
四、mobile应用
现在随着应用的逐渐便捷化、小型化。手机、PDA、掌上电脑得到了广泛的应用。对于程序设计语言来说。能设计移动设备的应用程序是衡量这种语言功能强弱的一个重要指标。
从这方面来讲,C#和Java都可以满足这一点。由于Microsoft有自己的WinCE操作系统以及.net framework的mobile版。因此,C#可以很容易地为WinCE设计程序,并能运行在任何装有WinCE的移动设备上。而Java也提供了专为移动设备设计软件的jdk,它就是J2ME。但遗憾的是由于现在移动设备生产商分为两个阵营:Microsoft和非Microsoft。它们分别支持WinCE和J2ME。因此,要选择使用其中一种,可能就无法在支持另外一种开发包的设备上运行。
总有一些激情分子要尝试一些新的东西。他(她)们并不满足灵活的动态语言只能在PC机或苹果机上运行。因此,一些动态语言被移植到了移动设备上。如Python可以在诺基亚的Series60设备上通过Python for S60来运行。但是选择Python开发移动设备应用程序目前还无法在大多数的移动设备上运行。因此,Python在移动设备上的应用目前还有一定的局限性。
因此,如果要进行mobile开发的话,再在最常用的是C#和Java。选择哪一个,要看你的移动设备支持哪一种软件开发包。当然,在支持动态语言的移动设备上可以选择使用动态语言作为执行脚本和C#或Java配合使用。这样的效果会更好。
总结
当然,软件的应用范围不仅仅是上述的4种,但它们已经包括了绝大多数的应用。对于其它的应用,要根据具体情况而采取相应的方法。如对xml文件的操作、文件的IO处理、科学计算等。我们可以具体语言的性质和具体的应用来做出适当的选择。也可以将这些语言进行一下优化组合,使其发挥更大的作用。
文章转自:http://news.csdn.net/n/20060913/94690.html