Перейти до вмісту

Fortran

Матеріал з K2 ERP Wiki Ukraine — База знань з автоматизації та санкцій в Україні

SEO title: Fortran — мова для HPC, наукових обчислень, чисельних методів, масивів, модулів, BLAS/LAPACK і modern scientific computing SEO description: Fortran — Wiki-стаття про мову програмування Fortran для високопродуктивних наукових, інженерних і чисельних обчислень. Розглянуто modern Fortran, Fortran 2023, gfortran, Intel Fortran Compiler, HPC, масиви, modules, subroutines, functions, derived types, allocatable arrays, do concurrent, coarrays, OpenMP, MPI, BLAS, LAPACK, NetCDF, HDF5, legacy Fortran, Fortran 77, Fortran 90/95/2003/2008/2018/2023, тестування, fpm, C/Python interoperability, продуктивність, обмеження, безпеку та практичне використання Fortran у науці, інженерії, кліматичному моделюванні, фізиці, CFD і чисельному ПЗ. SEO keywords: Fortran, modern Fortran, Fortran 2023, Fortran 2018, Fortran 2008, Fortran 90, Fortran 77, gfortran, GNU Fortran, Intel Fortran Compiler, Fortran HPC, high performance computing, scientific computing, numerical computing, BLAS, LAPACK, OpenMP Fortran, MPI Fortran, coarrays, do concurrent, Fortran modules, derived types, allocatable arrays, fpm Fortran, Fortran Package Manager, NetCDF Fortran, HDF5 Fortran, legacy Fortran, scientific programming, чисельні методи, наукові обчислення, інженерні розрахунки Alternative to: повільні чисельні скрипти без компіляції; ручна реалізація лінійної алгебри; HPC-код без масивів; переписування перевірених наукових бібліотек без потреби; чисельні ядра без оптимізуючих компіляторів; legacy-науковий код без модернізації; Python-код без native numerical backend; C-код без зручної роботи з масивами


Fortran — це одна з найстаріших мов програмування, яка досі активно використовується для високопродуктивних наукових, інженерних і чисельних обчислень.

Назва Fortran походить від Formula Translation. Мова створювалася для того, щоб інженери, фізики й математики могли ефективно записувати формули, працювати з масивами й запускати обчислення на реальному hardware.

Коротко: Fortran — це мова для швидких чисельних обчислень. Вона не модна в web-розробці, але дуже сильна в HPC, фізиці, кліматичних моделях, CFD, лінійній алгебрі й старих наукових кодових базах.

Офіційний сайт Fortran-lang описує Fortran як high-performance parallel programming language, створену для computationally intensive applications in science and engineering. [1]

Головна ідея

Головна ідея Fortran — ефективно обчислювати.

Fortran історично створювався для задач, де важливі:

  • чисельні методи;
  • матриці й масиви;
  • фізичні моделі;
  • інженерні симуляції;
  • лінійна алгебра;
  • диференціальні рівняння;
  • обчислення на суперкомп’ютерах;
  • довгі цикли;
  • оптимізація компілятором;
  • стабільність коду протягом десятиліть.

Проста аналогія: Fortran — це не мова для красивих web-сторінок. Це лабораторний двигун для великих обчислень: старий, перевірений і досі дуже швидкий.

Актуальний стандарт

Станом на травень 2026 року актуальний стандарт мови — Fortran 2023.

WG5, робоча група, відповідальна за стандарти Fortran, зазначає, що Fortran 2023, ISO/IEC 1539:2023, є current standard і був опублікований у листопаді 2023 року. [2]

Fortran розвивався через багато стандартів:

  • FORTRAN IV;
  • FORTRAN 66;
  • FORTRAN 77;
  • Fortran 90;
  • Fortran 95;
  • Fortran 2003;
  • Fortran 2008;
  • Fortran 2018;
  • Fortran 2023.

Для документації: краще писати “modern Fortran” або конкретний стандарт: Fortran 2008, Fortran 2018, Fortran 2023. Просто “Fortran” може означати як сучасний код, так і старий Fortran 77.

Modern Fortran

Modern Fortran — це стиль Fortran після Fortran 90, який використовує сучасні можливості мови:

  • modules;
  • explicit interfaces;
  • array syntax;
  • allocatable arrays;
  • derived types;
  • generic interfaces;
  • elemental functions;
  • pure procedures;
  • coarrays;
  • do concurrent;
  • interoperability with C;
  • object-oriented features;
  • better type safety;
  • free-form source.

Modern Fortran сильно відрізняється від старого fixed-form Fortran 77.

Офіційний Fortran-lang Learn section збирає modern canonical way of doing things in Fortran і радить сучасний підхід до вивчення. [3]

Fortran 77 і legacy code

Fortran 77 — старий стандарт, який досі часто зустрічається в legacy-науковому коді.

Типові ознаки старого Fortran:

  • fixed-form source;
  • COMMON blocks;
  • GOTO;
  • implicit typing;
  • глобальний стан;
  • старі I/O patterns;
  • відсутність modules;
  • масиви з фіксованими розмірами;
  • складність тестування.

Legacy Fortran-код не обов’язково поганий. Часто це код, який десятиліттями перевірявся в наукових і промислових задачах.

Але його потрібно модернізувати обережно.

Free form і fixed form

Старий Fortran часто використовував fixed form.

Сучасний Fortran використовує free form.

Fixed form має історичні правила колонок.

Free form виглядає як нормальний сучасний код:

program hello
  implicit none

  print *, "Hello, Fortran"
end program hello

Для нового коду варто використовувати free form.

implicit none

Одна з найважливіших практик Fortran:

implicit none

Вона вимикає implicit typing.

Без implicit none Fortran може автоматично вважати змінні певного типу за першою літерою імені.

Це може призвести до помилок через опечатки.

Правило №1 для modern Fortran: завжди пишіть implicit none. Це простий спосіб уникнути багатьох тихих помилок.

Простий приклад

Приклад modern Fortran:

program main
  implicit none

  real :: x, y

  x = 2.0
  y = x**2 + 3.0*x + 1.0

  print *, y
end program main

Компіляція через gfortran:

gfortran main.f90 -o main
./main

Типи даних

Fortran має базові типи:

  • integer;
  • real;
  • complex;
  • logical;
  • character.

Приклад:

integer :: count
real :: temperature
complex :: z
logical :: active
character(len=20) :: name

Для чисельних задач важливо правильно вибирати precision.

Precision і kind

Fortran використовує kind для керування точністю.

Приклад:

use iso_fortran_env, only: real64

real(real64) :: x

Це краще, ніж покладатися на неявні типи.

iso_fortran_env допомагає писати більш portable код.

Масиви

Масиви — одна з головних сильних сторін Fortran.

Приклад:

real :: a(10)
real :: matrix(100, 100)

Fortran має зручний array syntax:

a = 0.0
a = a + 1.0

Операція застосовується до всього масиву.

Індексація масивів

Fortran за замовчуванням індексує масиви з 1.

Приклад:

real :: a(3)

a(1) = 10.0
a(2) = 20.0
a(3) = 30.0

Це відрізняє Fortran від C, Python і багатьох інших мов.

Можна задавати власні межі:

real :: b(0:9)

Column-major order

Fortran зберігає багатовимірні масиви в column-major order.

Це означає, що перший індекс змінюється найшвидше.

Для performance важливо правильно організовувати loops.

Наприклад, у Fortran часто краще:

do j = 1, n
  do i = 1, m
    a(i, j) = a(i, j) + 1.0
  end do
end do

Це краще відповідає layout пам’яті.

Array slicing

Fortran підтримує slicing.

Приклад:

a(1:10) = 0.0
matrix(:, 1) = 1.0
matrix(1, :) = 2.0

Slicing робить код коротшим і ближчим до математичного запису.

Allocatable arrays

Allocatable arrays дозволяють виділяти пам’ять під час виконання.

Приклад:

real, allocatable :: a(:)

allocate(a(1000))
a = 0.0
deallocate(a)

У modern Fortran allocatable arrays часто безпечніші й зручніші за старі manual memory patterns.

Subroutines

Subroutine — процедура без return value.

Приклад:

subroutine scale_array(a, factor)
  implicit none
  real, intent(inout) :: a(:)
  real, intent(in) :: factor

  a = a * factor
end subroutine scale_array

intent показує, як parameter використовується:

  • intent(in);
  • intent(out);
  • intent(inout).

Functions

Function повертає значення.

Приклад:

function square(x) result(y)
  implicit none
  real, intent(in) :: x
  real :: y

  y = x * x
end function square

Functions корисні для чисельних формул, але для масивів і складних output часто використовують subroutines.

Modules

Modules — основа modern Fortran.

Приклад:

module math_utils
  implicit none

contains

  function square(x) result(y)
    real, intent(in) :: x
    real :: y

    y = x * x
  end function square

end module math_utils

Використання:

program main
  use math_utils
  implicit none

  print *, square(3.0)
end program main

Modules допомагають організувати код і створюють explicit interfaces.

Derived types

Derived type — користувацький тип даних.

Приклад:

type :: particle
  real :: x
  real :: y
  real :: mass
end type particle

Використання:

type(particle) :: p

p%x = 1.0
p%y = 2.0
p%mass = 3.0

Derived types дозволяють писати більш структурований modern Fortran.

Interfaces

Interfaces потрібні для generic procedures, explicit interfaces і interop.

Приклад generic interface:

interface norm
  module procedure norm_real
  module procedure norm_complex
end interface norm

Interfaces роблять API чистішим і типобезпечнішим.

Elemental procedures

Elemental procedure може застосовуватися до scalar і array.

Приклад:

elemental function square(x) result(y)
  real, intent(in) :: x
  real :: y

  y = x * x
end function square

Тоді можна викликати:

a = square(a)

Pure procedures

Pure procedure не має side effects, які порушують чистоту обчислень.

Приклад:

pure function add(a, b) result(c)
  real, intent(in) :: a, b
  real :: c

  c = a + b
end function add

Pure procedures корисні для optimization, parallelism і reasoning.

do loops

Класичний цикл:

do i = 1, n
  a(i) = a(i) + 1.0
end do

Nested loops часто використовуються в чисельних кодах.

Важливо стежити за layout пам’яті й порядком індексів.

do concurrent

do concurrent описує цикл, ітерації якого можуть виконуватися незалежно.

Приклад:

do concurrent (i = 1:n)
  a(i) = a(i) + 1.0
end do

Це дає компілятору більше інформації для оптимізації й паралелізації.

GNU Fortran зазначає, що має широку підтримку стандартів до Fortran 2018 і initial support of some features of Fortran 2023. [4]

Coarrays

Coarrays — вбудована модель паралельного програмування у Fortran.

Приклад ідеї:

real :: x[*]

Coarrays дозволяють працювати з images — паралельними виконаннями програми.

Fortran Wiki зазначав, що з GCC 16.1 у квітні 2026 року GFortran нативно підтримує coarrays Fortran 2008 і паралельні можливості Fortran 2018 на single-node shared memory. [5]

OpenMP

OpenMP часто використовується з Fortran для shared-memory parallelism.

Приклад:

!$omp parallel do
do i = 1, n
  a(i) = a(i) + 1.0
end do
!$omp end parallel do

OpenMP популярний у HPC-коді, бо дозволяє поступово паралелізувати loops.

MPI

MPI — Message Passing Interface.

У Fortran MPI використовується для distributed-memory parallelism.

Сценарії:

  • суперкомп’ютери;
  • кластери;
  • distributed simulations;
  • CFD;
  • climate models;
  • physics codes.

MPI + Fortran — класична комбінація для HPC.

BLAS

BLAS — Basic Linear Algebra Subprograms.

BLAS містить базові операції лінійної алгебри:

  • vector operations;
  • matrix-vector multiplication;
  • matrix-matrix multiplication.

BLAS реалізації часто дуже оптимізовані під hardware.

Приклади реалізацій:

  • OpenBLAS;
  • Intel oneMKL;
  • BLIS;
  • vendor BLAS.

LAPACK

LAPACK — Linear Algebra PACKage.

LAPACK використовує BLAS і надає алгоритми для:

  • linear systems;
  • eigenvalues;
  • singular value decomposition;
  • least squares;
  • matrix factorizations.

Fortran історично дуже тісно пов’язаний із BLAS/LAPACK.

Багато мов, включно з Python/NumPy/SciPy, опосередковано використовують бібліотеки, написані на Fortran або сумісні з Fortran ABI.

NetCDF і HDF5

У наукових обчисленнях часто використовують формати даних:

  • NetCDF;
  • HDF5.

Fortran має bindings для роботи з цими форматами.

Сценарії:

  • кліматичні дані;
  • геофізика;
  • великі масиви;
  • simulation outputs;
  • scientific datasets;
  • parallel I/O.

fpm

fpm — Fortran Package Manager.

Він допомагає створювати, збирати й тестувати Fortran-проєкти.

Типові команди:

fpm new my_project
fpm build
fpm test
fpm run

fpm — важлива частина modern Fortran ecosystem, бо історично Fortran довго не мав єдиного зручного package manager.

GFortran

GFortran — GNU Fortran compiler у складі GCC.

GFortran — популярний open-source компілятор.

Офіційна сторінка GNU Fortran зазначає, що проєкт підтримує можливості останніх стандартів до Fortran 2018 і має initial support of some features of Fortran 2023. [6]

Встановлення GFortran описано на Fortran-lang для Windows, Linux, macOS і OpenBSD. [7]

Intel Fortran Compiler

Intel Fortran Compiler — комерційний/безкоштовно доступний через Intel oneAPI компілятор для Fortran.

Intel oneAPI Toolkit Release Notes 2026 зазначає, що Intel Fortran Compiler 2026.0 готовий для нових процесорів і додає оновлення, пов’язані з Fortran 2023 features, coarrays, offload code і numerical output predictability. [8]

Intel також має окрему сторінку завантаження Intel Fortran Compiler 2026.0.0, де зазначено functional і security updates. [9]

Інші компілятори

Окрім GFortran і Intel Fortran, існують:

  • NVIDIA HPC SDK Fortran;
  • NAG Fortran Compiler;
  • LLVM Flang;
  • LFortran;
  • Cray Fortran;
  • IBM XL Fortran historically;
  • vendor compilers для HPC systems.

Вибір компілятора залежить від:

  • платформи;
  • стандарту;
  • HPC hardware;
  • performance;
  • diagnostics;
  • OpenMP/MPI/offload support;
  • licensing;
  • legacy compatibility.

LFortran

LFortran — modern interactive LLVM-based Fortran compiler project.

Він цікавий для:

  • interactive workflows;
  • notebooks;
  • modern compiler architecture;
  • educational use;
  • tooling experiments.

Але для production HPC потрібно перевіряти maturity під конкретну задачу.

C interoperability

Fortran має стандартизовану interoperability з C через iso_c_binding.

Приклад:

use iso_c_binding

Це дозволяє:

  • викликати C з Fortran;
  • викликати Fortran з C;
  • інтегруватися з іншими мовами через C ABI;
  • створювати bindings для Python, Julia, R та інших мов.

Python і Fortran

Python часто використовують як високорівневий інтерфейс, а Fortran — як швидке чисельне ядро.

Сценарії:

  • Fortran library + Python wrapper;
  • NumPy/SciPy integration;
  • f2py;
  • C ABI wrapper;
  • performance-critical kernels;
  • scientific workflows.

Такий підхід дозволяє поєднати зручність Python і швидкість Fortran.

Fortran і NumPy/SciPy

Багато наукового Python-стеку історично пов’язано з Fortran-бібліотеками.

NumPy/SciPy можуть використовувати BLAS/LAPACK, які мають Fortran API/ABI або походження.

Це означає, що навіть розробники Python часто непрямо користуються Fortran-світом.

Fortran і C/C++

Fortran і C/C++ часто співіснують у HPC.

Порівняння:

Мова Сильні сторони
Fortran масиви, чисельні обчислення, legacy scientific libraries, HPC kernels
C/C++ системне програмування, performance control, templates, hardware-level code, broader ecosystem

У HPC-проєктах часто є суміш Fortran, C, C++, Python і shell scripts.

Fortran і Julia

Julia позиціонується як modern high-level мова для high-performance scientific computing.

Порівняння:

Мова Особливість
Fortran перевірені компілятори, legacy libraries, HPC stability
Julia high-level syntax, JIT, modern multiple dispatch, research productivity

Julia може бути зручнішою для нових numerical experiments.

Fortran досі сильний для production HPC і перевірених чисельних бібліотек.

Fortran і MATLAB

MATLAB зручний для інтерактивних інженерних обчислень.

Fortran краще для:

  • компільованих чисельних ядер;
  • HPC;
  • довготривалих simulation codes;
  • інтеграції з supercomputers;
  • бібліотек, які мають працювати швидко й довго.

MATLAB може бути front-end для прототипу, а Fortran — backend для performance-critical ядра.

Fortran і R

R використовується для статистики й data analysis.

Fortran може використовуватися в R packages для швидких чисельних частин.

Це типовий pattern: high-level language для користувача, Fortran/C/C++ для performance.

HPC

HPC — High Performance Computing.

Fortran дуже сильний у HPC завдяки:

  • optimizing compilers;
  • array syntax;
  • long history in supercomputing;
  • BLAS/LAPACK;
  • MPI;
  • OpenMP;
  • coarrays;
  • numerical focus;
  • legacy scientific codes;
  • portability across HPC systems.

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

Наукові сфери використання

Fortran часто використовується в:

  • кліматичному моделюванні;
  • weather forecasting;
  • computational fluid dynamics;
  • finite element analysis;
  • quantum chemistry;
  • astrophysics;
  • nuclear engineering;
  • geophysics;
  • ocean modeling;
  • aerospace;
  • mechanical engineering;
  • numerical libraries.

Саме тут важливі performance, точність і перевірені алгоритми.

Legacy modernization

Модернізація Fortran-коду — важлива задача.

Підходи:

  1. Додати implicit none.
  2. Перевести fixed form у free form.
  3. Розбити великі routines.
  4. Замінити COMMON blocks на modules.
  5. Додати tests.
  6. Документувати assumptions.
  7. Ввести derived types.
  8. Відокремити I/O від чисельного ядра.
  9. Додати CI.
  10. Створити Python/C API wrapper, якщо потрібно.
  11. Профілювати перед оптимізацією.

Мета модернізації — не переписати все, а зробити код безпечнішим для змін.

Тестування Fortran-коду

Fortran-код потрібно тестувати так само, як будь-який production-код.

Підходи:

  • unit tests;
  • regression tests;
  • golden tests;
  • numerical tolerance tests;
  • integration tests;
  • comparison with reference data;
  • property-based checks for numerical invariants;
  • compiler matrix;
  • CI on multiple platforms.

У чисельних задачах часто не можна порівнювати floating-point results через точну рівність. Потрібні tolerances.

Floating-point tolerance

Погано:

if (x == y) then
  print *, "equal"
end if

Краще:

if (abs(x - y) < tolerance) then
  print *, "close enough"
end if

Floating-point arithmetic має похибки округлення.

Це критично для наукових обчислень.

Debugging

Fortran можна debug-ити через:

  • gdb;
  • lldb;
  • compiler checks;
  • bounds checking;
  • sanitizer support у деяких toolchains;
  • Intel tools;
  • HPC debuggers;
  • logging;
  • assertions.

Корисні compiler flags для GFortran можуть включати:

-g
-fcheck=all
-Wall
-Wextra
-fbacktrace

Для production performance ці flags не завжди підходять, але для debug дуже корисні.

Профілювання

Performance потрібно вимірювати.

Інструменти:

  • gprof;
  • perf;
  • Intel VTune;
  • NVIDIA Nsight;
  • HPC profilers;
  • compiler reports;
  • timing instrumentation;
  • MPI profiling tools.

Перед оптимізацією треба зрозуміти bottleneck.

Безпека

Fortran не асоціюється з web-security, але безпека все одно важлива.

Ризики:

  • out-of-bounds array access;
  • uninitialized variables;
  • integer overflow;
  • unsafe input files;
  • legacy I/O;
  • unchecked assumptions;
  • memory corruption;
  • unsafe C interoperability;
  • build system risks;
  • supply chain dependencies;
  • running untrusted scientific code.

Для наукових кодів важлива не лише cyber security, а й correctness: неправильний результат може бути серйозною проблемою.

Reproducibility

Науковий Fortran-код має бути відтворюваним.

Потрібно фіксувати:

  • compiler version;
  • compiler flags;
  • math libraries;
  • BLAS/LAPACK implementation;
  • input data;
  • random seeds;
  • platform;
  • number of MPI ranks;
  • OpenMP threads;
  • floating-point settings;
  • code commit;
  • dependencies.

Без цього результат може відрізнятися на іншій машині.

Продуктивність

Fortran може бути дуже швидким, але performance залежить від:

  • memory layout;
  • loop order;
  • vectorization;
  • cache locality;
  • compiler optimization flags;
  • BLAS/LAPACK usage;
  • avoiding unnecessary temporaries;
  • array slicing;
  • parallelization;
  • I/O;
  • algorithm choice.

Добра практика: спочатку алгоритм, потім layout, потім compiler optimization, потім low-level tuning.

Vectorization

Vectorization дозволяє CPU виконувати одну операцію над кількома даними.

Fortran-компілятори часто добре векторизують чисельні loops.

Щоб допомогти компілятору:

  • використовувати прості loops;
  • уникати aliasing;
  • правильно організовувати memory access;
  • використовувати do concurrent, де доречно;
  • перевіряти compiler vectorization reports.

GPU і offload

Fortran може використовувати GPU через:

  • OpenMP offload;
  • OpenACC;
  • CUDA Fortran у NVIDIA ecosystem;
  • vendor-specific compilers;
  • library calls;
  • mixed-language kernels.

GPU offload потребує окремого performance design.

Не кожен Fortran-код автоматично стане швидким на GPU.

Fortran у бізнесі

Fortran у бізнесі корисний, якщо є:

  • наукові моделі;
  • інженерні симуляції;
  • чисельні бібліотеки;
  • legacy scientific code;
  • high-performance kernels;
  • climate/weather models;
  • financial numerical models;
  • industrial simulation;
  • integration with HPC.

Для звичайних web, CRM, ERP або mobile задач Fortran майже ніколи не є першим вибором.

Fortran і ERP-системи

Fortran не є ERP-системою.

Він не веде облік, не проводить документи й не керує складом сам по собі.

У контексті K2 ERP Fortran може бути корисним тільки в специфічних випадках:

  • окреме чисельне ядро для складних розрахунків;
  • інтеграція з legacy scientific/engineering code;
  • оптимізаційна модель;
  • прогнозна модель;
  • обробка великих чисельних масивів;
  • backend-бібліотека, яку викликає інша мова;
  • розрахунковий модуль для інженерного бізнес-процесу.

Але основну бізнес-логіку ERP не варто писати на Fortran.

Fortran і API

Fortran не є типовою мовою для web API.

Але Fortran-код можна інтегрувати в API через:

  • C wrapper;
  • Python wrapper;
  • shared library;
  • command-line executable;
  • microservice wrapper;
  • C++/Rust/Go binding;
  • batch job.

Типовий pattern:

Web/API layer → Python/Go/C#/Java service → Fortran numerical library

Так Fortran робить обчислення, а API-шар відповідає за HTTP, auth, logging і deployment.

Fortran і AI

Fortran не є головною мовою для сучасного AI research.

Для AI частіше використовують Python, PyTorch, JAX, TensorFlow.

Але Fortran може бути корисний для:

  • чисельних solvers;
  • simulation data generation;
  • фізичних моделей;
  • scientific ML;
  • legacy numerical kernels;
  • HPC preprocessing;
  • climate/physics simulations для AI workflows.

У багатьох AI/science workflows Fortran може бути “невидимим двигуном” під високорівневим Python-кодом.

Коли Fortran особливо корисний

Fortran особливо корисний для:

  • HPC;
  • scientific computing;
  • numerical methods;
  • array-heavy computations;
  • climate modeling;
  • CFD;
  • physics simulations;
  • linear algebra;
  • legacy scientific libraries;
  • code that must run fast for decades;
  • supercomputing;
  • Fortran libraries behind Python/R/Julia.

Коли Fortran може бути невдалим вибором

Fortran може бути невдалим вибором, якщо:

  • потрібен web backend;
  • потрібна ERP-бізнес-логіка;
  • потрібен mobile app;
  • потрібен GUI;
  • потрібна AI ecosystem;
  • потрібен великий ринок generalist developers;
  • задача не є чисельною;
  • команда не має Fortran/HPC досвіду;
  • потрібна швидка інтеграція з modern SaaS;
  • достатньо Python/NumPy або MATLAB.

