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

[перевірена версія][перевірена версія]
Вилучено вміст Додано вміст
скорочення перенаправлення на Уразливість (інформаційні технології)
Рядок 217:
** Дещо обмежене поняття вказівника - наприклад для створення масиву вказівників потрібно використовувати окремий похідний тип з компонентом-вказівником всередині і потім створювати масив таких об'єктів-вказівників
** Ієрархічна модель [[Простір імен|простору імен]] (по аналогії до <code>namespace</code> в C++)&nbsp;— в фортрані відсутня і до Fortran 2008 це створювало незручності для організації ієрархії коду та її компіляції. Зазвичай перший рівень простору імен забезпечувався в фортрані модулями з певним рівнем видимості для змінних (вживаючи відповідні <code>private</code> чи <code>public</code> інструкції для певних змінних) або ж обмежуючи видимість сутностей в модулі з допомогою <code>use module_name, only: some_variable</code>. Популярним також було безпосереднє додавання префіксів для кожної змінної в певному модулі, чи створення нового модуля <code>zz_module_name</code> в котрому робили перейменування всіх видимих змінних: <code>use module_name, x=>zz_x</code>. Ієрархію простору імен можна також симулювати декларуванням похідних типів, котрі в свою чергу містять наступні типи, однак такий спосіб не вирішує повністю проблем розділення видимості (наприклад при розпаралелюванні програми з такими типами). Однак, починаючи з стандарту Fortran 2008, задача локалізації видимості об'єктів та змінних навіть в межах одного модуля вирішується з використанням ієрархії на основі <code>submodule</code>, оскільки інші субмодулі певного модуля типово не мають доступу до об'єктів, які оголошені локально в кожному з цих субмодулів<ref>[http://fortranwiki.org/fortran/show/Submodules Fortran Wiki, Submodules]{{ref-en}}</ref>. Субмодуль може мати тільки один предок-модуль та ієрархію предків-субмодулів. Використовуючи видимість та ієрархію за допомогою субмодулів двох окремих модулів можна легко добратись навіть перехресно до об'єктів та сутностей, оголошених в кожному з цих модулів,- це коли субмодуль модуля А може використовувати об'єкт з модуля Б, а субмодуль модуля Б в свою чергу використовує об'єкт модуля А (що без субмодулів явно заборонено і викликає помилку циркулярної взаємозалежності модулів А та Б під час компіляції).
** Код на фортрані, хоча й в меншій мірі, але як і [[C_(мова_програмування)|C]] чи [[C++]] код, може містити серйозні [[Уразливість (інформаційні технології)|уразливості]] з точки зору безпеки, які не завжди виявляють компілятори: [[переповнення буфера|переповнення цілочислового буфера]], [[висячі вказівники]] та ін<ref>[http://www.open-std.org/JTC1/SC22/WG23/docs/ISO-IECJTC1-SC22-WG23_N0442-fortran-annex.pdf Document: WG 23/N0442, ISO/IEC JTC1/SC22/WG5 N1965, Fortran Annex to TR 24772, Guidance to Avoiding Vulnerabilities in Programming Languages through Language Selection and Use, ISO/IEC JTC1/SC22/WG5]{{ref-en}}</ref>
 
== Приклади ==