先进语言请问,现在哪种编程语言最先进?
没有先进语言,只有新兴语言,语言各有千秋的,要看你的发展方向了。
*******************
语言的深层次对比
对比的基本原则是实用为主,原理为辅。也就是说,更关注语言的工业价值而不是学理价值。
准备对比的语言包括三类。一类是常见的命令型的语言,包括过程式的,面向对象式的以及混合式的。另一类是函数式的。第三类是现今比较流行的脚本语言。明眼人能看得出,我的这个分类根本就不是学理上的分类,而是经验和感觉上的分类。 为了明确起见我把可能的语言列举出来。一类:C C++ Delphi/ObjectPascal Java VB VB。NET C# D Fortran Ada Eif...全部
没有先进语言,只有新兴语言,语言各有千秋的,要看你的发展方向了。
*******************
语言的深层次对比
对比的基本原则是实用为主,原理为辅。也就是说,更关注语言的工业价值而不是学理价值。
准备对比的语言包括三类。一类是常见的命令型的语言,包括过程式的,面向对象式的以及混合式的。另一类是函数式的。第三类是现今比较流行的脚本语言。明眼人能看得出,我的这个分类根本就不是学理上的分类,而是经验和感觉上的分类。
为了明确起见我把可能的语言列举出来。一类:C C++ Delphi/ObjectPascal Java VB VB。NET C# D Fortran Ada Eiffel COBOL。二类包括Lisp家族,ML家族和Haskell家族。
三类我准备了Perl PHP Tcl/Tk Python Ruby。
对比的方面包括:语法特征,库特征,开发工具特征,开发平台特征,人群基数,语言声望,语言基本方向,可用的领域,实用的领域,部署方式和运行时要求,语言开发的进入门坎等等方面。
其中语法特征包括语法构造的多寡,正交性,一致性/最少惊讶原则,和构造的可组合性等方面的对比。库特征主要关注一些基本的和公共的任务是否存在相应的辅助库。包括IO库(底层的网络传输也是其中一部分),FS库(高层的网络应用协议也算),数学库,图形图像库,控件库,数据库访问库,多媒体编码解码库,安全库,加密库,认证库。
它们的存在性,可获得性,丰富性,强度级别等等。开发工具的特征包括基本的代码编辑器,编译器和连接器,以及集成开发环境,其中非常基本的一项是窗体设计器。当然,相关的还有版本控制系统,建模工具和需求跟踪、缺陷跟踪等项目管理工具,虽然这些大多数根具体的语言无关,但实际上它们总有一定的倾向性。
开发平台主要是指开发工具依赖的OS平台和硬件平台,它们也非常明显的影响到语言的影响力和开发出的应用的目标平台。开发平台大致分为Windows和Linux(包括各种Unix)以及各式各样的嵌入式平台。
人群基数是一个非常重要的方面,一个语言最终的消亡是由于使用该语言的人的消亡为前提的。一个语言使用的人越多,越有潜力和生命力,越可以被修正和改进。语言的声望是一个非常主观的指标,比如大家都认为C语言程序性能好,会使用C的是牛人,而VB就等而下之了,等等。
虽然这些东西不影响语言的特征,可它们影响语言的生命力。语言的基本方向包括科学计算,商务应用,系统程序,人工智能以及基本算法等等。语言的可用的领域主要是语言在理论上可以适用的领域。而实用的领域是指它们在现实中所占据的地盘。
部署方式和运行时要求影响了很多选择,比如嵌入式应用中可能我们就不能期待大的运行时存在等等。很明显的,Java,C#有非常清晰的运行时存在,各是JRE和CLR。另外,各种脚本语言一般都有自己特定的运行时。
而J2EE应用的部署明显比别的应用部署复杂的多。这个方面主要考虑部署的难易程度,运行时的大小,在各个平台上是否有相应的运行时存在等等。语言开发的进入门坎主要包括其开发工具和运行时是否容易到手,是否有比较好的IDE,是否免费,是否开源,价格是否比较低,安装是否方便等等,这是给新手设置的一个基本门槛。
一个语言如果阻止了新手的进入,那么这个语言的前途就不怎么光明了。
//——————————————————————————
语法方面:C的语法构造比较少,有限的几种是:struct union enum等类型定义,函数定义,指针和数组派生类型,变量定义,三类(顺序、分支、循环)基本结构构造语句,各种繁多的运算符以及特殊的赋值,其中全局可见的只有类型、变量和函数,函数内部可以拥有除了函数以外的任意构造,但是,对于函数的返回值类型有限制。
总之,C是语法简单,一致性较好,相对正交,基本可以任意组合的语言。
库方面:C语言的标准库很少,除了基本的IO库以外,就是低层次的memory和string操作的库了,还有一些非常基本的数学库。
剩下的文件系统相关的(包括ftp,nfs,http,smtp,pop等高层网络协议)库不存在,图形图像处理的库也不存在。控件库,数据库访问库,多媒体编码解码库,安全库,加密库,认证库也都不存在。
不过,它们都可以通过非标准C库来获得,著名的OpenGL(我没有说DirctX是因为他是COM库,C用起来不舒服,而没有说QuickTime的原因完全是因为我不太了解它)就是工业界标准的图形图像处理库。
gtk+就是跨平台的控件库。数据库访问库当然就汗牛充栋了。编解码库(著名的如Intel的IPP,低层次的基础库)也非常多是C库形式存在的。另外别的类型的库也都存在,而且跟C语言的结合比较自然,跟C语言以及标准C库的感觉一样,因为它们大都是C写的。
总之,C标准库非常少,但是扩展库很全,不至于造成某些壁垒。
开发工具方面:C语言的语法特征比较少,可以完全记在脑子里,所以编程序的时候不太依赖于辅助工具,当然,能够提供指示库接口的开发工具仍然是受欢迎的。
C语言典型的开发工具在Windows平台上有VC系列和BCB系列,其余的还有DevCpp系列。在Linux平台上自然是Gcc和Gdb打头了,不过由于我更注重代码编辑器,所以我还是说说这方面。总体来说,我觉得VC的Code Editor比较舒服,尤其是最新版的VC2005,Linux平台上emacs和vi都是很好的编辑器,不过它们都需要定制才能达到VC code editor的级别,这对新手又是一个困扰。
关于IDE,Windows平台上的不变,Linux上也有很多,比如Kylix3,KDeveloper,Aujuta,Eclipse+CDT,……我觉得其中Eclipse系列的是感觉最好的,但是若要论起来FormDesigner,Eclipse+CDT还需要复杂的定制,Windows平台上的VC也不怎么地,比较好的反倒是BCB,不过其底层支撑机制是ObjectPascal,除了问题很麻烦。
总体来说,由于C发育的比较早,那时候还没有太好的IDE发展出来,而现在的IDE又很少是面对C的,所以C的IDE不怎么好,但是应该说C的基本工具(编译、调试)都是高度优化的。这给新手进入造成困扰。
//————————————————————
语言方面:java在语言方面最大的看点就是去除了C++中所谓的危险的元素。例如宏,例如多继承,还有指针,取而代之的出现了引用(当然C++里面也有),和自动的资源管理机制(虽然为人诟病)。
刨除了危险元素之后,Java保留的语法和C++差不多。另外,Java添加了一些自己的语法,例如instanceof ,而这样的关键字的出现完全归功于Java本身库的单根类管理机制,这样的管理机制使得RTTI更加的完全。
使得我们通过一些特定的信息就可以动态的生成对象,例如我们可以通过一些配置文件来控制一个Java程序使用什么样的对象,而不用重新编译代码。当然这样的特性也使得效率大大的降低,但是相对于硬件高度发达的今天,这样的损耗几乎可以忽略(个人在机器上面运行eclipse一点也没有延迟感。
)
库方面:java在库的丰富程度上面可以说不容置疑,而设计也是非常得紧凑,一个开发者可以轻松的从Java的库上扩展出自己的代码。Java提供了2D图形,3D图形,界面库, 数据库接口,网络,完善的正则表达,以及完整的Dom甚至对于设计模式,都提供了统一的接口来等着你去实现,可以说在Java的世界,你几乎可以不用重复造任何的轮子,只要你把精力集中在你要做什么上,就可以。
顺便说一句,这些库都是非常高效的,至少我用起来还没有遇到过什么效率上面的问题。
开发工具:Eclipse大有一统天下的姿态,里面的插件不胜枚举,从代码设计到开发到维护,Eclipse框架可以一并帮你完成。
至于他到底能做多少工作,我想你应该看看eclipse的网页才能完全知晓。
//————————————————————
Lua
1。 简单的语法
2。 简单易用的api以及与C的良好的结合性,使其的可扩展性非常良好
rst-classfunction的特性,让Lua更加易于使用4。
由于2,与其他任何语言的结合,可说是非常简单
5。 提供了丰富的标准函数库后,整个VM的大小(除开库)才 100K左右
6。 Lua Implementation中写到,使用了极为精简的代码实现了词法闭包,递归尾调用等特性。
7。 广泛应用于各种游戏
lisfree
缺点就是:
1。 目前使用得极为顺手的编辑器,就只有emacs,不过 上提到的IDE看上去个个都不错
2。 单有emacs的情况下,调试困难,还得自己些line hook, function call hook等,我想其他IDE应该可以
//——————————————————————————
我还是说说lisp吧。
小雨上面说了lisp全是函数,基本上是不错的。
lisp的语法是广义表。一对括号表明一个广义表,用空格隔开其中的项,每一项都可以是原子项或者是另一个表。直观的感觉就是:
(a (b c) d)这样的东西。
其中几乎所有的list都是(operator operand 。。。)这样的结构,大家看看,这个汇编语言很像,不过就是加了括号而已。而且,其中无论是operator还是operand都可以是一个表。
我想这就是小雨所说的都是函数的意思。有些人说这个C很像,除了括号连函数名都包进去了别的都一样,还是比较传神的。
lisp语言族系的特征在于high-order,也就是说,其operator本身可以是list。
((if (> 3 8) + -) 22 17)
注意看这儿第一个operator,它是一个list,其返回值是operator。
另外,由于list是strict语言,也就是说,其所有的operand在运用operator之前都会被求值,而这在某些场合是不能用的。
比如:
(if cond thenPart elsePart)
如果cond,thenPart和elsePart都在if运算以前就求值,那可就麻烦了,所以,Lisp语言还有一些所谓的特定形式,不再是通用的函数形式了。
当然,其语法不变。语义不同而已。lisp的特定形式非常少,据我所知,scheme(lisp的一个变种)才有7种特定形式。
//————————————————————————
Delphi是较早实现所谓智能数据的语言,并在语法层面上实现了COM接口的编译器支持,而且由于编译器的支持,Delphi语法层面上就支持了工厂类(每声明一个类,那个类名本身就是一个参考类,可看作工厂类),而且靠编译器的帮忙,实现了反射与消息转发等不少动态语言才拥有的一些高级特性。
在现在纯编译语言中,能做到这几点的实在不多,难能可贵。而这些特性的出现,一切都是以实用为主而产生的。
JavaScript本身就是一个很方便的动态语言,不过由于他老头Java的限制,使得如楼主所说,很多地方有不少沉余的语法结构,显得很繁琐,JavaScript是我所接触的第一个动态语言,其基于原形的编程模式,强大的函数对象以及动态编译,将数组,字典与面向对象的实现原理给统一起来了(还是基于原型)
PHP自带了很丰富的库,也许是为了迁就一些学不会C++的人的虚荣心吧,对象成员调用用 -> (#-_-)其他的就和JavaScript看上去差不多,但是对于动态语言特性的支持不如JavaScript。
VB是我接触的第一门计算机语言,在初一那我只会VB的年代,由于VB的简易与快捷,甚至曾让我想过世界上还有什么程序VB写不出来呢?不过当对编程语言的了解更加深入后,发现VB的语法很多地方其实是很弱智的,例如AddressOf取函数地址,你可以取到后将值传递给一个函数参数,但是你却不能传递给一个变量。
但是当我高中的时候自己尝试写了一个半编译半解释型的基于XML的脚本之后,我才发现VB的AddressOf其实不是简单的取地址。VB支持接口继承,但是却不支持类继承,这一点初中倒是曾让我迷糊了许久。
XSL,其主要目的就是展示XML数据源所包含的信息以及提取更多信息的,但是却是和具体展示语言无关的(例如可以转换成XHTML,或者其他的XML格式)。所以本身意义并不在如何呈现数据,而在对数据的如何处理,既然是一个专门用来对信息进行提取与挖掘的语言,那么不加入一些其他语言所使用的特性倒是很自然的。
例如这种语言的循环只有for-each,if结构没有else,模版(函数)可以不要名字,调用一个复杂的模版参数信息可能达到1K (#-_-),对于新上手很不爽。
//————————————
根深入请看
。
收起