2024年2月3日发(作者:)
编程语言未来的发展趋势
——对未来编程语言的看法
编程语言未来的发展趋势 ----------------------------------------------------- 1
【前言】 -------------------------------------------------------------------- 1
【摘要】 -------------------------------------------------------------------- 2
【编程语言未来发展方向预测】 -------------------------------------- 3
【计算机语言的发展趋势】 -------------------------------------------- 3
【计算机未来的发展方向概述】 -------------------------------------- 3
【高级语言的发展史】 -------------------------------------------------- 4
由计算机语言的发展得到的启发 -------------------------------- 7
【从专业的角度分析未来编程几个可能的方向】------------------ 9
方向(1):并发 ----------------------------------------------------- 9
方向(2):声明式编程 ------------------------------------------ 10
方向(3):函数式编程 ------------------------------------------- 11
方向(4):动态语言 --------------------------------------------- 12
总结 ------------------------------------------------------------------ 13
【参考文献】 ------------------------------------------------------------ 14
【前言】
程序设计一直是编程者工作的核心,但是编程语言却并不像“工具”、“框架”或是“开发方法”一样被程序设计者所重视,国内的计 1
算机教育也一直存在着这样的教授误区,宽泛的认为语言之间的变通性,而恰恰忽略了语言本身的改良与发展。事实上计算机高级语言的每一次改良都意味着生产力的重大进步和发展。语言的发展和演变也比任何其他方面的改良更悠久,而且一直影响着计算机未来的发展趋势。
新语言的诞生也许不像其他的生产发现一样能够得到即时的收益,也不可否认的绝大多数的新语言,在实际应用中“夭折”,但是语言改革这一必然的大趋势,已经越来越多的引起了计算机从业者的重视。
【摘要】
现在影响力较大的趋势主要有3种。首先,我们会越来越多地使用声明式的编程风格。主要会提到例如DSL(Domain Specific Language,领域特定语言)以及函数式编程。然后在过去的五年里,对于动态语言的研究越来越多,其中对我们产生重大影响的无疑是动态语言所拥有的良好的编程能力,然后便是并发编程,多核的产生迫使我们不得不重视并发编程。
随着语言的发展,编程语言分类方式也要有所改变。以前的面向对象语言,动态语言或是函数式语言。现在因为边界变得越来越模糊,经常会互相学习各自的范式。静态语言中出现了动态类型,动态语言里也出现了静态能力,而如今所有主要的编程语言都受到函数式语言的影响。因此,一个越来越明显的趋势是“多范式程序设计语言”。
2
【编程语言未来发展方向预测】
多核时代的到来很可能会改变传统的计算机体系结构,语言、框架、工具三者发展的历史中,语言始终与之相较是比较缓慢的,但是在计算机体系结构被更改的时候,语言和编程模式也将要发生一些质变。
【计算机语言的发展趋势】
面向对象程序设计以及数据抽象在现代程序设计思想中占有很重要的地位,未来语言的发展将不在是一种单纯的语言标准,将会以一种完全面向对象,更易表达现实世界,更易为人编写,其使用将不再只是专业的编程人员,人们完全可以用订制真实生活中一项工作流程的简单方式来完成编程。
提供最基本的方法来完成指定的任务,只需理解一些基本的概念,就可以用它编写出适合于各种情况的应用程序面向对象提供简单的类机制以及动态的接口模型。对象中封装状态变量以及相应的方法,实现了模块化和信息隐藏;提供了一类对象的原型,并且通过继承机制,子类可以使用父类所提供的方法,实现了代码的复用,用于网络、分布环境下有安全机制保证。平台无关性,与平台无关的特性使程序可以方便地被移植到网络上的不同机器、不同平台。
【计算机未来的发展方向概述】
面向对象程序设计以及数据抽象在现代程序设计思想中占有很重要的地位,未来语言的发展将不在是一种单纯的语言标准,将会以一种 3
完全面向对象,更易表达现实世界,更易为人编写,其使用将不再只是专业的编程人员,人们完全可以用订制真实生活中一项工作流程的简单方式来完成编程。计算机语言发展的特性:
(1) 简单性:提供最基本的方法来完成指定的任务,只需理解一些基本的概念,就可以用它编写出适合于各种情况的应用程序 。
(2)面向对象:提供简单的类机制以及动态的接口模型。对象中封装状态变量以及相应的方法,实现了模块化和信息隐藏;提供了一类对象的原型,并且通过继承机制,子类可以使用父类所提供的方法,实现了代码的复用 。
(3)安全性 :用于网络、分布环境下有安全机制保证。(4)平台无关性:与平台无关的特性使程序可以方便地被移植到网络上的不同机器、不同平台。
【高级语言的发展史】
1954 Fortran
FORTRAN(FORmula TRANslator的缩写)意为“公式翻译器”,是世界上最早出现的计算机高级程序设计语言,广泛应用于科学和工程计算领域。FORTRAN语言以其特有的功能在数值、科学和工程计算领域发挥着重要作用。
958 LISP
LISP语言(全名LISt Processor,即链表处理语言)由约翰·麦卡锡在1960年左右创造的一种基于λ演算的函数式编程语言。
4
1959 Cobol
COBOL(Common Business Oriented Language)是数据处理领域最为广泛的程序设计语言,是第一个广泛使用的高级编程语言。主要应用于数值计算并不复杂,但数据处理信息量却很大的商业领域。
1962 Simula
Simula 67被认为是最早的面向对象程序设计语言,它引入了所有后来面向对象程序设计语言所遵循的基础概念:对象、类、继承。
1964 Basic
BASIC(Beginners All-purpose Symbolic Instruction Code)的意思就是“初学者的全方位符号指令代码”,是一种设计给初学者使用的程序设计语言。BASIC是一种解释语言,在完成编写后不须经过编译及连结即可执行,但如果要单独执行仍然需要编译成可执行文件。
1968 Pascal
Pascal语言语法严谨,层次分明,程序易写,具有很强的可读性,是第一个结构化的编程语言。Pascal的取名是为了纪念十七世纪法国著名哲学家和数学家Blaise Pascal,它由瑞士Niklaus Wirth教授于六十年代末设计并创立。
1969 C
C语言既具有高级语言的特点,又具有汇编语言的特点,由美国贝尔研究所的e于1972年推出。1978后,C语言已先后被移植到大、中、小及微型机上。
1975 SQL
5
SQL(Structured Query Language,结构化查询语言)是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
1983 C++
C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。
1987 Perl
Perl象C一样强大,象awk、sed等脚本描述语言一样方便。Perl借取了C、sed、awk、shell scripting以及很多其他程序语言的特性。其中最重要的特性是它内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN。Perl最初的设计者是拉里·沃尔(Larry Wall),发表于1987年12月18日。
1991 Python
Python是一种面向对象、直译式计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年。Python是一种代表简单主义思想的语言。阅读一个良好的Python程序就感觉像是在读英语一样。它使你能够专注于解决问题而不是去搞明白语言本身。
1995 Java
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言 6
和Java平台(即JavaSE, JavaEE, JavaME)的总称。
1995 JavaScript
JavaScript是一种能让你的网页更加生动活泼的程式语言,也是目前网页中设计中最容易学又最方便的语言。
2001 C#
C#(C Sharp)是微软为.NET框架量身订做的程序语言,C#拥有C/C++的强大功能以及Visual Basic简易使用的特性,是第一个组件导向的程序语言,与C++和Java同样是面向对象程序设计语言。
2002 .Net
.NET 是 Microsoft XML Web服务平台。XML Web服务允许应用程序通过Internet进行通讯和共享数据,而不管所采用的是哪种操作系统、设备或编程语言。
2005 Ruby On Rails
Ruby on Rails是一个可以使你开发、部署、维护web应用程序变得简单的框架,Ruby以7月的诞生石ruby(红宝石)命名。
2009
Node是一个服务器端 JavaScript 解释器,它改变了服务器应该如何工作的概念。它的目标是帮助程序员构建高度可伸缩的应用程序,编写能够处理数万条同时连接到一台物理机的连接代码。
由计算机语言的发展得到的启发
由此可以看出:是一个不断演化的过程,其根本的推动力就是抽象机 7
制更高的要求,以及对程序设计思想的更好的支持。计算机语言的演化从最开始的机器语言到汇编语言到各种结构化高级语言,最后到支持面向对象技术的面向对象语言。
计算机语言的发展历史:二十世纪四十年代当计算机刚刚问世的时候,程序员必须手动控制计算机。当时的计算机十分昂贵,唯一想到利用程序设计语言来解决问题的人是德国工程师楚泽。几十年后,计算机的价格大幅度下跌,而计算机程序也越来越复杂。也就是说,开发时间已经远比运行时间来得宝贵。于是,新的集成、可视的开发环境越来越流行。它们减少了所付出的时间、金钱(以及脑细胞)。只要轻敲几个键,一整段代码就可以使用了。这也得益于可以重用的程序代码库。随着c, pascal,fortran,等结构化高级语言的诞生,使程序员可以离开机器层次,在更抽象的层次上表达意图。由此诞生的三种重要控制结构,以及一些基本数据类型都能够很好的开始让程序员以接近问题本质的方式去思考和描述问题。随着程序规模的不断扩大,在60年代末期出现了软件危机,在当时的程序设计模型中都无法克服错误随着代码的扩大而级数般的扩大,以至到了无法控制的地步,这个时候就出现了一种新的思考程序设计方式和程序设计模型-----面向对象程序设计,由此也诞生了一批支持此技术的程序设计语言,比如eiffel,c++,java,这些语言都以新的观点去看待问题,即问题就是由各种不同属性的对象以及对象之间的消息传递构成。面向对象语言由此必须支持新的程序设计技术,例如:数据隐藏,数据抽象,用户定义类型,继承,多态等等。
8
【从专业的角度分析未来编程几个可能的方向】
方向(1):并发
摩尔定理有个推论,便是说时钟速度将根据相同的周期提高,也就是说每隔大约24个月,CPU的速度便会加倍──而这点已经停止了。有些物理方面的基础因素让CPU不能运行的太快。然而,另一意义上的摩尔定理出现了。我们还是可以看到容量的增加,因为可以在同一个表盘上放置多个CPU了。目前已经有了双核、四核,Intel的CTO在三年前说,十年后我们可以出现80核的处理器。
到了那个时候,你的任务管理器中就可能是这样的。你可以看到,计算能力已经完全用上了。这便是个问题,比如你在这台强大的机器上进行一个实验,你自然希望看到100%的使用状况,不过传统的实验都是在一个核上执行的,所以我们面临的挑战是,我们需要换一种写程序的方式来利用此类机器。
我们已经不能写一个程序,然后对客户说:啊,未来的硬件会让它运行的越来越快,我们不用关心太多,除非你换种不同的写法。多核革命的一个有趣之处在于,它对于并发的思维方式会有所改变。传统的并发思维是在单个CPU上执行多个逻辑任务,使用旧有的分时方式、时间片模型来执行多个任务。但是,你想一下便会发现如今的并发情况正好相反,现在是要将一个逻辑上的任务放在多个CPU上执行。这改变了我们编写程序的方式,这意味着对于语言或是API来说,我们需要有办法来分解任务,把它拆分成多个小任务后独立的执行,而 9
传统的编程语言中并不关注这点。
可能你会有独立的任务但也可能没有,所以很多时候我们需要编程语言来关注这方面的事情。比如“隔离性(Isolation)”。
方向(2):声明式编程
目前我们在编写软件时大量使用的是命令式(Imperative)编程语言,例如C#,Java或是C++等等。这些语言的特征在于,写出的代码除了表现出“什么(What)”是你想做的事情之外,更多的代码则表现出实现的细节,也就是“如何(How)”完成工作。这部分代码有时候多到掩盖了我们原来问题的解决方案。
比如,你会在代码里写for循环,if语句,a等于b,i加一等等,这体现出机器是如何处理数据。首先,这种做法让代码变得冗余,而且它也很难让执行代码的基础设施更聪明地判断该如何去执行代码。当你写出这样的命令是代码,然后把编译后的中间语言交给虚拟机去执行,此时虚拟机并没有多少空间可以影响代码的执行方式,它只能根据指令一条一条老老实实地去执行。例如,我们现在想要并行地执行程序就很困难了,因为更高层次的一些信息已经丢失了。这样,我们只能在代码里给出“How”,而不能体现出“What”的信息。
现在有两种比较重要的成果,一是DSL(Domain Specific Language,领域特定语言),另一个则是函数式编程。
外部DSL是自我包含的语言,它们有自己特定语法、解析器和词法分析器等等,它往往是一种小型的编程语言,甚至不会像GPPL那样 10
需要源文件。与之相对的则是内部DSL。内部DSL其实更像是种别称,它代表一类特别API及使用模式。这里我会给你们看一些示例。
每个配置文件都可能会变成一门编程语言。你一开始可能只会用它表示一点点东西,然后慢慢你便会想要一些规则,而这些规则则变成了表达式,可能你还会定义变量,进行条件判断等等。而最终它就变成了一种奇怪的编程语言,这样的情况屡见不鲜。
方向(3):函数式编程
关于声明式编程的还有一部分重要的内容,那便是函数式编程。
如今我们在使用命令式编程语言写程序时,我们经常会写这样的语句,x等于x加1,此时我们大量依赖的是状态,可变的状态,或者说变量,它们的值可以随程序运行而改变。
可变状态非常强大,但随之而来的便是叫做“副作用”的问题。在使用可变状态时,你的程序则会包含副作用,比如你会写一个无需参数的void方法,然后它会根据你的调用次数或是在哪个线程上进行调用对程序产生影响,因为void方法会改变程序内部的状态,从而影响之后的运行效果。
而在函数式编程中则不会出现这个情况,因为所有的状态都是不可变的。你可以声明一个状态,但是不能改变这个状态。而且由于你无法改变它,所以在函数式编程中不需要变量。事实上对函数式编程的讨论更像是数学、公式,而不像是程序语句。如果你把x = x + 1这句话交给一个程序员看,他会说“啊,你在增加x的值”,而如果你把它交 11
给一个数学家看,他会说“嗯,我知道这不是true”。
然而,如果你给他看这条语言,他会说“啊,y等于x加一,就是把x
+ 1的计算结果交给y,你是为这个计算指定了一个名字”。这时候在思考时就是另一种方式了,这里y不是一个变量,它只是x + 1的名称,它不会改变,永远代表了x + 1。
所以在函数式编程语言中,当你写了一个函数,接受一些参数,那么当你调用这个函数时,影响函数调用的只是你传进去的参数,而你得到的也只是计算结果。在一个纯函数式编程语言中,函数在计算时不会对进行一些神奇的改变,它只会使用你给它的参数,然后返回结果。在函数式编程语言中,一个void方法是没有意义的,它唯一的作用只是让你的CPU发热,而不能给你任何东西,也不会有副作用。
在函数式编程中访问状态是十分安全的,因为状态不会改变,我可以把一个Point或List对象交给任意多的地方去访问,完全不用担心副作用。函数式编程的十分容易并行,因为我在运行时不会修改状态,因此无论多少线程在运行时都可以观察到正确的状态。两个函数完全无关,因此它们是并行还是顺序地执行便没有什么区别了。我们还可以有延迟计算,可以进行Memorization,这些都是函数式编程中十分有趣的方面。
方向(4):动态语言
我还是尝试着去找到动态语言的定义,但是一般地说,动态语言是一些不对编译时和运行时进行严格区分的语言。这不像一些静态编程语 12
言,比如C#,你先进行编译,然后会得到一些编译期错误,稍后再执行,而对于动态语言来说这两个阶段便混合在一起了。
动态语言有一些优势,而静态语言也有着另一些优势,这也是两个阵营争论多年的内容。我认为结果不是两者中的任意一个,它们都有各自十分重要的优点,而长期来看,我认为结果应该是两者的杂交产物,我认为在语言发展中也可以看到这样的趋势,这两部分内容正在合并。
动态语言执行起来很慢,也没有类型安全等等。
总结
在过去,大约1995-2005年是一个编程语言的黄金时期。当Java出现的时候,编程语言的门槛变得平坦了,一切都是Java,我们也没什么可做的了。然后我们又逐渐发现,这远没有结束,现在回顾起来,会发现又出现了许多有趣的编程语言。新语言代表了我们在编程领域上的进步。
在未来编程语言会变成什么样,首先,编程语言会变得更加“声明式”,我们需要设法为语言引入一些如元编程,函数式编程的能力,同时可能也要寻找让用户有办法扩展语法,使他们可以构造领域特定语言等等。未来动态语言和静态语言的区别也很可能会消失了,这两者会合并为一种单一的常见的编程范式。在并发方面,语言会采纳一些特性,可以利用起隔离性,函数式的纯粹性,以及更好的不可变数据类型的编写方式。不过总体来说我想强调的是,对于编程语言,新的范式则 13
是“多范式”编程语言。
【参考文献】
斯科特 (Michael )、 裘宗燕.程序设计语言:实践之路(第2版) .电子工业出版社.2007-06.
克尼汉、徐宝文.C程序设计语言[M].机械工业出版社.2004-01.
佩措尔德、方敏、张胜、 梁路平.windows程序设计[M].清华大学出版社.2010-09.
14
本文发布于:2024-02-03 22:01:29,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170696888951423.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |