代码之家  ›  专栏  ›  技术社区  ›  Kamran Bigdely

为什么用C语言编写Matlab而不是用Fortran?

  •  7
  • Kamran Bigdely  · 技术社区  · 17 年前

    如你所知,Fortran是一种科学计算语言。然而,最著名的科学计算高级语言的内核是用C语言而不是用FORTRAN语言编写的。为什么?

    6 回复  |  直到 15 年前
        1
  •  20
  •   Trevor Boyd Smith knh170    17 年前

    回答你原来的问题:matlab最初是用fortran编写的。 但是Matlab的创建者Cleve Moler和他的合作伙伴在1983年做的第一件事就是用C语言重写整个Matlab应用程序:

    杰克·利特尔在 咨询公司又买了一个新的 Sears的Compaq便携式计算机。这个 计算机只有256 KB的内存和 没有硬盘,杰克不得不换 要编译的5-1/4英寸软盘 程序。杰克和史蒂夫花了一年时间 用C语言重写matlab, 添加他们有envi的新功能- 拉伸的( The Growth of MATLAB and The MathWorks over Two Decades )

    我认为今天一个更为相关的问题是:他们为什么在1983年切换到C?

    我的猜测是,C可能有一些Fortran没有的特性,因此这种转换更不必要,也更符合代码可维护性的考虑。

    杀手 Fortran77中缺少的功能是动态内存分配(仅在Fortran90中添加了动态内存分配)。绕过那个 单一的 在我看来,限制将是一个可怕的交易破坏者。

    编辑:

    dmckee的答案很好地解释了为什么使用fortan77会很痛苦。

        2
  •  17
  •   dmckee --- ex-moderator kitten    17 年前

    根据经验进行猜测:

    内存管理。

    Fortran(编写matlab时使用的Fortran)不支持动态内存管理。这使它成为大工作的痛苦(例如, CERNLIB )

    cernlib通过在公共块中分配一个巨大的数组来解决这个问题,并为数组的单元实现一个malloc-like(de)分配器。笨重但有效:数组偏移量是指针等价物,你可以走了…

        3
  •  11
  •   Drew Hall    17 年前

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

    我相信它在幕后使用了最好的库,包括lapack(fortran)、fftw(c)等。

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

        4
  •  9
  •   chills42    17 年前

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

    不过,我觉得你的问题几乎是你自己回答的。

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

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

    同样,我可能完全偏离了目标,但我认为这是一个非常合乎逻辑的答案。

        5
  •  3
  •   tvanfosson    17 年前

    你可以通过在他们的网站上,特别是在 page 首席科学家克里夫·莫勒。

        6
  •  3
  •   ps123    15 年前

    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编写,而用户界面将用其他东西编写。