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

Вниз

Очистка 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 вся ветка

Форум: "Основная";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.73 MB
Время: 0.067 c
15-1157519711
Pazitron_Brain
2006-09-06 09:15
2006.09.24
Коммунальная служба не дает доступ к крыше!


2-1157095583
Троль
2006-09-01 11:26
2006.09.24
использование Dll из ресурса


2-1157121160
Beginer2
2006-09-01 18:32
2006.09.24
Представить байт в двоичном виде


4-1148457913
truegosha
2006-05-24 12:05
2006.09.24
QueryServiceStatus Отказано в доступе


15-1157386489
Вти
2006-09-04 20:14
2006.09.24
Image1





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский