1、编程语言的发展趋势编程语言的发展趋势 编程语言的历史、现状和未来编程语言的历史、现状和未来计算机与信息学院计算机与信息学院王安慧王安慧据说全世界存在过计算机据说全世界存在过计算机编程语言超过编程语言超过2500种。你可以种。你可以在下面的网站查询到约在下面的网站查询到约2500种种编程语言的相关信息。编程语言的相关信息。http:/people.ku.edu/nkinners/LangList/Extras/search.htm关于编程语言的几个问题l编程语言可以分为哪些种类?编程语言可以分为哪些种类?l优秀的编程语言应该是什么样优秀的编程语言应该是什么样?l导致编程语言流行的原因?导致编程语
2、言流行的原因?l最流行的编程语言是什么?最流行的编程语言是什么?l如何选择适合自己的开发语言如何选择适合自己的开发语言?提提纲纲l编程语言发展历史的简单回顾编程语言发展历史的简单回顾l编程语言的现状编程语言的现状l编程语言的发展趋势编程语言的发展趋势l编程语言的选择编程语言的选择编程语言发展历史的简单回顾编程语言发展历史的简单回顾l低级语言时代低级语言时代l高级语言时代高级语言时代l面向对象时代面向对象时代低级语言时代低级语言时代(19461953)光电阅读机将记录在穿孔卡片上数据读入计算光电阅读机将记录在穿孔卡片上数据读入计算机,计算的结果则利用打孔机在卡片上打出的机,计算的结果则利用打孔机
3、在卡片上打出的一些小孔,就表示输出的数据。一些小孔,就表示输出的数据。卡片上的小孔就组成了计算机卡片上的小孔就组成了计算机和专家明白但绝大多数人不明和专家明白但绝大多数人不明白的天书白的天书机器语言,也就机器语言,也就是完全用是完全用0,1代码写的程序。代码写的程序。机器语言机器语言汇编语言汇编语言由于机器语言的难易理解,莫奇莱由于机器语言的难易理解,莫奇莱等人开始想到用助记符来代替等人开始想到用助记符来代替0,1代码,于是汇编语言出现了代码,于是汇编语言出现了section.data msg db Hello,world!,0 xA len equ$-msg;section.text;glo
4、bal _start;_start:;高级语言时代高级语言时代(1954至今至今)随着世界上第一个高级语言随着世界上第一个高级语言fortran的出现,新的编程语言的出现,新的编程语言开始不断涌现出来。各有特色,开始不断涌现出来。各有特色,各有优势,随着时间的检验,各有优势,随着时间的检验,一些流行至今,一些则逐渐消一些流行至今,一些则逐渐消失失l常见的高级编程语言常见的高级编程语言ALGOL1960,第一个结构化程序设计语言推出,第一个结构化程序设计语言推出C1972年,丹尼斯年,丹尼斯里奇以里奇以B语言为基础开发出语言为基础开发出C语语言言目前世界上最常用的程序语言之一。目前世界上最常用的
5、程序语言之一。C语言是使用最广泛的语言之一,可以说,语言是使用最广泛的语言之一,可以说,C语言语言的诞生是现代程序语言革命的起点,是程序设计的诞生是现代程序语言革命的起点,是程序设计语言发展史中的一个里程碑语言发展史中的一个里程碑开启了一个时代的开启了一个时代的C语言(宣传图)语言(宣传图)l常见的高级编程语言常见的高级编程语言Basic1964年美国达特茅斯学院的两个教员(约翰年美国达特茅斯学院的两个教员(约翰.凯梅尼(凯梅尼(J.Kemeny)和托马斯)和托马斯卡茨(卡茨(T.Kurtz)开发了)开发了basic语言语言该语言只有该语言只有26个变量名,个变量名,17条语句,条语句,12个
6、函数和个函数和3个命个命令这门语言叫做初学者通用符号指令代码令这门语言叫做初学者通用符号指令代码”BeginnersAllpurposeSymbolicIntructionCodel常见的高级编程语言常见的高级编程语言Pascal1967年,年,NiklausWirth开始开发开始开发PASCAL语言,语言,1971年完成。年完成。主要特点有:严格的结构化形式;丰富完主要特点有:严格的结构化形式;丰富完备的数据类型;运行效率高;查错能力强,备的数据类型;运行效率高;查错能力强,可以被方便地用于描述各种算法与数据结可以被方便地用于描述各种算法与数据结构有益于培养良好的程序设计风格和习惯构有益于培
7、养良好的程序设计风格和习惯PASCAL是一个重要的里程碑结构化程序是一个重要的里程碑结构化程序设计概念的语言设计概念的语言面向对象时代(面向对象时代(1990s初初至至今)今)面向对象程序设计(面向对象程序设计(Object-Oriented Programming,简称简称OOP)是一种起源于)是一种起源于六十年代的六十年代的Simula语言,发展已经将近三十年语言,发展已经将近三十年的程序设计思想。其自身理论已经十分完善,并的程序设计思想。其自身理论已经十分完善,并被多种面向对象程序设计语言实现被多种面向对象程序设计语言实现 l常见的面向对象编程语言常见的面向对象编程语言VBBasic的继
8、续的继续DelphiPascal的继续的继续C+C语言扩展语言扩展VC+BorlandC+BuilderQtJava最为流行的面向对象语言最为流行的面向对象语言C#新一代的面向对象语言新一代的面向对象语言总结1、Java霸占了企业级应用市场,一部分移动霸占了企业级应用市场,一部分移动开发(开发(J2ME)和)和web开发,但是开发,但是Java在客户在客户端的图形接口方面失败连连,从端的图形接口方面失败连连,从Applet、AWT到到Swing,Java似乎一直无法为客户端提供堪似乎一直无法为客户端提供堪用的解决方案,以致不断败退,造成了目前在客用的解决方案,以致不断败退,造成了目前在客户端使
9、用户端使用Java应用程序的应用系统仍然非常稀应用程序的应用系统仍然非常稀少。少。使用者排名第一使用者排名第一 2、C和和C+仍然是嵌入式开发和系统给开发的仍然是嵌入式开发和系统给开发的利器。操作系统、驱动程序、各种游戏大都是利器。操作系统、驱动程序、各种游戏大都是他们的开发的他们的开发的地位不可替代地位不可替代 3、C#用来做用来做WEB、桌面、控制台等程序都、桌面、控制台等程序都可以,和可以,和java类似。类似。迅速崛起迅速崛起4、VB、delphi擅长于快速的桌面程序开发,擅长于快速的桌面程序开发,数据库开发,例如进销存软件数据库开发,例如进销存软件逐渐下滑逐渐下滑 5、其他:、其他:
10、perl、python、ruby,jsp,javascript,php等等也占据了一定的市等等也占据了一定的市场场编程语言的现状编程语言的现状l几十年来硬件与编程语言的发几十年来硬件与编程语言的发展的对比展的对比l从从TOIBE排行榜看编程语言的排行榜看编程语言的现状现状年份年份机型机型CPUCPU主频主频内存内存外存外存19811981 IBM PC 8088IBM PC 8088 4.77M4.77M16K16K256K256K1.44M1.44M软盘软盘20122012PCPC组装机组装机3.40G3.40G16G16G1T1T硬盘硬盘71271262500625007000007000
11、00过去过去31年个人年个人PC机硬件发展机硬件发展几十年来编程语言进步l自自1953年,第一个高级编程语年,第一个高级编程语言产生言产生l1972年,年,C语言诞生,至今整语言诞生,至今整整整40年,年,C语言的发展语言的发展几十年来编程语言进步l1972年,诞生年,诞生l1978年,贝尔实验室正式发表年,贝尔实验室正式发表C语言语言l1983年,着手制定标准年,着手制定标准l1989年,年,C语言标准被批准,即语言标准被批准,即ANSICl1990年,年,ISO接受接受ANSIC为为ISOC的标准的标准l1999年,年,ISO又对又对C标准标准修订形成标准标准修订形成,C99l2011年年
12、12月月8日,日,ISO正式公布正式公布C语言新的国际语言新的国际标准草案:标准草案:ISO/IEC9899:2011,即,即C11。自自ANSI标准化标准化C语言后至今,语言后至今,ISO修订对于修订对于C语言标准的改动非常小。语言标准的改动非常小。/*用用C语言编写的打印华氏温度与摄氏温度对照表代码语言编写的打印华氏温度与摄氏温度对照表代码*/#includemain()intfahr,celsius;intlower,upper,step;lower=0;upper=300;step=20;fahr=lower;while(fahr=upper)celsius=5*(fahr-32)/9
13、;printf(%dt%dn,fahr,celsius);fahr=fahr+step;/用用java语言编写的打印华氏温度与摄氏温度对照表代码语言编写的打印华氏温度与摄氏温度对照表代码packagetest;publicclassTestpublicstaticvoidmain(Stringargs)intfahr,celsius;intlower,upper,step;lower=0;upper=300;step=20;fahr=lower;while(fahr=upper)celsius=5*(fahr-32)/9;System.out.printf(%dt%dn,fahr,celsiu
14、s);fahr=fahr+step;#用用Python语言编写的打印华氏温度与摄氏温度对照表代码语言编写的打印华氏温度与摄氏温度对照表代码lower=0upper=300step=20fahr=lowerwhile(fahr=upper):celsius=5*(fahr-32)/9print(%st%s%(fahr,celsius)fahr=fahr+step小结小结l编程语言本身的发展非常缓慢。编程语言本身的发展非常缓慢。l期间出现了一些东西,例如面向对象等等,但期间出现了一些东西,例如面向对象等等,但是远没有好上是远没有好上1000倍。倍。l过去的努力没有体现在编程语言上,而是体现过去的努
15、力没有体现在编程语言上,而是体现在框架及工具等方面了。在框架及工具等方面了。如今我们使用的框架,它们的体积的确有如今我们使用的框架,它们的体积的确有1000倍的倍的增长。例如当年增长。例如当年TurboPascal所带的框架大约有所带的框架大约有100个功能,而现在的个功能,而现在的.NETFramework里则有一万里则有一万个类,十万个方法,的确有个类,十万个方法,的确有1000倍的增长。倍的增长。与此类似,如果你观察现在的与此类似,如果你观察现在的IDE,我们现在已经有,我们现在已经有了无数强大的功能,例如语法提示,重构,调试器,了无数强大的功能,例如语法提示,重构,调试器,探测器等等,
16、这方面的新东西有很多。探测器等等,这方面的新东西有很多。与此相比,编程语言的改进的确很不明显。与此相比,编程语言的改进的确很不明显。从TIOBE排行榜看编程语言的现状lTIOBE编程语言排行榜编程语言排行榜l世界排名前世界排名前20的编程语言的编程语言l五大流行编程语言的发展趋势五大流行编程语言的发展趋势编程语言的现状lTiobehttp:/TIOBE开发语言排行榜每月更新一次,依据的指数是开发语言排行榜每月更新一次,依据的指数是基于世界范围内的资深软件工程师和第三方供应商提基于世界范围内的资深软件工程师和第三方供应商提供,其结果作为当前业内程序开发语言的流行使用程供,其结果作为当前业内程序开
17、发语言的流行使用程度的有效指标。度的有效指标。该指数可以用来检阅开发者的编程技能能否跟上趋势,该指数可以用来检阅开发者的编程技能能否跟上趋势,或是否有必要作出战略改变,以及什么编程语言是应或是否有必要作出战略改变,以及什么编程语言是应该及时掌握的。观察认为,该指数反应的虽并非当前该及时掌握的。观察认为,该指数反应的虽并非当前最流行或应用最广的语言,但对世界范围内开发语言最流行或应用最广的语言,但对世界范围内开发语言的走势仍具有重要参考意义。的走势仍具有重要参考意义。排名110的编程语言排名1120的编程语言VeryLongTermHistoryofthetop10programminglang
18、uagesVeryLongTermHistoryofthetop10programminglanguagesThelongtermtrendsforthetop10programminglanguages编程语言的发展趋势编程语言的发展趋势l思考:影响编程语言未来发展思考:影响编程语言未来发展的因素?的因素?编程语言未来发展趋势l动态化动态化计算机能够处理的事交给计算机处理计算机能够处理的事交给计算机处理l声明式及函数式编程风格声明式及函数式编程风格告诉计算机告诉计算机What而不是而不是Howl并发编程并发编程多核时代的必然要求多核时代的必然要求观点来自观点来自Anders Hejlsber
19、g编程语编程语言的发展趋势及未来方向言的发展趋势及未来方向的讲座的讲座编程语言未来发展趋势l未来计算机编程语言特点未来计算机编程语言特点总体向支持动态、声明式、并发支持,易于使用的总体向支持动态、声明式、并发支持,易于使用的多范式语言发展多范式语言发展一些语言会同时支持面向对象、一些语言会同时支持面向对象、面向过程、动态、声明、函数式面向过程、动态、声明、函数式以及并发编程以及并发编程PositionProgrammingLanguageRatings PositionProgrammingLanguageRatings21SAS0.56%36D0.28%22Bash0.55%37Smallt
20、alk0.25%23Transact-SQL0.49%38NXT-G0.24%24ABAP0.46%39APL0.23%25Scratch0.45%40Forth0.22%26COBOL0.45%41ML0.22%27Fortran0.42%42Awk0.22%28R0.42%43Dart0.19%29Scheme0.41%44ActionScript0.17%30Logo0.38%45Common Lisp0.17%31Prolog0.35%46Alice0.16%32RPG(OS/400)0.35%47LabVIEW0.15%33Haskell0.31%48Eiffel0.15%34Erl
21、ang0.29%49CFML0.15%35Scala0.29%50Tcl0.14%排名排名2150的语言,其中红色为的语言,其中红色为动态语言,蓝色为函数式语言动态语言,蓝色为函数式语言安德斯海尔斯伯格安德斯安德斯海尔斯伯格(海尔斯伯格(AndersHejlsberg,1960.12),),丹麦人,丹麦人,TurboPascal编译器编译器的主要作者,的主要作者,Delphi和和.NET之父之父比尔盖茨比尔盖茨评价评价:“Anders在在C#创建中所做的努力创建中所做的努力将会改变现在的软件开将会改变现在的软件开发方式,并将在以后的发方式,并将在以后的十年继续产生影响。十年继续产生影响。”l例
22、:找出所有例:找出所有100以内能被以内能被3整除的数整除的数C语言实现核心代码:语言实现核心代码:inti,a100;for(i=0;i=right)return;swap(v,left,(left+right)/2);last=left;for(i=left+1;i=right;i+)if(vivleft)swap(v,+last,i);swap(v,left,right);qsort(v,left,last-1);qsort(v,last+1,right);voidswap(intv,inti,intj)inttemp;temp=vi;vi=vj;vj=temp;快速排序算法:haske
23、ll实现qsort=qsort(x:xs)=qsorty|y-xs,yx+x+qsorty|y=x小结小结l命令式语言命令式语言面向机器的,以机器为中心,与计算机面向机器的,以机器为中心,与计算机内部原理相一致内部原理相一致注重注重How,即如何解决问题,即如何解决问题l函数式语言函数式语言面向问题的,以人为中心,更符合人的面向问题的,以人为中心,更符合人的思维方式,具有更高的抽象思维方式,具有更高的抽象注重注重What,即对问题的描述,即对问题的描述编程语言的选择编程语言的选择l编程语言的分类编程语言的分类l不同编程语言的特点不同编程语言的特点l值得关注的一些编程语言值得关注的一些编程语言l
24、编程语言与开发工具的选择编程语言与开发工具的选择编程语言的分类l几种概念的说明几种概念的说明面向对象的编程语言面向对象的编程语言支持面向的编程语言支持面向的编程语言编程语言的分类l高级语言与低级语言高级语言与低级语言l编译型与解释型编译型与解释型l动态与静态类型动态与静态类型l命令式与函数式命令式与函数式l非中文与中文非中文与中文动态语言动态语言,是指程序在运行时可以改,是指程序在运行时可以改变其结构新的函数可以被引进,已有变其结构新的函数可以被引进,已有的函数可以被删除等在结构上的变化的函数可以被删除等在结构上的变化 动态语言动态语言的类型检查是在运行时做的的类型检查是在运行时做的 静态类型
25、静态类型语言的类型判断是在运行前语言的类型判断是在运行前判断判断*命令式编程命令式编程(Imperativeprogramming),是,是一种描述电脑所需作出的行为的一种描述电脑所需作出的行为的编程范型编程范型。几乎所有电脑的几乎所有电脑的硬件硬件工作都是指令式的;工作都是指令式的;几乎所有电脑的硬件都是设计来运行几乎所有电脑的硬件都是设计来运行机器码机器码,使用指令式的风格来写的。使用指令式的风格来写的。较高级的指令式较高级的指令式编程语言编程语言使用使用变量变量和更复杂和更复杂的语句,但仍依从相同的范型。的语句,但仍依从相同的范型。因为命令式编程的基础观念,不但概念上比因为命令式编程的基
26、础观念,不但概念上比较熟悉,而且较容易具体表现于硬件,所以较熟悉,而且较容易具体表现于硬件,所以大部分的编程语言都是指令式的。大部分的编程语言都是指令式的。*函数式编程函数式编程是种编程典范,它将电脑运是种编程典范,它将电脑运算视为函数的计算。算视为函数的计算。函数编程语言最重要的基础是函数编程语言最重要的基础是演算演算(lambdacalculus)。而且)。而且演算的函演算的函数可以接受函数当作输入(参数)和输数可以接受函数当作输入(参数)和输出(返回值)。出(返回值)。和指令式编程相比,函数式编程强调函和指令式编程相比,函数式编程强调函数的计算比指令的执行重要。和过程化数的计算比指令的执
27、行重要。和过程化编程相比,函数式编程里,函数的计算编程相比,函数式编程里,函数的计算可随时调用。可随时调用。编程语言的分类l中文编程语言中文编程语言易语言易语言丙正正丙正正习语言习语言Peryuyan扩展阅读扩展阅读:各种奇怪的中文编程语言各种奇怪的中文编程语言http:/ 长度长度(文本文本)整数整数1,1).计次循环尾计次循环尾()返回返回(返回文本返回文本)/丙正正语言示例丙正正语言示例空空象棋檔象棋檔:設定註解設定註解(字元字元*s,整數整數n)若若(n=最大註解數最大註解數)對於對於(;最大註解數最大註解數=n;最大註解數最大註解數+)註解註解最大註解數最大註解數=NONE;若若(s
28、=NULL或或字串長度字串長度(s)=0)傳回傳回;若若(註解註解n!=NONE)刪除刪除註解註解n;註解註解n=新新字元字元字串長度字串長度(s)+1;字串複製字串複製(註解註解n,s);#包含包含包含包含“习语言系统习语言系统习语言系统习语言系统.接口接口接口接口”/习语言代码示例习语言代码示例习语言代码示例习语言代码示例整数类型整数类型整数类型整数类型 主函数()主函数()主函数()主函数()文件类型文件类型文件类型文件类型*fp;fp;整数类型整数类型整数类型整数类型 ch;ch;如果如果如果如果(fp=(fp=文件打开文件打开文件打开文件打开(练习练习练习练习13-2.13-2.文本
29、文本文本文本,写写写写+)=+)=空指针空指针空指针空指针)格式输出格式输出格式输出格式输出(无法打开文件:练习无法打开文件:练习无法打开文件:练习无法打开文件:练习13-2.13-2.文本!文本!文本!文本!););暂停暂停暂停暂停();();退出退出退出退出(1);(1);格式输出格式输出格式输出格式输出(输入一串字符输入一串字符输入一串字符输入一串字符:n);:n);ch=ch=输入字符输入字符输入字符输入字符();();若符合条件若符合条件若符合条件若符合条件(ch!=(ch!=宏宏宏宏_ _换行键换行键换行键换行键)重复重复重复重复 文件写字符文件写字符文件写字符文件写字符(ch,f
30、p);(ch,fp);ch=ch=输入字符输入字符输入字符输入字符();();文件复位文件复位文件复位文件复位(fp);(fp);ch=ch=文件读字符文件读字符文件读字符文件读字符(fp);(fp);若符合条件若符合条件若符合条件若符合条件(ch!=(ch!=宏宏宏宏_ _文件结束文件结束文件结束文件结束)重复重复重复重复 输出字符输出字符输出字符输出字符(ch);(ch);ch=ch=文件读字符文件读字符文件读字符文件读字符(fp);(fp);格式输出格式输出格式输出格式输出(n);(n);文件关闭文件关闭文件关闭文件关闭(fp);(fp);暂停();暂停();暂停();暂停();返回返回
31、返回返回 0;0;#!/usr/local/bin/perluseLingua:Sinica:PerlYuYan;用警兮用嚴。用警兮用嚴。印道印道1.1哉兮哉兮印編曰雜申雜申矣印編曰雜申雜申矣又曰又曰ok矣矣又曰又曰1矣矣亂曰亂曰國無人莫我知兮國無人莫我知兮又何懷乎故都又何懷乎故都既莫足與為美政兮既莫足與為美政兮吾將從彭咸之所居吾將從彭咸之所居#!/usr/local/bin/perl#TheSieveofEratosthenes-埃拉托斯芬篩法埃拉托斯芬篩法useLingua:Sinica:PerlYuYan;用籌兮用嚴用籌兮用嚴井涸兮無礙。井涸兮無礙。印曰最高矣印曰最高矣又道數然哉。又道數然哉。截起吾純風截起吾純風賦小入大合。賦小入大合。習予吾陣地習予吾陣地並二至純風。並二至純風。當起段賦取當起段賦取加陣地合始。加陣地合始。陣地賦篩始陣地賦篩始繫繫此雜段。繫繫此雜段。終陣地兮印終陣地兮印正道次標哉。正道次標哉。輸空接段點輸空接段點列終註泰來。列終註泰來。不同编程语言的特点l假如编程语言是私家车假如编程语言是私家车http:/