Ada_Ru форум

Обсуждение языка Ада

Неожиданности разных нестандартных архитектур

Оставить новое сообщение

Сообщения

Иван Леваше
Неожиданности разных нестандартных архитектур
2014-11-18 16:36:47
Здравствуйте!

Написание на языках C, C++ и Ada в полном соответствии со стандартами
требует предусматривать разные ситуации, и проверить эти ситуации,
вообще говоря, нет возможности, ну если только кто–то специально
задастся этим вопросом и сделает эмулятор супернестандартной
архитектуры, чтобы на ней всё было не так, но написанные по стандарту
программы могли бы с этим героически справляться.

В частности:
в самом последнем Ada 2012 стандарте до сих пор не упразднено:

http://www.ada-auth.org/standards/12rm/html/RM-13-7-1.html
System.Storage_Elements:
type Storage_Element is mod implementation-defined;

http://www.ada-auth.org/standards/12rm/html/RM-13-13-1.html
Ada.Streams:
type Stream_Element is mod implementation-defined;

А снизу даже специально дописано:
If Stream_Element'Size is not a multiple of System.Storage_Unit, then
the components of Stream_Element_Array need not be aliased.

Можно добавить к этому байки про нестандартные архитектуры, услышанные
мною в НГУ, но про C.

1. something_t* может отличаться по длине и структуре от void*, потому
что something_t* может указывать только на данные, а void* — как на
данные, так и на код.
2. Машинное представление NULL может состоять не из нулей.

К этому добавляется то, что в языке Ада Character и char_t — формально
разные типы.

Наверное, написанная полностью по стандарту реализация СУБД на языке Ада
должна в том числе работать на архитектуре, где ячейки памяти 13–битные,
а I/O 9–битное. Ну хоть двоичность в стандарте сомнению не подлежит, а
то бы ещё память троичная с пятеричным I/O могли бы оказаться.

Я не вижу, кто бы рвался писать в таком стиле, учитывая, что проверить
не на чем и вроде бы незачем.

Отсюда вопросы:
1. Не знаю перечень подобных особенностей в каждой архитектуре,
поддерживаемой GNAT Pro, но всё–таки, мне кажется, далеко не все
возможности реализуются. Кроме AdaCore, новые версии компилятора сделать
толком некому, а особенности всех в совокупности поддерживаемых GNAT Pro
архитектур, как мне представляется, не помешает выкинуть из стандарта
много старого хлама.
2. Какие нестандартные особенности реально встречались на практике? Что
реализуется чаще, невосьмибитные ячейки памяти или невосьмибитное I/O,
или они хотя бы синхронны?
3. Есть ли хоть какая–то необходимость при написании кода (в том числе
на C) иметь в виду такие архитектуры или они–таки умирают из–за проблем
портирования?

С уважением,
Левашев Иван Александрович,
Барнаул

-- 
If you want to get to the top, you have to start at the bottom
Иван Леваше
Указатели в JavaScript (LLJS, Asm.js)
2014-10-02 13:38:20
Здравствуйте!

Публично доступного компилятора в JavaScript, как emscripten для C, мне
пока неизвестно, но на случай, если появится, вот такая там есть
особенность, которую нужно иметь в виду:

http://mbebenita.github.io/LLJS/

> Since our managed memory is actually addressable at byte and integer
> levels, there is no reason to store pointers as byte addresses.
> Instead we store them as indices, implicitly scaled by their own base
> type. For example, the pointer dereference *p, where p is of type
> int*, gets compiled into U4[p]. Had we stored pointers as byte
> addresses, we would have compiled it to U32[p >> 2]. This eliminates
> address computations at each memory access, but requires that we
> perform pointer conversions whenever we cast from one pointer type to
> another


С уважением,
Левашев Иван Александрович,
Барнаул



-- 
If you want to get to the top, you have to start at the bottom
Новое сообщение:
Страницы: 1

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти