LINUX.ORG.RU

Fortran: 65 лет с момента выхода первого справочного руководства

 , ,


2

1

В этот день 65 лет назад, 15 октября 1956 года, появилось первое справочное руководство для программирования на языке FORTRAN: «The Fortran Automatic Coding System for the IBM 704».

За 3 года до этого, сотрудник компании IBM Джон Бэкус предложил создать язык программирования, позволяющий записывать команды в более удобной для пользователя форме. В течение 1954-1957 годов Джон Бэкус вместе со своей группой разработали язык, считающийся первым широко используемым языком программирования высокого уровня, и в 1957 году выпустили первый оптимизирующий компилятор для него.

Так как Fortran быстро стал популярным для написания программ для интенсивных научных расчётов, это с самого начала сподвигло разработчиков конкурирующих платформ создавать компиляторы, способные генерировать быстрый и эффективный код.

Одним из важнейших событий в процессе развития языка стало принятие ANSI решения создать рабочую группу по стандартизации языка, что привело к появлению в 1966 году его первого стандарта FORTRAN 66. Некоторые созданные разработчиками компиляторов расширения к нему вошли в следующий стандарт FORTRAN 77 (в 1978 году), устранив ряд недостатков предыдущего стандарта.

К сожалению, только к началу 1990-х, с большой задержкой, был выпущен следующий стандарт Fortran 90, получивший множество улучшений, учитывающих изменения в используемых методах программирования по сравнению с теми, что были актуальны для 1978 года. Небольшим улучшением этого стандарта стал Fortran 95 (1997), включивший в себя возможности расширения High Performance Fortran для встроенного распараллеливания вычислений.

Последующие стандарты Fortran 2003 (2004), Fortran 2008 (2010), Fortran 2018 (2018) прежде всего добавляли и улучшали поддержку ООП, взаимодействие с языком C, усовершенствование динамического размещения данных в памяти, встроенную поддержку средствами языка параллельных вычислений (Co-Arrays Fortran). Стандарт Fortran 202x находится в разработке и дополнит стандарт Fortran 2018 несколькими расширениями.

На сегодняшний день многие вендоры предлагают свои компиляторы, дополнительные инструменты и математические библиотеки для Fortran:

  • GNU Fortran Compiler (gfortran из набора GCC);

  • LLVM Flang;

  • Intel;

  • NAG;

  • NVIDIA (NVIDIA HPC SDK);

  • HPE / Cray (Cray Compiling Environment (CCE))

  • IBM (IBM XL Fortran);

  • AMD (AMD Optimizing C/C++ Compiler (AOCC) - LLVM based);

  • ARM (Linux user-space Fortran compiler - LLVM based);

  • Absoft;

  • Oracle / Sun;

  • Lahey / Fujitsu;

  • Silverfrost FTN95;

  • NEC (NEC SX-Aurora TSUBASA Compilers, Libraries and Tools).

Популярность языка и его простота использования для научных расчётов позволила Fortran прочно занять свою нишу среди языков, использующихся в области HPC (High Performance Computing) для решения задач астрономии, метеорологии, вычислительной химии, вычислительной гидродинамики и ряда других областей.

