Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.24;
Скачать: CL | DM;

Вниз

Очистка 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;
Скачать: CL | DM;

Наверх




Память: 0.64 MB
Время: 0.041 c
1-1155113520
Ega23
2006-08-09 12:52
2006.09.24
Hint для каждого узла TTreeView - миф или реальность?


15-1157017584
BorisMor
2006-08-31 13:46
2006.09.24
Скорось приложений


2-1157446344
Ivanna
2006-09-05 12:52
2006.09.24
Строка в строку из кодов символов


2-1157483491
Серый
2006-09-05 23:11
2006.09.24
Базы данных


15-1157346516
Ega23
2006-09-04 09:08
2006.09.24
С Днём рождения! 2 сентября