Вниз
Скачать: CL | DM;

Очистка USES   Найти похожие ветки 

← →
Stanislav ©   (2006-07-27 11:08) [0]

Можно ли каким-то образом автоматически из всех модулей проекта вычистить блок USES, т.е. убрать из него те модули которые нигде не используются


← →
KilkennyCat ©   (2006-07-27 11:17) [1]

Просто удалить. Нужные сами воскреснут, большинство.


← →
Stanislav ©   (2006-07-27 11:47) [2]

В принципе можно, но хотелось бы автоматом.
Зачем вообще делфи их компилит в EXE если они не используются?


← →
Сергей М. ©   (2006-07-27 11:52) [3]


> Зачем вообще делфи их компилит в EXE если они не используются?


Затем и компилит, что в ходе "компиляции" как раз и выясняет, надо оно или не надо для обеспечения работоспособности целевого кода.


← →
PSPF2003 ©   (2006-07-27 11:52) [4]

Угумс.. Был тут один хотел чтоб ему Делфи по рисунку программу сделал…


← →
Stanislav ©   (2006-07-27 11:57) [5]

Сергей М. ©   (27.07.06 11:52) [3]

Так если ненадо, зачем тогда включает в EXE?


← →
Сергей М. ©   (2006-07-27 12:01) [6]


> если ненадо, зачем тогда включает в EXE?


Если включает, значит надо.
А если не понимаешь, что из включаемого есть действительно "надо", так и спроси)


← →
Stanislav ©   (2006-07-27 12:10) [7]

Сергей М. ©   (27.07.06 12:01) [6]

Не согласен!
Берем "Тяжелый" компонент, например cxGrid, кладем на форму, компилируем, смотрим объем exe - 2,08 МБ.
Удаляем CxGrid, т.е. он нигде не используется, а в uses остаются прописанные модули, компилируем, смотрим объем exe - 2,07 МБ.
Оьъем уменьшился только на ресурс занимаемый экземпляром cxGrid"a
Вывод Delphi включила не используемый в проекте класс TcxGrid


← →
Сергей М. ©   (2006-07-27 12:14) [8]


> Stanislav ©   (27.07.06 12:10) [7]


Мало что еще делает юнит, в котором определен/реализован класс TcxGrid !
Среда не обязана отслеживать хитрозадую (не очевидную) логику юнитов, потому и не удаляет юнит из списка.


← →
Плохиш ©   (2006-07-27 12:57) [9]


> Stanislav ©   (27.07.06 12:10) [7]

Модуль телепатор в делфи ещё не встроили, поэтому она совершенно не знает нужны суперкрутомупрогеру все модули, которые он соизволил включить в uses или нет. К примеру, если ты снимаешь колесо у велика, то у тебя вилка сама отваливается? Она же не нужна уже, колеса-то нет.


← →
PSPF2003 ©   (2006-07-27 13:04) [10]


> Плохиш ©

Прикольное сравнение :)


← →
Stanislav ©   (2006-07-27 13:26) [11]

Дело в том что велик не автоматизированная система.
А проанализировать что нужно что не нужно вполне реально.


← →
@!!ex ©   (2006-07-27 13:32) [12]

Stanislav ©
ну вот если тебе реально, то и напиши анализатор, который будет это делать.
Делов то.
Или опять логика: Да вот мне нужно.... Да это вообще то плево делаеться... Но мне самому неохото.... Может компонент какой есть?


← →
KilkennyCat ©   (2006-07-27 13:32) [13]

> [11] Stanislav ©   (27.07.06 13:26)

> А проанализировать что нужно что не нужно вполне реально.


Возможно, именно поэтому программы пока еще пишут люди, а?

Указанный пример с TcxGrid не имеет никакого отношения к Делфи, это просто человеческий фактор. См. [9]


← →
Stanislav ©   (2006-07-27 13:41) [14]

@!!ex ©   (27.07.06 13:32) [12]
Возможно напишу, но по логике уже должен быть.


← →
@!!ex ©   (2006-07-27 13:45) [15]

>>Возможно напишу, но по логике уже должен быть.

По логике уже должны быть парящие автомобили на воде в качестве горючего.

Если серьезно, то анализатор довольно объемный и медленный получиться, но не сложный.....
Хотя некоторые вещи я бы сейчас не рискнул утверждать, что знаю как сделать.


