Текущий архив: 2009.11.15;
Скачать: CL | DM;
Вниз
object`ы в delphi 2009 Найти похожие ветки
← →
Германн © (2008-10-17 01:35) [80]
> просто так (17.10.08 00:35) [79]
>
> спсб, вроде заработало. но это тоже не выход((
>
А какой выход ты хотел бы? Волшебную палочку?
P.S. Пустопорожняя тема, а длится уже более трёх суток. И мой пост уже 80-й.
← →
просто так (2008-10-17 01:56) [81]>>P.S. Пустопорожняя тема, а длится уже более трёх суток. И мой пост уже 80-й.
Всем спасибо, тема закрыта
← →
Германн © (2008-10-17 02:32) [82]
> просто так (17.10.08 01:56) [81]
>
> >>P.S. Пустопорожняя тема, а длится уже более трёх суток.
> И мой пост уже 80-й.
> Всем спасибо, тема закрыта
>
"Закрыть" тему может только модератор. А он пока не захотел её закрывать.
← →
DevilDevil © (2008-10-17 14:57) [83]> просто так (16.10.08 17:42) [53]
> а смысл доделывать рекорд? чтоб получить обжект который
> нафиг никому не нужен((?
object (или аналогичный ) нужен всем, только они ещё об этом не знают. Преимуществ record над object-ом невижу никаких! Преимущества objectа над record-ами: наследование, виртуальные методы, секции private/public/protected.
Если честно, я вообще не вижу причин, по которым нельзя сделать record-ы с VMT или продвигать object, а record оставить для обратной совместимости.
Проблема только одна - расположение VMT.
В С++ VMT не обязательно хранится по нулевому смешению.
Приведу аналоги на Delphi.type
TMyPoint = object(TPoint)
public
function Length(): integer; virtual;
end;
Если реализовать то же самое в С++, то VMT будет по смещению 8байт. А вообще можно организовать так:VMT
X: integer;
Y: integer;
И при вызове функции, где TMyPoint должен приводиться к TPoint:var
MyPoint: TMyPoint;
begin
MyPoint.Create();
Windows.GetCursorPos(@MyPoint{!!!});
на уровне compiler magic должен пихаться указатель не на MyPoint, а на MyPoint+4. Вот и все проблемы.
← →
oxffff © (2008-10-20 08:43) [84]
> Если честно, я вообще не вижу причин, по которым нельзя
> сделать record-ы с VMT
А мы например очень это видим. Причина простая record - это конечный тип, который связан со всеми методами на момент компиляции. И смысл делать позднее связывание полностью отсутствует. :)
← →
просто так (2008-10-20 09:11) [85]>>А мы например очень это видим. Причина простая record - это конечный тип, который связан со всеми методами на момент компиляции
object без виртуальных методов - тоже, в нем нет вмт, тотже рекорд с методами, зачем херить старую провереную фичу и вводить новую аналогичную?
>>Проблема только одна - расположение VMT. В С++ VMT не обязательно хранится по нулевому смешению.
в delphi также. vmt появляется при первом виртуальном методе, по текущему смещению
← →
oxffff © (2008-10-20 09:34) [86]
> object без виртуальных методов - тоже, в нем нет вмт, тотже
> рекорд с методами, зачем херить старую провереную фичу и
> вводить новую аналогичную?
Затем, что ввели другую идеалогию размещения объекта, в куче.
> в delphi также. vmt появляется при первом виртуальном методе,
> по текущему смещению
В любом объекте (от class) уже есть виртуальные методы.
← →
oxffff © (2008-10-20 09:34) [87]
> object без виртуальных методов - тоже, в нем нет вмт, тотже
> рекорд с методами, зачем херить старую провереную фичу и
> вводить новую аналогичную?
Затем, что ввели другую идеалогию размещения объекта, в куче.
> в delphi также. vmt появляется при первом виртуальном методе,
> по текущему смещению
В любом объекте (от class) уже есть виртуальные методы.
← →
просто так (2008-10-20 10:20) [88]>>Затем, что ввели другую идеалогию размещения объекта, в куче.
в обжекте легко реализовать что размещение в куче, что в стеке тут он практичнее.
>>В любом объекте (от class) уже есть виртуальные методы.
в object`е они есть только когда это надо програмисту, тоже имхо практичнее
← →
oxffff © (2008-10-20 10:32) [89]
> просто так (20.10.08 10:20) [88]
Чем практичнее?
-Тем что нельзя сделать динамическое инстранцирование
-нельзя прикрутить интерфейсы к объекту
-нельзя прикрутить procedure of object.
Все это ограничение стекового размещения.
Или JAVA, .NET не по тому пути пошли?
← →
просто так (2008-10-20 12:04) [90]>>-Тем что нельзя сделать динамическое инстранцирование
можно
>>-нельзя прикрутить интерфейсы к объекту
это да
>>-нельзя прикрутить procedure of object.
можно, прекрасно работает
← →
oxffff © (2008-10-20 15:37) [91]
> просто так (20.10.08 12:04) [90]
> >>-Тем что нельзя сделать динамическое инстранцирование
А как ты собираешься делать динамическое создание на стеке?
Это возможно только для объектов кучи.
> можно
> >>-нельзя прикрутить интерфейсы к объекту
> это да
Следующее это то же самое. Проблема на том, что интерфейс должен существовать при выходе объекта из области видимости.
Это возможно только для объектов кучи.
> >>-нельзя прикрутить procedure of object.
> можно, прекрасно работает
Это возможно только для объектов кучи. Поскольку захватив метод объекта ты(это самое первое closure в delphi, еще до 2009) гарантировать время его жизни при выходе из scope.
Это возможно только для объектов кучи.
← →
просто так (2008-10-20 16:48) [92]>>oxffff
>>Это возможно только для объектов кучи.
тебе религия запрещает объект в куче создать?
← →
oxffff © (2008-10-20 17:21) [93]
> просто так (20.10.08 16:48) [92]
Я тебе пояснил преимущества новой объектной модели.
Мне то все понятно. :)
← →
просто так (2008-10-20 17:40) [94]отсутствие возможности создать класс статически естественно как недостаток не рассматривается)?
← →
oxffff © (2008-10-20 19:30) [95]
> просто так (20.10.08 17:40) [94]
Это ты о чем?
← →
GrayFace © (2008-10-20 23:12) [96]Не понятно, о чем тут спорить. Ни одного довода в пользу удирания object"ов ведь не было. Не понятно, чем они мешали CG.
← →
Vga © (2008-10-21 06:37) [97]
> Не понятно, чем они мешали CG.
Ничем не мешали, больше всего похоже что их случайно сломали.
Страницы: 1 2 3 вся ветка
Текущий архив: 2009.11.15;
Скачать: CL | DM;
Память: 0.64 MB
Время: 0.019 c