Rationale for Ada 2005: Predefined library
RUSTOPBACKNEXT
ENG |
8. Streams
@ Important improvements to the control of streams were described in the paper on the object oriented model where we discussed the new package Ada.Tags.Generic_Dispatching_Constructor and various changes to the parent package Ada.Tags itself. In this section we mention two other changes. @ There is a problem with the existing stream attributes such as (see RM 13.13.2)
|
|
|
|
|
Rationale for Ada 2005: Predefined library
@ENGRUSTOPBACKNEXT8. Потоки
@ Важные усовершенствования в управлении потоками были описаны в статье посвящённой объектно-ориентированной модели где мы обсуждали новый пакет Ada.Tags.Generic_Dispatching_Constructor а также различные изменения родительского пакета Ada.Tags. В этой секции мы рассмотрим два других изменения.
@ Имеется проблема с существующими потоковыми атрибутами такими как (см. RM 13.13.2)
|
@ где S - подтип T. Отметим, что для параметра Item, его тип T находится в курсиве и так должен быть интерпретирован согласно виду типа. В случае целого числа и типа перечисления это означает, что у параметра Item есть тип T'Base.
@ Учитывая объявление:
|
@ различные реализации могли бы использовать различные представления для Index'Base - некоторые могли бы использовать 8 бит, другие 32 бита, и так далее.
@ Сейчас размер потокового элемента как правило - 8 бит и, таким образом, с 8-битной базой мы будем иметь одно значение Index на потоковый элемент, тогда как с 32-разрядной базой каждое значение Index займёт 4 потоковых элемента. Ясно что поток, записанный 8-битной реализацией не может читаться 32-разрядной.
@ Эта проблема преодолена в Аде 2005 введением нового атрибута Stream_Size. Универсальное целочисленное значение S'Stream_Size дает число бит, используемых в потоке для значений подтипа S. Нам гарантируется что оно является множителем для Stream_Element'Size. Таким образом, необходимое число потоковых элементов будет:
|
@ Мы можем установить атрибут обычным способом при условии, что данное значение является статическим множителем Stream_Element'Size. Так в случае рассмотренном выше мы можем написать:
|
@ и мобильность тогда гарантирована. Но только при условии, что Stream_Element_Size имеет значение 8 и что реализация принимает соответствующее определения атрибута.
@ Другое незначительное изменение состоит в том, что теперь у различных атрибутов параметра Stream есть нулевое исключение такое, что S'Write имеет вид:
|
@ Возможно удивительно что это не приводит к несовместимости с Адой 95 т.к. передача пустых указателей всё равно вызывает Constraint_Error и, таким образом, это изменение только разъясняет ситуацию.
@ Этой небольшой но важной темой мы почти заканчиваем Разяснение для Ады 2005 за исключением разного рода приложений и обширной темы о контейнерах которые будут рассматриваться в последующих статьях.
2010-10-24 00:26:59
. .