← →
KilkennyCat ©   (2006-07-27 14:13) [16]

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


← →
KilkennyCat ©   (2006-07-27 14:14) [17]

> По логике уже должны быть парящие автомобили на воде в качестве
> горючего.


Забавно можно прочитать: автомобили, которые парят на воде. Используются в качестве горючего, причем именно паря на воде :))


← →
Stanislav ©   (2006-07-27 14:22) [18]

KilkennyCat ©   (27.07.06 14:13) [16]

Правильно из USES удалять и не нужно, но и ненужно включать в exe


← →
jack128 ©   (2006-07-27 14:30) [19]

Stanislav ©   (27.07.06 13:41) [14]
Возможно напишу, но по логике уже должен быть.

На искуственный интелект замахивемся? Ну-ну..  

PS  нужно ли удалять модуль XPMan из списка uses  ??


← →
KilkennyCat ©   (2006-07-27 14:31) [20]

а если все-таки нужно? может, я там внутре что-то перекрыл генофондное?

Вот Вам сейчас нужна кнопка, Вы ее кинули на панель. А потом стала не нужна, Вы даже нигде ее не упомянули, не одно событие ее не обработали... Ее тоже надо удалить автоматом? А мож она для красоты?

На мой взгляд, лучше больше уделить внимания разработке проекта, дабы не возникало нужды в таком анализаторе. Ибо, раз требуется автоматизация такого, значит во всех проектах так плохо...


← →
Stanislav ©   (2006-07-27 14:35) [21]

Кнопка прописывается в класс формы и XPMan, тоже.
Проекты не мои.


← →
Ketmar ©   (2006-07-27 14:35) [22]

в общем случае, как уже написали, задача автоматически нерешаема.

интересно, как анализатор будет вести себя, например, с моим модулем conDriver2U, в котором нет ни одного "публичного" объявления? выкинет? а по рогам за такую самодеятельность? у меня в initialization делается всё, что надо.

или оставлять все модули, где непустые секции инициализации/завершения? так тогда что выкидывать-то, если у очень многих модулей они непустые? ну-ну, пишите...


← →
@!!ex ©   (2006-07-27 14:53) [23]

Кнопка прописывается в класс формы и XPMan, тоже.
XPMan не может прописаться в форме... У меня и формы то нету.....
Это тодже анализировать? :)
Действительно ИИ получаеться.

KilkennyCat
Ну да... Запятую не поставил. Бывает.


← →
Игорь Шевченко ©   (2006-07-27 14:59) [24]

http://peganza.com/ICARUS.ZIP


← →
Stanislav ©   (2006-07-27 15:49) [25]

@!!ex ©   (27.07.06 14:53) [23]
Если нету формы зачем "для красоты" кнопки?
И XPMAN?

Еще ни от кого не услышал нормального объяснения почему Borland так сделали, хотя почему то так сделали.
Ведь компания Borland не глупая?

А мне вот интересно почему?

Я думаю что если нельзя найти нормального объяснения зачем вообще умничать?


← →
@!!ex ©   (2006-07-27 15:55) [26]

>>Если нету формы зачем "для красоты" кнопки?
И XPMAN?

Формы нету. Зато есть WinAPI Window. и WinAPI Button. И т.д...

>>Еще ни от кого не услышал нормального объяснения почему Borland так сделали, хотя почему то так сделали.
Ведь компания Borland не глупая?

А мне вот интересно почему?

Я думаю что если нельзя найти нормального объяснения зачем вообще умничать?

Нормального объяснения чему? Что не сделали анализатора, который убирает ненужные юниты? Да как определить то, нужные юниты или нет?


← →
Сергей М. ©   (2006-07-27 16:02) [27]


> как определить то, нужные юниты или нет?


Примерно так же просто, как столь же просто определить, является ли некий код вредоносным или не является (вирус или не вирус ?)


← →
@!!ex ©   (2006-07-27 16:05) [28]

Сергей М. ©

Практически халява.... И почему еще никто не сделал?.....


← →
Stanislav ©   (2006-07-27 16:07) [29]

@!!ex ©   (27.07.06 15:55) [26]
Я говорю уже не за USES, хотя можно это анализировать по желанию.

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


← →
Сергей М. ©   (2006-07-27 16:08) [30]


> @!!ex ©   (27.07.06 16:05) [28]


> Практически халява


Не позорься.


