你可能知道,Fortran是一种科学计算语言。然而,大多数著名的高级科学计算语言的核心都是用C语言编写的,而不是Fortran。为什么呢?
你可能知道,Fortran是一种科学计算语言。然而,大多数著名的高级科学计算语言的核心都是用C语言编写的,而不是Fortran。为什么呢?
回答你最初的问题:Matlab最初是用Fortran写的。但Matlab的创始人Cleve Moler和他的伙伴在1983年做的第一件事情之一就是用C重新编写了整个Matlab应用程序:
Jack Little离开了咨询公司的工作,去Sears购买了一台新的COMPAQ便携式电脑。这台机器只有256 KB的内存和没有硬盘。Jack必须交换5-1/4英寸软盘来编译程序。Jack和Steve花了一年半的时间用C重新编写了MATLAB,并添加了他们构想中的新功能。(MATLAB和MathWorks二十年来的发展)
我认为今天更相关的一个问题是:为什么他们在1983年转向使用C?
我猜测C可能有某些Fortran没有的特性,因此转换更多出于必要性和代码可维护性的考虑。
Fortran77缺少的一个杀手级特性是动态内存分配(动态内存分配仅在Fortran90中添加)。在我看来,克服这种唯一的限制将是一个可怕的交易破坏者。
编辑:
dmckee的答案对于为什么使用Fortran77会很痛苦有一个很好的解释。
基于经验的猜测:
内存管理。
Fortran(即当Matlab编写时存在的Fortran版本)不支持动态内存管理。这使得处理大型工作变得困难(例如,参见CERNLIB)。
CERNLIB通过在公共块中分配一个大数组,并为数组单元格实现类似malloc的(de)分配器来解决了该问题。虽然笨拙但有效:数组偏移量相当于指针,您可以继续使用...
据我了解,Matlab是用一些混合语言编写的,包括但不限于C、FORTRAN、Java和Matlab本身。
我认为它在幕后使用最好的库,包括LAPACK(FORTRAN)、FFTW(C)等等,可能还有许多其他库。
我认为原始版本纯粹是由FORTRAN编写的,但随着它变得更加完善和商业化,他们毫不犹豫地选择适合每个部分的正确语言。我不怪他们-我很讨厌用FORTRAN编写解析器或GUI!
Matlab最初是用Fortran编写的,它更像是一堆Fortran例程的包装器。那么问题来了,为什么要用C重写它呢?事实上,为什么Fortran输给了C和其他不太适合数值计算的语言?答案是Fortran在政治方面受到了严重打击。由于各种原因,标准委员会无法决定Fortran 77的替代品。所以,等到Fortran 90最终推出时,Fortran已经在很多方面输给了其他语言。现在这种情况已经得到了纠正。Fortran 2003是一种很好的语言,它非常适合数值计算,并且具有动态分配、快速io和面向对象式的构造、多态性、派生类型等特性。(Fortran 2008将更加出色)
现代Fortran并不是设计用来编写GUI界面的,但它被设计用来调用和被其他语言调用。因此,如果今天重复Matlab的练习,很可能数值部分会用Fortran编写,而用户界面则使用其他语言。