Oberon space

General Category => Общий раздел => Тема начата: valexey_u от Май 18, 2013, 02:19:34 am

Название: [BlackBox] Compiler trap.
Отправлено: valexey_u от Май 18, 2013, 02:19:34 am
Так, народ, что-то мне с BlackBox "везет" на всякие его особенности.

Вот поймал trap компилятора при попытке собрать простой модуль.

Воспроизводится везде, и в школьной сборке информатики-21 (BB 1.5), и в стоковом BB 1.6, и в красноярской сборке BB.

Исходник модуля и сам трап прикладываю. Также, на всякий случай, вот в интернеточитабельном виде исходник модуля:
MODULE Blur;
   IMPORT Kernel, Out:=StdLog;
   
   CONST
      width = 640;
      height = 480;
      N = 13;
      frames = 1000;
     
      red = 0;
      green = 1;
      blue = 2;
     
   TYPE
      Frame = ARRAY width*height*(blue+1) OF SHORTCHAR;
         
   PROCEDURE Index(x,y,color : INTEGER) : INTEGER;
   BEGIN
      RETURN ((x+y*width)*3+color)
   END Index;
   
   PROCEDURE Blur(IN in : Frame; OUT out : Frame);
   VAR
      x,y,c : INTEGER;
   BEGIN
      FOR y:=1 TO height-2 DO
         FOR x:=1 TO width-2 DO
            FOR c:=red TO blue DO
               out[Index(x,y,c)] := SHORT(CHR( ( ORD(in[Index(x,y-1,c)]) + ORD(in[Index(x,y+1,c)]) +
                                             ORD(in[Index(x-1,y,c)]) + ORD(in[Index(x+1,y,c)]) ) DIV 4  ));
            END;
         END;
      END;
   END Blur;
   
   PROCEDURE Do*;
   VAR
      time : LONGINT;
      f, n : INTEGER;
      a1, a2 : POINTER TO Frame;
   BEGIN
      NEW(a1);
      NEW(a2);
      time := Kernel.Time();
     
      FOR f:=1 TO frames DO
         FOR n:=1 TO N DO           
            Blur(a1,a2);
            Blur(a2,a1)
         END
      END;
     
      Out.Real((Kernel.Time() - time)/1000)
   END Do;   
BEGIN
END Blur.

PS. Это я приводил к единому виду исходники той blur-задачки для всех языков программирования. Это, собственно наиваная читабельная реализация алгоритма. Очень важно чтобы оно заработало на ББ, иначе в статье ББ придется заменить другой реализацией Оберона, а этого сильно хочется избежать по ряду причин.
Название: Re: [BlackBox] Compiler trap.
Отправлено: vlad от Май 18, 2013, 04:41:29 am
Так, народ, что-то мне с BlackBox "везет" на всякие его особенности.

Ему не нравится DIV 4. Если все выражение из CHR засунуть во временную переменную - начинает компилить. Причем слева у него тоже должно быть что-то сложное - просто CHAR(x DIV 4) нормально отрабатывает.
Название: Re: [BlackBox] Compiler trap.
Отправлено: Kemet от Май 18, 2013, 09:49:04 am
Если out[Index(x,y,c)] заменить на что-то вроде out[10] - то всё компилируется. Видимо баг, пиши в оминк )
Название: Re: [BlackBox] Compiler trap.
Отправлено: DddIzer от Май 18, 2013, 10:37:48 am
Так, народ, что-то мне с BlackBox "везет" на всякие его особенности.

:) гы,  - приветик мифу (  Инфо21 ) о том, что из идеологической  простоты компилятора следует его "надежная" реализация...
Название: Re: [BlackBox] Compiler trap.
Отправлено: valexey_u от Май 18, 2013, 01:17:43 pm
Если out[Index(x,y,c)] заменить на что-то вроде out[10] - то всё компилируется. Видимо баг, пиши в оминк )

Написал.
Название: Re: [BlackBox] Compiler trap.
Отправлено: maliya от Май 18, 2013, 01:49:06 pm
DevCPC486.GetReg
                        ....
                        IF 0 IN s THEN n := 0
ELSIF 2 IN s THEN n := 2
ELSIF 6 IN s THEN n := 6
ELSIF 7 IN s THEN n := 7
ELSIF 1 IN s THEN n := 1
ELSE n := 3
END;
                        ....


change to

                        ....
                        IF 0 IN s THEN n := 0
ELSIF 2 IN s THEN n := 2
ELSIF 1 IN s THEN n := 1
ELSIF 3 IN s THEN n := 3
                        ELSIF 6 IN s THEN n := 6
ELSE n := 7
END;
                        ....

Название: Re: [BlackBox] Compiler trap.
Отправлено: valexey_u от Май 18, 2013, 02:45:17 pm
DevCPC486.GetReg
                        ....
                        IF 0 IN s THEN n := 0
ELSIF 2 IN s THEN n := 2
ELSIF 6 IN s THEN n := 6
ELSIF 7 IN s THEN n := 7
ELSIF 1 IN s THEN n := 1
ELSE n := 3
END;
                        ....


change to

                        ....
                        IF 0 IN s THEN n := 0
ELSIF 2 IN s THEN n := 2
ELSIF 1 IN s THEN n := 1
ELSIF 3 IN s THEN n := 3
                        ELSIF 6 IN s THEN n := 6
ELSE n := 7
END;
                        ....

Thanks. Can you explain this fix? It is safe?
Название: Re: [BlackBox] Compiler trap.
Отправлено: Kemet от Май 18, 2013, 03:59:55 pm
Fix от maliya работает. BlackBox после пересборки тоже работает )
Название: Re: [BlackBox] Compiler trap.
Отправлено: maliya от Май 18, 2013, 04:15:28 pm

Can you explain this fix? It is safe?
[/quote]

it only change the regsiter select order;I think it is safe.



Название: Re: [BlackBox] Compiler trap.
Отправлено: valexey_u от Май 18, 2013, 07:38:02 pm
Цитировать
Can you explain this fix? It is safe?
it only change the regsiter select order;I think it is safe.
OK. But why this order is better then old one?
Название: Re: [BlackBox] Compiler trap.
Отправлено: vlad от Май 18, 2013, 11:02:31 pm
it only change the regsiter select order;I think it is safe.
OK. But why this order is better then old one?

Because it does not fail, dummy! ;)

P.S. Yes, very interesting why this does mattter.
Название: Re: [BlackBox] Compiler trap.
Отправлено: Romiras от Май 19, 2013, 08:31:41 am
DevCPC486.GetReg
                        ....
                        IF 0 IN s THEN n := 0
ELSIF 2 IN s THEN n := 2
ELSIF 6 IN s THEN n := 6
ELSIF 7 IN s THEN n := 7
ELSIF 1 IN s THEN n := 1
ELSE n := 3
END;
                        ....


change to

                        ....
                        IF 0 IN s THEN n := 0
ELSIF 2 IN s THEN n := 2
ELSIF 1 IN s THEN n := 1
ELSIF 3 IN s THEN n := 3
                        ELSIF 6 IN s THEN n := 6
ELSE n := 7
END;
                        ....

А какова гарантия того, что не появятся другие ошибки, связанные с этим исправлением? :)
Название: Re: [BlackBox] Compiler trap.
Отправлено: kkk от Май 19, 2013, 10:26:18 am
Насколько я понял, суть трапа в том, что в подобной сложной цепочке конверсий почему-то первым вариантом для хранения значения конверсии подбирался внутренний элемент компилятора неверного размера, что и было ограничено трэпом.
Maliya просто поменял последовательность подбора вариантов, которая в принципе, в варианте с ELSIF ветками вообще не должна зависеть от последовательности. Видимо, нет полной однозначности, это исправимо.
Вообще, можно отметить нарочную говнокодную сущность представленного примера, а так же проработанность компилятора, который позволил:
а) не записать мусор в бинарный файл
б) не выпал в шоковом припадке, а корректно остановился на явном и описанном предусловии
в) построен так, что починить его сможет любой китаец, хы-хы :D
:) гы,  - приветик мифу (  Инфо21 ) о том, что из идеологической  простоты компилятора следует его "надежная" реализация...
Учительница рассуждает о том, чего не понимает. Жуть.
Название: Re: [BlackBox] Compiler trap.
Отправлено: DddIzer от Май 19, 2013, 11:04:15 am

:) гы,  - приветик мифу (  Инфо21 ) о том, что из идеологической  простоты компилятора следует его "надежная" реализация...
Учительница рассуждает о том, чего не понимает. Жуть.
  гыы Петобыдло опять говном зарядилось... повеселимся...  :)
Название: Re: [BlackBox] Compiler trap.
Отправлено: valexey_u от Май 19, 2013, 11:09:00 am
Вообще, можно отметить нарочную говнокодную сущность представленного примера
Можешь переписать так, чтобы оно перестало быть говнокодом?
На входе для каждого кадра одномерный массив uint8_t.
Название: Re: [BlackBox] Compiler trap.
Отправлено: kkk от Май 19, 2013, 11:10:01 am
Куд-кудах
Название: Re: [BlackBox] Compiler trap.
Отправлено: DddIzer от Май 19, 2013, 11:13:55 am
Куд-кудах
гыыы Петабыдло  научилось править цитируемый тексть.. с достиженьецем  ;D
Название: Re: [BlackBox] Compiler trap.
Отправлено: DddIzer от Май 19, 2013, 11:15:32 am
Вообще, можно отметить нарочную говнокодную сущность представленного примера
Можешь переписать так, чтобы оно перестало быть говнокодом?
На входе для каждого кадра одномерный массив uint8_t.
гы вопрошать Петабыдло ?...  зачетно  (как новый тип развлечения)  :D
Название: Re: [BlackBox] Compiler trap.
Отправлено: ilovb от Май 19, 2013, 11:40:03 am
Сам в шоке, но в этот раз я с Петром солидарен.
Название: Re: [BlackBox] Compiler trap.
Отправлено: kkk от Май 19, 2013, 11:44:35 am
Можешь переписать так, чтобы оно перестало быть говнокодом?
На входе для каждого кадра одномерный массив uint8_t.
Но ведь на этом форуме ты профессионал.
Название: Re: [BlackBox] Compiler trap.
Отправлено: DddIzer от Май 19, 2013, 11:50:25 am
Сам в шоке, но в этот раз я с Петром солидарен.
  какой тут шок.. все ОК.  :)
Название: Re: [BlackBox] Compiler trap.
Отправлено: valexey_u от Май 19, 2013, 11:51:51 am
Можешь переписать так, чтобы оно перестало быть говнокодом?
На входе для каждого кадра одномерный массив uint8_t.
Но ведь на этом форуме ты профессионал.
Мне интересно твое мнение. Свое мнение в таком вопросе проще всего озвучивать кодом.
Название: Re: [BlackBox] Compiler trap.
Отправлено: DddIzer от Май 19, 2013, 01:13:24 pm
Цитировать
[15:57:47]
<Kemet> ккк это Кушнир ?
[15:58:00] <valexey_> да
[15:58:07] <valexey_> по всем черточкам похож
[15:58:21] <valexey_> хотя он когда регистрировался специально фейковый временный e-mail адрес подставил
[15:58:51] <Kemet> шоб инфо21 не узнал )
[15:59:16] <valexey_> скорее чтобы Дизер на него мгновенно не сагрился :-)
;D ;D ;D ;D ;D Ну вы даете...  - ЧТОБЫ СРАТЬ МОЖНО БЫЛО ИСПОДВОЛЬ (не узнанным ), бедняжка просто не в состоянии понять гопнобыдло - это его сущность, которая вылезет в любом случае, в любом обличье.
Название: Re: [BlackBox] Compiler trap.
Отправлено: kkk от Май 19, 2013, 01:22:19 pm
Ну а ты срёшь только в ответ, от безысходности, не иначе :)
Название: Re: [BlackBox] Compiler trap.
Отправлено: DddIzer от Май 19, 2013, 01:28:02 pm
Ну а ты срёшь только в ответ, от безысходности, не иначе :)
Я уже говорил - ради развлечения - что бы добро(говно) просто так не пропадало (т.е. тренировка реакции).
Название: Re: [BlackBox] Compiler trap.
Отправлено: kkk от Май 19, 2013, 01:30:32 pm
Мне интересно твое мнение. Свое мнение в таком вопросе проще всего озвучивать кодом.
Это было бы тактическое упущение, предоставить тебе код для оценки на твоей площадке в компании твоих друзьёв.
Название: Re: [BlackBox] Compiler trap.
Отправлено: DddIzer от Май 19, 2013, 01:31:44 pm
Мне интересно твое мнение. Свое мнение в таком вопросе проще всего озвучивать кодом.
Это было бы тактическое упущение, предоставить тебе код для оценки на твоей площадке в компании твоих друзьёв.
;D ;D ;D ;D ;D о гопнобыдло - тактик  :D
Название: Re: [BlackBox] Compiler trap.
Отправлено: kkk от Май 19, 2013, 01:32:33 pm
Ну а ты срёшь только в ответ, от безысходности, не иначе :)
Я уже говорил - ради развлечения - что бы добро(говно) просто так не пропадало (т.е. тренировка реакции).
твоё говно не пахнет, я понял.
Название: Re: [BlackBox] Compiler trap.
Отправлено: DddIzer от Май 19, 2013, 01:35:06 pm
Ну а ты срёшь только в ответ, от безысходности, не иначе :)
Я уже говорил - ради развлечения - что бы добро(говно) просто так не пропадало (т.е. тренировка реакции).
твоё говно не пахнет, я понял.
вроде как нет (пахнет), впрочем , у вас возможно  своим рецепторы забиты.. попробуйте к врачу обратиться...
Название: Re: [BlackBox] Compiler trap.
Отправлено: valexey_u от Май 19, 2013, 01:39:43 pm
Ну а ты срёшь только в ответ, от безысходности, не иначе :)
Я уже говорил - ради развлечения - что бы добро(говно) просто так не пропадало (т.е. тренировка реакции).
Народ, от вас в последнее время, по крайней мере в моих технических темах, польза какая-то отрицательная.

Пётр, напиши уже решение не в говнокод-стайле, и будет тебе респект (если оно конечно корректно работать будет). Алгоритм должен остаться тот же. Упор - на максимальную читабельность и понятность. В моих, да и в твоих, полагаю, интересах, иметь максимально читабельную, не говнокодистую, версию кода для КП.

