Почему Matlab был написан на C вместо Fortran? - PullRequest
7 голосов
/ 29 мая 2009

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

Ответы [ 6 ]

20 голосов
/ 29 мая 2009

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

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

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

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

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

EDIT:

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

17 голосов
/ 29 мая 2009

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

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

Фортран (ну, фортран, существовавший во время написания matlab) не поддерживает динамическое управление памятью. Что делает боль за большую работу (см., Например, CERNLIB ).

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

11 голосов
/ 29 мая 2009

Насколько я понимаю, Matlab написан на разных языках, включая, помимо прочего, C, FORTRAN, Java и сам Matlab.

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

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

9 голосов
/ 29 мая 2009

Я хочу уточнить этот ответ следующим утверждением - я ничего не знаю о Fortran или Matlab

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

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

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

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

3 голосов
/ 12 февраля 2011

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

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

3 голосов
/ 29 мая 2009

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

...