2009-05-29 2 views
7

Как вы знаете, Fortran - это язык для научных вычислений. однако ядро ​​самого известного языка высокого уровня для научных вычислений было написано на языке C вместо Fortran. Зачем?Почему Матлаб написал на С вместо Фортрана?

+0

Это не имеет смысла - название и вопрос различаются. Вы имеете в виду, почему был написан Matlab на C или почему Фортран был написан на C? – Fortyrunner

+0

Я думаю, что это довольно ясно, что он означает первый. Fortran - это низкоуровневый язык, а на самом деле пред-даты C, поэтому последний не имеет никакого смысла. – Noldorin

+0

Я думаю, что ядро ​​Matlab должно быть написано в Fortran, а не C, если Fortran лучше подходит для научных вычислений. –

ответ

20

Чтобы ответить на ваш первоначальный вопрос: Matlab был изначально написан на Фортране. Но одна из первых вещей, что создатель Matlab, Клив Moler, и его партнер сделал в 1983 году должен был переписать все приложения Matlab в C:

Джек Литтл оставил свою работу в консалтинговой компании и купил новый портативный компьютер COMPAQ на Sears. Машина имела только 256 КБ памяти и нет жесткого диска; Джек должен был обменять 5-1/4-дюймовые дискеты для компиляции программ. Джек и Стив взяли год и половину, чтобы переписать MATLAB в C, , добавив новые функции, которые у них были envi- sioned.(The Growth of MATLAB and The MathWorks over Two Decades)

Я думаю, что более актуальный вопрос на сегодняшний день было бы спросить: почему они переключаются на C еще в 1983 году?

Я предполагаю, что у C, вероятно, были определенные функции, которых Fortran не имел, и, таким образом, коммутатор был больше из необходимости и в интересах ремонтопригодности кода.

Один убийца функция отсутствует в Fortran77 было динамическое выделение памяти (Динамическое распределение памяти было добавлено только в Fortran90). Обход вокруг этого ограничение было бы ужасным нарушителем сделки, на мой взгляд.

EDIT: ответ

dmckee имеет большое объяснение, почему использование Fortran77 будет болезненным.

+2

@Trevor Boyd Smith, Cleve Moler или Steve Moler? В первом абзаце вашего ответа говорится, что Клив Моллер и его партнер переписывают MatLab, но в цитате говорит Джек и Стив. – systemovich

3

Вы можете найти информацию о происхождении Matlab, просмотрев видео на своем веб-сайте, в частности, на главного ученого Клива Молера.

10

Я хочу, чтобы квалифицировать этот ответ со следующим утверждением - Я ничего не знаю о Fortran или Matlab

Однако я думаю, что вы почти ответить на свой вопрос в вашем вопросе.

Почему бы вам не использовать научный язык для написания ядра. Вы бы использовали наиболее подходящий язык для этой задачи. Ядро было бы лучше всего написано на C, так как оно лучше подходит для работы с задачами низкого уровня, такими как ядра (работа с управлением памятью и т. Д.).

Ядро не является научным приложением, поэтому вы не будете использовать научный язык.

Опять же, я могу быть полностью вне поля, но я считаю, что это очень логичный ответ.

+6

Быстрое примечание: ядро ​​вычислительного пакета программного обеспечения - это не то же самое, что ядро ​​операционной системы. В первом случае ядро ​​является основным вычислительным движком, с которым пользователь взаимодействует через пользовательский интерфейс более высокого уровня (например, окно команд MATLAB или интерфейс ноутбука Mathematica). – las3rjock

11

Мое понимание заключается в том, что Matlab написан в hodge-podge языков, включая, помимо прочего, C, FORTRAN, Java и Matlab.

Я считаю, что в нем работают лучшие в своем роде библиотеки за кулисами, в том числе LAPACK (FORTRAN), FFTW (C) и, возможно, многие другие.

Я думаю, что оригинальная версия была чистой FORTRAN, но поскольку она стала более полированной и коммерческой, они не стеснялись использовать правильный язык для каждого компонента. Я не виню их - мне бы не хотелось писать парсер или графический интерфейс в FORTRAN!

+1

Я бы не хотел писать парсер даже в C. Но да, вы правы - ранние версии были написаны в fortran, после чего они переключились на C (полностью переписали вещь) в какой-то момент. – Rook

+0

Конечно, в наши дни есть куча вещей. – Rook

+0

+1 для точности. Matlab работает поверх Java JRE. Предположительно большая часть из них либо в .m-файлах, либо в Java, за исключением критически важных вещей, которые, как оказалось, быстрее, когда они реализованы в собственном коде. Я помню, когда они перешли на версию Java; это замедлило ситуацию, но теперь, когда JRE был сделан быстрее, это неплохо и определенно стоит использовать Java-объекты в MATLAB. –

17

Гадание на основе опыта:

управления памятью.

Fortran (ну, фортран, который был вокруг, когда был написан Matlab) не поддерживает динамическое управление памятью. Это делает его болью для большой работы (см., Например, CERNLIB).

CERNLIB решает проблему, выделяя колоссальный массив в общем блоке и реализуя распределитель malloc like (de) для ячеек массива. Clunky, но работающие: смещения массива являются эквивалентами указателей, и далеко от вас ...

+2

Итак, CERNLIB в основном взломал ту же функциональность malloc()/free() в Fortran77? Почему они просто не использовали C? –

+4

Части CERNLIB относятся к началу 1960-х годов. К моменту появления c они уже имели много кода. Я считаю, что большие части были переписаны несколько раз, но разрывом сделки было: физики. Даже в 80-е годы большинство физиков только заговорили. – dmckee

+0

* кокпит head *. Я ненавижу динозавров («динозавр» - это мой эвфемизм для людей, которые преуспели в какой-то манере и теперь застревают на своем пути и отказываются меняться). Я предполагаю, что метеорит пришел и уничтожил всех физиков Фортрана в 80-х годах? Что конкретно был «метеор», который заставил физиков измениться в 80-х годах? –

3

Matlab был изначально написан на Фортран, это было более менее оберткой для кучи подпрограмм Fortran. Итак, вопрос в том, зачем переписывать его в c? На самом деле почему Fortran потерял на c и другие языки, которые не были действительно пригодны для численных вычислений. Ответ: Fortran сильно пострадал от политики. По различным причинам стандартный комитет мог принять решение о замене Fortran 77. Таким образом, к тому времени, когда Fortran 90 в итоге вышел, Fortran потерял много земли для других языков. Эта ситуация теперь исправлена. Fortran 2003, который более или менее реализован в компиляторе gnu, является хорошим языком, который хорошо подходит для числовых и, кроме того, имеет динамическое распределение быстро io и OO ish строит полиморфизм, производный тип и т. Д. (Fortran 2008 будет еще лучше)

Современный Fortran не предназначен для написания интерфейсов gui, но предназначен для вызова и вызова с C и других языков. Поэтому, если упражнение matlab было повторено сегодня, вполне возможно, что числовые биты будут записаны в Fortran и пользовательском интерфейсе в чем-то другом.

Смежные вопросы