Пример:
Код:
subroutine f(a,st,n,m)
integer a(n,m),n,m
character(*) st
print *,st
a = a+5
end subroutine f
Компилируем:
f2py -c --fcompiler=ifort --opt=-O3 FModule.f90 -m f_module
Питоновский код:
Код:
from f_module import f
import numpy as np
a = np.array([[1,1,1],[1,1,1]],order = 'Fortran')
f(a,'Hello World!',2,3)
print(a)
получаем:
python ./main.py
Hello World!
[[6 6 6]
[6 6 6]]
> Когда в ход идут подобные аргументы, как правило это означает что все содержательные уже закончились
Если кратко - фортран2003 умеет все или почти все, что умеет си. Обратное очень сильно не верно. Не согласны - приведите примеры. Конкретно для числодробильни: в си нет нормальных массивов. Для того подобия массивов, что есть, нет элементарнейших операций: срезов, преобразования формы и пр. Из прочего: в си нет нормальной системы модулей, например. Фортрановские модули очень хороши.
Теперь про синтаксис: обращение к элементу матрицы a(i,j,k) в си - a[i-1+(j-1)*Ni+(k-1)*Ni*Nj], ну или вариация на тему. Это читабельно?
Я не фанат фортрана и ничего не имею против си. Фортран имеет много недостатков, но, увы, на сегодняшний день для высокопроизводительных вычислений альтернативы не видно. Если знаете - подскажите, s'il vous plaît
Про читаемость кода на фортране: современный фортран позволяет писать весьма красивый код. Если этого не делают (по причине плохих знаний фортрана и программирования вообще) - это проблемы тех, кто пишет