我所感兴趣的编程语言 以下是我感兴趣的编程语言 为了加深对各种语言的印象,所以我打算简单的介绍一下,直至2008年6月末为止,我所感兴趣的这些语言方面的关于知识。 首先出场的是: ##################################################### C 语言。 C语言是在 B语言的基础上发展出来的,自从C诞生后,B语言就几乎再也没有人使用了,而事实上B语言的语法关键字等等的内容,和C语言是非常接近的。 C语言诞生之后,与当时的许多语言相比,其简洁高效取得了绝大多数的程序员的喜爱,迅速成为了最主要的编程语言之一,虽然在很多方面还无法和汇编语言相比,毕竟汇编语言是最基层的语言,是直接与机器沟通的语言,但是汇编在开发软件时候的低效,也是有目共睹的,C很好的解决了这一点,而且硬件的发展迅速让这一点点的速度差距保持在完全可以接受的范围内,至今天为止,C语言还是一门非常高性能的语言,而在此提醒一下,汇编语言的执行速度和C相比,汇编语言所写出来的程序比C语言所写出来的程序运行速度快上10倍不止,由此可知汇编语言是一门多么高效的语言了,也因此许多许多的病毒,都是以汇编语言来编写的,它们运算的比c程序还快,所以威力惊人;并且我们可以由此而知硬件的发展速度是多么的迅速,竟然可以忽视10倍的运行速度差距,如今我们的所有操作系统几乎9成9的部分都全部是C写的。 而在以前,虽然程序是C写的,但是驱动却还是需要靠汇编语言来编写,而到了今时今日,硬件的运行速度提升到了驱动已经可以用C++来编写了,C++比C所耗费的运算资源更多呢。 C语言有32个关键字。完整的叫法是ANSI C。 ################################################### C++ C++比C语言多了将近一倍的关键字,而C其实已经足够用来写任何一种程序了,但是C++的优势何在呢?就是他提供了一种节省开发时间的方案给编程人员,要我举例子的话,就像是C是最基本的纸笔,有了这些完全足够你写出最好的文章来了,而C++则是老式的打字机,他让你可以用写的更快更方便的方式去写程序,而不用一个字一个字的去写。这就是面向对象的能力。 语言是会进化的,用进化这个词来说不太恰当,是使用者在使用的时候,会发现其不足之处而透过官方或相关的协会来对官方标准的版本进行新的修改。正是由于这种进化,特别在TurboC++和VisualC++等等,种种千万因素下,C++语言其实已经是完全独立于C之外的语言,即复杂而且版本由多,成为了其中一种最复杂的语言之一。 ##################################################### Pascal Pascal是一个语言,发展到今天,基本上只还运行于一个叫做Delphi的开发环境下,也因此,很多人都以Delphi来概括了Delphi的开发环境和Pascal这个语言了,在最近,Object Pascal语言也正式改名为Delphi了。不过Pascal和Delphi语法还是有差别的,Delphi语法指在Delphi开发环境下的Pascal语法,与传统的Pascal语法差距不大。 各种语言都有其强大的部分,我并未深入涉及,完全无法做出评价,简单来说都是为了追求更好的人机沟通而各出奇谋,不是有独特的面向对象能力,就是有抽象的类能力,等等。所以造成了千万种编程语言的诞生,在1983年,所知的语言就有500多种,直至1998年,在ADA计划下,才将这些语言浓缩到剩下了大约37种的精简数量。所以与其说明每种语言的差别之处,那是我力所不能及的范围,我能说的就只是最近观看了不同的文章所知道的一些初步知识。 如果说C和C++是应用的非常全面,囊括几乎所有领域的语言,那么Pascal的应用范围主要集中在描述数值和非数值的问题上,至今还是国际信息学奥林匹克竞赛中最受欢迎的编程语言之一。 ##################################################### COBOL COBOL虽然拥有ANSI标准,但是很少被遵循,于是可移植性不高。 COBOL是世界上第一款商用语言,是最早的高级编程语言之一。 COBOL非常重要。 COBOL的重要性可以毫不夸张的这么说:世界上70%的数据都是用COBOL处理的。 COBOL的重要性2:90%的ATM事务处理都是COBOL语言经手的。 对COBOL的投资金额已经超过了3万亿美元,书写的程序超过了2千亿行,如今每年以大约50亿行代码的速度在增长。 由于其在商业领域的雄厚基础,主要是应用在银行、金融、会计等等重要的商业数据处理的领域。它适合在具有循环处理周期的环境和数据操作量极大的环境里工作,比如打印工资支票等等,虽然COBOL的语法和英文很接近,不懂的任也能看懂程序,但是COBOL始终是一种功能很强而且又极为冗长的语种。 COBOL和我们所处的数据环境是相依相生的,只要大型机持续存在,COBOL就不会消失,即使是当年对电脑界影响深远的千年虫bug,也没有改变COBOL的命运。 ###################################################### LISP LISP是一个拥有众多方言的语种,比较有代表性的是Common Lisp和Scheme,虽然LISP不像C/C++这样对大众来说比较耳熟能详,但是LISP却是第一个函数型的程序,大名鼎鼎的黑客文本工具Emacs就是用LISP编写的。 至今,我们还能用LISP来给这个闻名遐迩的文本处理工具添置自己的个人喜好的设置。 ###################################################### FORTRAN 它是最古老的高级编程语言之一,发展历史经第一代的FORTRAN,第二代的FROTRAN II,到如今的FORTRAN 2003,已经经过了10次左右的演变进化,也是世界上第一个正式被采用的高级语言。 如今的FORTRAN,具有面向对象的功能,指针,等等高级语言所需要具备的一切条件。他最大的特点就是接近数学公式般的自然描述能力,而且在计算机里具有很高的执行效率,相对于其他的语种来说,FORTRAN是一种语法严谨,但是易于学习的语种。 而且由于其诞生的历史悠久,因此本身累计了大量高效又可靠的源程序,基本上FORTRAN的主要应用领域是并行计算以及高性能计算的领域。你可以说FORTRAN是一门用于科学计算的语言,那很贴切,并且它完全可以在Windows操作系统和Linux操作系统下完美的运作。 ###################################################### ADA ADA最早就作为美军的研发计划之一而诞生的,目的是要兼容整合美军数据的所有庞杂语言,发展至今,也成功的将198N年编程语言约有500多种的数目,浓缩到了199N年所统计的37种,可以说是对精简语言的流派做出了很大的贡献。 当然至今的语种数量肯定有些微变化,我这篇文章收录了30余种我所感兴趣的编程语种,而且还仅仅是简介,由此可以知道,当年的500多种语种代表了多么混乱的一种电脑语言的格局。 ADA的功能非常完善,而且安全和高规格,它虽然类似于Java语言但却不同于C语言,主要被广泛应用于那些对程序的严格性要求非常高的领域比如航空电子学,武器,航天飞行器的操作系统中等等的领域。 ###################################################### APL/A+/K/J APL这门编程语言,一般编程语言采用的是ANCII字符串,APL采用的是具有更多特殊字符的Unicode字符,但这却是大多数人对这门语言的批评点——“难以与其他的ANCII编程语言配合。” 不可否认,带有unicode字符的APL正是因为拥有更多的特殊符号,因此深得数学家的喜爱,但是为了更好的与其他的编程语言配合,后来诞生了ANCII版本的APL语言就正是A+语言、J语言以及K语言,他们都继承了APL语言的特性,并且使用的是ANCII字符,但是就我个人而言,我却是迷上了APL的unicode字符的魅力。这些字符让编程语言起来更加的直观了,这是因为,他最初开始的设计目的,就是想让数学的公式能成为电脑所能理解的一门编程语言,有人开玩笑说,用两行这样的奇形怪状的符号就可以将所有航空控制的问题解决了。 也因此,传统的电脑键盘在输入这些特殊符号的时候就会显得力不从心了,因此APL本身其实拥有一套自己的键盘系统,而由于使用者趋向于偏门,因此这套键盘注定不会普及。 如今APL在许多领域还是拥有其独特的魅力,如:数学、科学、工程技术、电脑领域、机器人、保险技术、传统的数据处理等等。如果你熟练了他之后,你会很喜欢这些特殊符号的,但是除了你之外,别人要读懂你的代码就显得非常困难了。也因此有说:数学家觉得APL很好懂,程序员却觉得APL很难懂;反而数学家认为其他程序语言很难理解,而程序员认为其他程序语言更易于理解。 我个人非常喜欢APL的语言符号,有点到了迷恋上的地步,对我来说他太有意思了,虽然对别人来所,代码的可读性方面就会显得有点难度了,这也就是为什么APL被戏称为只写语言。 ###################################################### Perl Perl是一门极其活跃的一门语言,关于他的评论太多了,所以我只说一些我初步的理解,首先,Perl的语法自由度非常大,同样的解决方法无论是以动词式的写法还是被动词式的写法都可以达成,其实,他也拥有了很好的语言描述能力,这点可以在一件事情上证明:“同样的题目,所写出来的代码量可能差距是几十倍到几百倍以上。“这点证明了Perl允许程序员用其所能理解的方法来解决问题,而不是非要依靠算法的能力来解决问题。 无可否认,这会给大多数的程序员带来方便,无论你是一个极其精通算法的数学家,还是一个对算法一知半解的代码工,你都可以用你自己的理解,来给题目写出解决方案的代码,即可以写得向Python一样简洁,也可以写得像天书一样繁复。 Perl是如何做到这一点的呢,那是因为Perl的发明人本身也是一个语言学的专家,他在Perl里面加入了各种各样的编程语种的特性,正是因为这样,Perl是代码风格极度多元化(甚至可以以混乱来形容)的一种语言,而这些让Perl的语法非常丰富,甚至有Perl Poetry比赛,这个Perl诗句大赛在Perl界里可是响当当的,以那些难以读懂但是又能确切执行的代码来参赛,编程语言竟然能够写得像具有哲学概念的诗词那样的程序,Perl的语法可谓兼容并且表达了人类语言学的抽象与计算机编程的理性,是符合自然语言思考体系的一门编程语言。 不过Perl也以难以读懂代码著称,被戏称为只写语言,难以让第三者读懂,甚至写作者本人在半年后也读不懂自己的代码,因此非常难以维护,而原因有好几种,在Perl里可能会见到C语法和Pascal语法并存,如果你不懂Pascal语法,那你就很难读懂代码;又或者你使用了对你而言非常感性的写法,让第三者难以理解你的思维角度,种种的原因等等,都是让Perl成为了一门极独特的语言的原因,有人认为,C语言等语言只能算是中高级语言,而只有Perl和Python之类能完全以抽象描述程序的语言,才能算是和人类自然语言同样等级的电脑高级语言。 ###################################################### Python Python这门语言,向来以简洁著称,我有点懒惰给Python写评语,或许是因为我接触的第一个编程语言就是Python,也可能是我感悟中的Python精神和Unix精神似乎是一样的,也或许是因为Python是一门高级语言,但是也可能是一门残缺的高级语言。为何我这么说呢?因为Python的精神是:做一件事,并且做好,用最健壮直观的方式去完成一件事情,老鹰飞翔的时候可曾考虑着地的事?老虎捕食的时候可曾担忧过腾空的刹那?Python在执行一件任务的时候,即可说是全面,但也可说是专注。他能以动态编程的方式,轻易并且简单的完成对其他高级语言来说是非常繁复的任务,有利于维护,并且能编出稳定性高,功能强大的程序,这些都是Python的优点,在很多角度来说,Python是没有缺点的一门语言,而我认为我们应该这样形容Python,他是一门没有缺点,但是有遗憾的语言。 我会这么想的原因在于,Python没有明显的缺点,他能完成许多许多的高级任务,而且他拥有非常全面的函数库,可以完全绝大多数常用的任务,但是对我来说,非常遗憾的是,他并不是完美的语言,抽象不如Perl,效率不如汇编,管理不如C,等等,他的长处在于高级程序所需要的健壮性以及专注性,用户或程序员可以以几个功能叠加来完成任何能想到的创意,但是往往在指定的环境下,无法完全依靠他来让机器发挥出百分之一百的性能,也无法充分的玩弄抽象手段;或许期待很高,所以要求也高,这对我来说就是一个遗憾。 ###################################################### Ruby ”Ruby就是没有到处打广告的Perl6。“,我认为这是很贴切的比喻,虽然我并没有真正尝试过哪怕是一句的Ruby语句。 Ruby是日本人发明的,在2000年正式登入美国之后才开始拥有了大量的英文文献,以这个速度来说,Ruby的发展速度可谓惊人,这都多得于他的优秀。由于Ruby是日本人发明的,因此Ruby在日本拥有大量的用户(当然在国外也非常多),而Ruby的设计理念是:这是一门为”人类“而非计算机设计的语言,人类是主人,不应该让人类难以理解Ruby,而计算机是仆人,只要为主人服务就好。 我还没有真正的接触Ruby,所以这部分不好写下去,就到此为止。 ###################################################### Tcl/Tk Tcl是一种命令式的编程语言,说是语言其实不如说是工具,他的编程方法主要是以一个接一个的命令来执行,对Tcl来说,就连if、for这样的关键字也是命令。 Tcl主要的强大之处还是以它丰富的拓展包为主,它拥有大量的拓展包,能运行于任何平台,更可在其他语言的基础上进行拓展,所以它是一个功能性非常强大的”语言工具“ Tcl的经常被应用于大大小小的种种方面,无论是程序快速开发原型到测试GUI界面等等它都能胜任有余,或许可以这么评价它吧:它是正式编程语言最好的助手工具。我对它有很大的兴趣。 ###################################################### Lua 这是另一种类Tcl的语言助手,但是设计理念却有本质上的差异,Lua的目标是成为一个很容易嵌入其他语言的语言,而大多的程序员也认为他确实做到了这一点,特别在游戏领域,很多应用程序都使用Lua来作为嵌入式的脚本语言,Lua的优点在于体积小,启动速度快,它的核心和库,在编译后也只有100多K的大小,所以可以很方便的嵌入其他语言内。 所以我认为它和Tcl一样,是属于正式编程语言的一种助手语言。 ###################################################### BASIC BASIC,我这里指的BASIC主要可以分为2个支别,一个是传统的由FORTRAN语言编写出来,给当时的大学生学习的高级语言,以及后来由微软M$公司发行的VisualBasic。 一般来说当我们说到Basic的时候,下意识的都是先想到VB,BASIC这个语言拥有很多分支,只有到了后来被广泛应用于微软的各个层面之后,才成为我们如今所普遍知道的VB,如今的VB,还完全的兼容了.NET的特性,是一个应用层面非常广的语言。 我还记得中学的时候,学校的课程有BASIC的课,当时根本学不懂,叹道:”BASIC语言根本一点都不BASIC!“,事实上也是如此,在BASIC发展出来的时候,相对于其他的语言,BASIC容易上手的多,但是在如今的社会里,BASIC完全可以算是一门很复杂的语言。谨此。 ###################################################### Forth 虽然对这门语言的接触不久,仅仅从Forth的追随者的帖子上了解了这门语言,但是我还是很乐意接受”Forth“是一门人机一体的禅思维的编程语言。 对我来说,关于Forth的资料不多,但是我很愿意下点苦功去学他,Forth的追随者说,Forth是一种人机一体的语言,在编程的时候概念上一定要有一台逻辑上的机器,可以是实际的芯片也可以是虚拟的,听起来很矛盾吧,但是这种逻辑思维正是却正是Forth的禅中,人机一体的根源。 Forth擅长数据搜集与处理、图形处理、专家系统,以及实时流程控制等等的工作,早期80年代至今,一直都是广为天文学界所使用的一门语言。早期Forth是为小型的嵌入式电脑设计的,现在它已经可以使用在几乎任何的主流芯片上。 ###################################################### Haskell λ(lamba,希腊字母) 是Haskell的标志,象征着数学的函数。 Haskell是一门纯函数式的编程语言,这代表了其无与伦比的处理数学逻辑问题的能力,坦白说,我完全看不懂他的语言,但他又是当今用于研究时最被广泛使用的语言之一,这挑起了我的好奇心。 我很想一探究竟,明白一下,到底用于研究的语言,是为什么会被用于研究,以及它是如何运作的,它究竟代表的是什么思维方式。 ###################################################### SmallTalk SmallTalk是一门有点神奇的语言,使用他的程序员都拥有一种独树一格的思维方式,其中一个Smalltalk程序员发明了wiki,一种网络上的超文本协议,是当今用得最广泛的一种网络百科全书系统。而且Smalltalk的思想深深的影响了无数的语言,许多语言从开发思想,设计构思,敏捷编程和重构的角度上受到了启发,可以说Smalltalk对众多的程序设计语言起到了巨大的推动作用。 他也是历史上第一个真正的集成开发环境(IDE),第二个面向对象的程序设计语言。他拥有一个巨大并且相当标准的库,以及一个应用开发环境,还有许多强大之处,这些都让Smalltalk成为一个非常优秀的高度集成开发环境,使用Smalltalk的开发效率非常高,对Smalltalk来说,所有的东西都是对象,并且被当作对象来处理。从这点上来说,Smalltalk是一个让思维极度拓展的一门传奇语言。 ###################################################### 汇编语言 汇编语言是低层机器语言,细节我也不清楚,但是我知道几点: 1)汇编所写成的程序,执行速度比C语言写的程序快10倍左右。 2)所以很多病毒都是汇编写的。 3)不同的机器,可能汇编语言有不同,但是基本的大致的类别是80x86,ARM,MIPS。 4)当今的语言大多都可以写汇编,但是BootLoader这样的启动器还是得依靠汇编语言来写,无法完全靠C去编写。 5)写驱动还是靠汇编语言的多。 6)高要求的程序优化也需要汇编的应用。 总的来说,电脑的本质是1和0,而汇编则是透过组译器,将汇编指令分解成多个电脑可以理解的微指令,是属于低层直接操作硬件的语言,我不是很清楚的猜想,或许16进制比1和0高级,而汇编比16进制更高级,然后接下来才轮到C,越低层就越难理解,而汇编则是恰好是人类能理解并运用的知识吧。 ###################################################### Ruby on Rail (网络) Ruby on Rail 是应用Ruby语言于网络上的一种网络应用架框,它努力让自身保持简单,让实际开发的代码精简,尽可能的使用最少的配置,它的设计原则是,不要重复自己以及成规是自己订制的。 ###################################################### ASP(网络)(M$公司的服务器脚本平台) ASP是微软公司开发的Active Server Pages,运行于服务器的脚本平台,它能透过ActiveX server的技术让不同的使用者有不同的画面,并且进行所需的存取数据资料。 ASP是一种很优秀的设计,无论是管理数据还是撰写网页,都非常方便,同时它也能让设计者像HTML一样预览ASP的网页,因此设计者不用担心程序和服务器不能沟通的问题,而ASP比HTTP更容易管理匿名的访问,这也是ASP令人称赞的地方。 和HTTP的直接在浏览器上执行不同,ASP是先在服务器执行了一遍后才将数据发送给用户,这能大量的节省用户的资源,但也因为这样,所以ASP的执行速度比HTML页面慢,而且不排除黑客能利用漏洞窃取ASP源代码。 总的来所,ASP始终是一门很重要的网络技术。 ###################################################### JavaScript(动态网页技术) 首先,JavaScript的语法接近Java但是不是Java,Java也能当作网页的程序语言,但是两者丝毫不相干,值得一提的是,虽然JavaScript是设计给”非编程人员“使用的脚本语言,但是却还是一门非常复杂的语言,这很矛盾。 不同于服务端的php和asp脚本语言,JavaScript是用户端的脚本语言,也就是说JavaScript可以独立在浏览器上运行而不需要透过网络取得服务器的支持。 JavaScript有些内部因素导致了其执行速度较慢,比如它是一门解释性语言,以及其解译方式等等。 ###################################################### ActionScript (Flash) ActionScript是Micromedia公司的脚本语言,用来编写Flash程序为主,和JavaScript一样隶属于ECMAScript的标准,他们的分别是,ActionScript的主要应用是在于编写Flash,而JavaScript的主要应用是在于动态网页设计。 ###################################################### PHP (动态网页脚本语言) 全名叫做PHP Hypertext Preprocessor,是一种电脑上的脚本语言,主要是设计成处理动态网页,目前在全世界的范围内获得了极广泛的应用。它是一种服务器端的脚本语言,它的语法则是参考了C语言和Perl语言,而且可以整合在HTML之中。 总的来说,PHP的普及度是有目共睹的,我应该要掌握这门语言的。 ###################################################### PowerBuilder (数据库) PowerBuilder简称PB,是很著名的一款数据库集成开发工具,目前的最新版本是11.0,并且从6.0开始也能够应用与web网络上,并且能够支持绝大部分的常用工具比如.Net等等。是一款非常主流的数据库开发工具,也可以说是必须要掌握的一门数据库语言。 ###################################################### SQL (数据库) 全名为Structured Query Language结构化查询语言。SQL是ANSI所公布的标准数据库语言,它是高级的非过程化编程语言,拥有灵活度非常大的数据管理方式,对SQL来说,一个语句可能就足以完成一个庞大的任务,也因此这意味着SQL语言是一门可以写得语句非常复杂的语言。SQL是一门必须掌握的语言,因为它并不只是一门非常全面高效的语言,而且它的普及率也非常的高。 ###################################################### XML (网络文本语言) XML的前身是SGML,SGML的前身是GML,是一款自1960年就发展至今的语言,主要XML被用来取代html的原因在于,HTML的性能不高,无法解释许多资料比如影音档案或化学公式、音乐符号等,扩充性弹性等都具有不够充足的灵活性,XML是在专家们的期待下诞生的一种语言,我对它的了解并不多,但是我相信一个真理,专家们往往敌不过时代的潮流,html还没有被xml取代,往往伴随我们的,不会是最好的东西,最好的东西通常都只是聪明人才会发现的东西,而我也相信专家们的脑袋肯定比时代的潮流还聪明,xml一定有可取之处,所以我很乐意学习xml。 ###################################################### Scilab (科学计算语言) Scilab是一个开放源码的科学计算软件,与Matlab类似。他们的前身都是由同一个人编写的。 ###################################################### MatLab (科学计算语言) Matlab可以说是最强大首屈一指的数学软件了,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。 Matlab透过工程人员比较容易理解的方式,借助积木般的构建和解决问题的方式将目前工程和科学界重要的问题通过软件制作成工具包,这是Matlab的实际应用,但是它最强大的地方却是在于很多科学界不断的给他完善一些工具箱,而这个工具箱正是Matlab最核心的东西,他能让你进行无与伦比的解决问题的捷径。 这是一款必须要掌握的软件! ###################################################### MATHEMATICA (科学计算语言) MATHEMATICA也是目前使用最广泛的数学软件之一,它的特性之一:一个个的运算单元,减少计算的错误 ,是我看着就觉得很喜欢的一个特性,可惜关于他的理解,我实在理解的不是特别深刻,所以不敢给予太多的评价。 ###################################################### UML (统一建模语言) 我不是真的非常明白UML到底是什么,他有点像Visio,能够给出图示,并且他是一个很独特的集成开发环境,但是他是一门语言吗?我搞不懂,我想只有迟一点我用他来尝试工作的时候我才会明白吧。 ###################################################### OpenGL(三维材质编程语言) 全称为OpenGL Shading Language,或称为GLslang,是一款高级着色语言,它以c语言为基础,由OpenGL ARB所建立,让开发者对绘图管线得以执行更直接的控制而无需使用组合语言或硬件规格语言。对我来说,这是非常重要的一门语言,他将对三维绘图产生莫大的帮助。 ###################################################### HLSL(三维材质编程语言) 全名叫做High Level Shader Language,是微软开发的一款高级着色器语言,不能与OpenGL兼容。 ###################################################### 写于吉隆坡 2008年6月27与28日