← →
Stanislav ©   (2006-07-27 16:08) [31]

Игорь Шевченко ©   (27.07.06 14:59) [24]
Спасибо!
Все таки есть такая программа.


← →
@!!ex ©   (2006-07-27 16:09) [32]

Stanislav ©

А ктож его знает, есть ссылки или нет?

Не забывай, что к функциям можно обращаться по адресу памяти.


← →
Сергей М. ©   (2006-07-27 16:10) [33]


> В итоге получается EXE-шник, в котором часть кода никогда
> не заработает


А другая часть обязана сработать. Например, код в секции initialization. Поскольку он имеет место там быть.
И что прикажешь компилятору делать в этом случае ?


← →
@!!ex ©   (2006-07-27 16:10) [34]

Сергей М. ©   (27.07.06 16:08) [30]
Не позорься.

Мне уже не страшно.


← →
Stanislav ©   (2006-07-27 16:18) [35]

Сергей М. ©   (27.07.06 16:10) [33]
Initialization эта секция в еxe-файле выполняется самая первая если по логике программы она коданибудь выполнится значит выполнится, а если никогда, значит она там не нужна, и не стоит ее включать в EXE.


← →
Сергей М. ©   (2006-07-27 16:23) [36]


> Initialization эта секция в еxe-файле


Чавой-то ?

В каком-таком еще "еxe-файле" ?

Речь идет о Делфи-проекте и юнитах, которые могу содержать, амогут и не содержать секции initialization/finalization.


← →
Stanislav ©   (2006-07-27 16:27) [37]

Сергей М. ©   (27.07.06 16:23) [36]
см Stanislav ©   (27.07.06 16:07) [29]


← →
Сергей М. ©   (2006-07-27 16:30) [38]


> Stanislav ©   (27.07.06 16:27) [37]


Ну и почему ты считаешь, что Делфи обязана исключить из процесса компиляции юнит, фигурирующий в USES и имеющий заведомо непустую секцию initialization или finalization ?


← →
Stanislav ©   (2006-07-27 16:36) [39]

Я не считаю, где я написал что его нужно исключить?


← →
Сергей М. ©   (2006-07-27 16:43) [40]


> где я написал что его нужно исключить?


В [7], например.


← →
Stanislav ©   (2006-07-27 16:52) [41]

Сергей М. ©   (27.07.06 16:43) [40]
???
Я по этому поводу уже писал. см [29]
Можно элементарно спрашивать "нужен ли вам модуль, в котором есть Initialization ".
Сейчас разговор идет о exe.


← →
Сергей М. ©   (2006-07-27 16:56) [42]


> Stanislav ©   (27.07.06 16:52) [41]


> Можно элементарно спрашивать "нужен ли вам модуль, в котором
> есть Initialization ".


Можно много еще чего спрашивать.
То что не спрошено самим Борландом, то ты можешь сам спросить - на то в IDE предусмотрена поддержка экспертов.


> разговор идет о exe


В ЕХЕ нет никаких секций initialization.
То что компилятор счел необходимым включить в результирующий код, то и будет присутствовать в ЕХЕ.


← →
Ketmar ©   (2006-07-27 16:59) [43]

вот инетерсно-то... особенно интересно (насчёт выкидывания кода), как определить, какие именно виртуальные методы выкинуть. и как быть, например, с кодоизвратами в VCL в таком случае?
я уж молчу о том, что выкидывание виртуальных методов напрочь несовместимо с пакетами...


← →
Сергей М. ©   (2006-07-27 16:59) [44]


> Stanislav


Странно, что тебя не удивляет обязательное присутствие в ЕХЕ кода модуля System - в ран-тайм используется далеко не все, что имеется в этом юните.


← →
Stanislav ©   (2006-07-27 17:00) [45]

Сергей М. ©   (27.07.06 16:56) [42]
>>В ЕХЕ нет никаких секций initialization.
А я тебе прочто. Ты же сам спросил про то что было в 7 посте, вот я и ответил, а сейчас речь идет о EXE  и вопрос такой:
в EXE-шник включается часть кода, которая по логике программы никогда не выполнится, зачем ее туда включать, и там уже без разницы  Initialization, finalization и т.д.


← →
Сергей М. ©   (2006-07-27 17:09) [46]


> Stanislav ©   (27.07.06 17:00) [45]



