Какие преимущества имеет современный Fortran над современным С++? - программирование
Подтвердить что ты не робот

Какие преимущества имеет современный Fortran над современным С++?

Я пытаюсь решить между Fortran и С++ для приложения в научных вычислениях. Мне непонятно, есть ли у Fortran преимущества перед другими языками, когда дело доходит до производительности. Например, я считаю, что с тех пор, как Fortran применяет строгий псевдоним, более эффективные оптимизации могут быть сделаны компилятором по сравнению с C до C99. Я не уверен, как здесь подходит С++.

Любые указания?

4b9b3361

Ответ 1

Я взглянул на часть материала в последних стандартах Fortran, и, честно говоря, я впечатлен. Многие из того, что я ненавидел в отношении языка 20 лет назад, исчезли сейчас. Нет больше номеров строк и специальных столбцов (возможно, они горят в аду).

Fortran был широко использован в инженерных кругах уже 50 лет. Это дает вам два преимущества, если вы работаете в этих кругах. Во-первых, эти люди много заботятся об оптимизации. Это означает, что компиляторы Fortran имеют лучшие оптимизаторы. Сам язык намного более оптимизирован, чем языки Cish, из-за отсутствия псевдонимов.

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

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

Ответ 2

Другой важной проблемой является кривая обучения, которая очень велика для С++ и исключительно мала для Fortran (90 и более поздних). Фортран похож на MATLAB с такими операциями, как...

  • B'DB matmul( matmul(transpose(B), D), B )
  • L2 норма вектора norm2(x)
  • SVD матрицы с использованием LAPACK call gesvd(A,S,u,vt)

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

Он хорошо поддерживается крупными поставщиками (Intel/Sun/IBM/Cray/PGI/NAG и т.д.), сообществами с открытым исходным кодом (gfortan/g95) и разработчиками числовой библиотеки /API, такими как PETSc, MPI и т.д.

Предположим, что новый стандарт (Fortran 2008) даже имеет совместно используемые массивы для параллельного программирования без необходимости использования MPI/OpenMP, и некоторые компиляторы Fortran уже поддерживают его (g95 и Cray).

В принципе, он обладает всеми хорошими качествами, необходимыми для численных вычислений, проще, чем MATLAB, является стандартизированным, бесплатным, масштабируемым (с MPI/OpenMP и со-массивами), создает быстрый/параллельный код.

Для цифр ничего не сравнится с Fortran, но, к сожалению, для чего-либо еще все бьет Fortan. Поэтому, если вы ученый с безопасной работой и только численные вычисления /HPC, то придерживайтесь Fortran, иначе изучите и используйте С++, поскольку он широко используется для не численного программного обеспечения.

Ответ 3

Fortran позволяет выполнять операции всего массива, а также операции над разделами массива. Есть классы С++ для массивов, но я не думаю, что вы можете ссылаться на срез, такой как x (:, 2:, 1: N3: 2) так же легко, как в Fortran. Это позволяет кратко выразить некоторые алгоритмы.

Удобство операций массива Fortran распространяется на массивы производных типов. Предположим, у вас есть массив дат:

введите дату
integer:: месяц, день, год
дата окончания типа

тип (дата):: x (1000)

Затем x относится к массиву дат, x% month относится к массиву месяцев, а pack (x, x% month == 1) относится ко всем датам в январе. Сколько других языков программирования предлагает это удобство?

Некоторые из более ранних комментариев о Fortran - "старые и отвратительные" - предвзяты и должны быть со скидкой соответственно. Позвольте мне возразить. На мой взгляд, свободный формат Fortran 90 выглядит лучше, чем синтаксис C и С++, с фигурными скобками и точками с запятой. Оставляя их или неправильно вставляя их, могут возникнуть ошибки в C и С++, которые не имеют аналогов в Fortran.

Ответ 4

Fortran был оптимизирован для математических (особенно матричных) операций.

С++ был оптимизирован для использования объектов.

Что важнее для вас.

Как отмечено ниже, С++ имеет оптимизированную матричную библиотеку.
Но Fortran целая цель - оптимизация математических процессов (особенно матричных операций). Тот факт, что эти оптимизации встроены в основу языка (а не библиотеки) и имеют начало два десятилетия на исследовании С++, я сомневаюсь (но не знаю, что факт), что в этой области Fortran собирается чтобы выиграть руки.

Ответ 5

Преимущества fortran95 и выше над С++ (2003):

  • Как ранее (по user4562) упоминается короткая кривая обучения (мой первый язык был C, и я все еще не могу его освоить, аналогично true для С++)
  • (Мое личное мнение) Легко для перехода кода из Octave (в этом отношении Matlab) аналогичный синтаксис, такая же модульность [я использую Octave для прототипа программы и переписываю в fortran95 для скорости], хотя вы можете напрямую использовать октавный код в С++.
  • динамическое распределение памяти довольно прямолинейно (у f77 этого не было!) Поддержка библиотек
  • (u может сделать это и в С++, но его естественное использование fortran)
  • Поддержка параллельных вычислений со стороны массива (жалость только cray поддерживает их по состоянию на февраль 2011 г. Работа gfortran началась с gfortran4.6, но все еще долгий путь)

