Rationale for Ada 2005: Introduction
RUSTOPBACKNEXT
ENG |
3.6 Standard library
@ There are significant improvements to the standard library in Ada 2005. One of the strengths of Java is the huge library that comes with it. Ada has tended to take the esoteric view that it is a language for constructing programs from components and has in the past rather assumed that the components would spring up by magic from the user community. There has also perhaps been a reluctance to specify standard components in case that preempted the development of better ones. However, it is now recognized that standardizing useful stuff is a good thing. And moreover, secondary ISO standards are not very helpful because they are almost invisible. Ada 95 added quite a lot to the predefined library and Ada 2005 adds more. @ First, there are packages for manipulating vectors and matrices already mentioned in Section 3.5 when discussing formal package parameters. There are two packages, Ada.Numerics.Generic_Real_Arrays for real vectors and matrices and Ada.Numerics.Generic_Complex_Arrays for complex vectors and matrices. They can be instantiated according to the underlying floating point type used. There are also nongeneric versions as usual. @ These packages export types for declaring vectors and matrices and many operations for manipulating them. Thus if we have an expression in mathematical notation such as
|
|
|
|
|
|
|
|
Rationale for Ada 2005: Introduction
ENGRUSTOPBACKNEXT3.6 Стандартная библиотека.
@ Есть существенные усовершенствования к стандартной библиотеке Ады 2005. Одно из приемуществ языка Java - огромная библиотека, которая идет вместе с ним. Разработчики Ады наивно полагали, что Ада - язык для того, чтобы создавать программы из компонентов и предполагали, что компоненты возникнут сами собой из пользовательского семейства. Также возможно, было нежелание определять стандартные компоненты из опасения что это исключило бы разработку лучших. Однако, теперь понятно, что стандартизация полезного материала является хорошей вещью. И кроме того, вторичные стандарты Международной организации по стандартизации не очень полезны, потому что они почти невидимы. Ада 95 добавила довольно много к предопределенной библиотеке Ады, которую Ада 2005 добавляет ещё больше.
@ Во-первых, есть пакеты для обработки векторов и матриц уже упомянутые в разделе 3.5, при обсуждении формальных параметров пакетов. Это пакет Ada.Numerics.Generic_Real_Arrays для векторов и матриц с элементами типа Real и пакет Ada.Numerics.Generic_Complex_Arrays для комплексных чисел. Они могут быть конкретизированы согласно основному типу с плавающей запятой. Имеется также nongeneric версия.
@ Эти пакеты экспортируют типы для объявления векторов и матриц и набор операций для их обработки. Таким образом, если у нас есть выражение в математическом виде:
|
@ где x, y и z - векторы, и A - квадратная матрица, тогда это вычисление может быть просто запрограммировано как:
|
@ и будут вызваны соответствующие операции. Пакеты также включают подпрограммы для самых полезных вычислений линейной алгебры, а именно, решения линейных уравнений, матричной инверсии и определяющей оценки, плюс определение собственных значений и собственных векторов для симметричных матриц (Hermitian в сложном случае). Таким образом, чтобы определить X данных Y, Z и в вышеупомянутом примере мы можем написать:
|
@ Нельзя считать, что эти пакеты Ады в любом случае конкурируют с очень всесторонним пакетом BLAS (Основные Линейные Подпрограммы Алгебры). Цель пакетов Ады состоит в том, чтобы обеспечить простые реализации наиболее используемых алгоритмов (возможно для маленьких внедренных систем или для того, чтобы моделировать) и служить твердой основой для того, чтобы разработать связывания к BLAS для более требовательных ситуаций. Случайно, они находятся в приложении Численных данных.
@ Другое (но очень тривиальное) изменение на приложение Численных данных, состоит в том, что неуниверсальные версии пакета Ada.Text_IO.Complex_IO были добавлены в соответствии со стандартным принципом обеспечения неуниверсальных версий универсальных предопределенных пакетов для удобства. Их вычеркивание от ada было оплошностью.
@ Есть новый предопределенный пакет в Приложении A для работы с файловыми системами с древовидной структурой. Область применения возможно обозначена этим фрагментом ее спецификации:
|
@ Пакет содержит средства, которые будут полезны в любой Unix или Windows системе. Однако, он как и пакет Ada.Command_Line не может быть приемлем в любой другой среде.
@ Есть также пакет Ada.Environment_Variables для того, чтобы обратиться к переменным среды, которые имеются в большинстве операционных систем.
@ Много дополнительных подпрограмм было добавлено к существующим пакетам обработки строк. Есть несколько проблем с пакетами ada. Одна из них, это преобразование между ограниченными и неограниченными строками, и необработанный тип String требует слишком много возни, он уродлив и неэффективен. Например, поиск фрагмента ограниченной или неограниченной строки может быть сделан, преобразовывая её в String и затем ища в соответствующем секторе (или делая обрезанную копию сначала).
@ Вкратце дополнительные подпрограммы следующие:
@ Так же добавлен новый пакет Ada.Text_IO.Unbounded_IO для ввода и вывода неограниченных строк. Он так же избегает ненужного преобразования в тип String. Точно так же есть универсальный пакет Ada.Text_IO.Bounded_IO; Он является универсальным потому что пакет String.Bounded имеет внутренний универсальный пакет, который параметризуется максимальной строковой длиной.
@ Наконец, две функции Get_Line добавлены в пакет Ada.Text_IO непосредственно. Они избегают трудностей с длиной строки, которая происходит с существующими процедурами Get_Line.
@ В Аде 83 идентификаторы программы использовали 7-битный набор ASCII. В Аде 95 это было расширено на 8-битный набор Latin-1. В Аде 2005 это расширено на весь ISO/IEC 10646:2003 символьный набор. Это означает, что идентификаторы могут теперь использовать кириллические и греческие символы. Таким образом, мы могли бы теперь расширить пример про животных:
|
@ Чтобы поощрить нас писать математические программы дополнительная константа:
|
@ была добавлена к пакету Ada.Numerics в Аде 2005.
@ Подобные типы Wide_String и Wide_Character были добавлены к Аде 95. В Аде 2005 этот процесс был продолжен добавлением набора wide-wide типов и пакетов для 32-разрядных символов. Таким образом, у нас есть типы Wide_Wide_Character и Wide_Wide_String и так далее.
@ Главное добавление к предопределенной библиотеке - пакет Ada.Containers и его дочерние записи плюс некоторые вспомогательные дочерние функции к пакету Ada.Srings. Они - очень важное и значительное добавление к предопределенной библиотеке Ады и вкладывают лучшие средства для стандартной манипуляции структурами данных в руки каждого Ада программиста. Область охвата нововедений лучше всего проиллюстрировать, перечисляя вовлеченные модули:
@ Ada.Containers - корневой пакет, который только объявляет типы Hash_Type и Count_Type, которые являются определяемым реализацией модульным и целочисленным типом соответственно.
@ Ada.Strings.Hash - эта функция крошит строку в типа Hash_Type. Есть также версии для bounded и unbounded strings.
@ Ada.Containers.Vectors - универсальный пакет с параметрами, дающими индексный тип и тип элемента вектора плюс "=" для типа элемента. Этот пакет объявляет типы и операции для того, чтобы управлять векторами. (Под векторами понимаются массивы с переменными границами, а не математические векторы, используемые для линейной алгебры как в векторах и пакетах матриц упоминаемых ранее). Так же как подпрограммы для того, чтобы добавить, двигать и удалять элементы есть также универсальные подпрограммы для того, чтобы искать, сортировать и выполнять итерации с векторами.
@ Ada.Containers.Doubly_Linked_Lists - универсальный пакет с параметрами, дающими тип элемента и "=" для типа элемента. Этот пакет объявляет типы и операции для управления двунаправленно-связанными-списками. У него есть функциональные возможности подобные векторному пакету. Таким образом, так же как подпрограммы для того, чтобы добавить, двигать и удалять элементы есть также универсальные подпрограммы для того, чтобы искать, сортировать и выполнять итерации со списками.
@ Ada.Containers.Hashed_Maps - универсальный пакет с параметрами, дающими key тип и element тип плюс хеш-функцию для key, функцию для проверки на равенство между keys и "=" для типа элемента. Он объявляет типы и операции для управления HASH картами.
@ Ada.Containers.Ordered_Maps - подобный универсальный пакет для ordered карт с параметрами, дающими key тип и element тип и "<" для ключевого типа и "=" для типа элемента.
@ Ada.Containers.Hashed_Sets - универсальный пакет с параметрами, дающий тип элемента плюс хеш-функцию для элементов и функции для проверки на равенство между элементами. Он объявляет типы и операции для управления HASH наборами.
@ Ada.Containers.Ordered_Sets - подобный универсальный пакет для ordered наборов с параметрами, дающий тип элемента и "<" и "=" для типа элемента.
@ Есть еще шесть пакетов с подобными функциональными возможностями, но для неопределенных типов с соответствующими названиями, такими как Ada.Containers.Indefinite_Vectors.
@ Ada.Containers.Generic_Array_Sort - это - универсальная процедура для того, чтобы сортировать массивы. Универсальные параметры дают индексный тип, тип элемента, тип массива и "<" для типа элемента. Тип массива является неограниченным.
@ Наконец, есть очень похожая универсальная процедура Ada.Containers.Generic_Constrained_Array_Sort, но для constrained типов массива.
@ Надеемся, что вышеупомянутый список дает общее представление возможностей пакета Containers. Некоторые примеры использования его средств будут даны в более поздней публикации.
@ Наконец, есть новые пакеты для того, чтобы управлять временем (которое имеет тип Ada.Calendar.Time, а не Ada.Real_Time.Time и, таким образом, более соответствующее предопределенной библиотеке чем особенности в реального времени). У пакета Ada.Calendar есть много очевидных исправлений на этот счёт.
@ Ada.Calendar.Time_Zones - объявляет тип Time_Offset в минутах отражающий различие между двумя часовыми поясами и функцией UTC_Time_Offset, которая возвращает различие между часовым поясом и UTC (Координированное Среднее Гринвичское время). У него также есть исключение, которое возбуждается, если часовой пояс Календаря не известен (возможно, тактовый генератор сломан).
@ Ada.Calendar.Arithmetic - объявляет различные типы и операции для того, чтобы манипулировать секндами.
@ Ada.Calendar.Formatting - объявляет новые типы и операции для того, чтобы управлять форматированием представления времени и даты.
@ Большинство новых календарных возможностей понятны только для хронологического наркомана, но потребность в них действительно иллюстрирует то это - хитрая область. Однако, особенность, которую все будут ценить это то, что пакет Ada.Calendar.Formatting включает следующие объявления:
|
@ Имеется также небольшое изменение непосредственно в родительском пакете Ada.Calendar:
|
@ Это показывает уверенность в будущем Ады, добавляя еще в 300 лет к диапазону дат.
2010-10-24 00:26:52
купить ps3 . .