]]> ]]>

gfortran

Реализация языка программирования FORTRAN

gfortran — название проекта GNU Fortran, разрабатывающий бесплатный компилятор Fortran 95/2003 для GCC (GNU Compiler Collection). Разработчики используют открытую разработку, для привлечения большой группы разработчиков и гарантировать его работу на множестве архитектур и в различных средах. Необходимо отметить, что gfortran не g95, а отдельный проект, и проектируется как альтернатива для unix команды f95.

gfortran находится в ранней стадии разработки и в состоянии генерировать код для большинства конструкций и выражений языка Fortran, но еще многое не реализовано.

По завершению разработки gfortran планируется, что он будет обладать всеми возможностями приличного компилятора:

  • обработкой программ написанных на Fortran 77, Fortran 90 или Fortran 95
  • компилированием программ в эффективный машинный код
  • выводом сообщений о причинах, почему компилятор не смог создать исполняемый файл, ведь при использовании Fortran очень легко допустить ошибку. Также компилятор будет выявлять сомнительные языковые конструкции
  • поддержкой вывода дополнительной информации о трансляции в машинный код, что может помочь в выявлении ошибок как в программах, так и в компиляторе непосредственно
  • поддержкой отладочной информации
  • рядом других особенностей

gfortran состоит из следующих компонентов:

  • команды gcc, которая также понимает и обрабатывает исходный текст Fortran. Команда gcc — программа для всех языков из GCC (GNU Compiler Collection); при помощи gcc можно компилировать исходный текст любого языка, который поддерживается ей
  • gfortran — команда, которую можно установить также как и команду f95. Различие между gcc и gfortran в том, что вторая автоматически связывает нужные библиотеки с программой
  • библиотек времени исполнения. Содержат машинный код, который обеспечивает возможности языка Fortran
  • непосредственно компилятор Fortran (f951). gfortran — синтаксический анализатор и генератор приложений, связанный с GCC, а f951 преобразует исходный код к ассемблерному

Примеры:

Hello, World!:

Пример для версий Intel Visual Fortran 11.1, gfortran 4.5.0
program HelloWorld

print *, 'Hello, World!'

end program HelloWorld

Факториал:

Пример для версий Intel Visual Fortran 11.1, gfortran 4.5.0

Используется итеративное определение факториала. Спецификации формата I и A используются для вывода чисел в десятичном формате и строк, соответственно. При вычислении факториалов 13-16 возникает арифметическое переполнение, не вызывающее ошибку, поэтому выводятся неправильные значения:

13! = 1932053504
14! = 1278945280
15! = 2004310016
16! = 2004189184

    program Factorial

    integer :: f,n

    f = 1
    n = 0
    
    do
        print '(I2, A, I10)', n, "! = ", f
        n = n + 1
        f = f * n
        if (n==17) then
            exit
        end if
    end do

    end program Factorial

Числа Фибоначчи:

Пример для версий Intel Visual Fortran 11.1, gfortran 4.5.0

Используется итеративное определение чисел Фибоначчи. Самое сложное в этом примере — вывод вычисленных значений в нужном формате, в одну строку и без лишних пробелов. Спецификация формата (I3, A, $) означает, что вначале выводится целое число в десятичном формате, шириной ровно три символа, затем выводится строка, и наконец, $ подавляет перевод строки, используемый командой print по умолчанию, так что все выводится в одну строку.

    program Fibonacci

    integer :: f1,f2,f3,i

    i = 1
    f1 = 0
    f2 = 1
    
    do
        f3 = f2 + f1
        f1 = f2
        f2 = f3
        i = i + 1
        if (f1<10) then
            print '(I1, A, $)', f1, ', '
        elseif (f1<100) then
            print '(I2, A, $)', f1, ', '
        else
            print '(I3, A, $)', f1, ', '
        end if
        if (i==17) then
            exit
        end if
    end do
    
    print *, '...'

    end program Fibonacci

Комментарии

]]>

blog comments powered by Disqus

]]>

Работа программистам