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

Вниз

Автовставка имен модулей в uses   Найти похожие ветки 

 
lookin ©   (2005-10-04 19:55) [0]

Пусть на форме имеется некий контрол, например TMainMenu. Удалим название модуля (Menus), в котором описан этот контрол, из uses этой формы. Нажмем Ctrl-F9 и в списке uses этот модуль обязательно появится. Однако же модуль Forms, в котором описан сам объект TForm, будучи вручную удаленным, в списке uses автоматически не появляется. А почему?


 
Piter ©   (2005-10-04 22:39) [1]

Заметь, что когда кладешь меню на форму - то в Uses соответствующий модуль не сразу появляется.
Можно подумать на эту тему - почему так?

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

А прописываются они при первой компиляции. Соответственно, есть некий функционал, который следит за этим - что добавить перед компиляцией по компонентам, расположенным на форме.

А сама форма в этом функционале не прописана, так как фактически это базовый элемент. Перед компиляцией добавляются модули, которые реализуют компоненты, РАСПОЛОЖЕННЫЕ НА ФОРМЕ. А сама ФОРМА сюда не входит, видимо. Как бы по умолчанию считается, что форму то ты никуда не денешь, в отличии от компонетов, которые ты можешь добавить/удалить...


 
Prohodil Mimo ©   (2005-10-05 00:19) [2]

Piter ©   (04.10.05 22:39) [1]
Соответственно, есть некий функционал, который следит за этим - что добавить перед компиляцией по компонентам, расположенным на форме


Хорошо бы этот функционал следил ещё и за модулями, которые не используются и удалял их, ну или хотя бы варнинги выдавал. Ато мало ли, пока я форму разрабатываю - 100 компонентов переберу и для каждого компиляцию проведу. Могу и сам, вручную, но я не всегда помню об этом.

ЗЫ. Piter, это не к тебе просьба :о) это просто мысли вслух :о)


 
lookin ©   (2005-10-05 00:32) [3]

[2] Prohodil Mimo ©   (05.10.05 00:19)

Оттуда ноги и растут, перебрал проект и уменьшился он килобайт на 300 после удаления ненужных модулей


 
Piter ©   (2005-10-05 01:02) [4]

Prohodil Mimo ©   (05.10.05 0:19) [2]

то, что ты предлагаешь - невозможно реализовать.

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

Включаешь модуль - и действия производится.
Исключаешь модуль - и этих действий нету.

Поэтому вполне логично, что компилятор не берет на себя ответственность исключать типа "ненужные" модули. Мало ли, что ты не используешь формы. А может тебе нужен Application в твоей программе?


 
Rouse_ ©   (2005-10-05 01:08) [5]


> А прописываются они при первой компиляции.

при первой проверке синтаксиса.


> Хорошо бы этот функционал следил ещё и за модулями, которые
> не используются и удалял их

а не жирно будет, перебирать содержимое каждого модуля, на предмет наличия в нем идентификаторов, используемых в твоем модуле. Уж не говоря о том, что в сторонних модулях, могут содержаться, например ресурсы и тд, которые могут использоваться в ран - тайм.. в общем - не тривиальная эта задача..
<за клавой jack128>


 
drpass ©   (2005-10-05 01:09) [6]


> Ты забываешь, что у модулей есть секция Initialization,
> в которой могут производится какие-то вполне конкретные
> действия, кардинально влияющие на ход выполнения программы

Собственно, он только эту часть и компонует с программой. Классы в "лишних модулях", которые не используются, не наследуются и т.д. в результирующий исполняемый файл не попадают, уж на это ума у компоновщика хватит


 
Piter ©   (2005-10-05 01:38) [7]

drpass ©   (05.10.05 1:09) [6]

ну это естественно. Если модуль не используется и там нету Initizalization - так он и не будет включен в конечный EXE. ПРосто будет лишнее "слово" в Uses висеть - никакой беды.


 
Piter ©   (2005-10-05 01:40) [8]

Rouse_ ©   (05.10.05 1:08) [5]
а не жирно будет, перебирать содержимое каждого модуля, на предмет наличия в нем идентификаторов, используемых в твоем модуле


странный способ :)