(На основе материалов статей https://www.wikipedia.org и других источников)

>>> Подробности

★★★★★

Проверено: Zhbert ()

Ответ на: комментарий от anonymous

Кому? Троллю, пришедшему рассказать о том, о чём всё в курсе?

grem ★★★★★ ()
Ответ на: комментарий от anonymous

Чтобы сделать студенческую лабу «бохатый API» MatLab может быть избыточен.

чтобы сделать лабу может быть ненужна та уйма кода на фортране, которую понаписали за пару-тройку десятилетий

На Fortran тоже имеется достаточно много расчетных библиотек, причем некоторые из них являются очень значимыми в своих областях

не факт, что они подходят для образовательных целей

Matlab стоит денех, а gfortran или flang - бесплатны.

кафедра покупает лицензию на компы в лабораторной и порядок

Программа на Matlab раз в 5 медленнее программы на Fortran

не всегда. Боттлнеки довольно просто переписываются в виде раширений на С.

Кому-то нравится делать все расчетные модули своими руками.

матлаб не запрещает все делать вручную

seiken ★★★★★ ()

Я вот не пойму какого хера мой коммент удалили где про пидарасов было под предлогом нецензурщины? Кому-то из модеров череп жмет так, что он не знает что это не матерное слово?

BydymTydym ()
Ответ на: комментарий от seiken

не всегда. Боттлнеки довольно просто переписываются в виде раширений на С.

Мы здесь фортран обсуждаем или С? Может быть еще пару языков поизучать чтобы приемлемую скорость от матлаба получить? Ты какой то диванный теоретик. Лицензию на кафедру тебе дали. Даже в бриташке могут нафиг послать, а уж у нас практически сто процентов.

На Fortran тоже имеется достаточно много расчетных библиотек, причем некоторые из них являются очень значимыми в своих областях

А у тебя вполне может выбора не быть. Этих библиотек запросто может не быть нигде кроме фортрана. И ты, кстати, тут топил за то чтобы не писать велосипеды. Ты уж определись.

anonymous ()
Ответ на: комментарий от anonymous

Да ничего особо ужасного нет в копипасте. Гораздо хуже когда тебе надо, а ничего нет. Ну вот вообще. И приходится все ручками, все ручками. Сила фортрана и в скорости и в том что практически любую научную задачу, ну кроме совсем недавно появившихся, уже человек десять в разных концах мира решали - часто можно взять готовый кусок кода. И он, скорее всего, будет быстрым. А в стильных, современных, модных языках, которые каждый год «убивают СИ», «закапывают фортран» итд мало того что все надо самому написать, так еще нет уверенности что будет работать в следующей версии. И вообще что эта версия будет.

anonymous ()
Ответ на: комментарий от anonymous

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

grem ★★★★★ ()
Ответ на: комментарий от anonymous

Ну и вот, напоследок пример, о том, как реально «быстро» это ваше убожество. Проникнитесь всей глубиной интеллекта разработчика:

      subroutine dcerr(np,v1,a2,v2,err)
!*
!* subroutine to compute error in most recent iteration
!* the error is defined as absolute value of change in field
!* divided by the field.
!*
      complex*16 v1(*),v2(*),a2,err,sum1,sum2,dum

      sum1=0.0
      sum2=0.0
      do i=1,np
        dum=a2*v2(i)
        sum1=sum1+dconjg(dum)*dum
        sum2=sum2+dconjg(v1(i))*v1(i)
      end do
      err=cdsqrt(sum1/sum2)

      return
      end

Надеюсь комметарии не нужны ?

И это не специально подобранный пример, такое в любой поделке, ткни наугад и увидишь.

anonymous ()
Ответ на: комментарий от anonymous

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

      logical inan
      integer k
      real w
      w=sqrt(k-1.5)
      write(*,*)w
      write(*,*)inan(w)
      stop
      end
c Lana Erofeeva, 2004
      logical function inan(w)
      real w
      integer k 
      character*80 c 
      inan=.false.
      write(c,*)w
      do k=1,80
       if(c(k:k).ne.' ')go to 1
      enddo
      return ! blanks only
1     c=c(k:80)
      write(*,*)'c(1:3):',c(1:3)
      if(c(1:3).eq.'NaN')inan=.true.
      return
      end

И опять же, это просто первый ткнутый наугад файл из какой-то немерямо серьёзной научной программы.

И вот такими руками создаётся очень серьёзный секретный софт для ответственных научных и математических вычислений ядерных взрывов.

anonymous ()
Ответ на: комментарий от samy_volosaty

Новый норм читается.

Лет 10 назад ещё до меня один проект переписали с 77 на 90-2003. Поэтому там уже нет commonblock’ов и прочих радостей. Переписывал в основном человек, который свой проект пишет на C++. Какая-то библиотека в рамках проекта написана на C++ ещё другим человеком и подключается через интерпорабельность.

Я по мелочи что-то писал в его рамках.

Для одного открытого проекта что-то добавил по образцу того, что уже было.

Coarrays пока не использовали, всё напрямую через mpi.

Вот другому коллеге повезло меньше: он ковыряет смесь 66 и 77 и commonblocks (их количество) вызывает боль :) Может быть перепишет, потому что постепенно заменять код проще - он продолжает работать.

grem ★★★★★ ()
Ответ на: комментарий от anonymous

Пробелы есть там, где обязаны, остальное на усмотрение. Почему тебя это так беспокоит? Ночью хорошо спал? Не ворочался? Мочеиспускание нормальное? Позывы частые?

grem ★★★★★ ()
Ответ на: комментарий от grem

Ну и что тебе прокомментировать, раз ты знаешь синтаксис ? Или сам что-то можешь прокомментировать ?

anonymous ()
Ответ на: комментарий от anonymous

Я не собираюсь комментировать произвольный кусок кода из неизвестно какого проекта, неизвестно какого года.

Ты его приташил, ты и комментируй. Перестань завидовать коту, который может дотянуться до своих яиц.

grem ★★★★★ ()
Ответ на: комментарий от grem

Раз ты интеллектом не дотягиваешь даже до автора того текста, и более того, ты настолько непроходимо туп (увлечение фортраном даром не проходит), что не распарсил десяток строк на любимом языке, то так уж и быть - разжую.

Строка 13 и 14 - сложение чисто вещественных значений, соответственно в каждой строке по два лишних умножения и два лишних сложения. Строка 12 - умножение на константу можно вынести за цикл. Компилятор о таких вещах сам не догадается, тем более что эта нетленка высрана четверть века назад, когда мозга у типичного компилятора было чуть более, чем в твоей черепной коробке.

Вот вам и скорость исполнения. И такие багры на каждом шагу в любом фортрановском поделии.

Засим итог: На фортране ппц много как написано по двум простым причинам:

Крайняя невыразительность и убогость языка (напр. напейсали разложение Холецкого - раз, потом ещё раз для двойной точности, просто копипастой - два). Вменяемого решения нет по сей день, даже в последнем стандарте.
Доказано.

Повсеместное велосипедостроение (напр. сортировка - используется часто, в стандартной библиотеке нет, может занимать существенную часть исходного кода, алгоритм неуниверсален, т. е. сортирует только массив одиночной точности). Константы Pi (да и других тоже) до сих пор нет - ну реально же язык, подходящий только для вычислений.
Доказано.
anonymous ()
Ответ на: комментарий от anonymous

Мдя…

  1. Хреново можно написать абсолютно на любом языке, даже на таком «дуракоупорном» языке как ADA - это факт всеизвестный.

  2. Я вам даже более скажу, Fortran изначально разрабатывался чтобы быть языком для научных вычислений, которым могли бы пользоваться непрофессиональные программисты, поэтому в нем есть много ограничений. Кроме того эти ограничения позволяют компилятору оптимизировать многие моменты. И таки да, Fortran замечательно работает именно с массивами и матрицами, под которые он был изначально заточен и с которыми работает 80% научных программ, но не с другими структурами, типа графов - это тоже по дизайну языка.

  3. Поэтому не мешайте в одну кучу прямой угол и температуры кипения воды.

anonymous ()
Ответ на: комментарий от anonymous

Фортран виноват! Распечатай свою мантру и на стену повесь.

grem ★★★★★ ()
Ответ на: комментарий от anonymous

Строка 13 и 14 - сложение чисто вещественных значений

ещё скажи, что тип после перемножения двух комплексных чисел автоматом поменяется на double.

grem ★★★★★ ()
Ответ на: комментарий от anonymous
...
      call a(i,j)
...
end


subroutine a(i,j,k)
...

м разбирайся почему падает

samy_volosaty ★★★★★ ()
Ответ на: комментарий от yvv

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

Фсё зовиситЪ от смысла, который вкладывается в понятие «развитие». Иногда «развитие» происходит ради «розвития», «ну! чтобы отличаться»

Attila ★★ ()
Ответ на: комментарий от yvv

, а кроме него никто не понимает, что этот код делает.

А вежливо попросить объяснить хипспрограммистская гордость не позволяет? Или, банально, базового образования не хватает для понимания?

Attila ★★ ()
Ответ на: комментарий от yvv

весьма удобный способ сравнить 100500 экспериментов с +10000 графиков в каждом и обсудить с коллегами.

Откройте для себя и коллег excel, и перестаньте насиловать трупп стюарда :)

Attila ★★ ()
Ответ на: комментарий от anonymous

Древние саксаулы не смогли осилить тот же С или С++ ?)))

