Автор Тема: [BlackBox] Compiler trap.  (Прочитано 35760 раз)

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: [BlackBox] Compiler trap.
« Ответ #60 : Май 20, 2013, 04:54:19 pm »
По моему не выйдет - там же еще выравнивание небось будет.
Есть же флаги untagged, noalign. Ну и ожно проверить, сравнив адреса записей(адрес конкретного элемента массива) с вычисленным.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [BlackBox] Compiler trap.
« Ответ #61 : Май 20, 2013, 04:59:12 pm »
По моему не выйдет - там же еще выравнивание небось будет.
Есть же флаги untagged, noalign. Ну и ожно проверить, сравнив адреса записей(адрес конкретного элемента массива) с вычисленным.
Можно. Но это будет BlackBox only решение. То несть не КП'шное.
Y = λf.(λx.f (x x)) (λx.f (x x))

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: [BlackBox] Compiler trap.
« Ответ #62 : Май 20, 2013, 04:59:55 pm »
Ответил им. Дал быстрый фикс от maliya, и ссылку на эту ветку.
Представляю их лица, когда они переведут эту ветку... (Привет kkk и Ди-ди-дАйзеру)

Да ваще жесть )))
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: [BlackBox] Compiler trap.
« Ответ #63 : Май 20, 2013, 05:02:04 pm »
В С++ та же проблема без привязки к конкретному компилятору, не так ли? __declspec(align(1))
где то так.. ,  но вроде как еще в допотопных версиях Паскаля проблема решалась использованием packed records.. на уровне языка.

Упакованные записи ещё же с самой первой версии паскаля (виртовской), насколько я помню, есть. И до сих пор в дельфях...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [BlackBox] Compiler trap.
« Ответ #64 : Май 20, 2013, 05:17:56 pm »
В С++ та же проблема без привязки к конкретному компилятору, не так ли? __declspec(align(1))
где то так.. ,  но вроде как еще в допотопных версиях Паскаля проблема решалась использованием packed records.. на уровне языка.

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

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [BlackBox] Compiler trap.
« Ответ #65 : Май 20, 2013, 05:24:41 pm »
Кстати, а вот виртовский паскаль: http://www.bandwidthco.com/history/programming/Wirth%20Pascal%20Programming%20Language.pdf
Y = λf.(λx.f (x x)) (λx.f (x x))

DddIzer

  • Гость
Re: [BlackBox] Compiler trap.
« Ответ #66 : Май 20, 2013, 05:49:42 pm »
Кстати, а вот виртовский паскаль: http://www.bandwidthco.com/history/programming/Wirth%20Pascal%20Programming%20Language.pdf
вот и ищите там слово "packed" - про aligned  никто ничего не говорил (в контексте Паскалей)

DddIzer

  • Гость
Re: [BlackBox] Compiler trap.
« Ответ #67 : Май 20, 2013, 05:52:58 pm »
По моему не выйдет - там же еще выравнивание небось будет.
Есть же флаги untagged, noalign. Ну и ожно проверить, сравнив адреса записей(адрес конкретного элемента массива) с вычисленным.
Можно. Но это будет BlackBox only решение. То несть не КП'шное.
ну и что... опять же - ровно то же что и в случае использования прагм C\C++ - решение совершенно одинаковое по "качеству"

DddIzer

  • Гость
Re: [BlackBox] Compiler trap.
« Ответ #68 : Май 20, 2013, 05:58:44 pm »
Кстати, а вот виртовский паскаль: http://www.bandwidthco.com/history/programming/Wirth%20Pascal%20Programming%20Language.pdf
вот и ищите там слово "packed" - про aligned  никто ничего не говорил (в контексте Паскалей)
  единственное... что если мне не изменяет память то  в Турбо Паскале (каком то из них) было сказано что слово packed оставлено  только для совместимости со стандартом..  то есть предполагалось использование директив $A+ ($A-) для достижения эффекта на уровне модулей...

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: [BlackBox] Compiler trap.
« Ответ #69 : Май 20, 2013, 07:55:06 pm »
Кстати, а вот виртовский паскаль: http://www.bandwidthco.com/history/programming/Wirth%20Pascal%20Programming%20Language.pdf
вот и ищите там слово "packed" - про aligned  никто ничего не говорил (в контексте Паскалей)
  единственное... что если мне не изменяет память то  в Турбо Паскале (каком то из них) было сказано что слово packed оставлено  только для совместимости со стандартом..  то есть предполагалось использование директив $A+ ($A-) для достижения эффекта на уровне модулей...

В какой-то из версий дельфов packed record точно работало -- у меня в какой-то программе использовалось...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: [BlackBox] Compiler trap.
« Ответ #70 : Май 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 я там не заметил, но во всех книгах по паскалю, что я читал раньше, они тоже были...

Насчёт соглашений о вызове процедур в паскале - ничего не знаю, не слышал...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: [BlackBox] Compiler trap.
« Ответ #71 : Май 20, 2013, 08:18:28 pm »
Вот в этом вот файле указаны packed array, packed file. Хотя прямого указания на packed record я там не заметил, но во всех книгах по паскалю, что я читал раньше, они тоже были...

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

Кстати, а вот виртовский паскаль: http://www.bandwidthco.com/history/programming/Wirth%20Pascal%20Programming%20Language.pdf
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: [BlackBox] Compiler trap.
« Ответ #72 : Май 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.
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [BlackBox] Compiler trap.
« Ответ #73 : Май 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
Y = λf.(λx.f (x x)) (λx.f (x x))

trurl

  • Full Member
  • ***
  • Сообщений: 133
    • Просмотр профиля
Re: [BlackBox] Compiler trap.
« Ответ #74 : Май 24, 2013, 06:08:49 pm »
Для контраста, возьмем с++ и его ключевое слово alignas 
Цитировать
alignas( expression )       (since C++11)