Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
15-1157651419
Real
2006-09-07 21:50
2006.09.24
MIRANDA - погодный плагин


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


15-1157185940
мнм
2006-09-02 12:32
2006.09.24
программист <> кодер


1-1155217393
xen
2006-08-10 17:43
2006.09.24
работа с файлами


11-1132935688
Pety
2005-11-25 19:21
2006.09.24
Нарисовать иконку на канве





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