正如您所知,Fortran是一种科学计算语言。然而,最着名的科学计算高级语言的核心是用C而不是Fortran编写的。为什么?
答案 0 :(得分:20)
回答你的原始问题:Matlab最初是用Fortran编写的。但是Matlab,Cleve Moler和他的合作伙伴在1983年创建的第一件事就是重写整个Matlab应用程序在C:
Jack Little离开了他的工作 咨询公司并购买了新的 西尔斯的COMPAQ便携式计算机。该 机器只有256 KB的内存和 没有硬盘;杰克不得不交换 5-1 / 4英寸软盘编译 程式。杰克和史蒂夫花了一年时间 一半用C语言重写MATLAB, 添加他们所拥有的新功能 sioned。 (The Growth of MATLAB and The MathWorks over Two Decades)
我认为今天一个更相关的问题是问:为什么他们在1983年转向C?
我的猜测是,C可能具有Fortran没有的某些功能,因此切换更加不必要,并且符合代码可维护性。
Fortran77中缺少一个杀手功能是动态内存分配(动态内存分配仅在Fortran90中添加)。在我看来,解决单一限制将是一个可怕的交易破坏者。
编辑:
dmckee的回答很好地解释了为什么使用Fortran77会很痛苦。答案 1 :(得分:17)
根据经验猜测:
Fortran(好吧,编写matlab时出现的fortran)不支持动态内存管理。这使得大型工作变得痛苦(例如,参见CERNLIB)。内存管理。
CERNLIB通过在公共块中分配一个巨大的数组,并为数组的单元格实现malloc(de)分配器来解决这个问题。笨重但工作:数组偏移是指针等价物,你走了......
答案 2 :(得分:11)
我的理解是Matlab是用大杂烩的语言编写的,包括但不限于C,FORTRAN,Java和Matlab本身。
我相信它在幕后使用了最好的库,包括LAPACK(FORTRAN),FFTW(C)以及更多。
我认为原始版本是纯粹的FORTRAN,但随着它变得更加精致和商业化,他们并不羞于为每个组件使用正确的语言。我不怪他们 - 我讨厌在FORTRAN中编写解析器或GUI!
答案 3 :(得分:9)
我想用以下陈述来证明这个答案 - 我对Fortran或Matlab一无所知
但是我觉得你几乎在你的问题中回答了你自己的问题。
为什么不使用科学语言编写内核。您可以使用最合适的语言来完成手头的任务。内核最好用C语言编写,因为它更适合处理内核等低级任务(使用内存管理等)
内核不是科学应用,因此您不会使用科学语言。
同样,我可能完全不合适,但我认为这是一个非常合乎逻辑的答案。
答案 4 :(得分:3)
您可以通过在他们的网站上观看视频,特别是首席科学家Cleve Moler的page,找到有关Matlab起源的一些信息。
答案 5 :(得分:3)
Matlab最初是用Fortran编写的,它不是一堆的包装器 Fortran例程。所以问题是为什么要在c中重写它?事实上Fortran为什么输了 out to c和其他不适合数值计算的语言。答案是Fortran在政治上遭受了严重的打击。由于各种原因,标准委员会可以决定替换Fortran 77.因此,当Fortran 90最终问世时,Fortran已经失去了很多其他语言的基础。这种情况现在已得到纠正。 Fortran 2003,或多或少在gnu编译器中实现,是一种很好的语言,非常适合数字,另外还有动态分配快速io和OO ish构造多态导出类型等(Fortran 2008会更好)
现代Fortran不是为编写gui接口而设计的,但它旨在调用C语言和其他语言。因此,如果今天重复进行matlab练习,很可能数字位将在Fortran中编写,而用户界面则在其他位置。