А от оценок качества компилятора я пока воздержусь.
Название: Re: [BlackBox] Compiler trap.
Отправлено: kkk от Май 19, 2013, 01:41:56 pm
Суть в том, что для меня эта площадка чужая, а для тебя - своя.
Поэтому мне не жалко испортить тред, или посраться с тобой на пару страниц, это преимущества свободы слова.
А вот ты засоряешь пространство своих единомышленников, а это уже профит, ведь люди будут уставать от говна в два раза быстрее, чем если бы я один тут куражился.
;)
Так что продолжай упражняться в красноречии, а я буду радоваться твоим успехам.
Название: Re: [BlackBox] Compiler trap.
Отправлено: DddIzer от Май 19, 2013, 01:42:50 pm

Народ, от вас в последнее время, по крайней мере в моих технических темах, польза какая-то отрицательная.

и это удивляет?  ;)
Название: Re: [BlackBox] Compiler trap.
Отправлено: DddIzer от Май 19, 2013, 01:44:48 pm
... а я буду радоваться твоим успехам.
главное чтобы не разорвало от этого.. а то без дураков скучно..
Название: Re: [BlackBox] Compiler trap.
Отправлено: kkk от Май 19, 2013, 01:55:27 pm
Народ, от вас в последнее время, по крайней мере в моих технических темах, польза какая-то отрицательная.
Это у тебя, Алексей, проявляются издержки дружбы с мудаками, хы ;)
Пётр, напиши уже решение не в говнокод-стайле, и будет тебе респект (если оно конечно корректно работать будет).
У тебя ведь есть удочка, зачем тебе моя рыба? :)
Название: Re: [BlackBox] Compiler trap.
Отправлено: DddIzer от Май 19, 2013, 01:56:12 pm


А от оценок качества компилятора я пока воздержусь.
и правильно сделаете (скажем  так, приветик я передавал не компилятору а тезису одного известного идеолога-обероноевангелиста...)...  :)
Название: Re: [BlackBox] Compiler trap.
Отправлено: kkk от Май 19, 2013, 01:59:05 pm
а то без дураков скучно..
А я всё думал, чего тебя на этой площадке пригрели. Кормят, поят, спишь на тёплом коврике. Цепная училка, это ж ценно. А ты уже успел понять, что училки не для знаний нужны?
Название: Re: [BlackBox] Compiler trap.
Отправлено: valexey_u от Май 19, 2013, 02:01:04 pm
Пётр, напиши уже решение не в говнокод-стайле, и будет тебе респект (если оно конечно корректно работать будет).
У тебя ведь есть удочка, зачем тебе моя рыба? :)
Чтобы из моей и твоей рыбы выбрать наилучшую и уже её показывать народу, дабы не посрамить реку нашу.
Название: Re: [BlackBox] Compiler trap.
Отправлено: DddIzer от Май 19, 2013, 02:01:39 pm
а то без дураков скучно..
А я всё думал, чего тебя на этой площадке пригрели. Кормят, поят, спишь на тёплом коврике. Цепная училка, это ж ценно. А ты уже успел понять, что училки не для знаний нужны?
   :) ох не стоит вам заниматься делом... к которому нет способностей (думать) -  продолжайте делать то что умеете изначально - СРАТЬ ( нам сойдете и таким)
Название: Re: [BlackBox] Compiler trap.
Отправлено: kkk от Май 19, 2013, 02:07:15 pm
дизер, всё таки ты не в той ситуации, чтобы изображать из себя ментора.
А вообще
куд-кудах-тах-тах
это забавно. Больше, больше говна.
Название: Re: [BlackBox] Compiler trap.
Отправлено: DddIzer от Май 19, 2013, 02:08:33 pm
дизер, всё таки ты не в той ситуации, чтобы изображать из себя ментора.
А вообще
куд-кудах-тах-тах
это забавно. Больше, больше говна.
господь с вами... это было лишь пожелание..   :D
Название: Re: [BlackBox] Compiler trap.
Отправлено: DddIzer от Май 19, 2013, 03:20:58 pm
Да .. Алексей (если уж говорить о читабельности) - все же поправьте названия  именованных констант... - по смыслу алгоритма.. у вас не цвета а идентификаторы  каналов (channel_id) -red_chan_id,  green_chan_id,  blue_chan_id,... ну доп константу введите num_channels=3 и циклическую переменную замените на channel_id (а то заголовок цикла имхо уродливо смотрится)
Название: Re: [BlackBox] Compiler trap.
Отправлено: DddIzer от Май 19, 2013, 09:02:31 pm
... и еще, что-то не понимаю - альтернатива в виде массива (1 или 2 -мерного) записей приемлема (рассматривалась) или нет? - то что она нагляднее будет это факт.. а вот по скорости.. х.з. - но хоть индексная функция будет ненужна...
Название: Re: [BlackBox] Compiler trap.
Отправлено: valexey_u от Май 19, 2013, 09:05:31 pm
... и еще, что-то не понимаю - альтернатива в виде массива (1 или 2 -мерного) записей приемлема (рассматривалась) или нет? - то что она нагляднее будет это факт.. а вот по скорости.. х.з. - но хоть индексная функция будет ненужна...

По условию задачи нам банально на вход для каждого кадра приходит uint8_t* p; также мы знаем, что там RGB, каждый цвет - один байт, и размер кадра 640x480.
Название: Re: [BlackBox] Compiler trap.
Отправлено: DddIzer от Май 19, 2013, 09:11:01 pm
... и еще, что-то не понимаю - альтернатива в виде массива (1 или 2 -мерного) записей приемлема (рассматривалась) или нет? - то что она нагляднее будет это факт.. а вот по скорости.. х.з. - но хоть индексная функция будет ненужна...

По условию задачи нам банально на вход для каждого кадра приходит uint8_t* p; также мы знаем, что там RGB, каждый цвет - один байт, и размер кадра 640x480.
я про другое , может обьявить
TCOLOR=RECORD
R,G,B:SHORTCHAR;
END;
и FRAME=ARRAY w*h of TCOLOR ; (ну или соответствующий 2 мерный массив) ?
Название: Re: [BlackBox] Compiler trap.
Отправлено: valexey_u от Май 19, 2013, 09:54:40 pm
... и еще, что-то не понимаю - альтернатива в виде массива (1 или 2 -мерного) записей приемлема (рассматривалась) или нет? - то что она нагляднее будет это факт.. а вот по скорости.. х.з. - но хоть индексная функция будет ненужна...

По условию задачи нам банально на вход для каждого кадра приходит uint8_t* p; также мы знаем, что там RGB, каждый цвет - один байт, и размер кадра 640x480.
я про другое , может обьявить
TCOLOR=RECORD
R,G,B:SHORTCHAR;
END;
и FRAME=ARRAY w*h of TCOLOR ; (ну или соответствующий 2 мерный массив) ?
По моему не выйдет - там же еще выравнивание небось будет.
Название: Re: [BlackBox] Compiler trap.
Отправлено: DddIzer от Май 19, 2013, 10:40:51 pm

