主题:为什么选择fortran
到底选择什么样的语言,本身是一类非常具有争议性的问题。曾几何时,在科学计算领
域,就沸沸腾腾地讨论过最好使用什么样的语言。也许我们可以说这是一个见仁见智的问题,
因为我们作为语言的使用者,总是拣自己已经很熟悉的语言,当然总是自己能够很好驾驭的
语言是最好的。但是具体地针对科学计算来说,由于科学计算问题具有自身的独特的价值标
准,在这个价值标准之下,各种不同的语言还是可以进行客观比较的。
首先我们得把自己面临的任务界定清楚,也就是什么是科学计算问题?
7
所谓科学计算问题大体上包括如下三个涵义:
● 问题本身以及问题的解答都能够使用数学语言予以精确描述;
● 如果要使用通常的数学方法来给出我们所需要的数值答案,会很麻烦或者根本无法
给出;
● 问题以一定的科学与技术知识作为背景。
我们会看到正是科学计算问题的这种内涵决定了它在选择计算语言时所具有的价值标
准。
首先,一个科学计算问题总是要以一个数学计算问题的形式出现,因此描述科学计算问
题的语言应该能够自然地描述数学问题,即要求编程语言和数学语言在表达方式上具有比较
直接自然的对应关系。
然后一个科学计算问题之所以需要使用计算机,那肯定是因为这个问题具有一定的计算
量,那么程序的运行效率往往是选择语言时最重要的考量因素。
正是在这两点上,FORTRAN 是现在众多语言当中的绝对胜出者。
在描述数学语言的自然性方面, FORTRAN 可以说比现在还“活”着的任何语言都强。
当然在历史上曾经出现过象ALGOL 那样的相当数学化的语言,可惜的是它缺乏市场生存能
力,所以就只剩下FORTRAN 独美于今了。FORTRAN 擅长描述数学计算,这点应该是几
乎没有什么争议的。也正是由于这个缘故,FORTRAN 的易学是公认的。任何一个科技专业
人员,只要对于一个具体问题的数学求解过程有明晰的概念,要把这个求解过程翻译为
FORTRAN 语言是非常轻松的。
至于执行速度方面,则常常有些似是而非的说法误导初学者。最典型的一个错误观念
就是“C 代码的执行速度最快”。这个说法来源于C 语言的特殊性,因为C 语言更多的是
一种系统编程语言,对硬件的控制能力很强,在高级语言里面无出其右者,于是给人以C
程序的速度必定最快的印象。但是忘记了这个速度快是来自C 语言的系统编程特性,而在
做科学计算时,并不需要过多地涉及到系统内核,因此C 语言的长处在科学计算方面可以
说并不能适当地发挥,相反,在数值计算方面,C 绝对不是FORTRAN 的对手,因为相对
于C 以系统编程为目的,FORTRAN 是以科学计算为目的的,语言本身在设计之初,就考
虑到了针对科学计算而进行优化,因此FORTRAN 生成的可执行代码是高度优化的。
实际的运行效率方面的比较也表明了FORTRAN 在科学计算方面的优越性。无论是国
内还是国外,也无论是经典的串行机还是并行矢量机,大量的经验表明,在执行同一个科学
计算任务时,C 或C++代码的效率都低于FORTRAN 代码,。
除了常见的对于C 有着高效的迷信之外,还常常有着对于FORTRAN 是如何如何落后
的偏见。当然这种偏见是有来源的,那就是曾经功勋卓著的FORTRAN 77 在很长一段时间
里面,都缺乏进取心,使得迄今很多人提起FORTRAN,想到的就是在当今时代已经显得非
常落后的FORTRAN 77。实质上,FORTRAN 标准在进入FORTRAN 90 时代之后,特别是
现时的FORTRAN 95 版本,可以说只要是对于科学计算有用的特性,C 和C++有的,现在
FORTRAN 95 绝对不缺,而反过来FORTRAN 95 所具有的很多针对科学计算的特性,却是
C 和C++所不具有的。哪怕是C++最引以为傲的面向对象性质,FORTRAN 2000 也将全面
引入。所以说,FORTRAN 已经完全赶上了编程语言的潮流。
与程序运行的效能有关的另外一个重要方面,是程序语言能否支持程序的并行运行,
在这点上,可以说FORTRAN 表现了它的最大优势,因为FORTRAN 95 正是着力于获得并
行计算的能力的一个版本。
8
由于现代科学计算的规模越来越大,计算并行化是一条不得不走的路线,现代计算机
硬件的发展,也使得并行化具有实际的普及前景,因为不仅专门的大型计算机是并行的,现
在的一般PC 都可以拥有多个处理器,因此现代的从事科学计算的用户不得不掌握并行化计
算的编程能力。
但是进行并行化编程所遇到的一个主要问题,就是任何过程编程语言都内在地使用线
性存储模式,也就是一个数组的元素总是被认为按照数组元素的先后顺序而连续地存储在内
存单位里面,这样一种模式就决定了这样的过程编程语言无法真正地实现对并行计算的描
述。而FORTRAN 95 则完全改观了这种制约,因为在FORTRAN 95 里面对于数组以及数组
运算建立了全新的面向并行化计算的概念,诸如纯过程的概念,逐元过程的概念,FORALL
结构等等,都有效地摆脱了线性存储模式的制约,使得FORTRAN 95 成为描述并行计算的
标准语言,特别是那些专用的数据并行化语言都纷纷采用FORTRAN 作为基础语言,例如
高性能FORTRAN(High Performance Fortran),Fortran D,Vienna Fortran,以及CRAFT 等。
这样就使得使用FORTRAN 95 编写的程序可以直接在这些数据并行化语言的平台上运行,
而反过来使用这些专用语言编写的程序也可以毫不困难地转移到FORTRAN 95 平台上运
行,这样一种局面使得FORTRAN 在并行计算领域独领风骚。
综上所述,我们完全可以说FORTRAN 95 是进行科学计算的最佳语言,作为需要进行
科学计算的科学与技术领域的工作人员,掌握FORTRAN 95 远比掌握C,C++等语言要重
要得多,至于那些计算机符号代数与数值计算软件,例如MATHEMATICA,MAPLE,
MATLAB,Macsyma,MATHCAD 等等,只能说是进行科学计算的教学模型与辅助工具,
由于它们都提供了现成的算法,因此可以使得初学者能够应用于一些简单的场合,真正要用
它们来对付稍微大一点的问题,有经验的用户都知道,那会是一件非常痛苦的强人所难的事
情。因此最终要自由地进行科学计算,则非FORTRAN 莫属。
域,就沸沸腾腾地讨论过最好使用什么样的语言。也许我们可以说这是一个见仁见智的问题,
因为我们作为语言的使用者,总是拣自己已经很熟悉的语言,当然总是自己能够很好驾驭的
语言是最好的。但是具体地针对科学计算来说,由于科学计算问题具有自身的独特的价值标
准,在这个价值标准之下,各种不同的语言还是可以进行客观比较的。
首先我们得把自己面临的任务界定清楚,也就是什么是科学计算问题?
7
所谓科学计算问题大体上包括如下三个涵义:
● 问题本身以及问题的解答都能够使用数学语言予以精确描述;
● 如果要使用通常的数学方法来给出我们所需要的数值答案,会很麻烦或者根本无法
给出;
● 问题以一定的科学与技术知识作为背景。
我们会看到正是科学计算问题的这种内涵决定了它在选择计算语言时所具有的价值标
准。
首先,一个科学计算问题总是要以一个数学计算问题的形式出现,因此描述科学计算问
题的语言应该能够自然地描述数学问题,即要求编程语言和数学语言在表达方式上具有比较
直接自然的对应关系。
然后一个科学计算问题之所以需要使用计算机,那肯定是因为这个问题具有一定的计算
量,那么程序的运行效率往往是选择语言时最重要的考量因素。
正是在这两点上,FORTRAN 是现在众多语言当中的绝对胜出者。
在描述数学语言的自然性方面, FORTRAN 可以说比现在还“活”着的任何语言都强。
当然在历史上曾经出现过象ALGOL 那样的相当数学化的语言,可惜的是它缺乏市场生存能
力,所以就只剩下FORTRAN 独美于今了。FORTRAN 擅长描述数学计算,这点应该是几
乎没有什么争议的。也正是由于这个缘故,FORTRAN 的易学是公认的。任何一个科技专业
人员,只要对于一个具体问题的数学求解过程有明晰的概念,要把这个求解过程翻译为
FORTRAN 语言是非常轻松的。
至于执行速度方面,则常常有些似是而非的说法误导初学者。最典型的一个错误观念
就是“C 代码的执行速度最快”。这个说法来源于C 语言的特殊性,因为C 语言更多的是
一种系统编程语言,对硬件的控制能力很强,在高级语言里面无出其右者,于是给人以C
程序的速度必定最快的印象。但是忘记了这个速度快是来自C 语言的系统编程特性,而在
做科学计算时,并不需要过多地涉及到系统内核,因此C 语言的长处在科学计算方面可以
说并不能适当地发挥,相反,在数值计算方面,C 绝对不是FORTRAN 的对手,因为相对
于C 以系统编程为目的,FORTRAN 是以科学计算为目的的,语言本身在设计之初,就考
虑到了针对科学计算而进行优化,因此FORTRAN 生成的可执行代码是高度优化的。
实际的运行效率方面的比较也表明了FORTRAN 在科学计算方面的优越性。无论是国
内还是国外,也无论是经典的串行机还是并行矢量机,大量的经验表明,在执行同一个科学
计算任务时,C 或C++代码的效率都低于FORTRAN 代码,。
除了常见的对于C 有着高效的迷信之外,还常常有着对于FORTRAN 是如何如何落后
的偏见。当然这种偏见是有来源的,那就是曾经功勋卓著的FORTRAN 77 在很长一段时间
里面,都缺乏进取心,使得迄今很多人提起FORTRAN,想到的就是在当今时代已经显得非
常落后的FORTRAN 77。实质上,FORTRAN 标准在进入FORTRAN 90 时代之后,特别是
现时的FORTRAN 95 版本,可以说只要是对于科学计算有用的特性,C 和C++有的,现在
FORTRAN 95 绝对不缺,而反过来FORTRAN 95 所具有的很多针对科学计算的特性,却是
C 和C++所不具有的。哪怕是C++最引以为傲的面向对象性质,FORTRAN 2000 也将全面
引入。所以说,FORTRAN 已经完全赶上了编程语言的潮流。
与程序运行的效能有关的另外一个重要方面,是程序语言能否支持程序的并行运行,
在这点上,可以说FORTRAN 表现了它的最大优势,因为FORTRAN 95 正是着力于获得并
行计算的能力的一个版本。
8
由于现代科学计算的规模越来越大,计算并行化是一条不得不走的路线,现代计算机
硬件的发展,也使得并行化具有实际的普及前景,因为不仅专门的大型计算机是并行的,现
在的一般PC 都可以拥有多个处理器,因此现代的从事科学计算的用户不得不掌握并行化计
算的编程能力。
但是进行并行化编程所遇到的一个主要问题,就是任何过程编程语言都内在地使用线
性存储模式,也就是一个数组的元素总是被认为按照数组元素的先后顺序而连续地存储在内
存单位里面,这样一种模式就决定了这样的过程编程语言无法真正地实现对并行计算的描
述。而FORTRAN 95 则完全改观了这种制约,因为在FORTRAN 95 里面对于数组以及数组
运算建立了全新的面向并行化计算的概念,诸如纯过程的概念,逐元过程的概念,FORALL
结构等等,都有效地摆脱了线性存储模式的制约,使得FORTRAN 95 成为描述并行计算的
标准语言,特别是那些专用的数据并行化语言都纷纷采用FORTRAN 作为基础语言,例如
高性能FORTRAN(High Performance Fortran),Fortran D,Vienna Fortran,以及CRAFT 等。
这样就使得使用FORTRAN 95 编写的程序可以直接在这些数据并行化语言的平台上运行,
而反过来使用这些专用语言编写的程序也可以毫不困难地转移到FORTRAN 95 平台上运
行,这样一种局面使得FORTRAN 在并行计算领域独领风骚。
综上所述,我们完全可以说FORTRAN 95 是进行科学计算的最佳语言,作为需要进行
科学计算的科学与技术领域的工作人员,掌握FORTRAN 95 远比掌握C,C++等语言要重
要得多,至于那些计算机符号代数与数值计算软件,例如MATHEMATICA,MAPLE,
MATLAB,Macsyma,MATHCAD 等等,只能说是进行科学计算的教学模型与辅助工具,
由于它们都提供了现成的算法,因此可以使得初学者能够应用于一些简单的场合,真正要用
它们来对付稍微大一点的问题,有经验的用户都知道,那会是一件非常痛苦的强人所难的事
情。因此最终要自由地进行科学计算,则非FORTRAN 莫属。