LINUX.ORG.RU

SEI CERT опубликовал первый стандарт безопасного программирования на Fortran

 , sei cert


0

2

Software Engineering Institute при Университете Карнеги — Меллона опубликовал SEI CERT Fortran Coding Standard — первый стандарт безопасного программирования для Fortran. Документ вышел 1 июня 2026 года и размещён в открытом репозитории SEI CERT Coding Standards на GitHub. SEI отмечает, что Fortran до сих пор используется в критически важных областях: высокопроизводительных вычислениях, численном моделировании, прогнозировании погоды и инженерных расчётах, но при этом у языка не было отдельного набора правил, ориентированного именно на безопасное программирование.

Стандарт предназначен как для новых проектов, так и для аудита старых Fortran-кодовых баз. В первой версии заявлено 25 правил, которые охватывают как общие для многих языков темы — управление памятью, ввод-вывод, корректность типов и инициализации, — так и специфичные для Fortran проблемы: неявные объявления, старые языковые конструкции, границы массивов, интерфейсы процедур, OpenMP-параллелизм и перенос данных на ускорители.

Повод для появления такого стандарта не только академический. SEI указывает, что старые Fortran-приложения всё чаще оказываются в инфраструктуре, где рядом работают AI-системы и где применяются требования к безопасной разработке, включая NIST SP 800-218 и STIG. Поэтому код, который десятилетиями считался просто «научным» или «расчётным», теперь попадает в область регулирования и проверки на соответствие требованиям безопасности.

Основные разделы стандарта

  • Типы и точность вычислений. Стандарт требует отказаться от неявной типизации, централизовать определения kind и следить за тем, чтобы аргументы встроенных функций соответствовали ожидаемой точности. Это важно для Fortran, где ошибка в типе или точности может не проявиться сразу, но изменить результат численных расчётов.

  • Объявления и инициализация. Отдельные правила требуют явно объявлять чистые процедуры и разделять объявление переменной и её инициализацию, чтобы избежать неочевидного сохранения состояния между вызовами. Для старого Fortran-кода это типичный источник трудноуловимых ошибок.

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

  • Массивы и границы. Стандарт запрещает выход за границы массивов, рекомендует использовать assumed-shape-массивы для dummy-аргументов, а также требует явно задавать границы при копировании данных в память устройства и проверять, что отображённые на ускоритель диапазоны действительно покрывают все используемые элементы. Это особенно важно для современных Fortran-приложений, работающих с GPU и другими ускорителями.

  • Параллельное выполнение и OpenMP. Раздел Concurrency включает правила для явного объявления атрибутов разделения данных в OpenMP, защиты переменных редукции, предотвращения гонок данных и корректного datascoping в параллельных областях. Для HPC-кода это один из самых практичных разделов стандарта.

  • Плавающая точка и порядок вычислений. В разделе Exceptions and IEEE Arithmetic пока выделено правило о необходимости явно фиксировать порядок вычислений в выражениях с плавающей точкой. Это связано с тем, что перестановка операций может менять результат из-за особенностей округления и оптимизаций компилятора.

  • Процедуры и интерфейсы. Стандарт рекомендует отключать неявное объявление процедур, избегать неявных интерфейсов через использование модульных процедур и объявлять intent для всех dummy-аргументов. Это повышает проверяемость кода компилятором и снижает риск ошибок при передаче аргументов.

  • Область видимости и модули. В разделе Scope, Association, and Definition предлагается ограничивать область видимости переменных и процедур, импортировать из модулей только нужные сущности через ONLY, а старые COMMON-блоки заменять модулями для более безопасной инкапсуляции данных.

  • Отказ от устаревших и неопределённых конструкций. В разделе Miscellaneous собраны рекомендации не использовать устаревшие конструкции Fortran, не полагаться на расширения конкретного компилятора и не зависеть от неопределённого поведения. Это должно повысить переносимость и предсказуемость старых кодовых баз.

Состояние проекта

SEI прямо подчёркивает, что опубликованный Fortran-стандарт пока является work in progress: часть страниц может быть неполной или содержать ошибки, а сами правила и рекомендации должны дорабатываться сообществом. Разработчикам предлагают открывать GitHub issues, форкать репозиторий и отправлять pull request’ы.

В общем, SEI CERT Fortran Coding Standard пытается закрыть дыру между современными требованиями к безопасной разработке и огромным пластом старого научного, оборонного и инженерного кода, который всё ещё активно используется, но часто написан в стиле, нормальном для прошлого века и опасном для современных сред эксплуатации.

Источник

Перемещено dataman из doc

★★★★★

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

опубликованный Fortran-стандарт пока является work in progress

То есть, это даже не альфа.

отправлять pull request’ы. ([cmu-sei.github.io][11])

А где [11]?

dataman ★★★★★
()
Последнее исправление: dataman (всего исправлений: 1)
Ответ на: комментарий от dataman

приложил дополнительную ссылку

про форки написано в 1 месте, про пул реквесты в другом

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

странно что у fortran до сих пор нет никакого стандарта…

да и сами рекомендации похожи на наставления школярам

лучше бы они инструмент како-нибудь напилили

unclestephen ★★★★★
() автор топика

Прабабушка, покойница на фортране считала чой то там в сатурне, не дожила бедняжка до стандарта, все на коленках делали.

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

Стандарт есть, выходит/обновляется регулярно.

То, что они написали - де-факто грамотные паттерны известные 100 лет в обед.

Просто собрали в 1 месте и назвали документом.

anonymous
()

Фортран сможет спасти только lfortran.org, если его таки допилят в этом веке.

yvv1
()

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

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

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

нигде он уже не используется

4.2

перепишут

Расто-фембои специализируются на пере-писывании с си.

thunar ★★★★★
()
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария