ご存知かもしれませんが、Fortranは科学計算のための言語です。ただし、科学計算用の最も有名な高級言語のカーネルは、FortranではなくCで記述されています。なんで?
6 に答える
元の質問に答えるには: Matlab はもともと Fortran で書かれていました。 しかし、Matlab の作成者である Cleve Moler と彼のパートナーが 1983 年に行った最初のことの 1 つは、Matlab アプリ全体を C で書き直すことでした。
ジャック・リトルはコンサルティング会社の仕事を辞め、シアーズで新しい COMPAQ ポータブル・コンピューターを購入しました。マシンには 256 KB のメモリしかなく、ハードディスクはありませんでした。ジャックはプログラムをコンパイルするために 5-1/4 インチのフロッピーを交換しなければなりませんでした。ジャックとスティーブは、MATLAB を C で書き直し、思い描いていた新機能を追加するのに 1 年半を要しました。( 20 年にわたる MATLAB と MathWorks の成長)
今日のより適切な質問は、1983 年になぜ彼らは C に切り替えたのかということです。
私の推測では、おそらく C には Fortran にはない特定の機能があり、したがって切り替えは必要性がなく、コードの保守性のために行われたのでしょう。
Fortran77 に欠けていたキラー機能の1 つは動的メモリ割り当てでした (動的メモリ割り当ては Fortran90 でのみ追加されました)。私の意見では、その1つの制限を回避することは恐ろしい取引ブレーカーになるでしょう.
編集:
dmckee's answer には、Fortran77 を使用することがなぜ苦痛になるのかについての素晴らしい説明があります。
経験に基づく推測:
メモリ管理。
Fortran (まあ、matlab が書かれたときにあった fortran) は、動的メモリ管理をサポートしていません。これにより、大きな作業が面倒になります(たとえば、CERNLIBを参照)。
CERNLIB は、共通ブロックに途方もなく大きな配列を割り当て、配列のセルに対して malloc のような (デ) アロケータを実装することで、この問題を解決します。不格好だが機能する: 配列オフセットはポインターと同等であり、離れて...
私の理解では、Matlab は、C、FORTRAN、Java、および Matlab 自体を含むがこれらに限定されない言語のごちゃまぜで書かれているということです。
LAPACK (FORTRAN) や FFTW (C) など、おそらく他にも多くの優れたライブラリが舞台裏で採用されていると思います。
元のバージョンは純粋な FORTRAN だったと思いますが、より洗練されて商業的になるにつれて、各コンポーネントに適切な言語を使用することをためらわなくなりました。私はそれらを責めません.FORTRANでパーサーやGUIを書くのは嫌いです!
この回答を次のステートメントで限定したい - Fortran や Matlab について何も知らない
しかし、あなたはあなたの質問であなた自身の質問にほとんど答えていると思います。
科学言語を使用してカーネルを作成しないのはなぜですか。目の前のタスクに最も適した言語を使用します。カーネルは、カーネルのような低レベルのタスク (メモリ管理などの作業) での作業に適しているため、C で作成するのが最適です。
カーネルは科学的なアプリケーションではないため、科学的な言語は使用しません。
繰り返しますが、私は完全に的外れかもしれませんが、それは非常に論理的な答えだと思います.
Matlab の Web サイト、特にチーフ サイエンティストの Cleve Molerのページでビデオを見ると、Matlab の起源に関する情報を見つけることができます。
MatlabはもともとFortranで書かれていましたが、Fortranルーチンの束のラッパーではありませんでした。それで問題はなぜそれをcで書き直すのかということです。実際、Fortranがcや数値計算にあまり適していない他の言語に負けたのはなぜですか。答えは、Fortranが政治にひどく苦しんでいたということです。さまざまな理由で、標準委員会はFortran 77の代替を決定することができました。したがって、Fortran 90が最終的に登場するまでに、Fortranは他の言語に対して多くの根拠を失っていました。この状況は修正されました。GNUコンパイラに多かれ少なかれ実装されているFortran2003は、数値に適した優れた言語であり、さらに動的割り当てが高速であり、OO ishはポリモーフィズム派生型などを構築します(Fortran 2008はさらに優れています)
最新のFortranは、GUIインターフェースを作成するようには設計されていませんが、Cおよび他の言語から呼び出して呼び出すように設計されています。したがって、MATLABの演習が今日繰り返された場合、数値ビットはFortranで記述され、ユーザーインターフェイスは別の方法で記述される可能性があります。