7

您可能知道,Fortran 是一种用于科学计算的语言。然而,最著名的科学计算高级语言的内核是用 C 而不是 Fortran 编写的。为什么?

4

6 回答 6

20

回答您最初的问题: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 会很痛苦。

于 2009-05-29T13:59:12.483 回答
17

根据经验推测:

内存管理。

Fortran(好吧,编写 matlab 时出现的 fortran)不支持动态内存管理。这使得大型工作很痛苦(例如,参见 CERNLIB)。

CERNLIB 通过在一个公共块中分配一个巨大的数组,并为数组的单元实现一个类似 malloc 的(de)分配器来解决这个问题。笨拙但有效:数组偏移量是指针等价物,然后你就走了......

于 2009-05-29T13:17:38.167 回答
11

我的理解是,Matlab 是用各种语言编写的,包括但不限于 C、FORTRAN、Java 和 Matlab 本身。

我相信它在幕后使用了同类最佳的库,包括 LAPACK (FORTRAN)、FFTW (C) 等等。

我认为最初的版本是纯 FORTRAN,但随着它变得更加精致和商业化,他们并不羞于为每个组件使用正确的语言。我不怪他们——我讨厌在 FORTRAN 中编写解析器或 GUI!

于 2009-05-29T11:03:34.023 回答
9

我想用以下语句来限定这个答案 - 我对 Fortran 或 Matlab 一无所知

但是我认为你几乎在你的问题中回答了你自己的问题。

为什么不使用科学语言来编写内核。你会为手头的任务使用最合适的语言。内核最好用 C 编写,因为它更适合处理内核等低级任务(处理内存管理等)

内核不是科学应用程序,因此您不会使用科学语言。

再说一次,我可能完全偏离了标准,但我认为这是一个非常合乎逻辑的答案。

于 2009-05-29T10:57:06.610 回答
3

您可以通过观看他们网站上的视频,特别是在首席科学家 Cleve Moler的页面上查看有关 Matlab 起源的一些信息。

于 2009-05-29T10:54:20.313 回答
2

Matlab 最初是用 Fortran 编写的,它更像是一堆 Fortran 例程的包装器。所以问题是为什么用c重写它?事实上,为什么 Fortran 会输给 c 和其他不适合数值计算的语言。答案是 Fortran 深受政治影响。由于各种原因,标准委员会可以决定替换 Fortran 77。因此,当 Fortran 90 最终问世时,Fortran 已经失去了很多其他语言的基础。这种情况现在已经得到纠正。Fortran 2003 或多或少在 gnu 编译器中实现,是一种很好的语言,它非常适合数字,此外还具有动态分配快速 io 和 OO ish 构造多态派生类型等。(Fortran 2008 会更好)

现代 Fortran 不是为编写 gui 接口而设计的,但它旨在从 C 和其他语言调用和被调用。因此,如果今天重复 matlab 练习,则很有可能用 Fortran 编写数字位,而用其他方式编写用户界面。

于 2011-02-12T01:39:42.843 回答