|
//-----------------------------------------------------------------------------------------
// 本文章的最初作者是:tomz。tomz的网页:http://tomz.126.Com
//-----------------------------------------------------------------------------------------
目录 [显示隐藏]
1 开放源代码的必要性
2 简介各种程序语言
2.1 适合编写商业程序、对效能有所要求
2.1.1 ☆C/C++
2.1.2 ☆Visual Basic(简称VB)
2.1.3 Delphi/Kylix
2.1.4 ☆Java
2.1.5 Ada
2.2 Scripting Language
2.2.1 Basic
2.2.2 ☆Perl
2.2.3 Python
2.2.4 Tcl
2.2.5 Ruby
2.2.6 Lua
2.3 网页编写∶客户端程序
2.3.1 JavaScript
2.3.2 VBScript
2.4 服务器端程序
2.4.1 PHP
2.4.2 Java、.NET、Zope
2.5 其他
2.5.1 Lisp
2.5.2 prolog
2.5.3 .NET
2.6 其他编程概念
2.6.1 Turing-complete programming: Brain****
2.6.2 ☆Functional Programming: Haskell、Clean
2.6.3 平行处理: Fortran
3 各种语言的选择
4 各种语言的选择
5 我为什么选择了Python
6 Ruby和Python的比较
6.3.1 Python和Ruby的相同点
6.3.2 和Python相比Ruby的优点
6.3.3 和Python相比Ruby的不足
6.3.4 Python和Ruby的语言的选择
7 多脚本语言的大统一及疑问
8 .NET介绍
8.3.1 .NET所实现的Java的功能
8.3.2 .NET未实现的Java功能
8.3.3 .NET实现的Java不具备的功能
8.3.4 相对vs6的改进
9 XML各种技术介绍
10 最先进的XML格式图形界面程序开发工具-XUL
11 最接近人类语言的编程语言-REBOL
12 最具有现代感的Lisp解释器DrScheme
13 eiffel语言印象
14 mozart oz语言
15 各种语言的选择和语言之间的关系
15.3.1 一般是使用什么软件,就用什么软件的语言
15.3.2 然后看处理什么样类型的数据
15.3.3 从语言特点来说
15.3.4 C语言是最普及的语言,但C语言有一些缺点,因此,就产生了很多改进C的语言
15.3.5 关于图形用户界面的选择
15.3.6 discuss
16 文学编程和CWEB介绍
17 贡献
[编辑]
开放源代码的必要性
在介绍编程语言之前,先说说开放源代码的必要性。现在,在软件生产领域存在巨大的智利浪费,大家把大量的精力用在编写别人已经实现的程序代码上。看看,文本编辑器有多少,看看ftp程序有多少,看看字处理程序有多少,这些程序虽然有差别,但主要的功能都是一样的。要实现个性化的功能,在已有的软件基础上修改会节省多少时间呀!而每个程序各编一套,又浪费多少时间?如果,没有这些重复的工作量,世界上的程序员至少可以节省80%的工作量。同时,开放源代码也方便了大家的交流,阅读源代码应该是最直接最有效的学习途径,尤其是比较专业的领域。
要开放源代码,下面几点比较重要:
语言要流行。
语言的函数和类库统一。
语言的语法和编译器要统一。
编译器是否开放源代码。
API是否开放源代码。
语言的可重用性、功能、友好性。
语言统一:如果大家都用一种编程语言,都用同样的函数,同样的类库,那么,大家的共同语言就会很多。大家只要学会一种语言,一套函数,一套类库,就可以相互读懂源代码,这样,学习量是最少的;但是语言统一根本是不可能的事,因为各种语言都有其特色,如果取了其中一个优点,通常就会牺牲另一个优点。可是学习新的API浪费程序员大量的时间和精力,尤其是当这个API有大量和其他API重复的功能的时候。
要增加代码的可重用性,要从下面几点着手:
代码的可读性。如格式、是否接近英语语法和单词。
代码的表达能力,也就是简单性,能用最少的语句和单词实现同样的功能。
代码的结构性,如函数、模块、类。
语言功能的强大从下面几点来说:
是否拥有大量的库支持。这是最重要的,要求编写任何功能的程序都有强大的库支持。
语法功能是否强大,比如是否有出错处理。是否有指针。
语言的友好性:
语言包的大小,语言包越小,学习越简单。
语言是否有友好的编辑调试环境。
语言的可视化和集成编程环境。
[编辑]
简介各种程序语言
注?在程序语言前划有☆号者,表示它有重大影响,但不代表它优良
[编辑]
适合编写商业程序、对效能有所要求
编写商业程序的程序语言,最基本的要求就是不是直译的,令使用者不能看到源码;第二就是有良好的性能、语法,适合编写大程序而效率不会过慢。
[编辑]
☆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五花八门,有些又未必全面支援最新的标准,造成学习的难度大、统一性差的问题。
[编辑]
☆Visual Basic(简称VB)
在Windows应用程序的开发中,VB一直是最适合非专业开发人员的开发工具之一。从DOS时代开始,BASIC语言就始终秉承了好学快用的特点。这使得VB无论是在GUI图形用户界面、Web还是数据库开发中都能做到马上开始立即布署。但从专业的角度讲,VB在开发对效率和安全性要求较高的应用程序时,能力就显得十分有限了。
VBA(Visual Basic Applications)是VB的应用版,嵌入在MS office中,编写MS office上的程序很好用。缺点是只能在Windows平台运作。
[编辑]
Delphi/Kylix
和vb一样是快速开发环境,但性能更好,功能更强大,亦可以用于Linux平台。语法建基于Pascal,是面向对象的程序语言。
[编辑]
☆Java
相对C,Java作为现代语言,具有非常丰富的语法特征,如模块和类,不像C随操作系统和编译器的不同有极大差异,Java是一个公司的产品,具有唯一的API,因此,Java程序员没有语言隔阂。有人认为Java根本是一个平台,并非真正的跨平台。
相对跨平台的语言来说,Java具有最好的图形界面编程API。
Java所有的API都是类库,相对C的函数来说,是非常大的进步。Java具有现代语言几乎所有的特征。
Java最大的缺点,是它被一所公司控制着。
[编辑]
Ada
Ada的命名取自诗人拜伦之女,著名计算机科学家艾达·拜伦(Ada Byron)。她也是公认世界上第一位程序员。
Ada语言和C/C++是一种编译语言,他们最后编译出的执行文件的机器码都很小。因此现在众多的语言只有C/C++能够与Ada相提并论。
和C/C++相比,Ada的特点是可靠、可移植。
他的可靠是通过比其他语言都强大的类型,每种类型还都可以象数据库字段一样进行强类型、范围的检查。以此来保证在编译中就发现错误。
它有强大的标准化组织,严格认证Ada编译器的标准。有多线程能力。
适于编写实时程序,为美国国防部标准语言,故民间罕见。
[编辑]
Scripting Language
如果不在乎商业机密,应用目标也不是太苛刻的话,编写大型跨平台程序的最佳就是脚本语言。有些脚本语言具有全面的库的支持,有和C语言的方便的交互能力。他们和Java相比,编程效率更高。同时因为没有编译,程序更方便修改。因为他们的库都是C实现的,也比Java有更高性能。同时,他们都是开源的,都是对商业应用友好的,也是简单的、方便定制的。也是不满意Java的不可控制的越来越庞大的库的又一个选择。
[编辑]
Basic
现在最着名的Basic版本是vb,Basic是简单的初级语言。Basic的丑陋在于参数还是默认传地址。
[编辑]
☆Perl
Perl的最大特点是有强大的字符串模式匹配,是最好的文本文件的读取和生成语言,亦是Unix系统管理者的好帮手,因为它吸收了awk、sed、grep等工具的功能。Perl具有很大的自由性,象英语一样有很大的随意性,在Perl里基本上无Type Error这回事,它的”Type”就是纯量和串行。Perl有一个强大的数据库接口和其他各种接口。Perl有大量的程序库(CPAN)。
因为Perl较早出现,某些功能是后期加上去,显得不协调,例如它的面向对象功能就被视为不是真正的面向对象。Perl有个着名的缺点是难读懂,维护困难,被认为不适合编写大程序,只适合一千行以下的程序,也有个著名的优点是简练。
[编辑]
Python
首先,Python是和Basic一样面向初学者的语言,和英语一样容易懂。
Python有和Perl类似的简单性,但没有模式匹配。
Python有和Lisp相似的地方,它有将字符串作为程序执行的eval函数,可以对一个对象的所有数据进行保存,可以把函数作为参数传给另一个函数。
Python具有非常好的扩充性,Python程序可以和C程序,以及Java程序很好地结合。
[编辑]
Tcl
Tcl具有最简单的语法,最好的和其他程序交互的能力,有编写图形界面程序的Tk。基本上已经没有个人用户学习Tcl语言,但是中国一些大型的嵌入式软件公司至今一直使用该语言进行软件测试工作,而且Tcl的工具包Tk也是很多Scripting Language的GUI工具。
[编辑]
Ruby
Ruby是吸取了所有语言精华的语言。Ruby虽然是纯面向对象语言,但可以”扮成”程序式的程序语言;它的文件主要都是日文和英文。
Ruby有
* Perl的正则表达式
* Python的语言的简单性可读性、最容易的扩展能力,强大的可移植性。
* PHP的嵌入功能和多种客户端
* smalltalk的纯面向对象语法和单继承
* Lisp的无穷嵌套的语法,也就是函数式的语法。
* 用“块”来实现更快捷的数据结构的处理。不知道是不是sCheme的宏功能。用块能更清楚的实现Python的表处理功能。
* Java和Ada的线程编程
* Java的安全编程
不得不承认Ruby确实是个精彩的语言,它完全学会了Lisp的所有编程都是函数的思想,smalltalk的所有东西都是对象的思想,Perl的一个目的多种手段的方法,Python的简单化的“最少惊喜”的原则,Java的多线程和安全控制的功能,Tcl的容易扩展的功能,PHP的嵌入功能和强大客户端的功能,最方便的shell命令的调用。
[编辑]
Lua
Lua是一个小巧强大的脚本语言。第一眼看到Lua的介绍,感觉它象Tcl的替代品,因为它的主要目的是作为脚本语言。但接下来就看到它不是象Tcl那样是命令行式的函数语言,它和其它语言一样有语句结构。它实现和C程序互动的方式和Python类似,具有和Python一样的和C结合的能力。并且Lua全部是用ansi C实现的,可以实现完全的跨平台。
然后,看到Lua的一个显着的特点就是具有对象数据库功能,可以实现变量的永恒存储。这个特点让人首先联想到fish,fish的最重要的特点也是语言内含一个对象数据库,不过fish有outline的可视界面,和数据库浏览能力。但fish不是开源的,因此,如果需要一个非内存的变量存储空间可以选择Lua。这种对象数据库都是不但能存储数据,也能存储操作数据的函数。实际Python也具有一个将整个内存存储在一个磁盘文件的功能,另外,还有zope的zodb可以实现专业的永恒变量功能。另外,sCheme天然具有永恒存储能力,它只要把表变量输出到一个文件中就可以了。因为sCheme是不分数据和程序的,因此可以实现将程序和数据同样存储在文件中。
Lua和Python相比规模比较小,因为它是和C紧密结合的,可以完全使用各种C库,就不需要有自己的库。Lua给人的印象是小规模的Python。Lua也是动态数据类型,也有内存管理功能。只是Python自带强大的库,而Lua只携带一个小型的库,具有字符串和数学计算能力,同时Lua标准携带一个对象数据库。另外,可以把C库随时编译到Lua中。Lua引以自豪的是它的速度很快。
Lua的语法比较简单,它把数组、字典、结构等复杂的数据结构都统一为表。另外,Lua具有正则表达式功能。
[编辑]
网页编写∶客户端程序
[编辑]
JavaScript
编写动态网页的最佳工具,可以造到很多效果,亦是Mozilla扩充套件的语言jhgjghjgh。
[编辑]
VBScript
VBScript是vb的脚本语言,可以产生服务器端和客户端的动态网页。客户端的动态网页暂时只有IE系列浏览器支援,所以VBScript兼容性很低,不及JavaScript。
[编辑]
服务器端程序
[编辑]
PHP
PHP是专门写网页程序的语言,它的语法和Perl极之接近。PHP可以嵌入HTML,更容易编写服务器端程序。PHP天然和web服务器以及mysql数据库相结合。PHP可以动态生成图像。
我一直认为PHP是一个垃圾,因为它只是实现了脚本语言得嵌入,却单独实现一种语言、实现大量得函数库,浪费了大量得开发人员得宝贵时间来重复其他脚本已经实现了得功能,也浪费了PHP开发人员得大量学习时间,还要单独学一种只能存在于web服务器得语言,浪费了Perl、Python得已有得使用经验。相似得还有pike,一种C得脚本语言,没什么新东西,还不如仍然用C编译器。
但我最近看书才了解PHP独特的开发目标。
PHP为什么不直接用Perl作脚本语言。是因为Perl是一种Unix语言,带有Unix传统得字符神秘高深,让人难于学习。而编动态网页得人不见得会用Perl这种Unix工具,他们可能只有HTML知识。PHP就简化了Perl得语言,变成了一种简单友好得语言,免去了人们学习Perl得困难。
PHP为什么不选Python作脚本。因为Python是一种面向对象的语言,大量得功能都要涉及面向对象概念,而web应用只是简单得实现客户机逻辑和显示功能。没必要涉及面向对象得复杂概念。函数是最简单,最容易理解得,因此,PHP倾向于所有得功能都用函数来解决,而不是用对象来解决。这有点象C和C++之争。应该承认,函数在实现简单功能得时候是最有利得工具,它得语句量最少。
PHP定位于以HTML为用户界面,充当各种服务器得客户端,实现得是传统得客户端编程得任务。它有pop、smtp、ftp、多种数据库等各种服务器得客户端得函数,也有图片、pdf生成,XML处理等这种必要得功能。这些都是其他脚本比不上PHP得地方。
其他专门写网页程序的语言有ASP、JSP和CGI,但它们都不及PHP强大。
[编辑]
Java、.NET、Zope
在商业开发中流行的是Java和.NET,其实zope也是选择之一,zope的特点就是全部开源,层次少,简单。并且集成一个内容管理器和众多的附加产品。附加产品多是开源软件必然的优势。zope之前的一些缺点在zope3中将得到解决。另外,zope的组件架构和Cmf开发架构,并不必Java的组件开发环境差多少(我没接触很多Java,只是评感觉说,其他人可以有不同意见)。
PHP虽然看起来不适合大程序开发,但在PHP平台上已经有了很多大规模的程序,比如puke。tiki。
另外,web服务器已经被很多程序缺省支持,用很多语言都能编写出独立的web服务器程序。
[编辑]
其他
[编辑]
Lisp
Lisp的语法非常简单统一,只有简单的函数和参数的语句结构。Lisp用上极多括号,不太方便。Lisp数据和程序的界限模糊。Lisp可以深度嵌套。
[编辑]
prolog
prolog是由R. Kowalsk首次提出,全称是Programming in Logic。1972年诞生世界上第一个Prolog系统。它基于逻辑程序设计,能自动实现模式匹配和回溯,且适合于并行处理。PROLOG以一阶谓词演算为基础。由于采用了合一、置换、回溯和匹配等机制来搜索解答,所以用户不必要编写求解搜索程序,只要把待解决的问题输入计算机系统就可以了。PROLOG的功能还不如LISP强,但它具有较好的发展前景,曾被用作第五代计算机开发研究的核心语言。
[编辑]
.NET
支持多种语言的统一的API类库,
可以编写webform程序,即所有的逻辑都在服务器端,传到客户端的是标准的HTML3.0,可以被各种浏览器支持。各程序组件间通过soap交换消息。
[编辑]
其他编程概念
[编辑]
Turing-complete programming: Brain****
[编辑]
☆Functional Programming: Haskell、Clean
[编辑]
平行处理: Fortran
[编辑]
各种语言的选择
如果编写对性能要求苛刻,或和操作系统结合紧密的程序,必然选择C。
如果编写到处可用的程序,选Java。
如果编写大程序,可能的话尽量用脚本语言如Python、Ruby,不行了再用Java和C。因为脚本语言带来了生产力。
编写文本的处理程序用Perl或Ruby。
编写知识的处理程序用prolog。
编写最灵活,最模糊的程序用Lisp。
编写office程序用vba。
编写服务器端程序,PHP、(采用自己熟悉的语言来写,例如Perl、Python、Ruby)CGI、ASP、(熟悉Java就用)JSP都是选择。
编写数据库程序用vb、PowerBuiler或delphi。
进行算法研究、设计,用Pascal。
[编辑]
各种语言的选择
如果要追求性能和程序的能力,要完全发挥操作系统的能力,使用C/C++语言是合适的。在Windows环境下用VC,在Unix-like环境下用gcc。
如果不是追求和操作系统完美结合,而只是性能,又要追求跨平台性,那么仍然选择C,但可以选择跨平台的库,如qt、gtk、fox、wxWidgets。如果要编写游戏也有跨平台选择:SDL。
如果不满意C领域标准的不统一,不满意C的容易出错,不满意C的面向对象特征不彻底。如果不在乎跨平台,Windows平台可以选择C#,mac平台可以选择Cocoa (Objective-C)。如果需要跨平台,可以选择Java。
如果需要跨平台,又要广泛的支持的话,选择Java。
在Unix-like下,最方便的工具语言是Perl,它有强大的社区和代码库的支持。
如果只作为简单应用的工具语言,Python和Ruby是更好的选择,他们的跨平台移植性好,应用也比较广泛。其中Python更适合入门和交流,长期使用也不错。Ruby是对Python不满意的另一个选择,它提供了很多额外的功能。
如果要选择一个程序的嵌入语言,原来有Lisp、Basic和Java,现在还可以选择Python和Ruby。
如果在要求动态解释执行语言,而又不想学其他语言的话,C程序员的选择是pike,Java程序员的选择是beanshell。
在Java平台,又想用脚本语言的话,可以用Python。
最正统的基于文档的语言或叫动态页面语言是JavaScript。
最专门的服务器端语言是PHP,当然也有很多其他选择。
XML语言以XUL为最着名,dtml也算一个,你自己也可以用XML作为自己特殊用途的语言。比如jedit就用XML作为一种模式定制语言。XML语言是一种比较先进的趋势,比现有的语言在特殊领域更高效。
要找容易实现的语言,Lisp和Tcl是选择。
Lisp的数据和程序融为一体的能力和自由是其他语言都没有的。现在出现了一个Lisp的现代化的变种:REBOL。
如果有基于事实的编程的需要的话,prolog和Clips是必然。
|
|