По моему не выйдет - там же еще выравнивание небось будет.
а х.з. но в любом случае это будет эксплоитом (язык не определяет  структуру данных на низком уровне)... что не гуд...
Название: Re: [BlackBox] Compiler trap.
Отправлено: Berserker от Май 20, 2013, 01:17:53 pm
В С++ та же проблема без привязки к конкретному компилятору, не так ли? __declspec(align(1))
Название: Re: [BlackBox] Compiler trap.
Отправлено: valexey_u от Май 20, 2013, 01:26:53 pm
В С++ та же проблема без привязки к конкретному компилятору, не так ли? __declspec(align(1))
На самом деле, не совсем:
http://www.stroustrup.com/C++11FAQ.html#align
http://www.stroustrup.com/C++11FAQ.html#attributes
Название: Re: [BlackBox] Compiler trap.
Отправлено: valexey_u от Май 20, 2013, 02:03:58 pm
Возвращаясь к первоначальному топику - пришел ответ от Oberon microsystems AG:
Цитировать
Dear Alexey,

thank you very much for your error report.

We will analyze the problem and hope to correct it in the course of our maintenance activity.

You are probably already aware of a possible workaround along the following lines:

        PROCEDURE Blur(IN in : Frame; OUT out : Frame);
        VAR
                x,y,c,o: INTEGER;
        BEGIN
                FOR y:=1 TO height-2 DO
                        FOR x:=1 TO width-2 DO
                                FOR c:=red TO blue DO
                                        o:=(ORD(in[Index(x,y-1,c)])
                                                + ORD(in[Index(x,y+1,c)])
                                                + ORD(in[Index(x-1,y,c)])
                                                + ORD(in[Index(x+1,y,c)])) DIV 4;
                                        out[Index(x,y,c)] := SHORT(CHR(o));
                                END;
                        END;
                END;
        END Blur;

Thanks again and with best regards,
Marc Frei
Название: Re: [BlackBox] Compiler trap.
Отправлено: ilovb от Май 20, 2013, 02:39:10 pm
Интересно как скоро будет фикс.
Название: Re: [BlackBox] Compiler trap.
Отправлено: Berserker от Май 20, 2013, 02:49:22 pm
valexey_u, десятилетия и тонны софта до версии С++11х, так что это не показатель. То же самое и с новыми типами вроде int32_least_t, они нигде не используются, а нужно, чтобы весь код был с их применением.
Название: Re: [BlackBox] Compiler trap.
Отправлено: valexey_u от Май 20, 2013, 02:50:21 pm
Интересно как скоро будет фикс.
Ответил им. Дал быстрый фикс от maliya, и ссылку на эту ветку.
Название: Re: [BlackBox] Compiler trap.
Отправлено: igor от Май 20, 2013, 03:35:23 pm
Ответил им. Дал быстрый фикс от maliya, и ссылку на эту ветку.
Представляю их лица, когда они переведут эту ветку... (Привет kkk и Ди-ди-дАйзеру)
Название: Re: [BlackBox] Compiler trap.
Отправлено: DddIzer от Май 20, 2013, 03:42:15 pm
Ответил им. Дал быстрый фикс от maliya, и ссылку на эту ветку.
Представляю их лица, когда они переведут эту ветку... (Привет kkk и Ди-ди-дАйзеру)
  :) да ладно... ради общего же дела старались (по крайней мере я, увидев бы эту ветку на их месте...-- сказал себе.. блин , а все таки здорово, что наше поделье через 15 лет , вызывает такие эмоциии - ну не круто ли!!!)
Название: Re: [BlackBox] Compiler trap.
Отправлено: DddIzer от Май 20, 2013, 03:55:27 pm
... и уж они явно лучше чем "лизоблюдские" реляции из коровника, для человека который более менее  адекватно оценивает свой труд...(но это , разумеется , ИМХО)
Название: Re: [BlackBox] Compiler trap.
Отправлено: DddIzer от Май 20, 2013, 04:02:14 pm
В С++ та же проблема без привязки к конкретному компилятору, не так ли? __declspec(align(1))
где то так.. ,  но вроде как еще в допотопных версиях Паскаля проблема решалась использованием packed records.. на уровне языка.
Название: Re: [BlackBox] Compiler trap.
Отправлено: Berserker от Май 20, 2013, 04:29:53 pm
Небольшое отклонение от темы.
FreePascal, VirtualPascal, Delphi — проблемы нет, PACKED справляется с записями и массивами. То же самое с соглашениями о вызове. Все их применяют, но лишь стандарт С++ не знает об их существовании. Если целевая платформа не поддерживает определённое соглашение (разрядность, операцию умножения или любой другой элемент ЯП) достаточно выдать ошибку компиляции. Но STDCALL — он и в Африке STDCALL.

Я сперва использовал __declspec(alegn(1)), потом перешёл на #pragma pack(push, 1) из-за разичий в GCC и Студии.
Название: Re: [BlackBox] Compiler trap.
Отправлено: DddIzer от Май 20, 2013, 04:32:45 pm
перешёл на #pragma pack(push, 1) из-за разичий в GCC и Студии.
  :) аналогично.. только аligned не  использовал ни разу..
Название: Re: [BlackBox] Compiler trap.
Отправлено: DddIzer от Май 20, 2013, 04:33:33 pm
Интересно как скоро будет фикс.
а вот это , действительно интересно...
Название: Re: [BlackBox] Compiler trap.
Отправлено: valexey_u от Май 20, 2013, 04:35:23 pm
Небольшое отклонение от темы.
FreePascal, VirtualPascal, Delphi — проблемы нет, PACKED справляется с записями и массивами. То же самое с соглашениями о вызове. Все их применяют, но лишь стандарт С++ не знает об их существовании. Если целевая платформа не поддерживает определённое соглашение (разрядность, операцию умножения или любой другой элемент ЯП) достаточно выдать ошибку компиляции. Но STDCALL — он и в Африке STDCALL.

Я сперва использовал __declspec(alegn(1)), потом перешёл на #pragma pack(push, 1) из-за разичий в GCC и Студии.
FreePascal, VirtualPascal, Delphi - не следуют какому-либо стандарту вообще. Это конкретные реализации со своими заморочками, не следующие какому-либо стандарту. Реализации сравнивать со стандартом на язык как-то странно. Ну, то есть корректно было бы сравнивать FreePascal c g++, Delphi с MSVS, VirtualPascal с Intel C++ Compiler и так далее.

Ну и я же не даром две ссылки привел - стандарт С++ теперь про выравнивание знает. Но прибить гвоздями ABI для универсального языка не представляется возможным.
Название: Re: [BlackBox] Compiler trap.
Отправлено: Kemet от Май 20, 2013, 04:54:19 pm
По моему не выйдет - там же еще выравнивание небось будет.
Есть же флаги untagged, noalign. Ну и ожно проверить, сравнив адреса записей(адрес конкретного элемента массива) с вычисленным.
Название: Re: [BlackBox] Compiler trap.
Отправлено: valexey_u от Май 20, 2013, 04:59:12 pm
По моему не выйдет - там же еще выравнивание небось будет.
Есть же флаги untagged, noalign. Ну и ожно проверить, сравнив адреса записей(адрес конкретного элемента массива) с вычисленным.
Можно. Но это будет BlackBox only решение. То несть не КП'шное.
Название: Re: [BlackBox] Compiler trap.
Отправлено: Geniepro от Май 20, 2013, 04:59:55 pm
Ответил им. Дал быстрый фикс от maliya, и ссылку на эту ветку.
Представляю их лица, когда они переведут эту ветку... (Привет kkk и Ди-ди-дАйзеру)

