XPEHOMETP
05-07-2011, 12:59
Считать можно все на всем, хоть на Фортране, хоть на С++, хоть на Паскале. Хоть на Хаскеле с Прологом. Проблема в том, на чем считать быстрее и удобнее. Фортран изначально был как бы высокоуровневым заменителем ассемблера. То есть он не компилировался, а прямо перегонялся в машинный код. Поэтому он был изначально заточен именно на легкость такого преобразования, а не на легкость написания программ. И поэтому постоянно лидировал в скорости вычислений. Но некогда, с точки зрения человека, был жутко, невыносимо корявым языком. Фортран-IV и Алгол-66 - ну земля и небо! То есть, язык очень неудобный, но очень быстрый. В те времена скорость расчетов очень ценилась, поэтому Фортран и пошел в гору. Опять же, Ай-Би-Эма-мать (Фортрановская, ибо во всю продвигала) сильно поспособствовала...
Хотя в те времена все языки перегонялись в машинный код, как Ассемблер. И заявление Кернигана и Ричи, что С - это портируемый Ассемблер, в те времена было абсолютно верным (но не сейчас!). Однако, Фортран очень долгое время оперировал до дебильности простой моделью компьютера. В которой память под все переменные выделяется сразу и навсегда, и потом ничего сверх этого отводить не надо. Зато как при этом все быстро считается! Плата за это неслабая: вплоть до стандарта Фортрана-90 (чудовищно поздно, по сравнению с другими языками) не было никаких динамически размещаемых в памяти массивов.
Но жить-то как-то надо! В результате в реальной практике под массив приходилось заказывать памяти с избытком. Т.е. некое фиксированное количество, которое в любом случае перекроет все разумные потребности. А потом использовать под данные только ту часть из общего объема массива, которая нужна. Это еще цветочки, ягодки - это концепция псевдодинамического распределения памяти, или как там она называлась... Это вообще гроб! Точнее, такая братская могила, причем одномерная. То есть, заказывался неслабых размеров одномерный массив, а потом в него в разных местах пихались все промежуточные переменные, в том числе и массивы. И, опять же, в том числе и многомерные. Запихивались в разные порции этой братской могилы. Выглядит это обычно так: в описании некоторой подпрограммы некая переменная описана как массив (возможно, многомерный), а при реальном вызове этой подпрограммы этой переменной (массиву!) ставится в соответствие некий единичный элемент описанного выше временного массива. Скажем, а(12). И массив этот пишется во временное хранилище, начиная с 12 элемента. И еще в такие массивы, объявленные как массив действительных переменных, запихивали даже целочисленные переменные, и это было в порядке вещей.
Короче, в действительно серьезных программах, написанных по такой методе, разобраться детально просто не реально. Тем более перевести на другие языки. Тут или все похоронить, или так и использовать. А поскольку динамических массивов не было до 90-х годов, то кода такого накопилось дофига, и Фортран теперь просто непотопляем!
Хотя в те времена все языки перегонялись в машинный код, как Ассемблер. И заявление Кернигана и Ричи, что С - это портируемый Ассемблер, в те времена было абсолютно верным (но не сейчас!). Однако, Фортран очень долгое время оперировал до дебильности простой моделью компьютера. В которой память под все переменные выделяется сразу и навсегда, и потом ничего сверх этого отводить не надо. Зато как при этом все быстро считается! Плата за это неслабая: вплоть до стандарта Фортрана-90 (чудовищно поздно, по сравнению с другими языками) не было никаких динамически размещаемых в памяти массивов.
Но жить-то как-то надо! В результате в реальной практике под массив приходилось заказывать памяти с избытком. Т.е. некое фиксированное количество, которое в любом случае перекроет все разумные потребности. А потом использовать под данные только ту часть из общего объема массива, которая нужна. Это еще цветочки, ягодки - это концепция псевдодинамического распределения памяти, или как там она называлась... Это вообще гроб! Точнее, такая братская могила, причем одномерная. То есть, заказывался неслабых размеров одномерный массив, а потом в него в разных местах пихались все промежуточные переменные, в том числе и массивы. И, опять же, в том числе и многомерные. Запихивались в разные порции этой братской могилы. Выглядит это обычно так: в описании некоторой подпрограммы некая переменная описана как массив (возможно, многомерный), а при реальном вызове этой подпрограммы этой переменной (массиву!) ставится в соответствие некий единичный элемент описанного выше временного массива. Скажем, а(12). И массив этот пишется во временное хранилище, начиная с 12 элемента. И еще в такие массивы, объявленные как массив действительных переменных, запихивали даже целочисленные переменные, и это было в порядке вещей.
Короче, в действительно серьезных программах, написанных по такой методе, разобраться детально просто не реально. Тем более перевести на другие языки. Тут или все похоронить, или так и использовать. А поскольку динамических массивов не было до 90-х годов, то кода такого накопилось дофига, и Фортран теперь просто непотопляем!