各种编程语言介绍 zz
2008/08/19 00:14 [编程语言 ]
www.lxblog/article.php?type=blog&itemid=788
1. 开放源代码的必要性
在介绍编程语言之前,先说说开放源代码的必要性。现在,在软件生产领域存在巨大的智利浪费,大家把大量的精力用在编写别人已经实现的程序代码上。看看,文本编辑器有多少,看看ftp程序有多少,看看字处理程序有多少,这些程序虽然有差别,但主要的功能都是一样的。要实现个性化的功能,在已有的软件基础上修改会节省多少时间呀!而每个程序各编一套,又浪费多少时间?如果,没有这些重复的工作量,世界上的程序员至少可以节省80%的
windows开发平台工作量。同时,开放源代码也方便了大家的交流,阅读源代码应该是最直接最有效的学习途径,尤其是比较专业的领域。
要开放源代码,下面几点比较重要:
* 语言要流行。
* 语言的函数和类库统一。
* 语言的语法和编译器要统一。
* 编译器是否开放源代码。
* API是否开放源代码。
* 语言要流行。
* 语言的函数和类库统一。
* 语言的语法和编译器要统一。
* 编译器是否开放源代码。
* API是否开放源代码。
语言的可重用性、功能、友好性。
* 语言统一:如果大家都用一种编程语言,都用同样的函数,同样的类库,那么,大家的共同语言就会很多。大家只要学会一种语言,一套函数,一套类库,就可以相互读懂源代码,这样,学习量是最少的;但是语言统一根本是不可能的事,因为各种语言都有其特,如果取了其中一个优点,通常就会牺牲另一个优点。可是学习新的API浪费程序员大量的时间和精力,尤其是当这个API有大量和其他API重复的功能的时候。
* 语言统一:如果大家都用一种编程语言,都用同样的函数,同样的类库,那么,大家的共同语言就会很多。大家只要学会一种语言,一套函数,一套类库,就可以相互读懂源代码,这样,学习量是最少的;但是语言统一根本是不可能的事,因为各种语言都有其特,如果取了其中一个优点,通常就会牺牲另一个优点。可是学习新的API浪费程序员大量的时间和精力,尤其是当这个API有大量和其他API重复的功能的时候。
要增加代码的可重用性,要从下面几点着手:
* 代码的可读性。如格式、是否接近英语语法和单词。
* 代码的表达能力,也就是简单性,能用最少的语句和单词实现同样的功能。
* 代码的结构性,如函数、模块、类。
语言功能的强大从下面几点来说:
* 是否拥有大量的库支持。这是最重要的,要求编写任何功能的程序都有强大的库支持。
* 语法功能是否强大,比如是否有出错处理。是否有指针。
语言的友好性:
* 语言包的大小,语言包越小,学习越简单。
* 语言是否有友好的编辑调试环境。
* 语言的可视化和集成编程环境。
* 代码的可读性。如格式、是否接近英语语法和单词。
* 代码的表达能力,也就是简单性,能用最少的语句和单词实现同样的功能。
* 代码的结构性,如函数、模块、类。
语言功能的强大从下面几点来说:
* 是否拥有大量的库支持。这是最重要的,要求编写任何功能的程序都有强大的库支持。
* 语法功能是否强大,比如是否有出错处理。是否有指针。
语言的友好性:
* 语言包的大小,语言包越小,学习越简单。
* 语言是否有友好的编辑调试环境。
* 语言的可视化和集成编程环境。
2. 简介各种程序语言
注︰在程序语言前划有☆号者,表示它有重大影响,但不代表它优良。
2.1 适合编写商业程序、对效能有所要求。
编写商业程序的程序语言,最基本的要求就是不是直译的,令使用者不能看到源码;第二就是有良好的性能、语法,适合编写大程序而效率不会过慢。
2.1.1 ☆C/C++
自从C发明了以后,它就取代了汇编语言在操作系统编程的领导地位。从性能上说,除了汇编语言,C语言是最接近机器的语言。各种操作系统的编程接口的默认语言都是C语言。因此,用C语言编程,可以最大限度发挥操作系统的能力。同时,由于绝大部分的商品软件都是C或与C兼容的C++实现的,都有C编程接口,可以说,没有C不能实现的功能。
C++是C语言的加强版,C++增加了面向对象和其他有用的功能,但它的效能并没有大减,编程更方便轻松;而C++亦支援大部分C的程序,令C++和C变得近乎不可分割,大部分的C编译器也支援C++。假如要在学C或学C++选择,学C++是明智的选择。
在Unix-like的操作系统中,C具有很好的开放源代码的条件,它有统一的编译器gcc,有强大但比较难掌握的编程环境emacs,有统一的API:posix和Linux接口。并且大部分编译器和API是开放源代码的。在Unix-like上编写图形界面程序,有两个选择KDE和Gnome∶KDE
更成熟,但它使用了不是开源的Qt函数库;Gnome支持多语言和面向对象的程序间的协同,有它的GUI工具GTK。
在Windows环境中,现在通常使用VC,但有一个缺点,Windows的升级换代太快,从dos环境到Windows31 ,从Windows31到Windows95,到Windows2000,到.NET。API常常变换,这样,在Windows上的程序代码的寿命会比较短。并且vC的编译器和API太复杂,难于掌握,并非开放源代码的工具。其他选择有从Unix-like系统移植过来的djgpp、mingw。
由于C/C++具有现代语言的大量特征,现在常常代替Pascal作为教学的编程语言。实际上,如果不深入学习,C也是一种很简单的语言。不学Basic,直接学C完全没有问题。和其他语言相比,虽然C和C++都已经定下了其标准,但编译器、函数库、操作系统API五花八门,有些又未必全面支援最新的标准,造成学习的难度大、统一性差的问题。
2.1.2 ☆Visual Basic(简称VB)
VB是快速的界面生成语言,是快速的数据库程序开发语言。vba是vb的应用版,嵌入在MS office中。编写MS office上的程序很好用。缺点是只能在Windows平台运作。
2.1.3 Delphi/Kylix
和vb一样是快速开发环境,但性能更好,功能更强大,亦可以用于Linux平台。语法建基于Pascal,是面向对象的程序语言。
2.1.4 ☆Java
相对C,Java作为现代语言,具有非常丰富的语法特征,如模块和类,不像C随操作系统和编译器的不同有极大差异,Java是一个公司的产品,具有唯一的API,因此,Java程序员没有语言隔阂。有人认为Java根本是一个平台,并非真正的跨平台。
相对跨平台的语言来说,Java具有最好的图形界面编程API。Java所有的API都是类库,相对C的函数来说,是非常大的进步。Java具有现代语言几乎所有的特征。Java最大的缺点,是它被一所公司控制着。
2.1.5 Ada
Ada语言和C/C++是一种编译语言,他们最后编译出的执行文件的机器码都很小。因此现在
众多的语言只有C/C++能够与Ada相提并论。和C/C++相比,Ada的特点是可靠、可移植。他的可靠是通过比其他语言都强大的类型,每种类型还都可以象数据库字段一样进行强类型、范围的检查。以此来保证在编译中就发现错误。它有强大的标准化组织,严格认证Ada编译器的标准。有多线程能力。适于编写实时程序。但和C/C++相比太复杂、罗嗦,因此注定不能流行。
2.2 Scripting Language
如果不在乎商业机密,应用目标也不是太苛刻的话,编写大型跨平台程序的最佳就是脚本语言。有些脚本语言具有全面的库的支持,有和C语言的方便的交互能力。他们和Java相比,编程效率更高。同时因为没有编译,程序更方便修改。因为他们的库都是C实现的,也比Java有更高性能。同时,他们都是开源的,都是对商业应用友好的,也是简单的、方便定制的。也是不满意Java的不可控制的越来越庞大的库的又一个选择。
2.2.1 Basic
现在最着名的Basic版本是vb,Basic是简单的初级语言。Basic的丑陋在于参数还是默认传地址。太危险。
2.2.2 ☆Perl
Perl的最大特点是有强大的字符串模式匹配,是最好的文本文件的读取和生成语言,亦是Unix系统管理者的好帮手,因为它吸收了awk、sed、grep等工具的功能。Perl具有很大的自由性,象英语一样有很大的随意性,在Perl里基本上无Type Error这回事,它的”Type”就是纯量和串行。Perl有一个强大的数据库接口和其他各种接口。Perl有大量的程序库(CPAN)。因为Perl较早出现,某些功能是后期加上去,显得不协调,例如它的面向对象功能就被视为不是真正的面向对象。Perl有个着名的缺点是难读懂,维护困难,被认为不适合编写大程序,只适合一千行以下的程序,也有个著名的优点是简练。
2.2.3 Python
首先,Python是和Basic一样面向初学者的语言,和英语一样容易懂。Python有和Perl类似的简单性,但没有模式匹配。Python有和Lisp相似的地方,它有将字符串作为程序执行的eval函数,可以对一个对象的所有数据进行保存,可以把函数作为参数传给另一个函数。Python具有非常好的扩充性,Python程序可以和C程序,以及Java程序很好地结合。
2.2.4 Tcl
Tcl具有最简单的语法,最好的和其他程序交互的能力,有编写图形界面程序的Tk。基本上已经没有个人用户学习Tcl语言,但是中国一些大型的嵌入式软件公司至今一直使用该语言进行软件测试工作,而且Tcl的工具包Tk也是很多Scripting Language的GUI工具。
2.2.5 Ruby
Ruby是吸取了所有语言精华的语言。Ruby虽然是纯面向对象语言,但可以”扮成”程序式的程序语言;它的文件主要都是日文和英文。Ruby有:
* Perl的正则表达式
* Python的语言的简单性可读性、最容易的扩展能力,强大的可移植性。
* PHP的嵌入功能和多种客户端
* smalltalk的纯面向对象语法和单继承
* Lisp的无穷嵌套的语法,也就是函数式的语法。
* 用“块”来实现更快捷的数据结构的处理。不知道是不是sCheme的宏功能。用块能更清楚的实现Python的表处理功能。
* Java和Ada的线程编程
* Java的安全编程
不得不承认Ruby确实是个精彩的语言,它完全学会了Lisp的所有编程都是函数的思想,smalltalk的所有东西都是对象的思想,Perl的一个目的多种手段的方法,Python的简单化的“最少惊喜”的原则,Java的多线程和安全控制的功能,Tcl的容易扩展的功能,PHP的嵌入功能和强大客户端的功能,最方便的shell命令的调用。
2.2.6 Lua
Lua是一个小巧强大的脚本语言。第一眼看到Lua的介绍,感觉它象Tcl的替代品,因为它的主要目的是作为脚本语言。但接下来就看到它不是象Tcl那样是命令行式的函数语言,它和其它语言一样有语句结构。它实现和C程序互动的方式和Python类似,具有和Python一样的和C结合的能力。并且Lua全部是用ansi C实现的,可以实现完全的跨平台。
然后,看到Lua的一个显着的特点就是具有对象数据库功能,可以实现变量的永恒存储。这个特点让人首先联想到fish,fish的最重要的特点也是语言内含一个对象数据库,不过fish有outline的可视界面,和数据库浏览能力。但fish不是开源的,因此,如果需要一个非内存的变量存储空间可以选择Lua。这种对象数据库都是不但能存储数据,也能存储操作数据的函数。实际Python也具有一个将整个内存存储在一个磁盘文件的功能,另外,还有zope的zodb可以实现专业的永恒变量功能。另外,sCheme天然具有永恒存储能力,它只要把表变量输出到一个文件中就可以了。因为sCheme是不分数据和程序的,因此可以实现将程序和数据同样存储在文件中。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论