Форум: "Основная";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];
ВнизОчистка USES Найти похожие ветки
← →
Сергей М. © (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 в том числе. Не используй - и будет тебе счастье. Даром. И никто не уйдет обиженный.
Страницы: 1 2 3 вся ветка
Форум: "Основная";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];
Память: 0.62 MB
Время: 0.041 c