В некоторых научных средах вы часто не можете обойтись без FORTRAN, поскольку большинство разработчиков знают только эту идиому, и есть много устаревшего кода и связанного с ним опыта. И, честно говоря, не так много других кросс-платформенных опций для высокопроизводительного программирования (С++ выполнит задачу, но синтаксис, нулевые стартовые массивы и указатели не совместимы с некоторыми людьми).
Итак, предположим, что новый проект должен использовать Fortran 90, но я хочу построить из него самую современную архитектуру программного обеспечения, совместив его с последними компиляторами (Intel ifort, но также включая компиляторы Sun/HP/IBM )
Итак, я думаю о том, чтобы навязывать вещи, которые широко известны как здравый смысл, но еще не стандарт в моей среде:
- запрещена глобальная переменная, отсутствуют точки доступа, метки перехода,
implicit none
и т.д. - "объектно-ориентированное программирование" (модули с типами данных и соответствующими подпрограммами)
- модульные/многоразовые функции, хорошо документированные, многоразовые библиотеки.
- утверждения/предварительные условия/инварианты (реализованы с использованием инструкций препроцессора)
- модульные тесты для всех (большинство) подпрограмм и "объектов"
- интенсивный "режим отладки" (
#ifdef DEBUG
) с большим количеством проверок и возможны все возможные проверки компилятора Intel (границы массива, подпрограммы и т.д.). - унифицированный и принудительно разборчивый стиль кодирования с использованием помощников инструмента обработки кода.
Цель состоит в том, чтобы иметь надежный, поддерживаемый и модульный код. Принимая во внимание, что во множестве устаревших кодов повторная юзабилити не была важной целью.
Я искал информацию о объектно-ориентированном Fortran, программировании по контракту (утверждения/предварительные условия/и т.д.) и нашел только уродливые и устаревшие документы, синтаксисы и документы, сделанные людьми, не имеющими масштабного участия в проекте, и мертвые проекты.
Любые хорошие URL-адреса, советы, справочные материалы/книги по этому вопросу?