Ога! А древние римляне не умели водить «Теслу»

Attila ★★ ()
Ответ на: комментарий от mrdeath

Какие плюсы. Golang, nodejs. и по скорости работы и по скорости написания будет быстрее Фортрана.

Я так понимаю, что предметная область, по сравнению с её «погромированием», ето ТЬХУ! Любой погромист лучше физика, химика или математика разбирается в его предметной области.

А код не переписываются только тот, который никому не нужен.

Если код не понятен, значИт НИНУЖЕН.

Сегодняшние технологии позволяют получать результат без геморроя.

Без геморроя, вообще, всё просто, лехко и приятно. А вот с геморроем, с*ка, никто не хочет связываться. Особенно погромисты. Им и так на булку с маслом хватает.

Attila ★★ ()
Ответ на: комментарий от IRASoldier

Ты ещё расскажи байку про то, как ужасные корпорации, сговорившись, уничтожили вечную лампочку накаливания вместе с её изобретателем

Не знаю, как лампочку, но Форд, они уничтожили точно. Как и Мерседес, Тоёту и Фиат. Держится только КРАЗ и то, только за счёт стальной клёпанной рамы, расчитанной в сталинской шаражке на железных феликсах.

Attila ★★ ()
Ответ на: комментарий от token_polyak

BigCyc так и остался idee fixe нескольких людей, остальные безоговорочно приняли новую дефиницию «интеллекта».

Я так думаю, что Вы выразились «нипанятна» для 99% «аудитории»

Attila ★★ ()
Ответ на: комментарий от anonymous

Меня уже расстреляли, беги, идут за тобой!

Расстрел, это не страшно. Страшно, если не опохмелят после расстрела.

Attila ★★ ()
Ответ на: комментарий от IRASoldier

Ааа, Столяров… Который про «systemd на самом деле не нужен» и про страшный вред JavaScript любил рассказывать…

А, что нужен? И для чего? А ЖабаСкрипт полезный? Интересно, уже появились вакансии типа «гадалка по внутренностям Жабы»? Чтобы предсказывать работоспособность сайтов в зависимости от расположения небесных светил.

Attila ★★ ()
Ответ на: комментарий от Attila
Ответ на: комментарий от Attila

Откройте для себя и коллег excel

Не волнуйся, хлопчег, коллеги используют excel на полную катушку, там где он уместен. Для презентации результатов экспериментов, однако, лучше способа, чем автоматически генерируемая веб страничка, я лично не знаю. Пробовали разное, поверь на слово. Да и в смежных конторах делают то же самое.

yvv ★★☆ ()
Ответ на: комментарий от Attila

А вежливо попросить объяснить хипспрограммистская гордость не позволяет? Или, банально, базового образования не хватает для понимания?

А ты вкурсе, какова главная характеристика реально говёного кода? Видимо нет. Тогда я тебе открою секрет: код является реально говёным, когда его автор сам не понимает, как он работает, потому что забыл. Такое происходит сплошь и рядом и конкретно раздражает, если честно.

yvv ★★☆ ()
Ответ на: комментарий от Attila

так понимаю, что предметная область, по сравнению с её «погромированием», ето ТЬХУ

я такого не говорил.

Если код не понятен, значИт НИНУЖЕН.

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

А вот с геморроем, с*ка, никто не хочет связываться.

я 20 лет занимаюсь проектами, с которыми особо никто не хочет связываться. Но при этом я выбираю инструменты которыми этот геморой можно уменьшить и при этом с лучшим результатом.

Ну а если люди ничего кроме пистона и кобола не пробовали, то мне их просто жаль.

mrdeath ★★★★★ ()
Ответ на: комментарий от mrdeath

код будет писаться разными людьми по сто раз.

Будет, будет. Но это не значит, что его кто-то кроме автора увидит.

grem ★★★★★ ()
Ответ на: комментарий от IRASoldier

Summary: use systemctl and systemctl status as modern, more complete replacements for the traditional boot-up status messages of SysV services. systemctl status not only captures in more detail the error condition but also shows runtime errors in addition to start-up errors.

Я прям рыдаю в умилении от велосипеда с новыми квадратными колёсами.

Большинство языков программирования выросли из древней парадигмы, порожденной еще во времена Фортрана. Гуру Javascript — Дуглас Крокфорд — выкорчевывает эти засохшие корни

Я в своей жизни видел столько ГУРУ, что у меня появилась аллергическая реакция на них. НЕ! Фортран и его GOTO кого угодно выбесят. НО ЖабаСкрипт, лично меня, бесит ещё больше.

Attila ★★ ()
Ответ на: комментарий от yvv

Для презентации результатов экспериментов, однако, лучше способа, чем автоматически генерируемая веб страничка, я лично не знаю.

Вот, точно знаю, что «веб страничка» она для КПР.

Attila ★★ ()
Ответ на: комментарий от yvv

Тогда я тебе открою секрет: код является реально говёным, когда его автор сам не понимает, как он работает, потому что забыл.

Ты мне про фортран-стиль не рассказывай. Сам пару лет назад «рефакторил» код на БАСИКЕ из фортрановского во в вменяемое на том-же БАСИКЕ. Слава Богу, там было всего 3 страницы. Из штук 7 GOTO остался только 1, и то потому, что мне стало влом разбирать логику аффтара и мне не хватило терпения и квалификации.

Attila ★★ ()
Ответ на: комментарий от mrdeath

Ну а если люди ничего кроме пистона и кобола не пробовали, то мне их просто жаль.

Не стоит жалеть тех, кто состоялся в в других областях науки или инженерии. Пожалейте лучше себя. Программирование, вместо того чтобы упростить связь с предметной областью, отгородилось от неё всяческими «концепциями» и «парадигмами».

Attila ★★ ()
Ответ на: комментарий от Attila

в умилении от велосипеда с новыми квадратными колёсами

Рынок. Выбор потребителя. Демократия. И так далее - если кому-то не нравится путь, избранный большинством, он волен следовать собственным - например, контрибьютить в Devuan и/или его же повсеместно юзать. Но при этом оценки - это просто субъективные оценки. «Кто-то любит арбуз, а кто-то свиной хрящик.» (с) (tm)

лично меня, бесит ещё больше

Ну так и не пишите на нём своего кода. Никто же не заставляет.

IRASoldier ()
Последнее исправление: IRASoldier (всего исправлений: 1 )

@Vudod (Релиз языка программирования Julia 1.3 (комментарий))

Арьен Маркус в своей книге предлагал компактный вариант реализации. Хоть он и пишет, что она не самая быстрая и потребляет чуть больше памяти.

recursive function qsort(data) result(sorted)
    real, intent(in) :: data(:)
    real             :: sorted(size(data))

    if (size(data) > 1) then
        sorted = [qsort(pack(data(2:),data(2:)<data(1))), data(1), &
                  qsort(pack(data(2:),data(2:)>=data(1)))]
    else
        sorted = data
    end if
end function qsort

О реализации вспомнили здесь

Несколько реализаций,в том числе и похожие на приведённые тобой, рассматриваются здесь: https://www.mjr19.org.uk/IT/sorts/

Надо бы глянуть на реализацию из fortran stdlib, они взяли алгоритм, использующийся в rust :)

grem ★★★★★ ()
Ответ на: комментарий от IRASoldier

Рынок. Выбор потребителя. Демократия.

Пустомельные лозунги.

если кому-то не нравится путь, избранный большинством,

Большинство не выбирает, большинство «жрёт чо дали»

например, контрибьютить в Devuan и/или его же повсеместно юзать.

и подвергаться нападкам «большинства».

Чтобы быть «маргиналом», надо быть весьма обеспеченным человеком. Независимость дорого стоит.

Attila ★★ ()
Ответ на: комментарий от Attila

Большинство не выбирает, большинство «жрёт чо дали»

Значит их это устраивает. Задача - иметь инструмент, а не выпендриться непохожестью и инаковостью.

и подвергаться нападкам «большинства»

Если ты надел клоунский колпак с бубенчиками и идешь по улице - не удивляйся, что тебя будут принимать за клоуна. А если ты при этом ещё и пристаешь к прохожим и требуешь, чтобы они тоже одели колпаки - «а что это вы такое стадо, не хотите выделиться?» не удивляйся более неприятным последствиям.

IRASoldier ()
Последнее исправление: IRASoldier (всего исправлений: 1 )
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.