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

为什么Matlab是用C而不是Fortran编写的?,c,matlab,programming-languages,fortran,C,Matlab,Programming Languages,Fortran,您可能知道,Fortran是一种用于科学计算的语言。然而,最著名的科学计算高级语言的内核是用C语言而不是Fortran语言编写的。为什么? 你可以在他们的网站上观看视频,特别是首席科学家克里夫·莫勒的网站上,找到一些关于Matlab起源的信息。我想用下面的陈述来限定这个答案-我对Fortran或Matlab一无所知 然而,我认为你几乎在你的问题中回答了你自己的问题 为什么不使用科学语言来编写内核呢。对于手头的任务,您将使用最合适的语言。内核最好用C编写,因为它更适合处理内核之类的低级任务(处理内

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

你可以在他们的网站上观看视频,特别是首席科学家克里夫·莫勒的网站上,找到一些关于Matlab起源的信息。

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

然而,我认为你几乎在你的问题中回答了你自己的问题

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

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


同样,我可能完全不正确,但我认为这是一个非常符合逻辑的答案。

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

我相信它在幕后使用了最好的库,包括LAPACK(FORTRAN)、FFTW(C)以及可能更多的库


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

根据经验猜测:

内存管理

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


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

回答你最初的问题:Matlab最初是用Fortran编写的。但是Matlab的创建者克里夫·摩尔和他的合作伙伴在1983年做的第一件事是用C重写整个Matlab应用程序:

杰克·利特尔辞去了他在白宫的工作 咨询公司购买了一个新的 西尔斯的康柏便携式电脑。这个 这台机器只有256KB的内存和内存 没有硬盘;杰克不得不交换 要编译的5-1/4英寸软盘 程序。杰克和史蒂夫花了一年时间 半小时后用C重新编写MATLAB, 添加他们拥有的新功能envi- 希内德。()

我想今天一个更相关的问题是:为什么他们在1983年改用C?

我的猜测是,C可能具有Fortran所没有的某些特性,因此这种转换更多地是出于必要性和代码可维护性的考虑

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

编辑:


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

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编写,用户界面将用其他语言编写。

这没有意义-标题和问题不同。你是说为什么matlab是用C写的还是Fortran是用C写的?我想很明显他指的是前者。Fortran是一种低级语言,事实上早于C语言,所以C语言也没有任何意义。我认为matlab的内核应该用Fortran而不是C语言编写,假设Fortran更适合科学计算。我甚至不会试图解决这些评论中的棘手问题。我想他的意思是为什么MATLAB是用C编写的,而不是用fortran编写的。因为,简单地说,fortran并不是完成这项工作的最佳工具。C更好。现在,fortran编译器也使用C语言和一些低级语言编写,以实现高度优化。某些语言的编译器是用什么编写的,与该语言无关——重要的是该语言的问题解决时间以及使用该语言编写的程序运行问题所需的运行时间。我强烈反对“主观”标记。Matlab选择C而不是Fortran在这个特定主题中不是主观/个人的选择!如果其他人同意,我会建议编辑标记以消除主观。我甚至不想用C编写解析器。但是,是的,你是对的-早期版本是用fortran编写的,然后他们在某个时候切换到C(完全重写该内容)。+1以确保准确性。Matlab在Java JRE上运行。大概大部分都是在.m文件或Java中,这是时间关键型的东西的一个例外,当在本机代码中实现时,它被证明是更快的。我记得当他们切换到Java版本时;它减慢了速度,但现在