короче, если ваша программа или приложение являются чисто научным вычислением, используйте fortran 95 и выше, если вычисление нескольких чисел является лишь частью истории, использующей С++ (или что-то вроде u лучше)

Ответ 6

Мой опыт работы с Fortran заключается в том, что он легко учится, чист (будучи очень модульным) и, следовательно, хорошо подходит для не-программистов, чья главная задача - делать высоко оптимизированные численные вычисления. Хотя равная оптимизация может быть выполнена в С++ (даже, возможно, в большей степени), для достижения такого уровня оптимизации требуется много инстинктивного понимания. Когда дело доходит до матричных вычислений, из-за коробки компилятор Fortran обычно выйдет из компилятора С++. Я также добавлю, что у Fortran есть ключевые слова, которые специально разработаны, чтобы помочь программисту выжать больше производительности из числовой процедуры. С++ тоже имеет это, но не в той степени, в которой это делает Fortran.

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

Другим преимуществом является то, что современный Fortran, как правило, обратно совместим со старыми кодовыми базами Fortran. И база кода, которая была построена на протяжении многих лет в Фортране, огромна и чрезвычайно сложна (в основном это делают ученые и математики).

Кроме того, лично мне очень понравились встроенные функции обработки файлов, которые позволяют читать файл данных и выполнять операции над ним почти мгновенно. Многие другие встроенные функции в Fortran предназначены для этого удобства. С++ предлагает в основном строительные блоки для этого, и для этого требуется немного потоветки, чтобы прочитать файл данных b/c, который вам нужно знать о разделителях (где Fortran позволяет указать разделитель).

Помимо этого, я не могу придумать преимуществ. Больше всего было бы строковыми манипуляциями или алгоритмическими операциями, к которым С++ как язык, и в целом это компиляторы, лучше подходят и чаще всего будут работать лучше. Хороший знающий программист, скорее всего, предпочтет С++, поскольку он/она поймет, как оптимизировать численную подпрограмму таким образом, чтобы она могла работать лучше, чем скомпилированная подпрограмма Fortran. Кроме того, надежные надежные компиляторы Fortran не так просты, как хорошие надежные компиляторы С++.

Ответ 7

Я новичок в программировании. Я программировал в области конечных элементов около года. После некоторых исследований в сети я решил использовать fortran 2003. Я научился программировать в модульном стиле примерно через десять дней, изучая книгу Чепмена. Это один год, и я написал около четырех тысяч строк кода в модульном формате (поддерживаемые, многоразовые и аккуратные коды) и вообще не использовал никакой символьной переменной. Я не думаю, что, изучая С++, matlab, python, java... в течение десяти дней, вы сможете писать числовые коды так же эффективно, как и fortran. fortran 2003 также имеет все необходимые возможности ООП, которые я изучаю сейчас.  Таким образом, с точки зрения языковой силы в численном аспекте у Fortan не хватает ничего (модульный стиль, стиль ООП, мощные возможности массива, мощные библиотеки, бесплатные и коммерческие до датированных компиляторов, очень легкие в освоении, очень эффективные...). Языки, такие как python/numpy, обладают большинством этих возможностей, но не имеют эффективности. Языки, подобные С++, также имеют большинство возможностей fortran (хотя для вычисления массива, являющегося основным ядром численного вычисления, вам нужно импортировать некоторые библиотеки!!), но, возможно, программа, написанная кем-то вроде меня в fortran, будет более эффективной, чем один написанный программистом на С++ с более чем 10-летним опытом.
 Наконец, я делаю свои тяжелые численные вычисления в fortran (модульный или OOP-формат) и использую python\numpy для вычисления небольшого размера (например, создание графиков, вычисление массивов малых размеров...).

Ответ 8

Учитывая наличие научных вычислительных пакетов, таких как LAPACK ++, которые уже сильно оптимизированы, современный Fortran даже не имеет преимущества производительности. С++ может иметь свои ошибки, но производительность не одна из них.

Ответ 9

IMHO, единственное преимущество, которое действительно имеет значение, заключается в том, что программирование FORTRAN позволяет вам легко использовать много существующих кодов и библиотек FORTRAN. И если у вас есть 50 программистов FORTRAN под проект и ограниченный срок, вы сначала научите их всему С++, или согласитесь ли вы позволить им использовать свой любимый язык?

Ответ 10

С появлением шаблона-мета-программирования (особенно шаблоны выражений), С++ достиг лиги FORTRAN в числовых вычислениях, поэтому скорость должна не будет проблемой. Однако есть еще кое-что о других проблемах:

Pro FORTRAN. Старшие люди могут знать это лучше, чем С++.
Contra FORTRAN. Это отвратительный, старый и в основном заброшенный язык, который уже устарел в момент запуска вашего проекта. Кто бы ни научился программировать сейчас, вряд ли узнает FORTRAN, поэтому вы можете столкнуться с проблемами поиска программистов для проекта позже.

Pro С++: он относительно современен, а компиляторы все еще значительно улучшаются. Это позволяет вам писать довольно выразительный код.
Contra С++. Некоторые из этих сообщений об ошибках шаблона заставят вас плакать.