[07:39:54] <Kemet> _valexey_: хочешь посмотреть, как на АО будет выглядеть некое подобие union'а?
[07:40:52] <Kemet> так как-то так:
Pixel = RECORD
rgba* : RECORD
r, g, b, a: UNSIGNED8;
END;
argb* { FICTIVE = 0 } : RECORD
a, r, g, b: UNSIGNED8;
END;
abgr* { FICTIVE = 0 } : RECORD
a, b, g, r: UNSIGNED8;
END;
bgra { FICTIVE = 0 } : RECORD
b, g, r, a: UNSIGNED8;
END;
END;
[07:41:53] <Kemet> в FICTIVE - смещение от начала записи, и оно может быть отрицательным. так получают доступ к системной инфе записи ))
[09:37:44] <valexey> Kemet: интересный подход
[09:38:26] <valexey> то есть в самой записи можно сделать поле, ну не знаю, tag, которое лежит не в самой записи, а раньше и это будет инфа о ней?
[09:41:39] <Kemet> нет, FICTIVE физически не существует, это фиктивное поле с некоторым смещением от базового адреса записи. просто таким образом, например можно прозрачным способом получать доступ к некой системно скрытой части записи, например к тегу и тг
[09:42:24] <Kemet> ну или организовать псевдообъединение
[10:32:50] <_valexey_> Kemet: ну, я это и имел в виду
[10:33:15] <_valexey_> А абсолютные адреса для фиктивных можно задавать?
[11:02:02] <Kemet> смещение только
[11:03:02] <Kemet> { FICTIVE = [+|-] offset }
[11:04:50] <Kemet> не ввели union какойнибудь потому что им нужен был структурный доступ к системным данным, а они по отрицательному смещению от базы. вот и придумали такую штуку
[11:07:39] <Kemet> _valexey_: а зачем там абсолютные адреса?
[11:28:05] <TRUE> чтобы память портить. А запись по этим отрицательным фиктивным адресам делать можено?
[11:32:19] <Kemet> можно, если туда запись разрешена, там же на сегменты зашита ставится, чтобы нельзы было попортить код или выполнить данные. если полученный адрес валиден и запись по этому адресу разрешена, то запишет
[11:33:58] <Kemet> не, ну размещение переменных и процедур по фиксировыанным адресам есть. Для этого нужно использовать флаг {FIXED(address)}
[12:07:29] <_valexey_> Kemet: для системщины же всякой. К аппаратуре стучаться.
[12:07:51] <_valexey_> Иногда это может быть удобно таким вот псевдополем.
[12:11:41] <Kemet> _valexey_: не вижу смысла особого, это же можно сделать через ансэйв указатели
[12:13:07] <_valexey_> Дык и относительные адреса для этих фиктивных можно было через указатели сделать :-)
[12:13:38] <Kemet> тогда
[12:13:52] <Kemet> тогда это уже не поля а хрен знает что
[12:14:43] <Kemet> доступ к эти фиктивным ничем не отличается от доступа к реальным - тот же самый механизм
[12:16:48] <Kemet> внутри один и тот же машкод
[12:17:02] <_valexey_> О! А в плюсах тоже ведь так можно!
[12:17:11] <Kemet> то есть никакого оверхева
[12:17:27] <_valexey_> И без оверхеда :/)
[12:17:29] <_valexey_> :-)
[12:19:18] <_valexey_> Просто через поля-ссылки
[12:21:50] <Kemet> и как оно выглядит?
[12:23:03] <Kemet> в ао то фиктивные поля на то и фиктивные, что их реально в записи не существует и они не влияют на размер записи
[12:23:23] <Kemet> просто алиасы
[12:24:04] <_valexey_> Щща сделаю :-)
[12:46:22] <_valexey_> Через ссылку не получилось. Получилось так: godbolt.org/g/t3hw44
[12:46:49] <_valexey_> http://godbolt.org/g/t3hw44
[13:07:02] <Kemet> так не интересно, с методом я тоже могу )
[13:09:15] <_valexey_> Kemet: нулевой оверхед же :-)
[13:09:28] <_valexey_> Не будет вызова какой-либо функции!
[13:09:59] <_valexey_> Я специально привел ссылку именно на этот сайт - можешь глянуть асм что сгенерится
[13:10:42] <Kemet> ну соптимизирует компиль
[13:11:16] <_valexey_> Всегда соптимизирует, кроме O0
[13:13:20] <Kemet> я инлайн поставлю и тоже вызова не будет )
[13:13:53] <_valexey_> Ну, то есть, не понятно зачем тогда этот фиктив
[13:14:03] <_valexey_> Если и без него есть решение не хуже
[13:16:37] <Kemet> оно хуже, так как с методом это уже не совсем плэн рекорд
[13:16:50] <_valexey_> Э? Чоэто?
[13:16:52] <Kemet> плэйн
[13:17:06] <_valexey_> Ну, в плюсах - оно таки плэйн
[13:17:08] <Kemet> ну я про АО
[13:17:24] <_valexey_> А, ну ок
[13:18:02] <Kemet> к тому же зачем методы городить, когда там поле нужно )
[13:18:40] <_valexey_> И
[13:21:15] <Kemet> вот и сделали фиктивные поля
[13:21:58] <Kemet> к тому же пока что вызов метода даже заинлайненого все равно несет с собой некоторый оверхед
[13:39:23] <_valexey_> Ы? Как это?
[13:43:11] <Kemet> ну там загрузить self, и дернуть метод из таблицы дескриптора
[13:43:29] <Kemet> оптимизации же нет и девиртуализации вызовов нет
[13:49:44] <_valexey_> А вот в плюсах не нужна девириизация вызовов! Ибо этот метод и так не виртуален.
[16:15:17] <Kemet> а в оберрнах все методы виртуальны для упрощения
[17:30:40] <vlad2> Обама добрался и до нашей деревни - на парковке видел огромную кучу говна :)
[18:30:56] <_valexey_> Kemet: ну, кроме trueъ оберона :-)
[18:31:10] <_valexey_> Где методов ваще нет :-)