Spec-Zone.ru › Ada 2022
Справочник по Аде (Ada 2022)

M.3 Рекомендации по реализации

Этот справочник иногда даёт рекомендации по обработке зависимостей от конкретной целевой машины. Каждая реализация Ada должна задокументировать, следуют ли они этим рекомендациям:
  • Программа_Ошибка должна быть поднята, когда в процессе выполнения используется неподдерживаемая функция Специализированных потребностей Приложения. См. 1.1.3(20).
  • Определяемые реализацией расширения функциональности предопределённого в языке библиотечного модуля должны предоставляться путём добавления дочерних элементов к библиотечному модулю. См. 1.1.3(21).
  • Если обнаружена ограниченная ошибка или ошибочное выполнение, должна быть поднята ошибка программы. См. 1.1.5(12).
  • Определяемые реализацией директивы не должны оказывать семантического влияния на программы без ошибок. См. 2.8(16/3).
  • Определяемые реализацией директивы не должны делать некорректную программу корректной, за исключением случаев, когда они завершают объявление или конфигурируют элемент_библиотеки в среде. См. 2.8(19).
  • Тип Long_Integer должен быть объявлен в Standard, если целевая платформа поддерживает 32-битные арифметические операции. Никакие другие именованные целочисленные подтипы не должны быть объявлены в Standard. См. 3.5.4(28).
  • Для целевой платформы с дополнением до двух, модульные типы с двоичным модулем до System.Max_Int*2+2 должны быть поддерживаемы. Должна поддерживаться недвоичная модуль до Integer'Last. См. 3.5.4(29).
  • Программа_Ошибка должна быть поднята для вычисления S'Pos для перечислимого типа, если значение операнда не соответствует внутреннему коду какого-либо перечислимого литерала типа. См. 3.5.5(8).
  • Тип Long_Float должен быть объявлен в Standard, если целевая платформа поддерживает 11 или более цифр точности. Никакие другие именованные вещественные подтипы не должны быть объявлены в Standard. См. 3.5.7(17).
  • Многомерные массивы должны быть представлены в порядке следования строк, если у массива нет соглашения Fortran. См. 3.6.2(11/3).
  • Теги.Внутренний_Тег должен возвращать метку типа, если она существует, внутренний мастер которого является мастером точки вызова функции. См. 3.9(26.1/3).
  • Вещественное статическое выражение с неформальным типом, которое не является частью более крупного статического выражения, должно быть округлено так же, как и целевая система. См. 4.9(38.1/2).
  • Для каждого языка-определённого закрытого типа T, T'Image должно генерировать изображение, которое было бы осмысленным, основываясь только на соответствующих публичных интерфейсах. См. 4.10(56).
  • Значение Duration'Small не должно быть больше 100 микросекунд. См. 9.6(30).
  • База времени для delay_relative_statement должна быть монотонной. См. 9.6(31/5).
  • Высокочастотные секунды должны поддерживаться, если целевая система их поддерживает. В противном случае операции в Calendar.Formatting должны возвращать результаты, соответствующие отсутствию високосных секунд. См. 9.6.1(89/2).
  • Этот абзац был удалён.
  • Тип, объявленный в предварительно проработанном пакете, должен иметь одинаковое представление в каждой обработке данной версии пакета. См. 10.2.1(12).
  • Exception_Information должен предоставлять информацию, полезную для отладки, и должен включать Exception_Name и Exception_Message. См. 11.4.1(19).
  • Exception_Message по умолчанию должен быть коротким, предоставлять информацию, полезную для отладки, и не должен включать Exception_Name. См. 11.4.1(19).
  • Код, выполняемый для проверок, которые были подавлены, должен быть минимизирован. См. 11.5(28).
  • Следует придерживаться рекомендуемого уровня поддержки всех элементов представления. См. 13.1(28/5).
  • Память, выделенная для объектов упакованного типа, должна быть минимизирована. См. 13.2(6).
  • Следует придерживаться рекомендуемого уровня поддержки аспекта Pack. См. 13.2(9).
  • Для массива X, X'Address должен указывать на первый элемент массива, а не на границы массива. См. 13.3(14).
  • Следует придерживаться рекомендуемого уровня поддержки атрибута Address. См. 13.3(19).
  • Для любого специального подтипа помеченного типа S, S'Class'Alignment должен быть равен S'Alignment. См. 13.3(28).
  • Следует придерживаться рекомендуемого уровня поддержки атрибута Alignment. См. 13.3(35).
  • Размер объекта массива не должен включать его границы. См. 13.3(41.1/2).
  • Если размер подтипа не соответствует и допускает эффективную независимую адресацию, то Object_Size подтипа (если не указано иное) должен быть равен Size подтипа. См. 13.3(52).
  • Определение Size в составном подтипе не должно влиять на внутреннюю структуру компонентов. См. 13.3(53).
  • Следует придерживаться рекомендуемого уровня поддержки атрибута Size. См. 13.3(56).
  • Определение Object_Size в составном типе не должно влиять на внутреннюю структуру компонентов. См. 13.3(58).
  • Если S является определённым первым подтипом, для которого Object_Size не указан, S'Object_Size должен быть наименьшим кратным размеру элемента хранения, большим или равным S'Size, которое согласуется с выравниванием S. См. 13.3(58).
  • Следует придерживаться рекомендуемого уровня поддержки атрибута Object_Size. См. 13.3(58).
  • Размер большинства объектов подтипа должен быть равен Object_Size подтипа. См. 13.3(58).
  • Следует придерживаться рекомендуемого уровня поддержки атрибута Component_Size. См. 13.3(73).
  • Следует придерживаться рекомендуемого уровня поддержки enumeration_representation_clause. См. 13.4(10).
  • Следует придерживаться рекомендуемого уровня поддержки record_representation_clause. См. 13.5.1(22).
  • Если компонент представлен указателем на фактические данные компонента, которые смежны с остальной частью объекта, то атрибуты расположения хранения должны отражать расположение фактических данных. Если компонент размещён несмежно с остальной частью объекта, то при обращении к одному из его атрибутов расположения хранения должно генерироваться предупреждение. См. 13.5.2(5).
  • Следует придерживаться рекомендуемого уровня поддержки нестандартного порядка битов. См. 13.5.3(8).
  • Тип System.Address должен быть закрытым типом. См. 13.7(37).
  • Операции в System и его дочерних элементах должны отражать целевую среду; операции, которые не имеют смысла, должны поднимать Program_Error. См. 13.7.1(16).
  • Поскольку размер объекта массива обычно не включает его границы, границы не должны быть частью преобразованных данных в экземпляре Unchecked_Conversion. См. 13.9(14/2).
  • Не должно быть ненужных проверок во время выполнения результата Unchecked_Conversion; результат должен возвращаться по ссылке, когда это возможно. Следует избегать ограничений на Unchecked_Conversions. См. 13.9(15).
  • Следует придерживаться рекомендуемого уровня поддержки Unchecked_Conversion. См. 13.9(17).
  • Все случаи, в которых память кучи динамически выделяется, кроме как в рамках вычисления аллокатора, должны быть задокументированы. См. 13.11(23).
  • У пула памяти по умолчанию для типа доступа к константе не должно быть накладных расходов для поддержки удаления отдельных объектов. См. 13.11(24).
  • Обычно, пул памяти для дискриминанта доступа или параметра доступа должен создаваться в момент аллокации, и быть освобождён, когда обозначенный объект станет недоступным. Для других анонимных типов доступа пул должен создаваться в момент обработки типа и может не иметь механизма для удаления отдельных объектов. См. 13.11(25).
  • Для стандартного пула памяти экземпляр Unchecked_Deallocation должен фактически освободить память. См. 13.11.2(17).
  • Вызов экземпляра Unchecked_Deallocation со значением доступа не равным null должен поднимать Program_Error, если фактический тип доступа экземпляра является типом, для которого Storage_Size указан как ноль или определён языком как ноль. См. 13.11.2(17.1/3).
  • Объекты Streams.Storage.Bounded.Stream_Type должны быть реализованы без неявных указателей или динамического выделения памяти. См. 13.13.1(37).
  • Если не указано иное, значение Stream_Size для элементарного типа должно быть числом бит, которое соответствует минимальному числу элементов потока, требуемым первым подтипом типа, округлённым до ближайшего кратного или множителя размера слова, который также является кратным размеру элемента потока. См. 13.13.2(1.6/2).
  • Следует придерживаться рекомендуемого уровня поддержки атрибута Stream_Size. См. 13.13.2(1.8/2).
  • Если реализация предоставляет дополнительные именованные предопределённые целочисленные типы, то имена должны заканчиваться на «Целое». Если реализация предоставляет дополнительные именованные предопределённые типы с плавающей запятой, то имена должны заканчиваться на «Вещественное». См. A.1(52).
  • Определяемые реализацией операции над Wide_Character, Wide_String, Wide_Wide_Character и Wide_Wide_String должны быть дочерними единицами Wide_Characters или Wide_Wide_Characters. См. A.3.1(7/3).
  • Строка, возвращаемая Wide_Characters.Handling.Character_Set_Version, должна содержать либо «10646:», либо «Unicode». См. A.3.5(62).
  • Объекты ограниченных строк не должны реализовываться с помощью неявных указателей и динамического выделения. См. A.4.4(106).
  • Strings.Hash должна быть хорошей хеш-функцией, возвращающей широкий спектр значений для различных строк, и похожие строки редко должны возвращать одинаковое значение. См. A.4.9(12/2).
  • Если реализация поддерживает другие схемы кодирования строк, должна быть определена дочерняя единица Ada.Strings, подобная UTF_Encoding. См. A.4.11(107/3).
  • Объекты ограниченных буферов должны реализовываться без динамического выделения. См. A.4.12(36).
  • Любой связанный с объектом типа Generator пакетов генерации случайных чисел должен быть освобожден при выходе из области видимости объекта. См. A.5.2(46).
  • Каждое значение Initiator, переданное в Reset для пакетов генерации случайных чисел, должно инициировать разную последовательность случайных чисел, или, если это невозможно, по крайней мере, быть быстро меняющейся функцией от значения инициатора. См. A.5.2(47).
  • Get_Immediate должен реализовываться с небуферизованным вводом; ввод должен быть доступен немедленно; редактирование строк должно быть отключено. См. A.10.7(23).
  • Пакет Directories.Information должен предоставляться для получения другой информации о файле. См. A.16(124/2).
  • Directories.Start_Search и Directories.Search должны генерировать Name_Error для неправильных шаблонов. См. A.16(125).
  • Directories.Rename должно поддерживаться, по крайней мере, когда и New_Name, и Old_Name являются простыми именами, и New_Name не идентифицирует существующий внешний файл. См. A.16(126/2).
  • Directories.Hierarchical_File_Names должно предоставляться для систем с иерархическими именами файлов и не предоставляться для других систем. См. A.16.1(36/3).
  • Если среда выполнения поддерживает подпроцессы, текущие переменные среды должны использоваться для инициализации переменных среды подпроцесса. См. A.17(32/2).
  • Изменения переменных среды, внесенные вне управления Environment_Variables, должны отражаться немедленно. См. A.17(33/2).
  • Containers.Hash_Type'Modulus должен быть по крайней мере 2**32. Containers.Count_Type'Last должен быть по крайней мере 2**31–1. См. A.18.1(8/2).
  • Временная сложность Element для Containers.Vector в худшем случае должна быть O(log N). См. A.18.2(256/2).
  • Временная сложность Append с Count = 1, когда N меньше, чем емкость для Containers.Vector, в худшем случае должна быть O(log N). См. A.18.2(257/2).
  • Временная сложность Prepend с Count = 1 и Delete_First с Count=1 для Containers.Vectors в худшем случае должна быть O(N log N). См. A.18.2(258/2).
  • Временная сложность вызова процедуры Sort экземпляра Containers.Vectors.Generic_Sorting в худшем случае должна быть O(N**2), а средняя временная сложность должна быть лучше, чем O(N**2). См. A.18.2(259/2).
  • Containers.Vectors.Generic_Sorting.Sort и Containers.Vectors.Generic_Sorting.Merge должны минимизировать копирование элементов. См. A.18.2(260/2).
  • Containers.Vectors.Move не должен копировать элементы и должен минимизировать копирование внутренних структур данных. См. A.18.2(261/2).
  • Если исключение распространяется из операции с вектором, никакой памяти не должно быть потеряно, а также никакие элементы не должны быть удалены из вектора, если это не указано операцией. См. A.18.2(262/2).
  • Временная сложность Element, Insert с Count=1 и Delete с Count=1 для Containers.Doubly_Linked_Lists в худшем случае должна быть O(log N). См. A.18.3(160/2).
  • Вызов процедуры Sort экземпляра Containers.Doubly_Linked_Lists.Generic_Sorting должен иметь среднюю временную сложность лучше, чем O(N**2), а в худшем случае не хуже, чем O(N**2). См. A.18.3(161/2).
  • Containers.Doubly_Linked_Lists.Move не должен копировать элементы и должен минимизировать копирование внутренних структур данных. См. A.18.3(162/2).
  • Если исключение распространяется из операции со списком, никакой памяти не должно быть потеряно, а также никакие элементы не должны быть удалены из списка, если это не указано операцией. См. A.18.3(163/2).
  • Move для карты не должен копировать элементы и должен минимизировать копирование внутренних структур данных. См. A.18.4(83/2).
  • Если исключение распространяется из операции с картой, никакой памяти не должно быть потеряно, а также никакие элементы не должны быть удалены из карты, если это не указано операцией. См. A.18.4(84/2).
  • Средняя временная сложность операций Element, Insert, Include, Replace, Delete, Exclude и Find, принимающих параметр ключа для Containers.Hashed_Maps, должна составлять O(log N). Средняя временная сложность подпрограмм Containers.Hashed_Maps, принимающих параметр курсора, должна составлять O(1). Средняя временная сложность Containers.Hashed_Maps.Reserve_Capacity должна составлять O(N). См. A.18.5(62/2).
  • Временная сложность операций Element, Insert, Include, Replace, Delete, Exclude и Find, принимающих параметр ключа для Containers.Ordered_Maps, в худшем случае должна составлять O((log N)**2) или лучше. Временная сложность подпрограмм Containers.Ordered_Maps, принимающих параметр курсора, в худшем случае должна составлять O(1). См. A.18.6(95/2).
  • Move для множеств не должен копировать элементы и должен минимизировать копирование внутренних структур данных. См. A.18.7(104/2).
  • Если исключение распространяется из операции с множеством, никакой памяти не должно быть потеряно, а также никакие элементы не должны быть удалены из множества, если это не указано операцией. См. A.18.7(105/2).
  • Средняя временная сложность операций Insert, Include, Replace, Delete, Exclude и Find контейнера Containers.Hashed_Sets, принимающих параметр элемента, должна быть O(log N). Средняя временная сложность подпрограмм Containers.Hashed_Sets, принимающих параметр курсора, должна составлять O(1). Средняя временная сложность Containers.Hashed_Sets.Reserve_Capacity должна составлять O(N). См. A.18.8(88/2).
  • Временная сложность операций Insert, Include, Replace, Delete, Exclude и Find контейнера Containers.Ordered_Sets, принимающих параметр элемента, в худшем случае должна быть O((log N)**2). Временная сложность подпрограмм Containers.Ordered_Sets, принимающих параметр курсора, в худшем случае должна составлять O(1). См. A.18.9(116/2).
  • Временная сложность операций Element, Parent, First_Child, Last_Child, Next_Sibling, Previous_Sibling, Insert_Child с Count=1 и Delete контейнера Containers.Multiway_Trees в худшем случае должна быть O(log N). См. A.18.10(231/3).
  • Containers.Multiway_Trees.Move не должен копировать элементы и должен минимизировать копирование внутренних структур данных. См. A.18.10(232/3).
  • Если исключение распространяется из операции с деревом, никакой памяти не должно быть потеряно, а также никакие элементы не должны быть удалены из дерева, если это не указано операцией. См. A.18.10(233/3).
  • Move и Swap в Containers.Indefinite_Holders не должны копировать элементы и должны минимизировать копирование внутренних структур данных. См. A.18.18(73/5).
  • Если исключение распространяется из операции с контейнером, никакой памяти не должно быть потеряно, и элемент не должен быть удален из контейнера, если это не указано операцией. См. A.18.18(74/3).
  • Объекты ограниченных векторов должны реализовываться без неявных указателей или динамического выделения. См. A.18.19(16/3).
  • Рекомендации по реализации процедуры Move для минимизации копирования не применяются к ограниченным векторам. См. A.18.19(17/3).
  • Объекты ограниченных списков должны реализовываться без неявных указателей или динамического выделения. См. A.18.20(19/3).
  • Рекомендации по реализации процедуры Move для минимизации копирования не применяются к ограниченным спискам. См. A.18.20(20/3).
  • Объекты ограниченных хешированных карт должны реализовываться без неявных указателей или динамического выделения. См. A.18.21(21/3).
  • Рекомендации по реализации процедуры Move для минимизации копирования не применяются к ограниченным хешированным картам. См. A.18.21(22/3).
  • Объекты ограниченных упорядоченных карт должны реализовываться без неявных указателей или динамического выделения. См. A.18.22(18/3).
  • Рекомендации по реализации процедуры Move для минимизации копирования не применяются к ограниченным упорядоченным картам. См. A.18.22(19/3).
  • Объекты ограниченных хешированных множеств должны реализовываться без неявных указателей или динамического выделения. См. A.18.23(20/3).
  • Рекомендации по реализации процедуры Move для минимизации копирования не применяются к ограниченным хешированным множествам. См. A.18.23(21/3).
  • Объекты ограниченных упорядоченных множеств должны реализовываться без неявных указателей или динамического выделения. См. A.18.24(17/3).
  • Рекомендации по реализации процедуры Move для минимизации копирования не применяются к ограниченным упорядоченным множествам. См. A.18.24(18/3).
  • Объекты ограниченных деревьев должны реализовываться без неявных указателей или динамического выделения. См. A.18.25(19/3).
  • Рекомендации по реализации процедуры Move для минимизации копирования не применяются к ограниченным деревьям. См. А.18.25(20/3).
  • Containers.Generic_Array_Sort и Containers.Generic_Constrained_Array_Sort должны иметь среднюю временную сложность лучше, чем O(N**2), а худший случай не хуже, чем O(N**2). См. А.18.26(10/2).
  • Containers.Generic_Array_Sort и Containers.Generic_Constrained_Array_Sort должны минимизировать копирование элементов. См. А.18.26(11/2).
  • Containers.Generic_Sort должен иметь среднюю временную сложность лучше, чем O(N**2), а худший случай не хуже, чем O(N**2). См. А.18.26(12/3).
  • Containers.Generic_Sort должен минимизировать вызовы общей формальной Swap. См. А.18.26(13/3).
  • Объекты ограниченных очередей должны быть реализованы без неявных указателей или динамического выделения памяти. См. А.18.29(13/3).
  • Объекты ограниченных приоритетных очередей должны быть реализованы без неявных указателей или динамического выделения памяти. См. А.18.31(14/3).
  • Объекты ограниченных держателей должны быть реализованы без динамического выделения памяти. См. А.18.32(15/5).
  • Если поддержка Export доступна для языка, то основную программу следует написать на этом языке. Должны быть предоставлены подпрограммы с именами «adainit» и «adafinal» для разработки и завершения работы задачи среды. См. В.1(39/3).
  • Автоматическая разработка предварительно разработанных пакетов должна быть обеспечена при указании аспекта Export как True, если это поддерживается. См. В.1(40/3).
  • Для каждой поддерживаемой конвенции L, отличной от Intrinsic, должна поддерживаться возможность указания аспектов Import и Export для объектов типов, совместимых с L, и для подпрограмм, а также аспект Convention должен поддерживаться для L-допустимых типов и для подпрограмм. См. В.1(41/5).
  • Если предоставляется интерфейс к C, COBOL или Fortran, соответствующий пакет или пакеты, описанные в Приложении В, «Интерфейс к другим языкам», также должны быть предоставлены. См. В.2(13/3).
  • Константы nul, wide_nul, char16_nul и char32_nul в пакете Interfaces.C должны иметь представление нуля. См. В.3(62.5/3).
  • Если поддерживается интерфейс к C, то должны поддерживаться соответствия интерфейсов между Ada и C. См. В.3(71).
  • Если реализация C поддерживает unsigned long long и long long, то должны поддерживаться unsigned_long_long и long_long. См. В.3(71).
  • Если поддерживается интерфейс к COBOL, то должны поддерживаться соответствия интерфейсов между Ada и COBOL. См. В.4(98).
  • Если поддерживается интерфейс к Fortran, то должны поддерживаться соответствия интерфейсов между Ada и Fortran. См. В.5(26).
  • Код машины или поддержка intrinsics должна обеспечивать доступ ко всем операциям, обычно доступным программистам ассемблера для целевой среды. См. С.1(3).
  • Интерфейс к ассемблеру должен поддерживаться; по умолчанию ассемблер должен быть связан с идентификатором конвенции Assembler. См. С.1(4/3).
  • Если сущность экспортируется в язык ассемблера, то реализация должна выделить её по адресу, доступному для адресации, даже если она не ссылается на неё в коде Ada. Вызов подпрограммы машинного кода или ассемблера должен рассматриваться как способ чтения или обновления каждого объекта, указанного как экспортированный. См. С.1(5).
  • Вызовы intrinsic и подпрограмм машинного кода должны иметь небольшую или нулевую накладные расходы. См. С.1(10).
  • Должны быть предоставлены intrinsic подпрограммы для доступа к любым операциям машины, которые обеспечивают особые возможности или эффективность, которые обычно недоступны. См. С.1(16).
  • Если политика Ceiling_Locking не в силе и целевая система позволяет более тонкий контроль блокировки прерываний, должен быть предоставлен способ для приложения указать, какие прерывания должны быть заблокированы во время защищённых действий. См. С.3(28/2).
  • Обработчики прерываний должны вызываться непосредственно аппаратурой. См. С.3.1(20).
  • Нарушения любых ограничений, определённых реализацией, для обработчиков прерываний должны обнаруживаться до выполнения. См. С.3.1(21).
  • Если поддерживаются формы обработчиков прерываний, определённые реализацией, то для каждой такой формы обработчика должен быть указан тип, аналогичный Parameterless_Handler, в дочернем пакете Interrupts, с теми же операциями, что и в предопределённом пакете Interrupts. См. С.3.2(25).
  • Предварительно разработанные пакеты должны быть реализованы таким образом, чтобы практически никакого кода не выполнялось во время выполнения для разработки сущностей. См. С.4(14).
  • Если аспект Discard_Names равен True для сущности, то объём памяти, используемой для хранения имён, связанных с этой сущностью, должен быть уменьшен. См. С.5(8/4).
  • Загрузка или сохранение переменного объекта, размер которого кратен System.Storage_Unit и выравнивание которого не равно нулю, должно выполняться путём доступа только к битам этого объекта и ни к каким другим. См. С.6(22/5).
  • Загрузка или сохранение атомного объекта должно выполняться с помощью одной инструкции загрузки или сохранения. См. С.6(23/2).
  • Если целевая область требует детерминированного использования памяти во время выполнения, память для атрибутов задач должна быть предварительно выделена статически, а количество предварительно выделенных атрибутов должно быть задокументировано. См. С.7.2(30).
  • Завершение работы атрибутов задачи и освобождение связанной памяти должны выполняться как можно скорее после завершения работы задачи. См. С.7.2(30.1/2).
  • Имена, заканчивающиеся на «_Locking», должны использоваться для определённых реализацией политик блокировки. См. Д.3(17).
  • Имена, заканчивающиеся на «_Queuing», должны использоваться для определённых реализацией политик очереди. См. Д.4(16).
  • Оператор abort_statement не должен требовать блокировки задачи, выполняющей этот оператор. См. Д.6(9).
  • В многопроцессорной системе задержка, связанная с прерыванием задачи на другом процессоре, должна быть ограничена. См. Д.6(10).
  • Когда это возможно, следует использовать указанные ограничения для получения более эффективной реализации. См. Д.7(21).
  • При необходимости должны быть предусмотрены механизмы для изменения значения Tick. См. Д.8(47).
  • Calendar.Clock и Real_Time.Clock должны быть преобразованиями одной и той же временной базы. См. Д.8(48).
  • «Наилучшая» временная база, которая существует в основной системе, должна быть доступна приложению через Real_Time.Clock. См. Д.8(49).
  • В многопроцессорной системе каждый процессор должен иметь отдельную и независимую очередь готовности. См. Д.13(9).
  • При необходимости реализации должны предоставлять механизмы конфигурации для изменения значения Execution_Time.CPU_Tick. См. Д.14(29/2).
  • Для временного события обработчик должен выполняться непосредственно механизмом прерывания реального времени. См. Д.15(25).
  • Запуск защищённого действия на защищённом объекте, статически назначенном процессору, не должен использовать ожидание с проверкой состояния. См. Д.16(16).
  • Каждая область диспетчеризации должна иметь отдельные и независимые очереди готовности. См. Д.16.1(31).
  • PCS должен позволять нескольким задачам вызывать приемник RPC. См. Е.5(28).
  • Операция System.RPC.Write должна генерировать Storage_Error, если при записи элемента закончится память. См. Е.5(29).
  • Если в целевой среде поддерживается COBOL (соответственно, C), то интерфейс с COBOL (соответственно, C) должен поддерживаться, как указано в Приложении В. См. F(7/3).
  • Десятичная упакованная форма должна использоваться как внутреннее представление для объектов подтипа S, когда S'Machine_Radix = 10. См. F.1(2).
  • Если в целевой среде поддерживается Fortran (соответственно, C), то интерфейс с Fortran (соответственно, C) должен поддерживаться, как указано в Приложении В. См. G(7/3).
  • Смешанные операции над вещественными и комплексными числами (а также чистыми мнимыми и комплексными числами) не должны выполняться путём преобразования вещественного (соответственно, чисто мнимого) операнда в комплексное число. См. G.1.1(56/5).
  • Если Real'Signed_Zeros равен True для Numerics.Generic_Complex_Types, должна быть обеспечена рациональная обработка знаков нулевых результатов и компонент результатов. См. G.1.1(58).
  • Если Complex_Types.Real'Signed_Zeros равен True для Numerics.Generic_Complex_Elementary_Functions, должна быть обеспечена рациональная обработка знаков нулевых результатов и компонент результатов. См. G.1.2(49).
  • Для элементарных функций прямые тригонометрические функции без параметра Cycle не должны реализовываться вызовом соответствующей версии с параметром Cycle. Функция Log без параметра Base не должна реализовываться вызовом Log с параметром Base. См. G.2.4(19).
  • Для комплексных арифметических операций функция Compose_From_Polar без параметра Cycle не должна реализовываться вызовом Compose_From_Polar с параметром Cycle. См. G.2.6(15).
  • Функции Solve и Inverse для Numerics.Generic_Real_Arrays должны быть реализованы с использованием установленных методов, таких как LU-разложение, и результат должен быть уточнён итерацией по остаткам. См. G.3.1(88/3).
  • Оператор равенства должен использоваться для проверки, является ли матрица в Numerics.Generic_Real_Arrays симметричной. См. G.3.1(90/2).
  • Реализация должна минимизировать случаи, при которых алгоритм, используемый для Numerics.Generic_Real_Arrays.Eigenvalues и Numerics.Generic_Real_Arrays.Eigensystem, не сходится. См. G.3.1(91/3).
  • Для Numerics.Generic_Complex_Arrays Solve и Inverse должны быть реализованы с использованием устоявшихся методик, а результат должен быть уточнён итерацией по остаткам. См. G.3.2(158/3).
  • Операторы равенства и отрицания должны использоваться для проверки, является ли матрица эрмитовой. См. G.3.2(160/2).
  • Реализация должна минимизировать случаи, при которых алгоритм, используемый для Numerics.Generic_Complex_Arrays.Eigenvalues и Numerics.Generic_Complex_Arrays.Eigensystem, не сходится. См. G.3.2(160.1/3).
  • Смешанные операции с вещественными и комплексными числами не должны выполняться путём преобразования вещественного операнда в комплексный. См. G.3.2(161/2).
  • Информация, полученная с помощью pragma Reviewable, должна предоставляться как в удобочитаемом, так и в машиночитаемом виде, и последний формат должен быть документирован. См. H.3.1(19).
  • Список объектного кода должен быть предоставлен как в символическом, так и в численном формате. См. H.3.1(20).
  • Если политика детализации разбиения — Последовательная, и задача окружения заблокируется на неопределённое время во время детализации, то разбиение должно быть немедленно завершено. См. H.6(15/3).
  • При применении к обобщённому блоку, блок программы pragma, который не является pragma библиотечного блока, должен применяться к каждому экземпляру обобщённого блока, для которого не применено переопределяющее pragma непосредственно к экземпляру. См. J.15(9/5).


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API