#ubuntu #fortran #gfortran #fortran90
#ubuntu #fortran #gfortran #fortran90
Вопрос:
После того, как я установил Gfortran в Ubuntu (16.04), указывает на f95. Я вижу в руководстве по gfortran, что для f95 и forward можно указать параметр -std. Значение -std
параметра по умолчанию, которое я вижу из руководства, — «gnu». Я не уверен в последствиях внутренней компиляции, если я использую f95 для кода f90.
Как мне использовать gfortran для файлов Fortran 90 с расширением .for? Я не хочу использовать компилятор Fortran 95 для кода Fortran 90, хотя Fortran 95 может (не уверен) скомпилировать Fortran 90.
Комментарии:
1. @jww Вы изменили значение.
2. @VladimirF — Ну, я переместил третье предложение во второе, чтобы улучшить поток. Затем я добавил разрыв абзаца. Я не уверен, как это нарушило смысл, но Fortran не моя специальность. Возможно, вы можете выполнить редактирование, чтобы исправить это?
3. @jww Речь шла о расширении .for, и вы изменили его на расширение .f90 .
4. @VladimirF — Пожалуйста, исправьте вопрос. Спасибо.
Ответ №1:
Fortran 90 мертв. У него были серьезные недостатки, особенно с распределяемыми файлами, которые были исправлены Fortran 95. Например, это допускало существование неопределенных ststu распределения.
Много раз кто-то говорит, что он использует Fortran 90, на самом деле он использует что-то другое.
Fortran 90 и Fortran 95 настолько близки, что даже нет возможности включить Fortran 90 в компиляторах. В основном это просто включало бы эти ошибки и упущения в стандарте и отключало бы всего несколько функций.
Gfortran в режиме по умолчанию gnu
фактически близок к компилятору Fortran 2003 или 2008. Некоторые настройки по умолчанию отличаются от Fortran 90 и 95. Например, автоматическое перераспределение при назначении. Но обычно это хорошо для программ на Fortran 90 и 95 и даже некоторых на 77. Это позволяет использовать некоторые распространенные расширения стандарта. Некоторые менее распространенные расширения могут быть включены специальными флагами.
Нет причин для беспокойства. Fortran 95 — это стандарт, о котором должны заботиться люди. Fortran 90 не является.
Что касается расширения .for, компилятор должен правильно обрабатывать, если оно соответствует источнику фиксированной формы, будь то 77, 90, 95, 2008 или что угодно.
Комментарии:
1. сказать, что F90 мертв, имеет так же мало смысла, как сказать, что F66 мертв. Компиляторы, как правило, обратно совместимы с началом, когда Baccus впервые вышел с FORTRAN. Были ли в F95 функции, которые необходимы или нет, в целом между ними мало различий. Это правда, что можно сказать .F95 или .F03, но можно также использовать . Синтаксис F90 в файле с расширением . для суффикса и других, кроме свободной или фиксированной формы, это тот же (новый) компилятор, который поглощает его.
2. Вы ошибаетесь. Существует большая разница между F66 и F90 ситуации. Я не говорю, что F95 мертв, потому что у нас есть F2003, например. Я даже не говорю, что F77 мертв. F90 мертв, потому что он был достаточно быстро исправлен F95. И поверьте мне, F90 серьезно ошибался в отношении распределяемых массивов.
3. Синтаксис здесь вообще неуместен. Вы можете написать фиксированную форму для Fortan 2008 только с функциями FORTRAN 77, если хотите. Это зависит от вас. Фиксированная и свободная формы являются вполне допустимыми стандартными формами. (не так в F2015)
4. @VladimirF: Как вы думаете, вы можете рассмотреть возможность написания записи в документации Fortran о том, что вы сказали в F90 «неправильно о выделяемом» и, в более общем плане, о разнице между стандартами Fortran, я думаю, это было бы очень полезно, чтобы увидеть тонкие различия между F90 и другими.
5. Теперь я понимаю: расширение .for не отображает какую-либо версию (не считая версий fortran после 95). .for указывает только код фиксированной формы, а синтаксис / код fortran 90 или 95 могут быть написаны как в фиксированной, так и в свободной форме. Наконец, компилятор fortran 95 можно использовать для кода fortran 90 с наименьшим воздействием. Правильно?
Ответ №2:
В двух словах, общие соглашения таковы: .f
или .for
для исходного кода фиксированной формы, .f90
для исходного кода свободной формы, .F
, .F90
(в UNIX / Linux) для исходного кода фиксированной формы или произвольной формы, который должен быть предварительно обработан в C / C подобном стиле с использованием макросов, например, #define BLAH_BLAH = 42
.
Теперь, хотя понятие «расширение файла» повсеместно распространено на платформах Windows, другие платформы, такие как UNIX / Linux / Mac OS, не придают особого значения последнему биту имени файла. На самом деле, Mac OS даже не различает main.f
or MAIN.F
, они фактически эквивалентны.
Во-вторых, в отличие от Java, C / C , Python и т. Д., В FORTRAN / Fortran нет понятия файла как организационной единицы для исходного кода. Более конкретно, не может быть никакого кода за пределами program
, subroutine
, function
, или (sub)module
, откуда; сам стандарт ISO Fortran не определяет никакого расширения, он даже не предписывает использование файлов на диске для представления исходного кода. Поначалу это может показаться странным, но для этого есть веские причины: операционная система может использовать какую-то базу данных для хранения всей информации, поэтому, если стандарт предписывает файлы на диске в качестве носителя, это исключило бы такие системы (до командной строки / терминала).
Вообще говоря, расширения .f90
, .f95
, .f03
, и .f08
используются для современного исходного кода в свободной форме, соответствующего стандартам Fortran 90, Fortran 95, Fortran 2003 и Fortran 2008 соответственно. Для более старого кода с фиксированной формой, такого как FORTRAN 77, .f
.for
обычно используются расширения или.
Я настоятельно не рекомендую использовать .f95
.f03
.f08
расширения файлов , , (не говоря .f15
уже). Мало того, что эти расширения не распознаются всеми компиляторами, но код Fortran 2008 все еще может быть записан как исходный код с фиксированной формой; это все еще часть этого стандарта.
Поэтому всегда используйте *.f90
для указания исходного кода произвольной формы.
Ответ №3:
Различия между f90
и f95
действительно незначительны, но с расширением .for
или .f
gfortran ожидает, что код будет в фиксированной форме.
Попробуйте добавить -ffree-form
опцию в компилятор.
Тем не менее, я бы рекомендовал иметь расширение файла .f90
для кода Fortran в свободной форме. В долгосрочной перспективе это значительно упростит задачу.
Комментарии:
1. Наиболее соответствующий Fortran 90 также соответствует Fortran 95, Fortran 2003, Fortran 2008 и будет Fortran 2015. Итак, как следствие рекомендации в последнем предложении, вы ожидаете, что люди будут переименовывать все свои файлы каждый раз, когда выходит новый стандарт? Как насчет промежуточных технических характеристик? Эта рекомендация на самом деле просто рецепт путаницы, и есть много сообщений в поддержку этого. Просто возьмите .f90 для обозначения «формы свободного исходного кода, которая была впервые представлена в Fortran 90» и, следовательно, используйте его для источника свободной формы, независимо от целевого стандарта.
2. @IanH ваш комментарий имеет смысл. Я изменил эту часть.