> в EXE-шник включается часть кода, которая по логике программы
> никогда не выполнится


Ошибаешься.
Есть некий юнит, указанный в USES, в котором описан/реализован некий класс
В этом юните есть секция инициализации, в которой этот класс регистрируется.
При этом ни в одном другом юните того же проекта нет ни малейших намеков на обращение к этому классу.
Результат - код юнита в минимально необходимом объеме будет фигурировать в результирующем исп.модуле.


← →
Сергей М. ©   (2006-07-27 17:17) [47]


> Stanislav


Тьфу ты, строго наоборот - не ошибаешься, это действительно так.
Пример ситуации я привел.


← →
TUser ©   (2006-07-27 18:01) [48]

Нельзя этого делать, подключенные модули могут что-то делать "неявно" - в секциях initialization и finalization. Если просто удалить модули из которы ничего не вызывается - будут глюки.


← →
atruhin ©   (2006-07-27 19:20) [49]

> Stanislav ©
Вот тебе пример из реального проекта.
Модуль
.....
initialization
 RegisterClass(TfrmObjectEditor);
end.

На класс TfrmObjectEditor в программе нет ни одной ссылки, но из БД считывается название редактора для данного класса и вызывается:
var
 FormClass : TPersistentClass;
 WinClass : TfrmAbstractChild;
begin
 Result := nil;
 FormClass := GetClass(ClassName);
 if Assigned(FormClass) then begin
   WinClass := TfrmAbstractChild(FormClass.NewInstance);
   (WinClass as ICreateObject).Init(ObjID, ParentID, TypeID, self);
   WinClass.Create(self);
   Result := (WinClass as ICreateObject);
 end;
Если компилятор удалит этот модуль на который нет ссылок, что будет?


← →
@!!ex ©   (2006-07-27 19:24) [50]

>>Я не считаю, где я написал что его нужно исключить?

А если юнит такую секцию имеет, то его уже практически невозможно проанализировать.
А практически все большие юниты, которые как раз и занимают место имеют initialization или finalization.


← →
Игорь Шевченко ©   (2006-07-27 22:12) [51]

TUser ©   (27.07.06 18:01) [48]


> Нельзя этого делать, подключенные модули могут что-то делать
> "неявно" - в секциях initialization и finalization. Если
> просто удалить модули из которы ничего не вызывается - будут
> глюки.


Не должно быть глюков, если только логикой программы не предусмотрено, что должна быть выполнена некая инициализация, но такие неявные программы надо выбрасывать сразу.

atruhin ©   (27.07.06 19:20) [49]


> Если компилятор удалит этот модуль на который нет ссылок,
>  что будет?


Такие модули надо в dpr указывать в секции uses.

Сергей М. ©   (27.07.06 16:56) [42]


> В ЕХЕ нет никаких секций initialization


Строго говоря, все секции инциализации в порядке использования модулей, заносятся в таблицу, которую обрабатывает код из SysInit.pas и System.pas, но отдельной секции конечно нету.


← →
Stanislav ©   (2006-07-28 10:06) [52]

Сергей М. ©   (27.07.06 17:17) [47]

А я про что. Что в exe войдет целый класс. Но с классом понятно что если что-то из класса используется, то тянется весь класс, а если я ничего не использую, просто забыл убрать из uses модуль, то в exe войдут все классы которые имеются в этом модуле.


← →
Stanislav ©   (2006-07-28 10:10) [53]

atruhin ©   (27.07.06 19:20) [49]
@!!ex ©   (27.07.06 19:24) [50]

Что вы приципились к initialization ?
Я не говорю что из uses нужно удалять модули,
А говорю что ненужны в EXE части кода к которым по логике программы никогда не будет обращения. Если в initialization есть код, то в exe к нему будет обращение, а если его нет, то его нет.


← →
@!!ex ©   (2006-07-28 10:12) [54]

Хм... Еще раз.
Как определить, что код не используеться?


← →
Игорь Шевченко ©   (2006-07-28 10:21) [55]


> Как определить, что код не используеться?


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


← →
@!!ex ©   (2006-07-28 10:30) [56]

Хм.. А если я обращаюсь к куску кода по адресу памяти? и если адрес выясняеться динамическ в процессе работы программы.
ИМХО не реально проанализировать.

Правда такие случаи редки, но все же имееют место.

P.S>
Автор, если прога все хорошо делает, что мы тут обсуждаем то?