Да ваще жесть )))
Название: Re: [BlackBox] Compiler trap.
Отправлено: Geniepro от Май 20, 2013, 05:02:04 pm
В С++ та же проблема без привязки к конкретному компилятору, не так ли? __declspec(align(1))
где то так.. ,  но вроде как еще в допотопных версиях Паскаля проблема решалась использованием packed records.. на уровне языка.

Упакованные записи ещё же с самой первой версии паскаля (виртовской), насколько я помню, есть. И до сих пор в дельфях...
Название: Re: [BlackBox] Compiler trap.
Отправлено: valexey_u от Май 20, 2013, 05:17:56 pm
В С++ та же проблема без привязки к конкретному компилятору, не так ли? __declspec(align(1))
где то так.. ,  но вроде как еще в допотопных версиях Паскаля проблема решалась использованием packed records.. на уровне языка.

Упакованные записи ещё же с самой первой версии паскаля (виртовской), насколько я помню, есть. И до сих пор в дельфях...
Берем стандарт паскаля: http://www.cs.bilkent.edu.tr/~guvenir/courses/CS315/iso7185pascal.pdf
Ищем слово align - не находим ничего. Можешь попробовать самостоятельно найти. Думаю, что с соглашениями о вызове процедур будет примерно то же самое.
Название: Re: [BlackBox] Compiler trap.
Отправлено: valexey_u от Май 20, 2013, 05:24:41 pm
Кстати, а вот виртовский паскаль: http://www.bandwidthco.com/history/programming/Wirth%20Pascal%20Programming%20Language.pdf
Название: Re: [BlackBox] Compiler trap.
Отправлено: DddIzer от Май 20, 2013, 05:49:42 pm
Кстати, а вот виртовский паскаль: http://www.bandwidthco.com/history/programming/Wirth%20Pascal%20Programming%20Language.pdf
вот и ищите там слово "packed" - про aligned  никто ничего не говорил (в контексте Паскалей)
Название: Re: [BlackBox] Compiler trap.
Отправлено: DddIzer от Май 20, 2013, 05:52:58 pm
По моему не выйдет - там же еще выравнивание небось будет.
Есть же флаги untagged, noalign. Ну и ожно проверить, сравнив адреса записей(адрес конкретного элемента массива) с вычисленным.
Можно. Но это будет BlackBox only решение. То несть не КП'шное.
ну и что... опять же - ровно то же что и в случае использования прагм C\C++ - решение совершенно одинаковое по "качеству"
Название: Re: [BlackBox] Compiler trap.
Отправлено: DddIzer от Май 20, 2013, 05:58:44 pm
Кстати, а вот виртовский паскаль: http://www.bandwidthco.com/history/programming/Wirth%20Pascal%20Programming%20Language.pdf
вот и ищите там слово "packed" - про aligned  никто ничего не говорил (в контексте Паскалей)
  единственное... что если мне не изменяет память то  в Турбо Паскале (каком то из них) было сказано что слово packed оставлено  только для совместимости со стандартом..  то есть предполагалось использование директив $A+ ($A-) для достижения эффекта на уровне модулей...
Название: Re: [BlackBox] Compiler trap.
Отправлено: Geniepro от Май 20, 2013, 07:55:06 pm
Кстати, а вот виртовский паскаль: http://www.bandwidthco.com/history/programming/Wirth%20Pascal%20Programming%20Language.pdf
вот и ищите там слово "packed" - про aligned  никто ничего не говорил (в контексте Паскалей)
  единственное... что если мне не изменяет память то  в Турбо Паскале (каком то из них) было сказано что слово packed оставлено  только для совместимости со стандартом..  то есть предполагалось использование директив $A+ ($A-) для достижения эффекта на уровне модулей...

В какой-то из версий дельфов packed record точно работало -- у меня в какой-то программе использовалось...
Название: Re: [BlackBox] Compiler trap.
Отправлено: Geniepro от Май 20, 2013, 08:15:09 pm
Упакованные записи ещё же с самой первой версии паскаля (виртовской), насколько я помню, есть. И до сих пор в дельфях...

Берем стандарт паскаля: http://www.cs.bilkent.edu.tr/~guvenir/courses/CS315/iso7185pascal.pdf
Ищем слово align - не находим ничего. Можешь попробовать самостоятельно найти. Думаю, что с соглашениями о вызове процедур будет примерно то же самое.

Не align, а packed.
Вот в этом вот файле указаны packed array, packed file. Хотя прямого указания на packed record я там не заметил, но во всех книгах по паскалю, что я читал раньше, они тоже были...

Насчёт соглашений о вызове процедур в паскале - ничего не знаю, не слышал...
Название: Re: [BlackBox] Compiler trap.
Отправлено: Geniepro от Май 20, 2013, 08:18:28 pm
Вот в этом вот файле указаны packed array, packed file. Хотя прямого указания на packed record я там не заметил, но во всех книгах по паскалю, что я читал раньше, они тоже были...

Я имел в виду вот этот файл:

Кстати, а вот виртовский паскаль: http://www.bandwidthco.com/history/programming/Wirth%20Pascal%20Programming%20Language.pdf
Название: Re: [BlackBox] Compiler trap.
Отправлено: Geniepro от Май 20, 2013, 08:25:32 pm
А вот выдержка из стандарта:

Цитата: Pascal ISO 7185:1990
6.4.3 Structured-types
6.4.3.1 General

A new-structured-type shall be classied as an array-type, record-type, set-type, or file-type according to the unpacked-structured-type closest-contained by the new-structured-type. A component of a value of a structured-type shall be a value.

structured-type = new-structured-type j structured-type-identifier .

new-structured-type = [ 'packed' ] unpacked-structured-type .

unpacked-structured-type = array-type | record-type | set-type | file-type .

The occurrence of the token packed in a new-structured-type shall designate the type denoted thereby as packed. The designation of a structured-type as packed shall indicate to the processor that data-storage of values should be economized, even if this causes operations on, or accesses to components of, variables possessing the type to be less efficient in terms of space or time.

The designation of a structured-type as packed shall affect the representation in data-storage of that structured-type only; i.e., if a component is itself structured, the component's representation in data-storage shall be packed only if the type of the component is designated packed.
Название: Re: [BlackBox] Compiler trap.
Отправлено: valexey_u от Май 21, 2013, 10:23:45 pm
А вот выдержка из стандарта:

Цитата: Pascal ISO 7185:1990
...
The designation of a structured-type as packed shall indicate to the processor that data-storage of values should be economized, even if this causes operations on, or accesses to components of, variables possessing the type to be less efficient in terms of space or time.
Да, был не прав, поддержка в стандартном паскаля какая-то есть.

Но, однако ж, прошу обратить внимание: данный пункт не дает однозначной трактовки как именно packed тип должен минимизировать свое место. Ну, то есть реализация которая для минимизации объема будет использовать какой-либо алгоритм сжатия (deflate например) не будет противоречить стандарту (по крайней мере в данном пункте).

Для контраста, возьмем с++ и его ключевое слово alignas - там четко определено что это именно выравнивание, что никакого сжатия не предусмотрено и так далее. Желающие могут ознакомиться со стандартом тут: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf (основной пункт 7.6.2 (стр. 176) и 3.11 (стр. 79), для разъяснения терминологии).

Ну или более простым языком: http://en.cppreference.com/w/cpp/language/alignas
Название: Re: [BlackBox] Compiler trap.
Отправлено: trurl от Май 24, 2013, 06:08:49 pm
Для контраста, возьмем с++ и его ключевое слово alignas 
Цитировать
alignas( expression )       (since C++11)
Название: Re: [BlackBox] Compiler trap.
Отправлено: DddIzer от Май 24, 2013, 06:24:02 pm
Кто нибудь натыкался на русские версии стандартов языков Си,С++  новее чем 1998 г. - хотя бы пре релизные? - киньте ссылку плиз...
Название: Re: [BlackBox] Compiler trap.
Отправлено: Geniepro от Май 24, 2013, 06:39:26 pm
Кто нибудь натыкался на русские версии стандартов языков Си,С++  новее чем 1998 г. - хотя бы пре релизные? - киньте ссылку плиз...

Евгений Зуев переводит (может уже перевёл) современный стандарт С++ на русский, но вряд ли этот перевод будет выложен в онлайн. Хотя запиратят и на торрент наверняка выложат...

http://zouev.blogspot.ru/2010/01/blog-post_07.html
http://zouev.blogspot.ru/2011/01/blog-post.html

Не знаю, в каком состоянии эта работа, других вроде нет (по С++)
Название: Re: [BlackBox] Compiler trap.
Отправлено: valexey_u от Май 24, 2013, 06:51:01 pm
Для контраста, возьмем с++ и его ключевое слово alignas 
Цитировать
alignas( expression )       (since C++11)
Ну, да. В современном С++ это есть. В С++ 15ти летней давности (С++98 - предыдущий стандарт) этого не было. Не вижу смысла ориентироваться на допотопные версии языка.
Название: Re: [BlackBox] Compiler trap.
Отправлено: Berserker от Май 24, 2013, 07:26:16 pm
Если перевести на русский: до 2011 года в С++ выравнивания не было (как и массы других вещей). А как следствие, в 99% существующего кода не используется. Хорошо, что добавили, но никого не волнует скорость выхода стандартов С++. Важно, сколько лет функциональности не было и когда она появилась.
Название: Re: [BlackBox] Compiler trap.
Отправлено: valexey_u от Май 24, 2013, 07:37:10 pm
Если перевести на русский: до 2011 года в С++ выравнивания не было (как и массы других вещей). А как следствие, в 99% существующего кода не используется. Хорошо, что добавили, но никого не волнует скорость выхода стандартов С++. Важно, сколько лет функциональности не было и когда она появилась.
Важно что есть сейчас. До того были нестандартные расширизмы (правда через стандартные механизмы создания расширений, например через директиву препроцессора #pragma), впрочем как и в паскале по факту.

Если уж с чем и сравнивать С++ в этом плане, так это с Адой - вот Ада да, она крута, там выравнивание как минимум со стандарта Ада-95 (а может и с Ада-83). Причем в нормальном, а не в паскалевском виде: http://oopweb.com/Ada/Documents/Ada95RM/Volume/13-03.htm

Причем это действительно фактический стандарт, он используется. В отличае от стандарта паскаля (который по сути - фикция).
Название: Re: [BlackBox] Compiler trap.
Отправлено: valexey_u от Май 24, 2013, 07:46:15 pm
Ada вообще прекрасна! Смотрите (http://oopweb.com/Ada/Documents/Ada95RM/Volume/13-05-01.htm):
       Word : constant := 4;  --  storage element is byte, 4 bytes per word

       type State         is (A,M,W,P);
       type Mode          is (Fix, Dec, Exp, Signif);

       type Byte_Mask     is array (0..7)  of Boolean;
       type State_Mask    is array (State) of Boolean;
       type Mode_Mask     is array (Mode)  of Boolean;

       type Program_Status_Word is
         record
             System_Mask        : Byte_Mask;
             Protection_Key     : Integer range 0 .. 3;
             Machine_State      : State_Mask;
             Interrupt_Cause    : Interruption_Code;
             Ilc                : Integer range 0 .. 3;
             Cc                 : Integer range 0 .. 3;
             Program_Mask       : Mode_Mask;
             Inst_Address       : Address;
       end record;

       for Program_Status_Word use
         record
             System_Mask      at 0*Word range 0  .. 7;
             Protection_Key   at 0*Word range 10 .. 11; -- bits 8,9 unused
             Machine_State    at 0*Word range 12 .. 15;
             Interrupt_Cause  at 0*Word range 16 .. 31;
             Ilc              at 1*Word range 0  .. 1;  -- second word
             Cc               at 1*Word range 2  .. 3;
             Program_Mask     at 1*Word range 4  .. 7;
             Inst_Address     at 1*Word range 8  .. 31;
         end record;

       for Program_Status_Word'Size use 8*System.Storage_Unit;
       for Program_Status_Word'Alignment use 8;
Название: Re: [BlackBox] Compiler trap.
Отправлено: Berserker от Май 24, 2013, 08:03:29 pm
Цитировать
Причем это действительно фактический стандарт, он используется. В отличае от стандарта паскаля (который по сути - фикция).
Не соглашусь с Вами, Алексей. Что лучше — несовместимые расширения без стандарта де-юре или де-факто совместимые расширения, аналог теневого стандарта? Если PACKED есть во всех популярных компиляторах, то он и есть стандарт. А вот с прагмами и declspec я натыкался на грабли, когда писал простейший SDK. Учитывая, что третьи лица используют стандарт древнее 11х невозможно не тащить за собой весь воз костылей. Так что паскалисты молодцы — там и соглашения о вызовах и выравнивания единообразно присутствуют, из-за чего код де-факто переносим. А что ещё нужно практикам?
Название: Re: [BlackBox] Compiler trap.
Отправлено: valexey_u от Май 24, 2013, 08:22:23 pm
Цитировать
Причем это действительно фактический стандарт, он используется. В отличае от стандарта паскаля (который по сути - фикция).
Не соглашусь с Вами, Алексей. Что лучше — несовместимые расширения без стандарта де-юре или де-факто совместимые расширения, аналог теневого стандарта? Если PACKED есть во всех популярных компиляторах, то он и есть стандарт. А вот с прагмами и declspec я натыкался на грабли, когда писал простейший SDK. Учитывая, что третьи лица используют стандарт древнее 11х невозможно не тащить за собой весь воз костылей. Так что паскалисты молодцы — там и соглашения о вызовах и выравнивания единообразно присутствуют, из-за чего код де-факто переносим. А что ещё нужно практикам?
Я не слишком понимаю о чем речь. Берем произвольное приложение писанное скажем на FreePascal'e - оно соберется на Delphi? А на VirtualPascal'e? А на Object Pascal'e (нет, не том что TurboPascal, а тот который от apple)? Вот что-то я сомневаюсь.

packed в стандартном паскале есть, и это не расширизм. Только он (packed) вот не гарантирует ничего в том виде, в котором он там описан. Кроме того, насколько я понимаю, по сути софта писанного на стандартном паскале просто нет. Все используют несовместимые (со стандартом и друг с другом) диалекты.

А прописать соглашения о вызовах в диалектах паскаля тоже можно (а главное - нужно, иначе там это не появилось бы). Причина появления явного прописывания соглашения о вызове в сигнатуре функции ровно та же что и в случае появления её в реализациях Си.
Название: Re: [BlackBox] Compiler trap.
Отправлено: Berserker от Май 24, 2013, 08:32:13 pm
Соберётся, если писалось с использованием общей части языка (в большей степени равняются на Delphi). В VirtualPascal есть режим Делфи (не полный) и в FreePascal тоже. Я переносил свои программы между тремя. А суть в следующем: PACKED для структур во всех трёх обеспечивает alignas(1), STDCALL/CDECL/THISCALL и т.д. — правильное соглашение о вызове для функций. Паскаль не приветствует сложных кодирований расширений, вроде __xxxxx(yyy(__zzz)), поэтому есть определённое единообразие.

Это просто констатация факта, а не нападки на С++.
Название: Re: [BlackBox] Compiler trap.
Отправлено: valexey_u от Май 24, 2013, 08:45:56 pm
Соберётся, если писалось с использованием общей части языка (в большей степени равняются на Delphi). В VirtualPascal есть режим Делфи (не полный) и в FreePascal тоже. Я переносил свои программы между тремя. А суть в следующем: PACKED для структур во всех трёх обеспечивает alignas(1), STDCALL/CDECL/THISCALL и т.д. — правильное соглашение о вызове для функций. Паскаль не приветствует сложных кодирований расширений, вроде __xxxxx(yyy(__zzz)), поэтому есть определённое единообразие.

Это просто констатация факта, а не нападки на С++.
Глянул стандарт паскаля - ничего не нашел про STDCALL и так далее. Можешь ткнуть носом?

Ну, то есть похоже, что эти атрибуты соглашения о вызове явно тоже расширизм. Как и в сях/плюсах.

В плюсах и сях вообще просто - это все заруливается макросом, содержимое которого зависит (и автоматически выбирается) в зависимости от типа компилятора. У нас на работе код небольшого-среднего проекта (то есть порядка 100-200 тыс. строк кода) собирается и gcc (под линукс) и msvs под винду. И проблем со всем этим никаких. Естественно там используются в том числе и сторонние библиотеки.
Название: Re: [BlackBox] Compiler trap.
Отправлено: Berserker от Май 24, 2013, 08:51:36 pm
Да, это расширения. Просто они одинаковые и ведут себя одинаково. Получается неформальный стандарт без применения условной компиляции.
Название: Re: [BlackBox] Compiler trap.
Отправлено: valexey_u от Май 24, 2013, 08:55:32 pm
Да, это расширения. Просто они одинаковые и ведут себя одинаково. Получается неформальный стандарт без применения условной компиляции.
Ну, можно и так. Хотя я все же предпочитаю условную компиляцию, то есть чтобы если нас собирают неизвестным (и не оттестированым) компилятором, то в месте где мы используем расширизм, вывелся бы warning во время компиляции. Благо таковая условная компиляция ровно ничего не стоит.
Название: Re: [BlackBox] Compiler trap.
Отправлено: Geniepro от Май 24, 2013, 09:39:21 pm
Ada вообще прекрасна! Смотрите (http://oopweb.com/Ada/Documents/Ada95RM/Volume/13-05-01.htm):
       Word : constant := 4;  --  storage element is byte, 4 bytes per word

       type State         is (A,M,W,P);
       type Mode          is (Fix, Dec, Exp, Signif);

       type Byte_Mask     is array (0..7)  of Boolean;
       type State_Mask    is array (State) of Boolean;
       type Mode_Mask     is array (Mode)  of Boolean;

       type Program_Status_Word is
         record
             System_Mask        : Byte_Mask;
             Protection_Key     : Integer range 0 .. 3;
             Machine_State      : State_Mask;
             Interrupt_Cause    : Interruption_Code;
             Ilc                : Integer range 0 .. 3;
             Cc                 : Integer range 0 .. 3;
             Program_Mask       : Mode_Mask;
             Inst_Address       : Address;
       end record;

       for Program_Status_Word use
         record
             System_Mask      at 0*Word range 0  .. 7;
             Protection_Key   at 0*Word range 10 .. 11; -- bits 8,9 unused
             Machine_State    at 0*Word range 12 .. 15;
             Interrupt_Cause  at 0*Word range 16 .. 31;
             Ilc              at 1*Word range 0  .. 1;  -- second word
             Cc               at 1*Word range 2  .. 3;
             Program_Mask     at 1*Word range 4  .. 7;
             Inst_Address     at 1*Word range 8  .. 31;
         end record;

       for Program_Status_Word'Size use 8*System.Storage_Unit;
       for Program_Status_Word'Alignment use 8;

Этот пример ещё в Аде-83 указан:
http://archive.adaic.com/standards/83lrm/html/lrm-13-04.html

Оно и понятно -- Ада изначально разрабатывалась для того, что бы работать с железом на низком уровне, вот и заложили в неё сразу же средства низкоуровнего представления типов данных...

   WORD : constant := 4;  --  storage unit is byte, 4 bytes per word

   type STATE         is (A,M,W,P);
   type MODE          is (FIX, DEC, EXP, SIGNIF);

   type BYTE_MASK     is array (0.. 7) of BOOLEAN;
   type STATE_MASK    is array (STATE) of BOOLEAN;
   type MODE_MASK     is array (MODE)  of BOOLEAN;

   type PROGRAM_STATUS_WORD is

     record
       SYSTEM_MASK        : BYTE_MASK;
       PROTECTION_KEY     : INTEGER range 0 .. 3;
       MACHINE_STATE      : STATE_MASK;
       INTERRUPT_CAUSE    : INTERRUPTION_CODE;
       ILC                : INTEGER range 0 .. 3;
       CC                 : INTEGER range 0 .. 3;
       PROGRAM_MASK       : MODE_MASK;
       INST_ADDRESS       : ADDRESS;
    end record;

  for PROGRAM_STATUS_WORD use
    record at mod 8;
        SYSTEM_MASK      at 0*WORD range 0  .. 7; 
        PROTECTION_KEY   at 0*WORD range 10 .. 11; -- bits 8,9 unused
        MACHINE_STATE    at 0*WORD range 12 .. 15;
        INTERRUPT_CAUSE  at 0*WORD range 16 .. 31;
        ILC              at 1*WORD range 0  .. 1;  -- second word
        CC               at 1*WORD range 2  .. 3;
        PROGRAM_MASK     at 1*WORD range 4  .. 7;
        INST_ADDRESS     at 1*WORD range 8  .. 31;
    end record;

  for PROGRAM_STATUS_WORD'SIZE use 8*SYSTEM.STORAGE_UNIT;
Название: Re: [BlackBox] Compiler trap.
Отправлено: valexey_u от Май 24, 2013, 09:55:23 pm
Ada вообще прекрасна! Смотрите (http://oopweb.com/Ada/Documents/Ada95RM/Volume/13-05-01.htm):
       Word : constant := 4;  --  storage element is byte, 4 bytes per word

       type State         is (A,M,W,P);
       type Mode          is (Fix, Dec, Exp, Signif);

       type Byte_Mask     is array (0..7)  of Boolean;
       type State_Mask    is array (State) of Boolean;
       type Mode_Mask     is array (Mode)  of Boolean;

       type Program_Status_Word is
         record
             System_Mask        : Byte_Mask;
             Protection_Key     : Integer range 0 .. 3;
             Machine_State      : State_Mask;
             Interrupt_Cause    : Interruption_Code;
             Ilc                : Integer range 0 .. 3;
             Cc                 : Integer range 0 .. 3;
             Program_Mask       : Mode_Mask;
             Inst_Address       : Address;
       end record;

       for Program_Status_Word use
         record
             System_Mask      at 0*Word range 0  .. 7;
             Protection_Key   at 0*Word range 10 .. 11; -- bits 8,9 unused
             Machine_State    at 0*Word range 12 .. 15;
             Interrupt_Cause  at 0*Word range 16 .. 31;
             Ilc              at 1*Word range 0  .. 1;  -- second word
             Cc               at 1*Word range 2  .. 3;
             Program_Mask     at 1*Word range 4  .. 7;
             Inst_Address     at 1*Word range 8  .. 31;
         end record;

       for Program_Status_Word'Size use 8*System.Storage_Unit;
       for Program_Status_Word'Alignment use 8;

Этот пример ещё в Аде-83 указан:
http://archive.adaic.com/standards/83lrm/html/lrm-13-04.html

Оно и понятно -- Ада изначально разрабатывалась для того, что бы работать с железом на низком уровне, вот и заложили в неё сразу же средства низкоуровнего представления типов данных...

   WORD : constant := 4;  --  storage unit is byte, 4 bytes per word

   type STATE         is (A,M,W,P);
   type MODE          is (FIX, DEC, EXP, SIGNIF);

   type BYTE_MASK     is array (0.. 7) of BOOLEAN;
   type STATE_MASK    is array (STATE) of BOOLEAN;
   type MODE_MASK     is array (MODE)  of BOOLEAN;

   type PROGRAM_STATUS_WORD is

     record
       SYSTEM_MASK        : BYTE_MASK;
       PROTECTION_KEY     : INTEGER range 0 .. 3;
       MACHINE_STATE      : STATE_MASK;
       INTERRUPT_CAUSE    : INTERRUPTION_CODE;
       ILC                : INTEGER range 0 .. 3;
       CC                 : INTEGER range 0 .. 3;
       PROGRAM_MASK       : MODE_MASK;
       INST_ADDRESS       : ADDRESS;
    end record;

  for PROGRAM_STATUS_WORD use
    record at mod 8;
        SYSTEM_MASK      at 0*WORD range 0  .. 7; 
        PROTECTION_KEY   at 0*WORD range 10 .. 11; -- bits 8,9 unused
        MACHINE_STATE    at 0*WORD range 12 .. 15;
        INTERRUPT_CAUSE  at 0*WORD range 16 .. 31;
        ILC              at 1*WORD range 0  .. 1;  -- second word
        CC               at 1*WORD range 2  .. 3;
        PROGRAM_MASK     at 1*WORD range 4  .. 7;
        INST_ADDRESS     at 1*WORD range 8  .. 31;
    end record;

  for PROGRAM_STATUS_WORD'SIZE use 8*SYSTEM.STORAGE_UNIT;

Я видел. Но пример таки отличаются (кстати, обратите внимание на капс в Аде-83 :-) ).

Кроме того, атрибутов про выравнивание там, в Аде-83, похоже не было.
Название: Re: [BlackBox] Compiler trap.
Отправлено: Geniepro от Май 24, 2013, 10:49:38 pm
Кроме того, атрибутов про выравнивание там, в Аде-83, похоже не было.

Таки было: http://archive.adaic.com/standards/83rat/html/ratl-15-04.html#15.4.3

Цитировать
Alignment Clauses:

 When it is important that the objects of a given record type be allocated on a given storage boundary, this can be specified by means of an alignment clause. The alignment is expressed as a number of storage units, and all addresses at which the objects are allocated must be exact multiples of the specified number of storage units (the address modulo the alignment expression must be zero).

    for PAGE_BUFFER use at mod 512;

Затем, в http://archive.adaic.com/standards/95lrm/LRMascii/chg83.txt это было переделано. Alignment Clauses были переименованы в Mod Clauses (http://www.adahome.com/rm95/rm9x-J-08.html#1):

Цитировать
A record_representation_clause of the form:

       for r use
           record at mod a
               ...
           end record;

is equivalent to:

       for r'Alignment use a;
       for r use
           record
               ...
           end record;
Название: Re: [BlackBox] Compiler trap.
Отправлено: Geniepro от Май 24, 2013, 10:56:05 pm
Я видел. Но пример таки отличаются (кстати, обратите внимание на капс в Аде-83 :-) ).

Кроме того, атрибутов про выравнивание там, в Аде-83, похоже не было.

Собственно в этих двух примерах было показано:

for Program_Status_Word use
  record
    ...
for Program_Status_Word'Alignment use 8;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
for PROGRAM_STATUS_WORD use
  record at mod 8;
    ...  ^^^^^^^^
Название: Re: [BlackBox] Compiler trap.
Отправлено: valexey_u от Май 25, 2013, 02:53:22 am
Возвращаясь к топику:
недавно еще один товарищ похоже напоролся ровно на тот же трап:

Цитата: http://zx.oberon2.ru/forum/viewtopic.php?f=32&p=398&sid=640132f7ffae7d21933849ceb1a16072#p398
...
    x := OPB.NewUnsignedConst( (LONG(y^.conval^.intval) -apar^.conval^.intval) DIV z^.conval^.intval + 1)могло возникнуть переполнение в разности (y^.conval^.intval-apar^.conval^.intval), что искажало результат при последующем делении. Попытка перейти к типу большей разрядности при помощи LONG() вызывало ТРАП 0 (Dev)CPC486 компилятора ББ.

...

Интересно, что попытка соединить в одном операторе и разность и деление
L := (LONG(y^.conval^.intval)  -apar^.conval^.intval) DIV  z^.conval^.intval  +1;
вызывает ТРАП 0 (Dev)CPC486 компилятора ББ! Ну и ладно, не хочет вместе, посчитаем по отдельности.
Название: Re: [BlackBox] Compiler trap.
Отправлено: Oleg N. Cher от Июль 12, 2013, 09:18:51 pm
Фикс для исправления этой проблемы (взято в официальной рассылке по BlackBox, автор — luowy). (https://github.com/Oleg-N-Cher/BB-XDev/commit/8b39eb11164460541b56fc096e08e067b90048e5)

Цитата: http://zx.oberon2.ru/forum/viewtopic.php?f=32&p=398&sid=640132f7ffae7d21933849ceb1a16072#p398
P.S. Можно давать ссылки такого рода без sid, это идентификатор сессии.
Название: Re: [BlackBox] Compiler trap.
Отправлено: valexey_u от Июль 12, 2013, 09:52:50 pm
Фикс для исправления этой проблемы (взято в официальной рассылке по BlackBox, автор — luowy). (https://github.com/Oleg-N-Cher/BB-XDev/commit/8b39eb11164460541b56fc096e08e067b90048e5)
Кстати, где-нибудь выложен архив этой рассылки?