Spec-Zone.ru › Ada 2012
Справочник Ada 2012

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

Этот международный стандарт иногда дает рекомендации по обработке зависимостей от конкретной целевой машины. Каждая реализация Ada должна документировать, следуют ли они этим рекомендациям:
  • Program_Error должен быть поднят, когда в ходе выполнения используется недопустимое расширение Специального приложения. См. 1.1.3(20).
  • Реализационные расширения функциональности предопределенного языком библиотечного блока должны предоставляться путём добавления дочерних блоков к библиотечному блоку. См. 1.1.3(21).
  • Если обнаружена ограниченная ошибка или ошибочное выполнение, должен быть поднят Program_Error. См. 1.1.5(12).
  • Реализационные директивы должны не иметь никакого семантического эффекта для программ без ошибок. См. 2.8(16/3).
  • Реализационные директивы не должны делать некорректную программу корректной, за исключением случаев завершения объявления или конфигурации library_item в среде. См. 2.8(19).
  • Long_Integer должен быть объявлен в Standard, если целевая платформа поддерживает 32-битное арифметическое. Никакие другие именованные целочисленные подтипы не должны быть объявлены в Standard. См. 3.5.4(28).
  • Для целевой платформы с дополнением до двух, модульные типы с двоичным модулем до System.Max_Int*2+2 должны быть поддержаны. Модуль с недвоичной основой до Integer'Last должен быть поддержан. См. 3.5.4(29).
  • Program_Error должен быть поднят при вычислении S'Pos для перечислимого типа, если значение операнда не соответствует внутреннему коду любого перечислимого литерала типа. См. 3.5.5(8).
  • Long_Float должен быть объявлен в Standard, если целевая платформа поддерживает 11 или более цифр точности. Никакие другие именованные вещественные подтипы не должны быть объявлены в Standard. См. 3.5.7(17).
  • Многомерные массивы должны быть представлены в порядке следования строк, если массив не имеет соглашения Fortran. См. 3.6.2(11/3).
  • Tags.Internal_Tag должен возвращать тег типа, если он существует, внутренний мастер которого является мастером точки вызова функции. См. 3.9(26.1/3).
  • Вещественное статическое выражение с неформальным типом, которое не является частью более крупного статического выражения, должно быть округлено так же, как и целевая система. См. 4.9(38.1/2).
  • Значение Duration'Small не должно быть больше 100 микросекунд. См. 9.6(30).
  • База времени для delay_relative_statement должна быть монотонной. См. 9.6(31).
  • Добавочные секунды должны быть поддержаны, если целевая система их поддерживает. В противном случае операции в Calendar.Formatting должны возвращать результаты, соответствующие отсутствию добавочных секунд. См. 9.6.1(89/2).
  • Когда применяется к обобщенному блоку, программная директива, которая не является библиотечной директивой, должна применяться к каждому экземпляру обобщенного блока, для которого не применена переопределяющая директива непосредственно к экземпляру. См. 10.1.5(10/1).
  • Тип, объявленный в предварительно разработанном пакете, должен иметь одинаковое представление в каждом раскрытии данной версии пакета. См. 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/3).
  • Память, выделенная объектам упакованного типа, должна быть минимизирована. См. 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).
  • Если размер подтипа позволяет обеспечить эффективную независимую адресацию, то размер большинства объектов подтипа должен быть равен размеру подтипа. См. 13.3(52).
  • Определение размера на составном подтипе не должно влиять на внутреннюю структуру компонентов. См. 13.3(53).
  • Следует соблюдать рекомендуемый уровень поддержки атрибута Size. См. 13.3(56).
  • Следует соблюдать рекомендуемый уровень поддержки атрибута Component_Size. См. 13.3(73).
  • Следует соблюдать рекомендуемый уровень поддержки enumeration_representation_clauses. См. 13.4(10).
  • Следует соблюдать рекомендуемый уровень поддержки record_representation_clauses. См. 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).
  • Любые случаи динамического выделения памяти кучи, кроме как в рамках вычисления allocator, должны быть задокументированы. См. 13.11(23).
  • Пул памяти по умолчанию для типа доступа к константе не должен иметь накладных расходов для поддержки удаления отдельных объектов. См. 13.11(24).
  • Обычно, пул памяти для дискриминанта доступа или параметра доступа должен создаваться в момент allocator, и быть освобожден, когда обозначенный объект становится недоступным. Для других анонимных типов доступа пул должен создаваться в момент, когда тип разработан, и не должен поддерживать удаление отдельных объектов. См. 13.11(25).
  • Для стандартного пула памяти экземпляр Unchecked_Deallocation должен фактически освободить память. См. 13.11.2(17).
  • Вызов экземпляра Unchecked_Deallocation с ненулевым значением доступа должен вызывать Program_Error, если фактический тип доступа экземпляра является типом, для которого Storage_Size был задан равным нулю или определен языком как равный нулю. См. 13.11.2(17.1/3).
  • Если не указано иное, значение Stream_Size для элементарного типа должно быть количеством битов, соответствующим минимальному количеству элементов потока, требуемых первым подтипом типа, округлено до ближайшего кратного или множителя размера слова, которое также является кратным размеру элемента потока. См. 13.13.2(1.6/2).
  • Следует соблюдать рекомендуемый уровень поддержки атрибута Stream_Size. См. 13.13.2(1.8/2).
  • Если реализация предоставляет дополнительные именованные предопределённые целочисленные типы, то имена должны заканчиваться на «Integer». Если реализация предоставляет дополнительные именованные предопределённые типы с плавающей точкой, то имена должны заканчиваться на «Float». См. 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).
  • Любое хранилище, связанное с объектом типа Generator из пакетов генерации случайных чисел, должно быть освобождено при выходе из области видимости объекта. См. A.5.2(46).
  • Каждое значение Initiator, переданное в Reset для пакетов генерации случайных чисел, должно инициировать отдельный ряд случайных чисел, или, если это невозможно, по крайней мере, должно быть быстро меняющейся функцией от значения инициатора. См. A.5.2(47).
  • Get_Immediate должен быть реализован с небуферизованным вводом; входные данные должны быть доступны немедленно; редактирование строк должно быть отключено. См. A.10.7(23).
  • Папки пакетов. Должны быть предоставлены сведения для извлечения другой информации о файле. См. A.16(124/2).
  • Папки.Start_Search и Папки.Search должны генерировать Name_Error для неправильных шаблонов. См. A.16(125).
  • Папки.Rename должно поддерживаться, по крайней мере, когда и New_Name, и Old_Name являются простыми именами, а New_Name не идентифицирует существующий внешний файл. См. A.16(126/2).
  • Папки.Иерархические_имена_файлов должны быть предоставлены для систем с иерархическим именованием файлов и не должны предоставляться на других системах. См. 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).
  • Containers.Indefinite_Holders.Move не должен копировать элемент и должен минимизировать копирование внутренних структур данных. См. A.18.18(73/3).
  • Если исключение распространяется из операции с контейнером, ни одно хранилище не должно быть потеряно, и элемент не должен быть удалён из контейнера, если это не указано операцией. См. 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 для минимизации копирования не применяются к ограниченным деревьям. См. A.18.25(20/3).
  • Containers.Generic_Array_Sort и Containers.Generic_Constrained_Array_Sort должны иметь среднюю временную сложность, лучшую чем O(N**2), и худший случай не хуже, чем O(N**2). См. A.18.26(10/2).
  • Containers.Generic_Array_Sort и Containers.Generic_Constrained_Array_Sort должны минимизировать копирование элементов. См. A.18.26(11/2).
  • Containers.Generic_Sort должен иметь среднюю временную сложность, лучшую чем O(N**2), и худший случай не хуже, чем O(N**2). См. A.18.26(12/3).
  • Containers.Generic_Sort должен минимизировать вызовы обобщённого формального Swap. См. A.18.26(13/3).
  • Объекты ограниченных очередей должны быть реализованы без неявных указателей или динамического выделения памяти. См. A.18.29(13/3).
  • Объекты ограниченных приоритетных очередей должны быть реализованы без неявных указателей или динамического выделения памяти. См. A.18.31(14/3).
  • Если Экспорт поддерживается для языка, то основная программа должна быть написана на этом языке. Подпрограммы с именами «adainit» и «adafinal» должны быть предоставлены для разработки и завершения задачи среды. См. B.1(39/3).
  • Автоматическая разработка предварительно разработанных пакетов должна быть обеспечена при указании аспекта Экспорт как True, если поддерживается. См. B.1(40/3).
  • Для каждой поддерживаемой конвенции L, отличной от Встроенной, должно поддерживаться указание аспектов Импорт и Экспорт для объектов типов, совместимых с L, и для подпрограмм, а также аспект Конвенция должен поддерживаться для типов и подпрограмм, подходящих для L. См. B.1(41/4).
  • Если предоставлен интерфейс к C, COBOL или Fortran, соответствующий пакет или пакеты, описанные в Приложении B, «Интерфейс к другим языкам», также должны быть предоставлены. См. B.2(13/3).
  • Константы nul, wide_nul, char16_nul и char32_nul в пакете Interfaces.C должны иметь представление нуля. См. B.3(62.5/3).
  • Если поддерживается интерфейс C, должны поддерживаться соответствия интерфейсов между Ada и C. См. B.3(71).
  • Если поддерживается интерфейс COBOL, должны поддерживаться соответствия интерфейсов между Ada и COBOL. См. B.4(98).
  • Если поддерживается интерфейс Fortran, должны поддерживаться соответствия интерфейсов между Ada и Fortran. См. B.5(26).
  • Код машины или встроенные функции должны предоставлять доступ ко всем операциям, обычно доступным программистам на языке ассемблера для целевой среды. См. C.1(3).
  • Интерфейс к ассемблеру должен поддерживаться; по умолчанию ассемблер должен быть связан с идентификатором конвенции Assembler. См. C.1(4/3).
  • Если сущность экспортирована в язык ассемблера, то реализация должна выделить её по адресу, доступному для адресации, даже если она не ссылается на неё из кода Ada. Вызов подпрограммы машинного кода или ассемблера должен обрабатываться так, как если бы он мог читать или обновлять каждый объект, указанный как экспортируемый. См. C.1(5).
  • Вызовы встроенных и подпрограмм машинного кода должны иметь минимальную или нулевую издержки. См. C.1(10).
  • Должны быть предоставлены встроенные подпрограммы для доступа к любым операциям машины, которые предоставляют особые возможности или эффективность, которые обычно недоступны. См. C.1(16).
  • Если политика Ceiling_Locking не активна, а целевая система позволяет более тонкую настройку блокировки прерываний, должен быть предоставлен механизм для приложения для указания прерываний, которые должны быть заблокированы во время защищённых действий. См. C.3(28/2).
  • Обработчики прерываний должны вызываться непосредственно аппаратным обеспечением. См. C.3.1(20).
  • Нарушения любых определённых реализацией ограничений на обработчики прерываний должны обнаруживаться до выполнения. См. C.3.1(21).
  • Если поддерживаются определённые реализацией формы процедур обработчиков прерываний, то для каждой такой формы обработчика в дочернем пакете Interrupts должен быть указан тип, аналогичный Parameterless_Handler, с теми же операциями, что и в предопределённом пакете Interrupts. См. C.3.2(25).
  • Предварительно разработанные пакеты должны быть реализованы таким образом, чтобы во время выполнения выполнялось мало или совсем не выполнялось кода для разработки сущностей. См. C.4(14).
  • Если аспект Discard_Names имеет значение True для сущности, то объём памяти, используемый для хранения имён, связанных с этой сущностью, должен быть уменьшен. См. C.5(8/4).
  • Загрузка или сохранение переменного объекта, размер которого кратен System.Storage_Unit, а выравнивание которого не равно нулю, должны быть реализованы путём доступа только к битам объекта и ни к каким другим. См. C.6(22/2).
  • Загрузка или сохранение атомарного объекта должны быть реализованы с помощью одной инструкции загрузки или сохранения. См. C.6(23/2).
  • Если целевая область требует детерминированного использования памяти во время выполнения, память для атрибутов задач должна быть предварительно выделена статически, а количество предварительно выделенных атрибутов должно быть задокументировано. См. C.7.2(30).
  • Завершение атрибутов задач и освобождение связанной памяти должны выполняться как можно скорее после завершения задачи. См. C.7.2(30.1/2).
  • Имена, заканчивающиеся на «_Locking», должны использоваться для определённых реализацией политик блокировки. См. D.3(17).
  • Имена, заканчивающиеся на «_Queuing», должны использоваться для определённых реализацией политик очередей. См. D.4(16).
  • Оператор abort_statement не должен требовать блокировки задачи, выполняющей данное оператор. См. D.6(9).
  • В многопроцессорной системе задержка, связанная с прерыванием задачи на другом процессоре, должна быть ограничена. См. D.6(10).
  • Когда это возможно, указанные ограничения должны использоваться для создания более эффективной реализации. См. D.7(21).
  • При необходимости должны быть предоставлены механизмы для изменения значения Tick. См. D.8(47).
  • Calendar.Clock и Real_Time.Clock должны быть преобразованиями одной и той же временной базы. См. D.8(48).
  • «Лучшая» временная база, которая существует в основной системе, должна быть доступна приложению через Real_Time.Clock. См. D.8(49).
  • В многопроцессорной системе каждый процессор должен иметь отдельную и непересекающуюся очередь готовности. См. D.13(9).
  • При необходимости реализации должны предоставлять механизмы конфигурации для изменения значения Execution_Time.CPU_Tick. См. D.14(29/2).
  • Для временного события обработчик должен выполняться непосредственно механизмом прерывания от реального времени. См. D.15(25).
  • Каждый домен диспетчеризации должен иметь отдельные и непересекающиеся очереди готовности. См. D.16.1(31).
  • PCS должен позволять множественным задачам вызывать RPC-получатель. См. E.5(28).
  • Операция System.RPC.Write должна генерировать Storage_Error, если при записи элемента закончится память. См. E.5(29).
  • Если в целевой среде поддерживается COBOL (соответственно, C), то должен быть поддержан интерфейс к COBOL (соответственно, C), как указано в Приложении B. См. F(7/3).
  • Упакованная десятичная система должна использоваться в качестве внутренней представления для объектов подтипа S, когда S'Machine_Radix = 10. См. F.1(2).
  • Если в целевой среде поддерживается Fortran (соответственно, C), то должен быть поддержан интерфейс к Fortran (соответственно, C), как указано в Приложении B. См. G(7/3).
  • Смешанные операции с вещественными и комплексными числами (а также чисто мнимые и комплексные операции) не должны выполняться путём преобразования вещественной (соответственно, чисто мнимой) операнды в комплексную. См. G.1.1(56).
  • Если 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).
  • Solve и Inverse для Numerics.Generic_Complex_Arrays должны быть реализованы с использованием известных методов, а результат должен быть уточнён итерацией по остаткам. См. 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).


Spec-Zone.ru

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