← →
tButton ©   (2006-07-28 10:38) [57]


> что мы тут обсуждаем то?

чудесное избавление от лишних килобайтов веса.


← →
Плохиш ©   (2006-07-28 10:47) [58]


> Stanislav ©   (28.07.06 10:10) [53]
> Я не говорю что из uses нужно удалять модули,

Я плякал. Сабж Пушкин за тебя написал?

> А говорю что ненужны в EXE части кода к которым по логике
> программы никогда не будет обращения

Ты бы хоть книжку какую про делфи почитал. Во всех вроде как описывается работа компилятора делфи и что он(компилятор) делает с неиспользуемым кодом. А то на ум приходит одно определение для таких как ты :-(


← →
@!!ex ©   (2006-07-28 10:59) [59]

>>чудесное избавление от лишних килобайтов веса.


← →
tButton ©   (2006-07-28 11:16) [60]


> >>чудесное

"wonders never cease" (c) =)


← →
Stanislav ©   (2006-07-28 11:28) [61]

Плохиш ©   (28.07.06 10:47) [58]
Нужно внимательно читать ветку. с очисткой Uses помог Игорь Шевченко еще в самом начале.


← →
Плохиш ©   (2006-07-28 11:32) [62]


> Stanislav ©   (28.07.06 11:28) [61]

Тут про таких как вы Юрий Зотов вчера ветку в "Прочее" заводил.


← →
@!!ex ©   (2006-07-28 11:36) [63]

>>Нужно внимательно читать ветку. с очисткой Uses помог Игорь Шевченко еще в самом начале.

Раз программа есть.
Все равботает.
Чего мы тут весь день обсуждаем?


← →
Stanislav ©   (2006-07-28 12:20) [64]

>Плохиш
А вот по поводу книги уже интересно, не читал, нет такой книги у меня, а что там написано?

@!!ex ©   (28.07.06 11:36) [63]

А обсуждаем, то, зачем прибегать к помощи других программ, когда это все можно реализовать силами компилятора.


← →
Ketmar ©   (2006-07-28 13:22) [65]

>Stanislav ©   (28.07.06 12:20) [64]
??? силами компилятора???
всё, что позволено -- компилятор делает. см. smartlinking. если глубже -- появятся side effects, которые надо будет описывать и учитывать. и этих side effects и так есть...


← →
Anatoly Podgoretsky ©   (2006-07-28 16:53) [66]

Stanislav ©   (28.07.06 10:06) [52]
А я про что. Что в exe войдет целый класс. Но с классом понятно что если что-то из класса используется, то тянется весь класс, а если я ничего не использую, просто забыл убрать из uses модуль, то в exe войдут все классы которые имеются в этом модуле.

Не говори глупостей.
И ответ на ранее заданый вопрос про XPManifest
Initialisation нет, кода нет, ответь на каком основании его надо оставлять или добавлять. Если удалишь программа будет выглядеть иначе, но кода в модуле нет, классов нет, ничего нет.


← →
Плохиш ©   (2006-07-28 17:08) [67]


> Stanislav ©   (28.07.06 12:20) [64]
> >Плохиш
> А вот по поводу книги уже интересно, не читал, нет такой
> книги у меня, а что там написано?

Книжки входят в комплект поставки D7 и там много чего написано.


← →
TUser ©   (2006-07-28 17:22) [68]


> TUser ©   (27.07.06 18:01) [48]
>
>
> > Нельзя этого делать, подключенные модули могут что-то
> делать
> > "неявно" - в секциях initialization и finalization. Если
>
> > просто удалить модули из которы ничего не вызывается -
>  будут
> > глюки.
>
>
> Не должно быть глюков, если только логикой программы не
> предусмотрено, что должна быть выполнена некая инициализация,
>  но такие неявные программы надо выбрасывать сразу.

initialization/finalization - плохой стиль программирования?


← →
Ketmar ©   (2006-07-28 18:05) [69]

>TUser ©   (28.07.06 17:22) [68]
код в этих секциях -- плохой стиль. за некоторым исключением. %-)


← →
GrayFace ©   (2006-07-30 06:41) [70]

Плохиш ©   (28.07.06 17:08) [67]
Книжки входят в комплект поставки D7 и там много чего написано.

Такие комплекты поставки очень большая редкость. Основная модель комплекта поставки  - это пиратский CD, в ней книжек нету. :)


← →
TUser ©   (2006-07-30 15:17) [71]

> код в этих секциях -- плохой стиль. за некоторым исключением.

Борланд - ламер - использует


← →
Anatoly Podgoretsky ©   (2006-07-30 15:37) [72]

Борланд решает свои задачи, мы же для него ничего не значим.


← →
TUser ©   (2006-07-30 16:28) [73]

Там, кажется, на Delphi/OP писать умеют.


← →
GrayFace ©   (2006-07-31 01:52) [74]

TUser ©   (30.07.06 15:17) [71]
> код в этих секциях -- плохой стиль. за некоторым исключением.

Борланд - ламер - использует


Разбиение на модули действительно ламерское. Например, в Forms присутствует uses Controls, а в Controls в implementation uses Forms. И вместо initialization надо было инициализировать по требованию в большинстве случаев.


← →
Германн ©   (2006-07-31 02:09) [75]


> Разбиение на модули действительно ламерское. Например, в
> Forms присутствует uses Controls, а в Controls в implementation
> uses Forms. И вместо initialization надо было инициализировать
> по требованию в большинстве случаев.


"Делай как мы, делай с нами, делай лучше нас!" Весьма популярная была ГДР-овская ТВ-передача в эпоху моей юности.
Ну так - вперёд! Сделай лучше!


← →
Stanislav ©   (2006-07-31 14:43) [76]

Все равно не соглашусь! сделано не продумано.
Из-за того чтобы работали какие-то программы типа  XP манифест, большинство программ содержат в себе более 50% лишнего кода.
Могли бы придумать какой-нибудь способ.
Интересно а C++ такие же проблемы?
А в Delphi по .NET ?


← →
@!!ex ©   (2006-07-31 15:00) [77]

>>Интересно а C++ такие же проблемы?
В С++ заголовочный файл(.H) не являеться модулем для подключение, он просто указывает на те данные, которые лежат в .CPP

Это упрощенно.


← →
Германн ©   (2006-07-31 15:28) [78]


> Из-за того чтобы работали какие-то программы типа  XP манифест,
>  большинство программ содержат в себе более 50% лишнего
> кода.

Есть тому доказательства?


← →
Stanislav ©   (2006-07-31 15:39) [79]

Германн ©   (31.07.06 15:28) [78]

В смысле ?


← →
Игорь Шевченко ©   (2006-07-31 15:41) [80]

GrayFace ©   (31.07.06 01:52) [74]


> Разбиение на модули действительно ламерское. Например, в
> Forms присутствует uses Controls, а в Controls в implementation
> uses Forms.


Это плохо по твоему мнению ? Чем именно ?


> И вместо initialization надо было инициализировать по требованию
> в большинстве случаев.


Видишь ли, дорогой друг, тот, кто использует в uses эти юниты, обычно гарантировано требует их функциональности, обеспечиваемой секцией initialization в том числе. Не используй - и будет тебе счастье. Даром. И никто не уйдет обиженный.


← →
Германн ©   (2006-07-31 15:47) [81]


> Stanislav ©   (31.07.06 15:39) [79]
>
> Германн ©   (31.07.06 15:28) [78]
>
> В смысле ?
>

В смысле
> большинство программ содержат в себе более 50% лишнего кода.

пока что голословное утверждение!


← →
Stanislav ©   (2006-07-31 15:55) [82]

Ну, если бы вы внимательно прочитали ветку, то вы бы нашли ответы на свой вопрос.
Элементарно. Существует модуль, в котором 10 классов, а мне нужен 1, но в exe пойдут все 10 классов из них 9 не нужных.


← →
Игорь Шевченко ©   (2006-07-31 15:58) [83]


> Существует модуль, в котором 10 классов, а мне нужен 1,
> но в exe пойдут все 10 классов из них 9 не нужных.


пример в студию


← →
Stanislav ©   (2006-07-31 16:19) [84]

Игорь Шевченко ©   (31.07.06 15:58) [83]

Чтобы далеко не ходить, стандартный модуль ADODB, мне нужен ADOCommand, а подтягивается класс TADODataSet, TADOQuery, TADOTable, понятно что это не более 50%, но в проект включается не только этот модуль.


← →
Игорь Шевченко ©   (2006-07-31 16:25) [85]


> стандартный модуль ADODB, мне нужен ADOCommand, а подтягивается
> класс TADODataSet, TADOQuery, TADOTable


Чем определяешь, что подтягивается ?


← →
Плохиш ©   (2006-07-31 16:25) [86]


> Stanislav ©   (31.07.06 16:19) [84]

Германн уже про голословное утверждение сказал.


← →
Stanislav ©   (2006-07-31 16:33) [87]

Плохиш ©   (31.07.06 16:25) [86]
Игорь Шевченко ©   (31.07.06 16:25) [85]

СМ. 7


← →
Игорь Шевченко ©   (2006-07-31 16:37) [88]

Stanislav ©   (31.07.06 16:33) [87]

Ты же называешь конкретные классы в [84]. У меня вопрос - чем ты определяешь, что при использовании класса ADOCommand, подтягивается класс TADODataSet, TADOQuery, TADOTable

?

Способ из [7] не дает конкретных имен, не так ли ?


← →
Плохиш ©   (2006-07-31 16:44) [89]


> Stanislav ©   (31.07.06 16:33) [87]
> Плохиш ©   (31.07.06 16:25) [86]
> Игорь Шевченко ©   (31.07.06 16:25) [85]
>
> СМ. 7

На чушь написаную в [7] вроде ответы были даны?

Я ещё больше скажу, моя версия делфи даже неиспользуемые методы выкидывает, во как :-) Правда она лицензионная, это фича наверное лицензии.


← →
Stanislav ©   (2006-08-01 13:51) [90]

Действительно не подтягивается! :-)

Отсюда следует что если модуль с 10 классами вкючен в uses, но ниодин класс не используется, то содержимое модуля в exe не попадет?
А если попадает, то где-то происходит вызов одного из методов класса?

Тогда приношу свои извинения!


← →
Игорь Шевченко ©   (2006-08-01 13:53) [91]


> Отсюда следует что если модуль с 10 классами вкючен в uses,
>  но ниодин класс не используется, то содержимое модуля в
> exe не попадет?
> А если попадает, то где-то происходит вызов одного из методов
> класса?


Именно так.


← →
GrayFace ©   (2006-08-02 03:33) [92]

Игорь Шевченко ©   (31.07.06 15:41) [80]
> Разбиение на модули действительно ламерское. Например, в
> Forms присутствует uses Controls, а в Controls в implementation
> uses Forms.

Это плохо по твоему мнению ? Чем именно ?


Это плохой стиль. Чем именно - например тем, что чайники, коих в Борланде есть, могли бы в initialization модуля Classes вызвать что-то из Forms, требущее инициализации. Впрочем, ничего военного на ум не приходит, просто не принято.

Игорь Шевченко ©   (31.07.06 15:41) [80]
> И вместо initialization надо было инициализировать по требованию
> в большинстве случаев.

Видишь ли, дорогой друг, тот, кто использует в uses эти юниты, обычно гарантировано требует их функциональности, обеспечиваемой секцией initialization в том числе. Не используй - и будет тебе счастье. Даром. И никто не уйдет обиженный.


И? Гарантированное выполнение implementation - это, конечно, хорошо, но кто мешает гарантированно инициализировать по требованию? При граматнам :) подходе при включении в uses модуля Controls к размеру программы не добавлялось бы 300kb.

Плохиш ©   (31.07.06 16:44) [89]
Я ещё больше скажу, моя версия делфи даже неиспользуемые методы выкидывает, во как :-)


Неиспользованные глобальные переменные тоже выкидывает. Но не все неипользованные методы можно выкинуть.

Плохиш ©   (31.07.06 16:44) [89]
Правда она лицензионная, это фича наверное лицензии.


Шутить изволите?


← →
GrayFace ©   (2006-08-02 03:39) [93]

Хм, "И?" надо было убрать - несколько грубовато получилось.


← →
jack128 ©   (2006-08-02 08:22) [94]

С одной стороны в Борладе чайники
GrayFace ©   (02.08.06 3:33) [92]
Чем именно - например тем, что чайники, коих в Борланде есть, могли бы в initialization модуля Classes вызвать что-то из Forms, требущее инициализации.


С другой -
GrayFace ©   (02.08.06 3:33) [92]
но кто мешает гарантированно инициализировать по требованию? При граматнам :) подходе при включении в uses модуля Controls к размеру программы не добавлялось бы 300kb