Я думаю, вполне не жирно будет перебирать все объявленные идентификаторы приложения на предмет в каких они модуляю реализованы и данные модули отмечать. Модули, которые подключены, но которые по результатам проверки не отмечены - и есть "лишние".
Думаю, тут проблем то нет.


 
Германн ©   (2005-10-05 01:58) [9]

ИМХО, нам на это следует "забить"!
Когда-то Борланд продвигал себя в том числе и тем, что "тщательно убирал за собой", вставляя в исполнямый файл только то, что нужно. Сейчас - нет. Но это и не очень нужно, имхо. А "трудозатраты" на "тщательную уборку" очень возрасли с той поры. :(


 
GuAV ©   (2005-10-05 02:07) [10]

Piter ©   (05.10.05 1:40) [8]

Вот например я чтобы не писать CoInitialize добавил ComObj в uses (так лучше, вызов CoInitialize "централизованнее"). Как компилятору догадаться что раз я работаю с COM, то этот модуль нужен, иначе - нет, если я не использую никкие его идентификаторы ?


 
Piter ©   (2005-10-05 02:18) [11]

GuAV ©   (05.10.05 2:07) [10]

это вопрос ко мне? Может, ты перечитаешь ВСЕ мои посты? Я то как раз об этом и говорю, между прочим.
Добавить нужные модули - это реально и это реализовано.

А вот убирать ненужные - это технически невозможно (если только на уровне ИИ). Поэтому и нереализовано.
Внимательнее надо быть, а не вырывать фразы/посты из контекста :)


 
Piter ©   (2005-10-05 02:19) [12]

GuAV ©   (05.10.05 2:07) [10]

я тебе даже процитирую:

Piter ©   (05.10.05 1:02) [4]
Ты забываешь, что у модулей есть секция Initialization, в которой могут производится какие-то вполне конкретные действия, кардинально влияющие на ход выполнения программы


 
Prohodil Mimo ©   (2005-10-05 21:49) [13]

Piter ©   (05.10.05 1:02) [4]
Ты забываешь, что у модулей есть секция Initialization, в которой могут производится какие-то вполне конкретные действия, кардинально влияющие на ход выполнения программы


Я об этом не забыл, потому и написал, что мог бы варнинги выдавать.


> Я думаю, вполне не жирно будет перебирать все
> объявленные идентификаторы приложения на предмет в
> каких они модуляю реализованы и данные модули
> отмечать. Модули, которые подключены, но которые по
>результатам проверки не отмечены - и есть "лишние".
> Думаю, тут проблем то нет

вот и могли бы сделать.

ЗЫ. да меня это всё не волнует, просто увидел ветку, вспомнилось :о)


 
Piter ©   (2005-10-05 23:11) [14]

Prohodil Mimo ©   (05.10.05 21:49) [13]
Я об этом не забыл, потому и написал, что мог бы варнинги выдавать


варнинги на что? Что не так?

Если в модуле есть инициализация - то тогда компилятор естественно не будет исключать модуль, также как и делать Warning - зачем?

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

В чем проблема?


 
Prohodil Mimo ©   (2005-10-05 23:22) [15]

Piter ©   (05.10.05 23:11) [14]


> варнинги на что? Что не так?

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

В чем проблема?

что бы в тексте не было лишнего мусора.

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


 
Amoeba ©   (2005-10-06 11:32) [16]

Есть утилита для поиска неиспользуемых модулей - Icarus:
http://www.peganza.com/products.htm


 
Игорь Шевченко ©   (2005-10-06 13:16) [17]

Amoeba ©   (06.10.05 11:32) [16]

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



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

Текущий архив: 2005.10.30;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.775 c
14-1128893202
Piter
2005-10-10 01:26
2005.10.30
Включение IP маршрутизации


1-1128580294
Lirik
2005-10-06 10:31
2005.10.30
Настройки экрана


3-1126857607
Term
2005-09-16 12:00
2005.10.30
Работа с FB 1.5 через ADO


14-1128953044
БарЛог
2005-10-10 18:04
2005.10.30
Телевидение через локальную сеть, как?


14-1128683529
y-soft
2005-10-07 15:12
2005.10.30
Очередное присуждение шНобелевской премии