В некоторых научных средах Вы часто не можете обходиться без помощи ФОРТРАНА, поскольку большинство разработчиков только знает, что идиома, и существует партия унаследованного кода и связанного опыта. И откровенно говоря, нет многих других межплатформенных опций для высокопроизводительного программирования (C++ сделал бы задачу, но синтаксис, запускающие нуль массивы, и указатели не совместимы с некоторыми людьми).
Так, давайте предположим, что новый проект должен использовать Фортран 90, но я хочу создать самую современную программную архитектуру из него, будучи совместимым с новыми компиляторами (Intel ifort, но также и включая компиляторы Sun/HP/IBM)
Таким образом, я думаю о наложении материала, который широко известен как смысл общественного блага, но еще стандарт в моей среде:
implicit none
, и т.д.#ifdef DEBUG
) с большим количеством проверок и всем возможным Intel компилятор проверяет возможный (границы массива, интерфейсы подпрограммы, и т.д.)Цель со всем, что должно иметь защищенный, удобный в сопровождении и модульный код. Принимая во внимание, что в партии унаследованных кодов возможность многократного использования не была важной целью.
Я искал вокруг ссылки об объектно-ориентированном Фортране, программирование согласно контракту (утверждения/предварительные условия/и т.д.)., и найденные только ужасные и устаревшие документы, синтаксисы и работы, написанные людьми без крупномасштабного участия проекта и мертвыми проектами.
Какие-либо хорошие URL, совет, ссылочная бумага/книги на этом предмете?
Мои 5 центов.
Fortran Wiki - хорошая отправная точка. Там есть статьи о различных аспектах программирования на современном Fortran. Юнит-тестирование, отладка, общее программирование и т.д. Также доступна очень интересная таблица по поддержке компилятором стандарта Fortran 2003. (Как уже упоминал Blklight, некоторые возможности стандарта 2003 недоступны в компиляторах. Это хорошее место для сравнения различных компиляторов.)
Я парень с C++, но я застрял с некоторыми проектами F90.
Я рекомендую прочитать этот курс: Введение в современный Фортран. М. С. Б. упоминал знаменитый "Fortran 95/2003 Explained", но эта книга достаточно большая и полна деталей. Упомянутый выше курс, напротив, является хорошим началом. Также посмотрите Интерактивный курс программирования на Fortran 90 от Ливерпульского университета.
Ошибки в программах на Fortran 90, которые могут вас удивить. Название страницы говорит само за себя. =)
Хммм... У меня в закладках также есть ссылка на PSTI RESEARCH LECTURE SERIES "SCIENTIFIC COMPUTING WITH FORTRAN 95". Попробуйте.
J.F. Sebastian упомянул F2Py и дал совет учить Python. Я присоединяюсь к его мнению. Python не является моим любимым языком. Но он достаточно полезен, чтобы его учить. В дополнение к уже упомянутым препроцессорам (многие из которых написаны на Python) и F2Py не обойдите вниманием SCons - современный инструмент построения программного обеспечения.
P.S. На прошлой неделе я купил электронную книгу на lulu.com. Scientific Software Development in Fortran by Drew McCormack. Я надеюсь, что это будет хорошее чтение, но внезапно не хватает времени. Автор - разработчик Forpedo (одного из препроцессоров, специфичных для Фортрана, упомянутых в Fortran Wiki) и автор многих книг и учебников по программированию на Objective-C и Python.
Fortran 90/95/2003 спроектирован таким образом, чтобы можно было писать модульный код, если он хочет, путем добавления модулей, частных / общедоступных, определяемых пользователем типов и т. Д. Fortran 2003 вводит дополнительные объектно-ориентированные функции. Нет смысла подключаться к C для добавления malloc, когда Fortran 90 имеет "allocate" для прямого динамического выделения массивов Fortran более безопасным способом. Размещение ваших процедур (функций и подпрограмм) в модулях, а затем «использование» модулей приведет к проверке интерфейсов. Можно использовать многие параметры отладки / проверки компиляторов, такие как проверка границ индекса.
Отличная книга, чтобы узнать об этих и других особенностях: «Объяснение Fortran 95/2003» Меткалфа, Рида и Коэна. Определенно лучше изучить лучшие возможности современного Фортрана, чем продолжать писать FORTRAN 77 - при необходимости напишите стандарты / руководство по кодированию.
Я предлагаю OP отказаться от мнения, что Фортран - это что-то неприятное в высокопроизводительных научных вычислениях, и с энтузиазмом погрузится в него. Если OP сохранит этот довольно пренебрежительный настрой, то вся его карьера программиста на Фортране будет нелегкой. И действительно, вы не можете сделать с Фортраном ничего такого, чего нельзя было бы сделать с C ++, так что зачем беспокоиться, если вы действительно этого не хотите?
В списке маркеров OP нет ничего такого, что многие из нас, кто работал с Фортраном в течение последних 30 лет не работал (с тех пор, как компиляторы Fortran 90 стали широко доступны, но некоторые из них были и раньше). Да, есть ученые-вычислители и инженеры-программисты, которые разбираются в указателях, знают, что многие (заблуждающиеся) люди начинают считать с 0 и что глобальные переменные - ПЛОХО.
Как и @MSB, я бы порекомендовал книгу Меткалфа и др. как источник информации о возможностях и особенностях современного Фортрана. И, как и @MSB, я удивляюсь идее использования C или C ++ для обертывания библиотек, для которых есть либо эквиваленты Fortran, либо более совершенные подходы. Совместимость стандарта 2003 с функциями C, реализованными в Intel Fortran, упрощает прямой вызов библиотек C.
Я бы не согласился с OP, что модульный код - это самоцель. Я предлагаю следующие цели: правильный, проверяемый и проверяемый, надежный и надежный код. Модульность - это один из способов поддержки достижения этих целей, но это тактика, а не конечная точка.Если бы я думал, что мы можем писать хорошие (в вышеупомянутом смысле) программы, содержащие 10 ^ 6 строк кода без модульности, я бы не стал беспокоиться о модульности.
Хорошо, теперь несколько конкретных советов по добавлению к тому, что OP уже намеревается делать или что ему было сказано:
И, наконец, в наши дни я думаю, что программы и программисты на Фортране лучше осведомлены об идеях функционального программирования, чем идеях объектно-ориентированного программирования.
Я очень тороплюсь, поэтому простите меня, если я оформлю этот ответ в виде контрольных точек вместо разумных предложений.
Некоторые комментарии к вашему тексту:
(Все это может показаться "очевидными" современными предположениями программирования, но в мире фортрана, большинство из которых являются большими изменениями в типичном рабочем процессе программиста)
Даже в мире современного фортрана, некоторые из этих предположений сомнительны. ... помните, программисты на фортране - это не программисты (я повторяю это в сжатой форме; я уже столько раз писал об этом на этом форуме), а инженеры, ученые и так далее. Для них (нас?) код - это не цель, а просто инструмент... для профессиональных программистов код - это все, у них нет ничего "вне его"... поэтому они так дорожат им. Для нас, инженеров, это всего лишь средство получения желаемого результата... исходя из этого, хотя хорошие практики программирования окупаются впоследствии, не стоит настаивать на них там, где в них нет очевидной необходимости".
Цель всего этого - иметь надежный, сопровождаемый и модульный код. В то время как в типичном фортране модульность часто не является главной целью, а код заслуживает доверия, только если первоначальный разработчик был очень умным, и код не был изменен с тех пор! (я немного шучу, но не сильно)
Кто-то однажды сказал, и вы не поверите, насколько это правда:
"Нет ничего более постоянного, чем временное решение".
Какие-нибудь хорошие URL, советы, справочники/книги по этому вопросу?
Учитывая несколько вышеперечисленных.
Также, пока писал этот ответ, я увидел, что High Perf. Mark опубликовал очень хороший ответ, с которым я в основном согласен... он немного подробнее описывает соблюдение стандартов.
Также, моя рекомендация - определенно разместить этот вопрос на comp.lang.fortran ... Я полагаю, что там можно получить гораздо более качественные ответы, чем здесь (я полагаю, что на всем stackoverflow не более 20 или около того программистов на фортране).
Существует набор рекомендаций по написанию кода, опубликованных в свободном доступе каким-то комитетом Европейского союза; они были бы очень полезны в качестве части этого ответа, но, к сожалению, я не могу найти их в моем быстром поиске Google, и у меня нет времени на подробный поиск. Попробуйте поискать по этой теме... возможно, вам повезет больше.