записи как Published поля

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

записи как Published поля

Сообщение ger0strat » 05.06.2016 09:01:01

Доброго времени суток.
Вопрос скорее риторический. Понадобилось мне возыметь несколько published полей, являющихся группами по 3 строки. Т.к. окромя такой группировки от поля ничего более не требуется, решил использовать запись и столкнулся со внезапной проблемой: published могут быть только поля-объекты либо то, что умещается в native int. http://www.freepascal.org/docs-html/ref/refsu38.html#x89-1110006.6.5 На резонный вопрос "какого банана?" гугл гордо молчит, а потрошить fpc я пока не готов.
Да, можно таки использовать не запись, а объект. Пока так и сделал, но меня гложет мысль о том, что я использую лишние несколько байт просто из-за реализации fpc. Не критично, но гложет.
Но все же, в чем проблема?

ps еще можно сериализовать, но как-то изврат
ger0strat
новенький
 
Сообщения: 40
Зарегистрирован: 13.05.2014 19:35:56

Re: записи как Published поля

Сообщение SSerge » 05.06.2016 10:11:50

ger0strat писал(а):но меня гложет мысль о том, что я использую лишние несколько бай


А не гложет мысль, что если бы можно было бы использовать record в качестве published, то пришлось бы работать со структурой неизвестной длины, содержащей поля, имеющие неизвестное смещение? Почему так - из-за блждь "оптимизации", разной для разных режимов компиляции, с вставлением разного рода мусора. А также будет соблазн туда сунуть разного рода скрытые указатели - т.е. строки и динамические массивы.

Кста:
whose size is less than or equal to a pointer,

ger0strat писал(а):published могут быть только поля-объекты либо то, что умещается в native int

Утверждения отнюдь не эквивалентны. В ангельском оригинале сказано, что published может быть то, что меньше или равно pointer. Указателя то есть. Где там native int? :D Сам указатель (pointer), по этой логике, тоже может быть published.
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: записи как Published поля

Сообщение zub » 05.06.2016 12:03:13

published могут быть только поля-объекты либо то, что умещается в native int

Double емнип может быть публишед, такчто это не совсем верно.
Какой смысл в "записи как Published поля"?
Т.к. окромя такой группировки от поля ничего более не требуется

Для группировки в инспекторе?
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: записи как Published поля

Сообщение Дож » 05.06.2016 12:28:20

SSerge писал(а):
ger0strat писал(а):published могут быть только поля-объекты либо то, что умещается в native int

Утверждения отнюдь не эквивалентны. В ангельском оригинале сказано, что published может быть то, что меньше или равно pointer. Указателя то есть. Где там native int? :D Сам указатель (pointer), по этой логике, тоже может быть published.

Можете рассказать почему не компилится этот код?
Код: Выделить всё
{$MODE OBJFPC}
{$MODESWITCH AUTODEREF}
type
TFoo = class
private
  P: Pointer;
published 
  property Group: Pointer read P;
end;

begin
end.

Код: Выделить всё
p.pas(8,27) Error: This kind of property cannot be published
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: записи как Published поля

Сообщение SSerge » 05.06.2016 15:48:19

Дож писал(а):Можете рассказать почему не компилится этот код?


Мог бы просто сказать, что чушь спорол и указатели в качестве published членов принципиально бессмысленны, потому запрещены.
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: записи как Published поля

Сообщение ger0strat » 05.06.2016 16:09:58

SSerge писал(а):то пришлось бы работать со структурой неизвестной длины


Волков бояться - в лес не ходить. Для динамических массивов выход нашелся, почему не должен для записей. Смещения известны ибо есть packed.

SSerge писал(а):whose size is less than or equal to a pointer,


хватаем словарик и переводим: "размер которых меньше или равен размеру указателя"
native int, как и размер указателя определяется разрядностью системы (или компилятора). Собственно, разница в термине.

zub писал(а):Какой смысл в "записи как Published поля"?


такой же, какой и в published поле любого другого типа

Добавлено спустя 6 минут 46 секунд:
zub писал(а):Double емнип может быть публишед, такчто это не совсем верно.


вообще sizeof(double)=8, что вполне укладывается
ger0strat
новенький
 
Сообщения: 40
Зарегистрирован: 13.05.2014 19:35:56

Re: записи как Published поля

Сообщение zub » 05.06.2016 22:25:18

>>вообще sizeof(double)=8, что вполне укладывается
нет, не укладывается. например на x86

>>такой же, какой и в published поле любого другого типа
и всетаки, какой?
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: записи как Published поля

Сообщение ger0strat » 07.06.2016 20:32:03

zub писал(а):>>вообще sizeof(double)=8, что вполне укладывается
нет, не укладывается. например на x86


пока потестить не на чем, но подозреваю не все так просто)
ger0strat
новенький
 
Сообщения: 40
Зарегистрирован: 13.05.2014 19:35:56

Re: записи как Published поля

Сообщение zub » 07.06.2016 22:36:39

что тут проверять?
sizeof(double)=8
sizeof(pointer)=4
sizeof(integer)=4
на x86

Сделано имхо для упрощения и унификации рантайм rtti вызовов. Никакого смысла в
Т.к. окромя такой группировки от поля ничего более не требуется

для published секции нет. Тут лежит то что сериализуется "автоматом" и лежащее тут должно быть максимально простым
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: записи как Published поля

Сообщение ger0strat » 12.06.2016 22:00:25

Ну то есть про размер они у себя в хелпе написали исключительно ради прикола?

zub писал(а):Никакого смысла в

не понял, о чем и к чему это было

zub писал(а):Тут лежит то что сериализуется "автоматом" и лежащее тут должно быть максимально простым

ну да, объекты определенно проще устроены, чем записи. более того, записи сериализуются на раз.

полагаю пошел спор ради спора. тему можно закрывать
ger0strat
новенький
 
Сообщения: 40
Зарегистрирован: 13.05.2014 19:35:56

Re: записи как Published поля

Сообщение zub » 12.06.2016 22:24:08

>не понял, о чем и к чему это было
Было это к тому что записи в published не нужны

>>ну да, объекты определенно проще устроены, чем записи. более того, записи сериализуются на раз.
Ничего "на раз" не сериализуется, темболее записи.

>>полагаю пошел спор ради спора. тему можно закрывать
Спора тут и небыло. Есть странное желание, непонимание зачем оно нужно и почему неработает))
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21

Рейтинг@Mail.ru