Текущий архив: 2014.08.17;
Скачать: CL | DM;
Вниз
Вот говорят, что дельфи не умирает Найти похожие ветки
← →
Sergey Masloff (2014-01-20 17:51) [160]Слава Пестов (20.01.14 17:47) [157]
>Фактор - 3 с
Рекламо детектед. Ты даже не знаешь что за проект но вот 3 с заявляешь уверенно ;-)
← →
vuk © (2014-01-20 17:54) [161]to DVM © (20.01.14 17:49) [158]:
> Да и че они весят то dfm те, тьфу. Картинки включенные в
> ресурсы меньше все равно не станут.
В том виде, в каком они есть, они только мешают, причем, очень сильно при использовании тех же фреймов.
Да, картинки в ресурсах отторжения не вызывают. :)
← →
имя (2014-01-20 17:55) [162]Удалено модератором
← →
XCoder (2014-01-20 18:07) [163]Как-то поставили задачу написать несколько небольших информационных приложений под iOS. Решили заюзать хваленый FMX. Стали писать - наловили кучу багов, инфы, как их обойти - никакой. В итоге выкинули весь этот FMX нафиг. Зря потраченные деньги.
← →
имя (2014-01-20 18:09) [164]Удалено модератором
← →
DevilDevil © (2014-01-20 18:16) [165]> Благодаря RTTI компилятор
не надо мне рассказывать про RTTI :)
я знаю немножко больше :)
← →
Jeer © (2014-01-20 18:23) [166]Программируйте на ABCPascal!
← →
Kerk © (2014-01-20 18:26) [167]
> DevilDevil © (20.01.14 18:16) [165]
Ну вот понесло... Я не сомневаюсь, что ты знаешь большего любого незнакомого тебе человека, которого ты случайно встретил в интернете. Ты вообще знаешь больше всех.
Компилятор никак не сможет определить факт вызова метода, если он вызван с помощью RTTI. Это просто факт вроде того, что сейчас январь. Я сам бывает в момент компиляции не знаю, какие методы мой код будет вызывать.
← →
имя (2014-01-20 18:27) [168]Удалено модератором
← →
DevilDevil © (2014-01-20 18:32) [169]> Kerk © (20.01.14 18:26) [167]
ты неправильно понял
я сказал конкретно про RTTI
← →
имя (2014-01-20 18:40) [170]Удалено модератором
← →
Kerk © (2014-01-20 18:44) [171]
> DevilDevil © (20.01.14 18:32) [169]
Я может быть к концу рабочего дня начинаю плохо понимать людей. Это бывает.
← →
Eraser © (2014-01-21 01:07) [172]
> XCoder (20.01.14 18:07) [163]
слабонервные ;-)
← →
jumping jack (2014-01-21 08:28) [173]> Компилятор никак не сможет определить факт вызова метода, если он вызван с помощью RTTI.
да, хотя теоретически компилятор мог бы обнаруживать полное отсутствие вызовов с помощью RTTI и для этих случаев линковать иначе - может быть, это DevilDevil имел в виду?
но, поскольку VCL завязан на загрузку свойств компонентов из DFM через RTTI и варианты без неё никто серьезно не рассматривал и не рассматривает, это опять же из серии маниловских мечтаний (однако, есть KOL - DevilDevil, как тебе он?)
← →
DevilDevil © (2014-01-21 16:40) [174]> Kerk © (20.01.14 18:26) [167]
> jumping jack (21.01.14 08:28) [173]
Если говорить о самых элементарных усовершенствованиях компилятора, то существенно уменьшить размер можно было бы, проработав всего 2 момента.
1) это конечно выслеживание, какие именно виртуальные и динамические вызовы производятся, а не линковать все
2) иная политика published и dfm. Пусть отныне свойства и функции, объявленные в published не будут заноситься в RTTI, но сохраняют роль отображаемых в Object Inspector. DFM-ки нужно компилировать в исполняемый код.
Таким образом размер приложений существенно сократится.
> однако, есть KOL - DevilDevil, как тебе он?
Отличный проект в нише созданных на энтузиазме.
Но там нет FMX. А для VCL-like приложений меня устраивают стандартные решения
← →
Kerk © (2014-01-21 16:46) [175]
> DevilDevil © (21.01.14 16:40) [174]
> это конечно выслеживание, какие именно виртуальные и динамические
> вызовы производятся, а не линковать все
Каким образом, как ты считаешь, это выслеживание возможно? Я сходу не вижу никаких способов. Кроме разве что директивы компилятора "выключи RTTI". Так она по-моему уже есть.
> 2) иная политика published и dfm. Пусть отныне свойства
> и функции, объявленные в published не будут заноситься в
> RTTI, но сохраняют роль отображаемых в Object Inspector.
> DFM-ки нужно компилировать в исполняемый код.
В RTTI заносятся не только published члены класса, в RTTI заносятся все члены класса уже года четыре как минимум.
← →
DevilDevil © (2014-01-21 16:51) [176]> Каким образом, как ты считаешь, это выслеживание возможно?
> Я сходу не вижу никаких способов. Кроме разве что директивы
> компилятора "выключи RTTI". Так она по-моему уже есть.
виртуальные и динамические методы не имеют ничего общего с RTTI
а отслеживать их вызов можно таким же образом как статические (что на данный момент делается не плохо)
посмотри ещё раз [154]
> В RTTI заносятся не только published члены класса, в RTTI
> заносятся все члены класса уже года четыре как минимум.
Вот поэтому мне и не нравится XE
Поэтому я пользую Delphi6 и Delphi7
← →
Object Inspector (2014-01-21 16:52) [177]> Пусть отныне свойства и функции, объявленные в published не будут
> заноситься в RTTI, но сохраняют роль отображаемых в Object Inspector.
А как их отобразить без RTTI?
← →
DVM © (2014-01-21 16:57) [178]
> DevilDevil © (21.01.14 16:40) [174]
> DFM-ки нужно компилировать в исполняемый код.
> Таким образом размер приложений существенно сократится.
Чего вам эти Dfm дались то? Ну вот что реально даст их преобразование в исполняемый код? Я точно могу казать, что размер не уменьшится от этого.
Всю дорогу были и будут ресурсы, в которых хранились диалоговые окна и никто их не компилил в исполняемый код, а пользовались функциями создания окна из ресурса. Dfm - просто свой вариант ресурса с описанием диалогового окна.
← →
Object Inspector Conscience (2014-01-21 16:58) [179]> А как их отобразить без RTTI?
Компоненты компилятся в отдельные bpl-и, код которых, если не сильно изворачиваться, не попадает в exe. В design-time bpl вполне можно published трактовать как RTTI. Но есть и другие способы.
← →
Kerk © (2014-01-21 17:01) [180]
> DevilDevil © (21.01.14 16:51) [176]
> виртуальные и динамические методы не имеют ничего общего с RTTI
> а отслеживать их вызов можно таким же образом как статические (что на данный момент делается не плохо)
> посмотри ещё раз [154]
Раз мы никак друг друга не можем понять, я потрудился сделать небольшой пример. Поставь себя на место компилятора и определи какие методы класса TSome вызываются, а какие - нет.program Project2;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils, System.Rtti;
type
TSome = class
procedure A; virtual;
procedure B; virtual;
procedure C; virtual;
end;
procedure TSome.A;
begin
WriteLn("A");
end;
procedure TSome.B;
begin
WriteLn("B");
end;
procedure TSome.C;
begin
WriteLn("C");
end;
procedure Test(const MethodName: string);
var
RttiContext: TRttiContext;
RttiType: TRttiType;
RttiMethod: TRttiMethod;
MyClass: TSome;
begin
MyClass := TSome.Create;
try
RttiContext := TRttiContext.Create;
RttiType := RttiContext.GetType(MyClass.ClassInfo);
RttiMethod := RttiType.GetMethod(MethodName);
if Assigned(RttiMethod) then
RttiMethod.Invoke(MyClass, [])
else
WriteLn("Method not found");
RttiContext.Free;
finally
MyClass.Free;
end;
end;
begin
try
Test(ParamStr(1));
ReadLn;
except
on E: Exception do
Writeln(E.ClassName, ": ", E.Message);
end;
end.
Проверялось в XE5.
← →
DevilDevil © (2014-01-21 17:02) [181]> Чего вам эти Dfm дались то? Ну вот что реально даст их преобразование
> в исполняемый код? Я точно могу казать, что размер не уменьшится
> от этого.
> Всю дорогу были и будут ресурсы, в которых хранились диалоговые
> окна и никто их не компилил в исполняемый код, а пользовались
> функциями создания окна из ресурса. Dfm - просто свой вариант
> ресурса с описанием диалогового окна.
DFM - это ресурс. Который можно открыть и отредактировать в редакторе ресурсов. Например список изменяемых свойств.
Такая концепция располагает к тому, что все published-свойства должны быть универсально изменяемы, а значит каждое из них линкуется. Если dfm преобразовывать в линкованный код, а published не заносить в RTTI - тогда сразу становится видно, какой код нужен, а какой линковать нет необходимости
← →
DevilDevil © (2014-01-21 17:04) [182]> Раз мы никак друг друга не можем понять, я потрудился сделать
> небольшой пример. Поставь себя на место компилятора и определи
> какие методы класса TSome вызываются, а какие - нет.
Твои рассуждения идут из соображения, что все методы класса должны попасть в RTTI
Мои рассуждения идут из соображения, что не имеет смысла тащить всё в RTTI и линковку. Это зло.
← →
Kerk © (2014-01-21 17:06) [183]
> DevilDevil © (21.01.14 17:04) [182]
Причем тут чьи-то соображения? Я дал простой код. Представь себя компилятором, назови неиспользуемые методы класса TSome и мы не будем включать их в линковку. Все ведь очень просто.
← →
DevilDevil © (2014-01-21 17:07) [184]> Kerk © (21.01.14 17:06) [183]
Я представил себя компилятором и увидел, что класс TSome вообще не содержит RTTI-методов.
← →
DevilDevil © (2014-01-21 17:10) [185]Да, ни A, ни B, ни C не вызывается - значит их не нужно прилинковывать
← →
Kerk © (2014-01-21 17:12) [186]
> DevilDevil © (21.01.14 17:07) [184]
>
> > Kerk © (21.01.14 17:06) [183]
>
> Я представил себя компилятором и увидел, что класс TSome
> вообще не содержит RTTI-методов.
Ну тогда ты не компилятор Delphi, ты какой-то другой компилятор. Потому что в Delphi все отлично работает и замечательно вызываются все три метода.
← →
Kerk © (2014-01-21 17:12) [187]Ты похоже предлагаешь отказаться от мощнейшего функционала, ради экономии жалких нескольких мегабайт на диске. Но то, что тебе это не нужно, совсем не означает, что это никому не нужно. К тому же если совсем приперло, то видимостью методов в RTTI можно управлять директивами компилятора.
← →
vuk © (2014-01-21 17:13) [188]to DVM © (21.01.14 16:57) [178]:
> Dfm - просто свой вариант ресурса с описанием диалогового окна.
Оно не совсем так. Ресурс диалогового окна не привязан к коду приложения и никак не влияет на другие ресурсы. А dfm - привязан и до кучи может влиять на другие dfm. Задница начинается, когда меняются часто используемые фреймы, особенно если они в свою очередь используются в других фреймах и т.д. Из-за минимального изменения в одном фрейме приходится зачастую доставать из VCS и править до десятка (иногда и больше) других модулей, где он засветился, как вложенный. Причем нормально правится это иной раз только залезанием в dfm руками и выпиливанием лишнего. Из-за этих проблем особо сложные фреймы приходится создавать динамически. Проблема обрисовалась с выходом Delphi 5. Это сколько версий назад? Больше десятка.
← →
DevilDevil © (2014-01-21 17:14) [189]> Ну тогда ты не компилятор Delphi, ты какой-то другой компилятор.
> Потому что в Delphi все отлично работает и замечательно
> вызываются все три метода.
Ты говоришь про Delphi сейчас. Delphi XE и иже с ними. Delphi которые мне НЕ НРАВЯТСЯ. А в тех Delphi, которые мне нравились - в них методы A, B и C в RTTI не попадали. Я об этом и говорю
← →
Ega23 © (2014-01-21 17:17) [190]Удалено модератором
← →
DevilDevil © (2014-01-21 17:19) [191]> Kerk © (21.01.14 17:12) [187]
> Ты похоже предлагаешь отказаться от мощнейшего функционала,
> ради экономии жалких нескольких мегабайт на диске. Но то,
> что тебе это не нужно, совсем не означает, что это никому
> не нужно. К тому же если совсем приперло, то видимостью
> методов в RTTI можно управлять директивами компилятора.
И да и нет
Я считаю что подобный функционал имеет место быть но ДАЛЕКО не в каждом классе. Я считаю программист сам в состоянии определить, какие именно методы и свойства должны попадать в RTTI.
И дело не в жалких нескольких мегабайтах. Дело в бесценном времени программиста и пользователя, каждый божий раз затрачиваемых на компиляцию и загрузку никогда не использующихся мегабайтов
← →
DevilDevil © (2014-01-21 17:20) [192]Удалено модератором
← →
Ega23 © (2014-01-21 17:22) [193]
> на что предлагаешь поспорить ?
Что в D7 можно будет вызвать методы A, B и C классаtype
TSome = class
procedure A; virtual;
procedure B; virtual;
procedure C; virtual;
end;
через RTTI?
← →
Kerk © (2014-01-21 17:24) [194]
> DevilDevil © (21.01.14 17:19) [191]
> И дело не в жалких нескольких мегабайтах. Дело в бесценном
> времени программиста и пользователя, каждый божий раз затрачиваемых
> на компиляцию и загрузку никогда не использующихся мегабайтов
Это на какую-то религию похоже. Тебе нравится думать об экономии каких-то долей микросекунды на каждом запуске. А я лучше буду думать о том, что в D7 такую штуку как мой DelphiSpec в полной мере сделать в принципе невозможно. Причем, как ты понимаешь, DelphiSpec - это не единственное для чего человечество додумалось использовать новый RTTI. Так что даже не знаю что ценней... экономия долей микросекунд или новый мощный функционал экономящий силы и время.
← →
DevilDevil © (2014-01-21 17:25) [195]> через RTTI?
только если поставить {$M+}
в исходном виде - нет
а если поставишь public - то не пропадут точно
но прилинкуются
ибо виртуальные
← →
DevilDevil © (2014-01-21 17:31) [196]> Это на какую-то религию похоже. Тебе нравится думать об
> экономии каких-то долей микросекунды на каждом запуске.
> А я лучше буду думать о том, что в D7 такую штуку как мой
> DelphiSpec в полной мере сделать в принципе невозможно.
> Причем, как ты понимаешь, DelphiSpec - это не единственное
> для чего человечество додумалось использовать новый RTTI.
> Так что даже не знаю что ценней... экономия долей микросекунд
> или новый мощный функционал экономящий силы и время.
Согласись было бы неправильно, если бы я сказал, что DelphiSpec говно потому, что его нельзя использовать совместно с D7?
Ты же сейчас поступаешь примерно таким образом. Мессейдж выглядит как "D7 говно потому, что его нельзя использовать с DelphiSpec; и плевать, что проект компилится значительно дольше, а экзешники весят много мегабайт".
Я думаю, рассуждая о том, что правильно - следует искать оптимальное решение, которое покрывало бы задачи быстрой компактной компиляции и использование такой мощной вещи как DelphiSpec.
В качестве оптимального решения я вижу опция компилятора "забубенить все методы в RTTI", которая по умолчанию была бы выключена. А включать её нужно было бы перед тестированием на DelphiSpec.
← →
Kerk © (2014-01-21 17:41) [197]
> DevilDevil © (21.01.14 17:31) [196]
Я просто считаю, что лучше больше возможностей, чем меньше :)
> В качестве оптимального решения я вижу опция компилятора
> "забубенить все методы в RTTI", которая по умолчанию была
> бы выключена.
Так есть же много директив компилятора, которые позволяют управлять RTTI. Разве что они по умолчанию выключены. Так что тебе мешает их включить?
Пишешь {$WEAKLINKRTTI ON} и компилятор смело выкидывает неиспользуемые прямо в коде методы, забывая, что есть еще и RTTI (но уж не знаю что там будет с нелюбимыми тобой виртуальными функциями:)
Пишешь {$RTTI EXPLICIT METHODS([vcPublished]) PROPERTIES([vcPublished])} и в RTTI попадают только published методы и свойства соответствующего класса.
Проблема только в том, что оно не по умолчанию?
← →
DevilDevil © (2014-01-21 17:48) [198]> Я просто считаю, что лучше больше возможностей, чем меньше :)
Я тоже за "больше возможностей"
Просто в данном случае мы говорим о возможностях, которые во-первых, нужны далеко не всегда, во-вторых, отжирают немеряно времени компиляции. Ну и мегабайтов на диске тоже. Почему ты игнорируешь аргумент с временем компиляции - не понятно. Лично меня этот момент просто выбешивает
> Так есть же много директив компилятора, которые позволяют
> управлять RTTI. Разве что они по умолчанию выключены. Так
> что тебе мешает их включить?
А задаются они только в тексте или в опциях проекта можно выставить ?
Если можно выставить - хорошо
Но это не решает проблем, которые тянутся наследнием с древнейших времён. Подходов, о которых я уже говорил
← →
Ega23 © (2014-01-21 18:41) [199]
> только если поставить {$M+}
> в исходном виде - нет
И в исходном виде - да, если {$M+} в настройках включен.
Я это к тому, что всё-таки можно.
> отжирают немеряно времени компиляции
Для Delphi такое выражение просто смешно.
← →
DevilDevil © (2014-01-21 19:38) [200]> И в исходном виде - да, если {$M+} в настройках включен.
> Я это к тому, что всё-таки можно.
напомни название опции, поищу
> Для Delphi такое выражение просто смешно.
ну для того кто не программирует - может и смешно
я постоянно перекомпилирую, дорабатываю, отлаживаю
Страницы: 1 2 3 4 5 6 7 8 9
10 вся ветка
Текущий архив: 2014.08.17;
Скачать: CL | DM;
Память: 0.83 MB
Время: 0.048 c