计算机程序设计语言发展与比较郭东伟吉林大学2010年3月18日byskywind1目录程序设计语言的发展史不同类型的程序设计语言当前流行语言分析国际上国内语言间的对比C++vsJavabyskywind计算机语言用于人与计算机之间交互的语言。是人与计算机之间传递信息的媒介。程序设计语言低级语言高级语言专用语言命令语言作业控制语言SQL描述语言HTML、XML2byskywind3编程语言分类低级语言-汇编语言函数式程序设计语言逻辑程序设计语言通用程序设计语言面向过程的程序设计语言面向对象的程序设计语言byskywind4计算机编程语言谱系图byskywind5古典时代FORTRAN第一个高级语言,主要用于科学计算ALGOL58/ALGOL60严谨的现代语言的鼻祖之一在20年间,成为出版刊物中的唯一语言主要贡献:BNF没有得到广泛实际应用COBOL商务记录处理byskywind6中世纪-1:过程化语言逐渐成熟BASIC(1963)第一个结合分时操作,简单易学的语言PL/1IBM为主设计的一个通用语言结合ALGOL,FORTRAN,COBOL既一些其他新特性的通用语言第一次提出:并发机制、异常处理、过程化递归、指针过于复杂,部分成功Ada历史上最大规模的语言设计(美国军方)byskywind7中世纪-2:ALGOL的后继Pascal成功的教学语言DelphiC语言与unix共同成长简单、高效、相信程序员目前系统级程序设计首选语言byskywind8工业时代的开始SIMULA67数据抽象的开始,第一次提出classSmalltalk真正的面向对象程序设计语言(数据抽象、基础和动态绑定)图形化的交互语言(系统)特点万物皆对象,包括控制流使用消息在对象间通信byskywind9工业时代C++继承了C语言的灵活特征仍然强调效率从Eiffel到D语言Java从嵌入式编程过渡到web应用更加严谨的面向对象机制C#与微软的dotnet紧密结合byskywind10后工业时代脚本语言unix系统脚本语言Perl、Python、Ruby、Lua动态类型语言WEB服务器开发语言JSPPHPASPWEB页面端开发语言Javascriptbyskywind几种现代流行语言谱系11C语言C++JavaC#VBAspJSPPHPPythonPerlRubyPascalDelphiObjective-CJavaScriptAsp.NETBasicbyskywind12函数式程序设计语言LispLogo、Scheme、CommonLispLisp特点万物皆函数基本数据结构:表基本控制流程:递归解释语言主要用于人工智能,也可用于各种其他用途byskywind13逻辑程序设计语言Prolog1970’s在1980’s日本人工智能计划时得到关注特点基于谓词演算,给出事实和规则实现定理证明只需要说明问题,无需指定流程SQL在一定程度也有这种特点byskywind过程式语言的基本特征变量、作用域和生存期数据类型(记录和指针)表达式与赋值语句控制流(Gotoisharmful)子程序与递归异常处理14byskywind15解释性语言vs.编译性语言执行流程性能目前计算机硬件的发展使得解释程序的性能代价在很多场合可以忽略跨平台性:解释程序与虚拟机灵活性自解释运行时修改、创建程序自执行目前解释性语言的应用比例逐渐提高byskywind静态类型语言vs.动态类型语言变量的数据类型是在运行前静态确定的,还是运行时动态确定的,称之为静态类型语言(StaticallyTypedLanguages)和动态类型语言(DynamicallyTypedLanguages)动态类型语言具有更大的灵活性,很适于写出通用程序。而静态类型语言很难做到这一点(如C语言中void*和C++中的模板)。动态类型的缺点在于发现错误的能力较差、运行代价高包括面向对象中的多态类的判定。16byskywind动态语言一类在运行时可以改变其结构的语言:例如可以动态执行生成的代码,产生新的函数、对象定义、已有的函数可以被删除或是其他结构上的变化等。ECMAScript(JavaScript)是一个动态语言的代表,除此之外如PHP、Ruby、Python等也都属于动态语言。动态语言是一种可“自创造”的语言,典型的都有eval这样的语法要素。17byskywind关于类型的几个概念动态语言大部分是动态类型语言动态语言和大部分动态类型语言都是解释执行的,但解释语言不一定是动态语言(Basic),也不一定是动态类型语言(Java)。静态类型语言可以是“强类型的”或是“弱类型的”可以在兼容类型(包括类)之间进行隐含的或显式的类型转换,部分语言可以进行强制类型转换。18byskywind19脚本语言介于文本描述语言(HTML等)和高级编程语言之间一般都以文本形式存在,类似于一种命令最简单的脚本语言就是配置文件执行过程脚本语言是一种解释性的语言脚本语言一般都有相应的脚本引擎来解释执行脚本语言主要指该语言面向的开发环境,脚本语言一般局限在某一个特定环境。编程语言的语法和规则更为严格和复杂,脚本语言相对灵活byskywind语言关注情况排名PositionMar2009PositionMar2008ProgrammingLanguageRatingsMar2009DeltaMar2008Status11Java19.797%-1.69%A22C15.862%+1.00%A35C++10.357%+1.08%A44PHP9.485%-0.41%A53(Visual)Basic8.285%-3.32%A67Python5.185%+0.42%A78C#4.321%-0.19%A810JavaScript3.607%+1.27%A96Perl3.419%-2.79%A109Delphi2.710%-0.09%A1111Ruby2.601%+0.74%A1212D1.809%+0.62%A1313PL/SQL1.042%+0.06%A1422Logo0.964%+0.65%A-1514SAS0.796%-0.15%A1617Pascal0.733%+0.29%A--1729ABAP0.638%+0.49%B1826RPG(OS/400)0.585%+0.41%B1921ActionScript0.481%+0.17%B2018Lua0.480%+0.09%B资料来源:主要依据:搜索引擎byskywind21语言关注情况分析年趋势22byskywind23一些其他比较数据CategoryRatingsMarch2009DeltaMarch2008Object-OrientedLanguages55.9%+1.2%ProceduralLanguages39.7%-2.9%FunctionalLanguages3.3%+1.5%LogicalLanguages1.1%+0.1%YearWinner2008C2007Python2006Ruby2005Java2004PHP2003C++CategoryRatingsMarch2009DeltaMarch2008StaticallyTypedLanguages59.2%+2.2%DynamicallyTypedLanguages40.8%-2.2%byskywind24一点分析Java,C/C++始终占据主要地位,但略有下降VB,C#不温不火,特别是C#,没有达到期望的使用率Perl、Python、PHP保持前列地位,但Perl有所下滑(相对古老)一些新兴语言,如Ruby、Lua尚不能取得领先地位byskywind25CSDN中国IT技术指数报告数据来源如下(2008.7):*特定时段内新出现在主要IT专业网站上的相关网页数量*特定时段内互联网上新张贴的相关论坛贴子和博客文章数量*特定时段内相关互联网搜索数量*特定时段内相关工作职位招聘规模*特定时段内相关图书销售量byskywind262008年6月中国地区计算机语言指数排名语言指数得分对比评级1Java226324.9%*****2C/C++143615.1%*****注:其中VisualC++4324.5%-3PHP8929.4%****4Javascript8919.4%****5SQL8919.4%****6C#8629.1%****7CSS6226.5%****8VisualBASIC3804.0%***9UML2742.9%***10Perl2142.3%***11Ruby2112.2%***12Delphi1771.9%**13Python1521.6%**14ActionScript1391.5%**byskywind27说明与注解Java处于全盛时代C/C++稳居主流PHP、Javascript、CSS进步显著C#、VB亟待驱动SQL与UML对比鲜明动态语言仍然囿于小众Delphi与ActionScript:夕阳与朝阳byskywind28Web相关技术-服务器端排名技术指数得分对比评级1ASP.NET103337.0%*****2PHP85330.6%*****3Javabased78628.2%*****4RubyonRails843.0%*5Pythonbased190.7%*6Perlbased160.6*byskywind29说明与注解Web服务端三足鼎立,RoR雷声大雨点小第一代:CGI第二代:PHP、JSP、ASPPHP:快捷灵活高效,低成本,国内以个人爱好和高性能网站开发为主。JSP:结构严谨,适合于企业级的B/S模式的管理系统,难以迎合时尚网站多变的需求。ASP:简单易学,在国内的占有率远高于国际。适合简单、多变的网站开发。第三代:以RubyonRails为代表的第三代Ajax仍据主流,新RIA技术奋起直追byskywind30基础软件设施-服务器OSbyskywind31基础软件设施-数据库byskywind32基础软件设施-移动操作系统byskywind33JavaEE应用服务器及SAPbyskywind不同类型的应用软件开发和语言选择工业控制、嵌入式开发系统软件开发:操作系统、数据库通用桌面应用软件信息管理系统C/S模式B/S模式互联网应用游戏和娱乐专用软件34byskywind35语言对比:C++vsJava速度与性能指针与句柄对象处理机制根类Object运算符重载多继承与接口不同的绑定方式自动垃圾收集与析构器名字空间封装byskywind36更加健壮的Java增强的异常处理机制数组下标检查内置多线程支持没有显式的指针,不能进行强制类型转换自动初始化变量byskywind37高效的C/C++灵活的结构化语言机制(goto,union)Inline函数静态绑定和动态绑定简单的栈数据对象基于模板的程序设计方法byskywind38应用范围通用编程语言C/C++更加适合系统开发嵌入式开发执行效率严格要求的软件Java更加适合跨平台开发网络程序设计byskywind程序员需要会多少种语言?理解一种汇编语言熟练掌握一门过程化语言熟练掌握一门面向对象语言掌握一门动态语言能够使用一种脚本语言39byskywind