Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2014.08.17;
Скачать: [xml.tar.bz2];

Вниз

Вот говорят, что дельфи не умирает   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.83 MB
Время: 0.049 c
2-1380204050
Михалыч
2013-09-26 18:00
2014.08.17
Как изменить формат даты Виндовс?


4-1269426968
EgorovAlex
2010-03-24 13:36
2014.08.17
Как реализовать в программе, чтобы каждая вкладка была отдельным


15-1389174438
Novicer
2014-01-08 13:47
2014.08.17
Как установить Firebird вместе с прогой?


15-1390391993
Novicer
2014-01-22 15:59
2014.08.17
Как узнать дату создания Биоса в Восьмерке?


15-1390163402
Юрий
2014-01-20 00:30
2014.08.17
С днем рождения ! 20 января 2014 понедельник





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский