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

[неперевірена версія][неперевірена версія]
Вилучено вміст Додано вміст
уточнення
уточнення
Рядок 128:
* покращено контроль доступності;
* поліпшено структури конструкторів та введено явні деструктори з допомогою <code>final</code>;
* додано зв'язування модульних процедур до оголошених в похідному типі процедур та операторів (перевантаження та створення нових операторів) у вигляді <code>=></code>;
* додано узагальнені ідентифікатори-назви <code>generic</code> для зв'язаних процедур-методів похідного типу (поліморфних для різних типів вхідних параметрів);
* додано явні атрибути <code>pass</code> та <code>nopass</code> для керування передачі [[вказівник]]а на об'єкт в прив'язаних до типу процедур, можливість керувати видимістю (<code>private</code>, <code>public</code>) окремих компонентів типу&nbsp;— як видимістю компонентів з даними так і видимістю прив'язаних процедур (слід однак мати на увазі, що видимість і доступність типів, компонент типів, об'єктів та змінних в фортрані заснована на модулях/субмодулях, а не на похідних типах, як в багатьох інших ОО-мовах);
* об'єктно-орієнтоване програмування&nbsp;— розширення типу і успадкування (за допомогою <code>extends</code>) та заборона за потреби переозначення зв'язаних до батьківського типу процедур (ключове слово <code>non_overridable</code>), поліморфізм типів (<code>class</code>, необмежений поліморфний специфікатор <code>class(*)</code>, конструкції <code>select type ... end select</code>, та вбудовані функції <code>same_type_as</code>, <code>extends_type_of</code>), відкладене зв'язування (<code>deffered</code>) та абстрактні типи (<code>abstract</code>), динамічне виділення пам'яті для типів та прив'язаних до типу процедур;
* покращення маніпуляцій з даними&nbsp;— динамічне виділення пам'яті для компонентів типів, автоматичне виділення пам'яті для динамічних масивів під час присвоєння, перевиділення(перенесення) пам'яті для динамічної змінної (з допомогою підпрограми <code>move_alloc</code>);
Рядок 139:
* введення вказівників на модульні процедури, вказівників на процедури як компонент похідних типів (''procedure pointer components'' дозволяють реалізувати динамічне зв'язування (ручну динамічну диспетчеризацію) процедур-методів в об'єкті-примірнику похідного типу в часі виконання), розширені вирази для ініціалізації, і покращення вбудованих процедур;
* внесення концепції вбудованих модулів (<code>intrinsic</code>), а також самі модулі, напр&nbsp;— <code>iso_fortran_env</code>;
* видимість модульних об'єктів&nbsp;— додано <code>protected</code> для видимості модульних об'єктів, додано можливість перейменовувати (невбудовані) об'єкти і сутності модуля (об'єкти даних, похідні типи, інтерфейсні блоки, процедури, узагальнені ідентифікатори та групи списків імен) в специфікаторі <code>use</code>, додано твердження <code>import</code> для контролю видимості модульних об'єктів в тілі <code>interface ... end interface</code>;
* операції читання/запису&nbsp;— асинхронна передача в інструкціях читання/запису (<code>asynchronous='yes'</code>) та для оголошених змінних, потоковий доступ, визначені користувачем операції для похідних типів, контроль за округленням в специфікації <code>format</code>, іменовані константи для відкритих файлових потоків, інструкція <code>flush</code> для завершення запису з буферів, регуляризація ключових слів та доступ до повідомлень про помилки;
* визначені користувачем операції читання/запису для похідних типів ({{lang-en|User-Defined Derived Type Input/Output або UDTIO}}), що дозволяють розробнику деталізувати, як похідний тип читається з файла та записується в файл з допомогою вбудованих інструкцій <code>read</code> та <code>write</code>. Технічно це задається зв'язуванням узагальнених та прив'язаних до типу процедур-інструкцій <code>generic :: read(formatted) =>X</code>, <code>generic :: write(formatted)=>Y</code>, <code>generic :: read(unformatted) => X</code>, <code>generic :: write(unformatted) => Y</code> з приватними підпрограмами X та Y з визначеним інтерфейсом <code>X(dtv, unit, iotype, v_list, iostat, iomsg)</code>;