Форум: "Прочее";
Текущий архив: 2014.06.22;
Скачать: [xml.tar.bz2];
ВнизRAD Studio XE5 Найти похожие ветки
← →
vuk © (2013-09-13 13:36) [80]to DVM © (12.09.13 23:56) [57]:
> ICS и Synapse на мой взгляд сильно уступают Indy. Даже по
> качеству кода, не говоря уж о возможностях. Надо развивать
> инди дальше.
Я в свое время задолбался с каждой новой версией индюка переписывать код и все завязанное на него переделал на ICS. Больше проблем нет. Ну и, до кучи, некоторые штуки (сейчас уже конкретно не помню, но что-то связанное с почтой и кодировками) в индюке решались только правкой генокода. С каждой версией чуть ли не в разных местах.
← →
Pit (2013-09-13 13:41) [81]
> зачем этот RTL внутри если он не используется, ну не использую
> я вызовы объектов по имени и прочую хрень !?
ну дельфи компилятор включает только используемые методы (если exe а не DLL / BPL). Думаю, тут вряд ли по другому.
Просто в дельфи основной жор из-за инициализационной секции в Forms, которая вызывается всегда, а за собой по цепочке "тянет" очень много кода.
← →
vuk © (2013-09-13 13:56) [82]to Pit (13.09.13 13:41) [81]:
> Просто в дельфи основной жор из-за инициализационной секции
> в Forms, которая вызывается всегда, а за собой по цепочке
> "тянет" очень много кода.
Основной жор в Delphi всегда был из-за того, что весь код, завязанный на published включается всегда полностью. Причина проста - никогда неизвестно, что будет прочитано из ресурсов.
← →
DVM © (2013-09-13 14:13) [83]
> vuk © (13.09.13 13:36) [80]
> Я в свое время задолбался с каждой новой версией индюка
> переписывать код и все завязанное на него переделал на ICS.
> Больше проблем нет. Ну и, до кучи, некоторые штуки (сейчас
> уже конкретно не помню, но что-то связанное с почтой и кодировками)
> в индюке решались только правкой генокода. С каждой версией
> чуть ли не в разных местах.
Ошибки это другое, они везде есть. А вот переписывание кода проблема.
Правда вроде все устаканилось. Это все происходило потому, что автор пытался улучшать дизайн библиотеки жертвой совместимости. Тут ничего не поделаешь. И сейчас этот самый дизайн во многом имхо более гибкий, чем у других. Это мое субъективное мнение. Использую все три набора компонент.
← →
Pit (2013-09-13 14:21) [84]
> Основной жор в Delphi всегда был из-за того, что весь код,
> завязанный на published включается всегда полностью. Причина
> проста - никогда неизвестно, что будет прочитано из ресурсов.
что-то новенькое для меня... А можно чуть поподробнее? Ну я понимаю, есть published свойство. Но если его никто не использует в EXE, то причем тут ресурсы?
P.S. Вообще, ты уверен? По-моему, я в свое время проводил эксперимент, в пустое дельфи приложение подключал Forms - размер соответственно увеличивался до 250-300 Кб, потом я закоментил секцию initialize в Forms (при этом из uses не исключал) - и размер упал до "обычного" в десяток Кб... могу путать за прошествием лет.
← →
Kerk © (2013-09-13 14:26) [85]Компилятор не может знать какое published-свойство используется, а какое нет. Поэтому он включает в EXE-шник все подряд.
← →
vuk © (2013-09-13 14:35) [86]to Pit (13.09.13 14:21) [84]:
> P.S. Вообще, ты уверен? По-моему, я в свое время проводил
> эксперимент, в пустое дельфи приложение подключал Forms
> - размер соответственно увеличивался до 250-300 Кб, потом
> я закоментил секцию initialize в Forms (при этом из uses
> не исключал) - и размер упал до "обычного" в десяток Кб.
> .. могу путать за прошествием лет.
Вообще-то да. Как только класс упоминается в коде, все, что касается его bublished секций включается в .exe Под упоминанием в коде имееюся в виду такие вещи, как создание экземпляра, регистрация класса запрос RTTI и т.д., одно только упоминание uses модуля не ведет к включению кода.
← →
robt5 (2013-09-13 14:39) [87]
> Kerk © (13.09.13 14:26) [85]
это как это он не знает?
даже в форме в ресурсах сохраняются только отличные от дефолта свойства
если нет в коде значит не нужен
← →
vuk © (2013-09-13 14:41) [88]to robt5 (13.09.13 14:39) [87]:
> даже в форме в ресурсах сохраняются только отличные от дефолта
> свойства
Компилятор не анализирует dfm при компиляции. Сюрпрайз? :)
← →
Kerk © (2013-09-13 14:44) [89]Про RTTI не нужно забывать. К published-свойству можно обратиться совершенно неявным способом. Так, чтоб никто не догадался, не только компилятор :)
← →
robt5 (2013-09-13 14:46) [90]но это же меготупо я протестую !
← →
Pit (2013-09-13 14:49) [91]
> Компилятор не может знать какое published-свойство используется,
> а какое нет
почему? чем это отличается от контроля private свойств? чем отличается от public? Ведь published это всего лишь public, который виден в инспекторе объектов? Какие-то еще принципиальные отличия?
> Под упоминанием в коде имееюся в виду такие вещи, как создание
> экземпляра
а как он определяет создание класса?
> одно только упоминание uses модуля не ведет к включению
> кода.
ага... это многое объясняет. То есть, действительно если убить initialization из Forms, то включение этого модуля не приведет к увеличению объема EXE. Просто в результате initialization тянется не только используемый код, но и весь использующий pulished?
Но я все равно не понял зачем включать код от published
← →
vuk © (2013-09-13 14:52) [92]to robt5 (13.09.13 14:46) [90]
> но это же меготупо я протестую !
Это не тупо. Это особенности компонентной архитектуры.
← →
Pit (2013-09-13 14:54) [93]
> Компилятор не анализирует dfm при компиляции. Сюрпрайз?
> :)
хм, ты имеешь в виду, что в dfm может быть присвоено то свойство, которое не используется в коде?
Но... какой тогда смысл присваивать такое свойство? Оно ж все равно не используется.
Пусть в DFM есть указание, а такое свойство убрано из-за оптимизации, ну и пусть тогда пропустит эту операцию.
← →
Pit (2013-09-13 14:57) [94]кстати, насчет RTTI. Я слышал, что в новых версиях дельфи есть возможность дотянуться и до public / protected / private полей. Означает ли это, что по той же логике и код относящийся к таким полям тоже всегда включается?!
← →
vuk © (2013-09-13 14:57) [95]Pit (13.09.13 14:49) [91]
> почему?
Потому, что изменениями свойство может рулить не только компилятор, но и пользовательский код. Причем, свойства могут задаваться неявно, например, из какого-то внешнего источника. Например, у меня есть компоненты, предназначенные для сохранения свойств других компонентов. Свойства задаются списком. Причем, вплоть до того, что список можно подгрузить хоть из текстового файла.
> а как он определяет создание класса?
Выхов конструктора - не? :)
← →
robt5 (2013-09-13 14:59) [96]
> Это особенности компонентной архитектуры.
значит архитектура не верна, прежде чем возражать вспомни про КОЛ
← →
Pit (2013-09-13 15:01) [97]
> Потому, что изменениями свойство может рулить не только
> компилятор, но и пользовательский код
ты про RTTI. Это я понимаю. Я не понимаю, почему все равно нужно включать код этих свойств? Ну да, в соответствии с RTTI получается, что не будет у компонент этих свойств. Ну и что? Если в коде они все равно не используются?
Впрочем, я думаю ты имеешь в виду срабатывание гетеров, сетеров... так то да..
← →
Kerk © (2013-09-13 15:03) [98]
> Pit (13.09.13 15:01) [97]
>
> > Потому, что изменениями свойство может рулить не только
> > компилятор, но и пользовательский код
>
> ты про RTTI. Это я понимаю. Я не понимаю, почему все равно
> нужно включать код этих свойств? Ну да, в соответствии с
> RTTI получается, что не будет у компонент этих свойств.
> Ну и что? Если в коде они все равно не используются?
Еще раз. Компилятор не знает, используются ли они в коде.
← →
vuk © (2013-09-13 15:04) [99]to robt5 (13.09.13 14:59) [96]:
> прежде чем возражать вспомни про КОЛ
KOL - не компонентная библиотека.
← →
Pit (2013-09-13 15:05) [100]
> Выхов конструктора - не? :)
ну я не знаю. Я ж тебя спросил, может и конструктора. Интересно что тогда имеется в виду под конструктором.
Ведь конструкторы в дельфи наследуются. А значит в "type of class" я могу передать наследника. И хотя вызов конструктора этого наследника нигде не прописан явно, а тем не менее класс будет создан. Как же с его published свойствами? )
← →
Ega23 © (2013-09-13 15:07) [101]
> Ведь конструкторы в дельфи наследуются.
Интересная постановка. Переведи.
← →
Pit (2013-09-13 15:09) [102]
> Интересная постановка. Переведи.
а что тут неясно? Конструкторы могут наследоваться, а могут не наследоваться.
Если наследуются - то потомок по умолчанию получает все конструкторы предка. Так обстоит дело в дельфи.
← →
vuk © (2013-09-13 15:10) [103]to Pit (13.09.13 15:05) [100]:
> Интересно что тогда имеется в виду под конструктором.
Как ни странно, то, что объявлено, как конструктор.
> А значит в "type of class" я могу передать наследника. И
> хотя вызов конструктора этого наследника нигде не прописан
> явно, а тем не менее класс будет создан.
А вот тут зависит от того, какой конструктор. Если он виртуальный, то все вызовется правильно (собственно, конструкторы у компонентов виртуальные именно по этой причине). Если нет - будет некий облом. :)
← →
vuk © (2013-09-13 15:18) [104]Я добавлю еще, что такие вещи, как регистрация класса, заставляют компилятор включать весь его код в приложение полностью, а не только то, что попадает в published. Причина та же - неизвестно, кто, когда и что от такого класса может вызвать.
← →
Pit (2013-09-13 15:18) [105]
> Если он виртуальный, то все вызовется правильно
а вот почему? Давай для конкретики:TB = class(TA)
конструктор TB нигде напрямую не вызывается. А значит по идее код этого класса не должен включаться в EXE. А как же тогда все будет работать, если через "type of class" вызовут виртуальный конструктор, отнаследованный от TA? По идее должен вызваться override конструктор от TB, но ведь код класса TB не включен в EXE?
← →
Pit (2013-09-13 15:19) [106]
> Я добавлю еще, что такие вещи, как регистрация класса, заставляют
> компилятор включать весь его код в приложение полностью
Точно? А зачем включать неиспользуемые private методы?
← →
vuk © (2013-09-13 15:26) [107]to Pit (13.09.13 15:18) [105]:
>
> конструктор TB нигде напрямую не вызывается. А значит по
> идее код этого класса не должен включаться в EXE. А как
> же тогда все будет работать, если через "type of class"
> вызовут виртуальный конструктор, отнаследованный от TA?
Если в коде упомянут потомок, в exe будет включено все, что может понадобиться для его функционирования. В том числе и нужные конструкторы. Думается, что полное включение кода будет уже тогда, когда компилятор в потенциально работающем коде найдет передачу класса, как параметра.
to Pit (13.09.13 15:19) [106]:
> А зачем включать неиспользуемые private методы?
Неиспользуемые методы, естественно, включены не будут. Только код, который потенциально может работать.
← →
Германн © (2013-09-13 15:26) [108]
> А зачем включать неиспользуемые private методы?
А что такое "неиспользуемые методы"? Дай точное определение.
← →
Pit (2013-09-13 15:30) [109]
> полное включение кода будет уже тогда, когда компилятор
> в потенциально работающем коде найдет передачу класса, как
> параметра.
в смысле?
я же могу написать:MyVar := TB;
МояФабрикаКласса(MyVar)
но ведь при этом сам MyVar будет типа:TclassA = class of TA;
MyVar: TclassA;
И в связи с этим непонятна твоя фраза:
> Если он виртуальный, то все вызовется правильно (собственно,
> конструкторы у компонентов виртуальные именно по этой причине).
> Если нет - будет некий облом. :)
в чем облом?
← →
Pit (2013-09-13 15:31) [110]
> А что такое "неиспользуемые методы"? Дай точное определение.
методы, которые не вызываются в коде.
Ты легко можешь увидеть предупреждение компилятора, когда объявишь класс с private методом, который не вызывается в этом классе.
← →
vuk © (2013-09-13 15:58) [111]
> в чем облом?
Код для изучения облома:
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils, Classes;
type
TFirstClass = class of TFirst;
TFirst = class
constructor VirtualCreate; virtual;
constructor Create;
end;
TSecond = class(TFirst)
constructor VirtualCreate; override;
constructor Create;
end;
{ TFirstClass }
constructor TFirst.Create;
begin
inherited;
writeln(ClassName + ": TFirst.Create");
end;
constructor TFirst.VirtualCreate;
begin
inherited;
writeln(ClassName + ": TFirst.VirtualCreate");
end;
procedure TestProc1(C: TFirstClass);
var
instance: TFirst;
begin
instance := C.Create;
instance.Free;
end;
procedure TestProc2(C: TFirstClass);
var
instance: TFirst;
begin
instance := C.VirtualCreate;
instance.Free;
end;
{ TSecond }
constructor TSecond.Create;
begin
writeln(ClassName + ": TSecond.Create");
end;
constructor TSecond.VirtualCreate;
begin
inherited;
writeln(ClassName + ": TSecond.VirtualCreate");
end;
begin
try
{ TODO -oUser -cConsole Main : Insert code here }
TestProc1(TSecond);
writeln("-------------------");
TestProc2(TSecond);
except
on E: Exception do
Writeln(E.ClassName, ": ", E.Message);
end;
readln;
end.
← →
robt5 (2013-09-13 18:02) [112]
> vuk © (13.09.13 15:04) [99]
что значит не компонентная ? что есть компонент?
← →
vuk © (2013-09-13 18:19) [113]to robt5 (13.09.13 18:02) [112]:
> что значит не компонентная ? что есть компонент?
В терминах Delphi компонент - класс, позволяющий управлять собственным поведением через RTTI.
← →
robt5 (2013-09-13 18:51) [114]
> класс, позволяющий управлять собственным поведением через RTTI
что ему это дает уникального, без чего нельзя прожить ? (да я реально нуб)
← →
vuk © (2013-09-13 20:04) [115]Странный вопрос. Вся среда программирования в Delphi построена вокруг того, что дает RTTI.
← →
robt5 (2013-09-13 20:10) [116]
> Странный вопрос. Вся среда программирования в Delphi построена
> вокруг того, что дает RTTI
я хз что она там делает вокруг, но почему-то КОЛ на выходе это делает лучше ВКЛ
← →
vuk © (2013-09-13 21:21) [117]KOL делает не лучше. KOL делает иначе. Ну так библиотека и предназначена для другого - для применений, где таки нужен легковесный интерфейс (я, вот честно, у себя таких задач не припомню) ну и для не в меру озабоченных размером исполняемого модуля.
← →
ProgRAMmer Dimonych © (2013-09-13 22:18) [118]Коллеги, кто-нибудь может подсказать, как там с минимальными системными требованиями у XE5? Особенно касательно версии Windows. И вообще общего быстродействия. Пошустрее, чем 2010 стала или нет? О скорости Delphi 7 уже и не мечтаю.
← →
Cobalt © (2013-09-13 22:39) [119]Rouse_ © (12.09.13 22:49) [53]
>>На VCL забили (эффективный менеджмент (шоб их приподняло) свою роль сделал).
Саш, а что ты хочешь от VCL?
Какого развития? В какую сторону?
← →
Kerk © (2013-09-13 23:06) [120]Есть достоверные слухи, что в будущем собираются разделить VCL- и FireMonkey-версии. Если это правда, то VCL будут развивать, иначе такую версию просто никто не купит.
Страницы: 1 2 3 4 5 вся ветка
Форум: "Прочее";
Текущий архив: 2014.06.22;
Скачать: [xml.tar.bz2];
Память: 0.69 MB
Время: 0.014 c