Типові помилки у Fortran

Поширені помилки:

  • не писати implicit none;
  • використовувати старий fixed-form стиль для нового коду;
  • не перевіряти array bounds;
  • порівнювати real numbers через точну рівність;
  • не фіксувати compiler flags;
  • не писати tests для чисельних routines;
  • змішувати I/O і computation;
  • створювати зайві temporary arrays;
  • неправильно організовувати loop order;
  • ігнорувати column-major layout;
  • переписувати перевірений legacy code без тестів;
  • не документувати units і assumptions;
  • не перевіряти portability між компіляторами.

Хороші практики

Під час роботи з Fortran варто:

  1. Використовувати modern Fortran free form.
  2. Завжди писати implicit none.
  3. Використовувати modules.
  4. Використовувати explicit interfaces.
  5. Додавати intent до arguments.
  6. Використовувати iso_fortran_env для precision.
  7. Писати tests із numerical tolerances.
  8. Перевіряти код кількома компіляторами, якщо можливо.
  9. Використовувати bounds checking у debug.
  10. Профілювати performance перед оптимізацією.
  11. Використовувати BLAS/LAPACK замість ручної лінійної алгебри.
  12. Документувати units, assumptions і input data.
  13. Відокремлювати чисельне ядро від I/O.
  14. Модернізувати legacy code поступово.
  15. Не використовувати Fortran там, де він не дає переваги.

Практичний висновок

Fortran — це спеціалізована, але дуже важлива мова для чисельних і наукових обчислень.

Сильні сторони:

  • висока продуктивність;
  • масиви й матриці;
  • mature optimizing compilers;
  • HPC;
  • BLAS/LAPACK ecosystem;
  • OpenMP/MPI;
  • coarrays;
  • modern Fortran features;
  • legacy scientific code;
  • стабільність;
  • decades of validated libraries.

Обмеження:

  • не mainstream для web/backend;
  • менший ринок розробників;
  • багато legacy-коду потребує модернізації;
  • tooling менш зручний, ніж у Python/JavaScript/C#;
  • package ecosystem історично слабший;
  • складна інтеграція з modern app layers без wrappers;
  • для нечисельних задач часто є кращі мови.

Fortran найкраще використовувати там, де потрібні швидкі, перевірені й довготривалі чисельні ядра: HPC, наукові бібліотеки, фізичні симуляції, інженерні моделі й legacy scientific software.

Пояснення термінів

  • Fortran — мова програмування для чисельних і наукових обчислень.
  • Modern Fortran — сучасний стиль Fortran після Fortran 90.
  • Fortran 2023 — актуальний стандарт ISO/IEC 1539:2023.
  • WG5 — робоча група, відповідальна за стандарти Fortran.
  • GFortran — GNU Fortran compiler у складі GCC.
  • Intel Fortran Compiler — Fortran-компілятор Intel oneAPI.
  • HPC — High Performance Computing.
  • implicit none — директива, що вимикає implicit typing.
  • Module — одиниця організації modern Fortran-коду.
  • Subroutine — процедура без return value.
  • Function — процедура, що повертає значення.
  • Derived type — користувацький тип даних.
  • Allocatable array — масив, пам’ять для якого виділяється під час виконання.
  • Column-major order — порядок зберігання багатовимірних масивів у Fortran.
  • do concurrent — цикл із незалежними ітераціями.
  • Coarray — механізм паралельного програмування у Fortran.
  • OpenMP — API для shared-memory parallelism.
  • MPI — Message Passing Interface для distributed parallelism.
  • BLAS — Basic Linear Algebra Subprograms.
  • LAPACK — Linear Algebra PACKage.
  • NetCDF — формат і бібліотеки для наукових масивних даних.
  • HDF5 — формат і бібліотеки для ієрархічних наукових даних.
  • fpm — Fortran Package Manager.
  • iso_fortran_env — стандартний module для portable constants і kinds.
  • iso_c_binding — стандартний module для C interoperability.
  • Floating-point tolerance — допустима похибка для порівняння чисел із плаваючою комою.
  • Legacy Fortran — старий Fortran-код, часто Fortran 77 або старіший стиль.

Дивіться також

Джерела