Фортран: відмінності між версіями

[неперевірена версія][перевірена версія]
Вилучено вміст Додано вміст
→‎Бібліотеки: доповнення
оформлення
Рядок 154:
* принцип «одна [[Інструкція (програмування)|інструкція]] на рядок коду» в загальному додає стабільності програмам (однак можна використовувати крапку з комою для запису двох і більше інструкцій в рядку)
* [[Перевантаження операторів|Перевантаження стандартних операторів]] та розширення набору операторів за допомогою створення нових в сучасному фортрані дозволяє писати програми максимально наближеними до складних математичних формул<ref>[http://dx.doi.org/10.1109/MCSE.2012.33 Damian Rouson et al. This Isn't Your Parents' Fortran: Managing C++ Objects with Modern Fortran, Comput. Sci. Eng. 14, 46 (2012)]</ref><ref>[https://books.google.com.ua/books?id=xedE5KkHVn4C Damian Rouson, Jim Xia, Xiaofeng Xu, Scientific Software Design: The Object-Oriented Way, Cambridge University Press, 2011, ISBN 9781139498784]</ref><ref>[http://dx.doi.org/10.1155/2015/942059 Magne Haveraaen et al. High-Performance Design Patterns for Modern Fortran, Scientific Programming, Volume 2015 (2015)], див. також [http://dx.doi.org/10.1145/2532352.2532358 1],[http://dx.doi.org/10.1145/1322436.1322438 2]</ref><ref>[https://books.google.com.ua/books?id=1JDUc5qR7dIC Ed Akin, Object-Oriented Programming Via Fortran 90/95, Cambridge University Press, 2003, ISBN 9780521524087]</ref><ref>[https://books.google.com.ua/books?id=pOH80J24R_gC Markus A., Metcalf w.M. Modern Fortran in practice, Cambridge University Press 2012, ISBN 9781107017900]</ref>
 
Фортран дозволяє скористатись дуже великою кількістю наявного сумісного і перевіреного коду різноманітних математичних бібліотек, а також спеціалізованого коду з усіх галузей науки та техніки<ref>нaприклад [http://cpc.cs.qub.ac.uk/ Computer Physics Communications Program Library] - колекція понад 3000 програм журналу Computer Physics Communications з обчислювальної фізики та хімії</ref>. Найбільш відомі загальні математичні бібліотеки для роботи в Fortran це комерційні [[NAG]], [[MKL]], [[IMSL]], та з публічними ліцензіями: netlib.org<ref>[http://www.netlib.org/liblist.html Netlib колекція математичнного ПЗ] (більшість з якого написано на фортрані)</ref>, TOMS алгоритми<ref>[http://www.netlib.org/toms/ Software associated with papers published in the Transactions on Mathematical Software]{{ref-en}}</ref>, [[BLAS]]<ref>[http://www.netlib.org/blas/ Basic Linear Algebra Subprograms]</ref>, [[LAPACK]]<ref>[http://www.netlib.org/lapack/ LAPACK — Linear Algebra PACKage]</ref>, [[ScaLAPACK]]<ref>[http://www.netlib.org/scalapack/ ScaLAPACK — Scalable Linear Algebra PACKage]</ref>, [[SLATEC]]<ref>[http://www.netlib.org/slatec/ SLATEC Common Mathematical Library]</ref>, [[GNU Scientific Library|GSL]] разом з FGSL<ref name="fgsl">[http://www.lrz.de/services/software/mathematik/gsl/fortran/ FGSL: A Fortran interface to the GNU Scientific Library]</ref>, SPHEREPACK<ref>[https://www2.cisl.ucar.edu/resources/legacy/spherepack SPHEREPACK - A Package for Modeling Geophysical Processes]</ref>, FISHPACK90<ref>[https://www2.cisl.ucar.edu/resources/legacy/fishpack90 FISHPACK90 - Efficient FORTRAN Subprograms for the Solution of Separable Elliptic Partial Differential Equations]</ref>, FFTPACK5<ref>[https://www2.cisl.ucar.edu/resources/legacy/fft5 FFTPACK - A Fortran77 library of fast Fourier transforms]</ref>, [[CERNLIB]]<ref>[http://cernlib.web.cern.ch/cernlib/ CERN Program Library]</ref> та ін.
 
Основні можливості об'єктно-орієнтованого програмування додали ще в Фортран 90 стандарт. Починаючи з стандарту Фортран 2003, мова отримала повний набір можливостей, що дозволяють класифікувати фортран як [[Об'єктно-орієнтоване програмування|об'єктно-орієнтовану]] мову програмування: [[Інкапсуляція|інкапсуляцію]] та модульність; [[Успадкування (програмування)|успадкування]]; прив'язані до типів процедури; [[Поліморфізм (програмування)|поліморфізм]]; [[Вказівник|вказівники]] на процедури; [[Абстрактний тип|абстрактні типи даних]]. Також сучасний стандарт фортрану в деякій мірі дозволяє використовувати [[Функційне програмування|функційну парадигму програмування]] з допомогою <code>pure</code> та <code>elemental</code> функцій, [[Рекурсія|рекурсії]] та [[Функція вищого порядку|функцій вищого порядку]] (як аргумент, результат та з одним рівнем [[Вкладена функція|вкладених функцій]]),- однак без [[Замикання (програмування)|замикань (closures)]], [[Анонімна функція|анонімних функцій (лямбда-функцій)]] та [[partial application|часткового застосування]].
Рядок 180 ⟶ 178:
 
== Бібліотеки ==
ІснуєФортран величезнадозволяє кількістьскористатись дуже великою кількістю наявного сумісного і перевіреного коду різноманітних математичних бібліотек, а також спеціалізованого науковогокоду з усіх галузей науки та інженерноготехніки<ref>нaприклад коду[http://cpc.cs.qub.ac.uk/ наComputer фортраніPhysics Communications Program Library] - колекція понад 3000 програм журналу Computer Physics Communications з обчислювальної фізики та хімії</ref>. Дуже широко розвинутими є напрямки математичних бібліотек та спеціалізовані алгоритми з чисельних методів<ref>[[:en:List_of_numerical_libraries#Fortran| Список чисельних бібліотек на фортрані {{ref-en}}]]</ref>. Найбільш відомі загальні математичні бібліотеки для роботи в Fortran це комерційні [[NAG]], [[MKL]], [[IMSL]], та з публічними ліцензіями: netlib.org<ref>[http://www.netlib.org/liblist.html Netlib колекція математичнного ПЗ] (більшість з якого написано на фортрані)</ref>, TOMS алгоритми<ref>[http://www.netlib.org/toms/ Software associated with papers published in the Transactions on Mathematical Software]{{ref-en}}</ref>, [[BLAS]]<ref>[http://www.netlib.org/blas/ Basic Linear Algebra Subprograms]</ref>, [[LAPACK]]<ref>[http://www.netlib.org/lapack/ LAPACK — Linear Algebra PACKage]</ref>, [[ScaLAPACK]]<ref>[http://www.netlib.org/scalapack/ ScaLAPACK — Scalable Linear Algebra PACKage]</ref>, [[SLATEC]]<ref>[http://www.netlib.org/slatec/ SLATEC Common Mathematical Library]</ref>, [[GNU Scientific Library|GSL]] разом з FGSL<ref name="fgsl">[http://www.lrz.de/services/software/mathematik/gsl/fortran/ FGSL: A Fortran interface to the GNU Scientific Library]</ref>, SPHEREPACK<ref>[https://www2.cisl.ucar.edu/resources/legacy/spherepack SPHEREPACK - A Package for Modeling Geophysical Processes]</ref>, FISHPACK90<ref>[https://www2.cisl.ucar.edu/resources/legacy/fishpack90 FISHPACK90 - Efficient FORTRAN Subprograms for the Solution of Separable Elliptic Partial Differential Equations]</ref>, FFTPACK5<ref>[https://www2.cisl.ucar.edu/resources/legacy/fft5 FFTPACK - A Fortran77 library of fast Fourier transforms]</ref>, [[CERNLIB]]<ref>[http://cernlib.web.cern.ch/cernlib/ CERN Program Library]</ref> та ін.

Однак існують і певні проблеми: більшу частину такого коду на фортрані почали розробляти ще до затвердження стандарту Fortran 90 і тому він часто містить в собі всі недоліки попередніх стандартів (фіксований код, нестандартні розширення, погану структурованість, незрозумілі назви змінних, статичне виділення пам'яті, проблеми з [[Багатонитева безпека|багатонитевою безпекою]] та інше). Дуже мало бібліотек тих часів переписувалось згідно з новими стандартами. Додавати такий код в сучасні проекти не є проблемою, але проблеми часто виникають, коли в коді цих бібліотек необхідно дещо змінити.

В фортрані майже<ref>[http://flibs.sourceforge.net FLIBS&nbsp;— A collection of Fortran modules]</ref> відсутні бібліотеки з узагальненими алгоритмами для роботи з різноманітними типами даних. Також немає достатньої кількості зразкового коду, що використовує [[Об'єктно-орієнтоване програмування|об'єктно-орієнтовану модель]], [[шаблони проектування]]<ref>[https://github.com/farhanjk/FortranPatterns Реалізація популярних шаблонів проектування в Fortran]</ref> та [[Узагальнене програмування|роботу з узагальненими типами даних]]. Звичайно це пояснюється низькою потребою в такому коді в тих галузях, де використовується фортран.

З стандартом 2003–2008 однак значно покращилась сумісність та можливість взаємодії бібліотек та програм на C та Fortran. Тому на даний час можна безпосередньо писати звичайний інтерфейс для використання потрібних бібліотек, що написані на C. Це використовується наприклад в FGSL<ref name="fgsl"></ref>&nbsp;— інтерфейсі до [[GNU Scientific Library]]. В деяких випадках можна згенерувати такий інтерфейс автоматично<ref name="gtk-fortran">[https://github.com/jerryd/gtk-fortran Fortran 95 GTK+ Interface Modules]</ref>. Багато фірм-розробників компіляторів додають також інші нестандартні додаткові функції: в gfortran - у вигляді GNU extension функцій, або ж як в intel ifort у вигляді додаткового модуля-бібліотеки "intel portability library", котра підключається з допомогою інструкції USE IFLPORT<ref>[https://software.intel.com/en-us/node/511404 Portability Library Routines]</ref>.
 
ПрограмуванняДля програмування [[Графічний інтерфейс користувача| графічних інтерфейсів]] на фортрані не надто поширено, однак і туттакож можна виділити кілька відомих бібліотек, що дозволяють відносно швидку реалізацію ГІК, чи візуалізувати дані у вигляді різноманітних [[Графік функції|графік]]ів: [[gtk-fortran]]<ref name="gtk-fortran"></ref>, [[QuickWin]]<ref>[https://software.intel.com/en-us/node/535330 Intel Fortran QuickWin library] Графічна бібліотека поставляється з [[Intel Visual Fortran]] (раніше Compaq Visual Fortran) тільки для MS Windows.</ref>, [[Winteracter]]<ref>[http://www.winteracter.com/ Winteracter Winteracter] Графічний інтерфейс і засоби візуалізації. Мультиплатформне власницьке ПЗ.</ref>, [[DISLIN]]<ref>[http://www.dislin.de/ DISLIN] закрита графічна бібліотека для відображення даних у вигляді графіків, гістограм, кругових діаграм, 3D-кольоровий ділянок, поверхонь, контурів і карт, створена в Max Planck Institute for Solar System Research. Мультиплатформна і для багатьох компіляторів. Безкоштовна для некомерційного використання.</ref>, [[GINO]]<ref>[http://www.gino-graphics.com/ GINO] Графічний інтерфейс і засоби візуалізації. Мультиплатформне власницьке ПЗ.</ref>, [[PLPLOT]]<ref>[http://plplot.sourceforge.net PLPLOT] Бібліотека для наукових графіків. Мультиплатформна, вільне програмне забезпечення під ліцензією LGPL.</ref>, [[GrWin]]<ref>[http://spdg1.sci.shizuoka.ac.jp/grwinlib/english/ GrWin] Графічна бібліотека для Windows, безкоштовна для некомерційного використання.</ref>, f90gl<ref> [http://math.nist.gov/f90gl/ f90gl] Надає Fortran 90 інтерфейс до OpenGL, GLU і GLUT. Мультиплатформна. Працює з багатьма компіляторами. Ліцензія: суспільне надбання.</ref>, JAPI<ref>[http://www.japi.de/ JAPI] Графічна бібліотека на JAVA і C, що забезпечує доступ до JAVA AWT Toolkit для C, Fortran, Pascal і Basic. Мультиплатформна, вільне програмне забезпечення під ліцензією LGPL.</ref>, [[PGPLOT]]<ref>[http://www.astro.caltech.edu/~tjp/pgplot/ PGPLOT] Графічна бібліотека, мультиплатформна, безкоштовна для некомерційного використання.</ref>, g2<ref>[http://g2.sourceforge.net/ g2 graphical library] Мультиплатформна графічна бібліотека, вільне програмне забезпечення під ліцензією LGPL.</ref>, [[MathGL]]<ref>[http://mathgl.sourceforge.net/doc_en/Main.html MathGL] Мультиплатформна графічна бібліотека, надає інтерфейс для багатьох мов програмування, в тому числі для Fortran, вільне програмне забезпечення</ref>, f03gl<ref>[http://www-stone.ch.cam.ac.uk/pub/f03gl/ f03gl] Бібліотека забезпечує Fortran 2003 інтерфейс до бібліотеки OpenGL, GLU і GLUT, вільне ПЗ, ліцензія GPL3</ref>, gnufor2<ref>[http://www.math.yorku.ca/~akuznets/gnufor2/ gnufor2] являє собою модуль, написаний на мові Fortran 90, надає інтерфейс до [[Gnuplot]] ПЗ</ref>, gnuplotfortran<ref>[http://gnuplotfortran.sourceforge.net/ gnuplotfortran] бібліотека надає також контроль сеансу [[Gnuplot]] з коду на Fortran 95.</ref>
 
== Критика ==