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, как 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

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