ты уж определись ;-)


← →
Игорь Шевченко ©   (2006-08-02 11:20) [95]

GrayFace ©   (02.08.06 03:33) [92]


> Чем именно - например тем, что чайники, коих в Борланде
> есть, могли бы в initialization модуля Classes вызвать что-
> то из Forms, требущее инициализации. Впрочем, ничего военного
> на ум не приходит, просто не принято.


Так раз на ум не приходит, то и наговаривать на Borland не стоит, не так ли ?
А то моська на слона тоже лаяла...


> это, конечно, хорошо, но кто мешает гарантированно инициализировать
> по требованию? При граматнам :) подходе при включении в
> uses модуля Controls к размеру программы не добавлялось
> бы 300kb.


Еще раз - если ты включаешь в uses модуль Controls, значит тебе требуется что-то из него. Это "что-то" должно быть проинициализировано.


← →
GrayFace ©   (2006-08-08 11:32) [96]

Игорь Шевченко ©   (02.08.06 11:20) [95]
Еще раз - если ты включаешь в uses модуль Controls, значит тебе требуется что-то из него. Это "что-то" должно быть проинициализировано.

Если я захочу использовать в своей консольной программе модуль Dialogs, то это не означает, что должен быть проинициализирован Application, подключен код TCustomForm и всех его родителей и добавлены иконки и курсоры в ресурсы.


← →
Плохиш ©   (2006-08-08 11:59) [97]


> GrayFace ©   (08.08.06 11:32) [96]
> Если я захочу использовать в своей консольной программе
> модуль Dialogs, то это не означает, что должен быть проинициализирован
> Application, подключен код TCustomForm и всех его родителей
> и добавлены иконки и курсоры в ресурсы.

Я не понимаю, проблема написать свой компилятор с библиотекой? Вон KOL сделали. А Вы, извините, только скулите, что Вам чё-то не нравиться и все должны броситься всё подстраивать под Ваши требования. Вы, эта, хотя бы приняли участие в финансировании проекта Делфи? Например, купив лицензию или всё ворованой версией пользуетесь?


← →
Игорь Шевченко ©   (2006-08-08 13:25) [98]

GrayFace ©   (08.08.06 11:32) [96]


> Если я захочу использовать в своей консольной программе
> модуль Dialogs, то это не означает, что должен быть проинициализирован
> Application, подключен код TCustomForm и всех его родителей
> и добавлены иконки и курсоры в ресурсы.


Означает. Так как в этом модуле Forms активно используется. Почитай исходник.


← →
GrayFace ©   (2006-08-10 10:21) [99]

Плохиш ©   (08.08.06 11:59) [97]
Я доказываю Игорю, что из-за не очень хорошо спроектированных модулей в программу пихается лишний код. Если ты суть дискуссии не понимаешь, то влезасть с глупостями типа "скулишь" не стоит.

Игорь Шевченко ©   (08.08.06 13:25) [98]
Да, неудачный пример. Вот: TMonitor - зачем ему то, что я перечислял?; функции из SysUtils - многим не нужна инициализация, которая присутствует в модуле и утяжеляет exe на пару десятков кило; битмепки из Buttons.res вообще нужны только TBitBtn, поэтому вместе с ним должны были быть выделены в отдельный модуль.


← →
GrayFace ©   (2006-08-10 10:23) [100]

GrayFace ©   (10.08.06 10:21) [99]
Если ты

Поправка: Вы.


← →
Плохиш ©   (2006-08-10 11:40) [101]


> GrayFace ©   (10.08.06 10:21) [99]

Откройте пост 97, заклейте слово "скулите" и почитайте ещё несколько раз.



Страницы: 1 2 3 вся ветка

Скачать: CL | DM;



Память: 0.72 MB
Время: 0.029 c
2-1157539322
Serjio77
2006-09-06 14:42
2006.09.24
Поиск и замена символа в строке содержащей n символов


2-1156748315
XTD
2006-08-28 10:58
2006.09.24
Вопрос по компоненте ТcoolTrayIcon


2-1157024256
2face
2006-08-31 15:37
2006.09.24
Ошибка


2-1157526926
чаки
2006-09-06 11:15
2006.09.24
TRichEdit, загрузка rtf текста


3-1153653469
londinium
2006-07-23 15:17
2006.09.24
IBX и DeleteSQL()




   Наверх