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

Вниз

А зачем собственно USES в Delphi?   Найти похожие ветки 

 
Real ©   (2008-01-22 02:01) [0]

Насколько я помню, Delphi автоматически исключит код класса и  любого другого модуля, который не используется в программе (в программе нет вызовов объектов/процедур из подключенного в USES модуля). Тогда почему бы автоматически не подключать ВСЕ модули? Ведь компилятор лишнее все равно отключит. Если нужна какая-то редко-используемая функция, захода в справку не избежать: необходимо узнать имя модуля. Не то что бы это сильно напрягает, но все-таки - столько написано про оптимизирующую компиляцию, а USES требуется формировать ручками как в старом добром Turbo Pascal.


 
KilkennyCat ©   (2008-01-22 02:03) [1]


> Тогда почему бы автоматически не подключать ВСЕ модули?


предположим, у меня 121 модуль с одним и тем же именем, с одними и теми же функциями, процедурами и переменными. Вот только один сделан с округлением до целых, второй для инопланетян... дальше объяснять?


 
KilkennyCat ©   (2008-01-22 02:06) [2]


> 121 модуль с одним и тем же именем

это я загнул :) с разными именами, конешно.


 
Real ©   (2008-01-22 02:14) [3]


> предположим, у меня 121 модуль с одним и тем же именем

По одному пути с одинаковыми именами? :-)

Но вообще не суть. Я не говорил про бестолковый подход  использованию USES и вообще про пользовательские модули. Я говорил только про Delphi-модули. При создании проекта, USES автоматом заполняется основными классами (тоже неясно, для чего: раз форме они все необходимы, можно было бы автоматизировать это подключение, как модуль System который прописывать не надо было в TP). Но вопрос не только по ним, а и по всем остальным. Может быть есть такая возможность, реализованная как директива компилятору?


 
KilkennyCat ©   (2008-01-22 02:24) [4]


> пользовательские модули. Delphi-модули.


В чем разница?


 
Германн ©   (2008-01-22 02:31) [5]


> А зачем собственно USES в Delphi?

А это для тех, кто не любит "автоматы". И для тех, кто предпочитает "бить белку в глаз"!
:)))


 
ketmar ©   (2008-01-22 02:32) [6]

ещё один чего-то надышался… небось мы, курильщики, отравили моск человеку.


 
Real ©   (2008-01-22 02:36) [7]

Хотя бы в том, что создатели Delphi не используют 121 модуль с одинаковыми именами :) На всякий случай уточню свой вопрос: количество стандартных модулей - известно производителю. От каких либо коллизий при использовании стандартных модулей - мы защищены самим производителем (иначе, было бы опасно расширять и руками блок USES). Зачем тогда USES если есть оптимизирующая компиляция? Которая выкинет все лишнее из USES итак.


 
Real ©   (2008-01-22 02:36) [8]


> ещё один чего-то надышался… небось мы, курильщики, отравили
> моск человеку.

А по сабжу?


 
KilkennyCat ©   (2008-01-22 02:37) [9]


> количество стандартных модулей - известно производителю


откуда ему известно?


 
ketmar ©   (2008-01-22 02:38) [10]

>[8] Real©(22.01.08 02:36)
>А по сабжу?

а по сабжу ты совершенно не врубаешься в понятие «модуль». о чём дальше говорить-то, если для тебя uses — аналог «#include» из C?


 
KilkennyCat ©   (2008-01-22 02:43) [11]

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


 
Германн ©   (2008-01-22 02:47) [12]


> Real ©   (22.01.08 02:36) [7]
>
> Хотя бы в том, что создатели Delphi не используют 121 модуль
> с одинаковыми именами :)

См.
> KilkennyCat ©   (22.01.08 02:06) [2]

Это просто очепятка.


 
Petr V. Abramov ©   (2008-01-22 02:51) [13]

выкинуть ненужное в готовом (к компиляции автором) проекте можно.
а вот что автор хотел, да забыл, предсказать невозможно.

может, когда-нить google-search будет предлагать подставить в uses модуль. И то проблема - с похожим названием ф-ций много будет


 
Германн ©   (2008-01-22 02:51) [14]

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


 
Piter ©   (2008-01-22 03:00) [15]

странно, что никто не дал правильного ответа.

Да, Delphi не включает код процедур и функций, не использующихся в приложении - это правда. Но:

1) у модуля имеется такое понятие как глобальные переменные и константы
2) у модулей существует секция Initialization / Finalization.

Поэтому боюсь подключение ВСЕХ модулей сразу уведет приложение на десятки мегабайт объема ;) Может и загнул, но концептуально правильно.


 
Piter ©   (2008-01-22 03:02) [16]

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


 
KilkennyCat ©   (2008-01-22 03:09) [17]


> Piter ©   (22.01.08 03:00) [15]


а почему бы компилятору не быть таким умным, чтоб не инициализировать глобальные и прочее, которые не используются :)


 
Real ©   (2008-01-22 04:03) [18]


> а по сабжу ты совершенно не врубаешься в понятие «модуль».
>  о чём дальше говорить-то, если для тебя uses — аналог «#include»
> из C?

Ну спасибо что написал что и как я понимаю :-) Свечку мне держал когда я учился? :))))


> А вот наличие функций/процедур с одинаковым именем в разных
> модулях - это вполне реальный случай И оптимизатор тут ничем не поможет, пока не достигнет уровня ИИ

Ну и что? А если я значит руками прописываю оба модуля в которых есть  функции с одинаковыми именами, я этим самым превращаю оптимизатор в ИИ? :)))


> 1) у модуля имеется такое понятие как глобальные переменные
> и константы
> 2) у модулей существует секция Initialization / Finalization.

Если я не использую ни единой переменной из модуля который я указал в uses, то он будет просто отброшен компилятором и естественно переменные из него не будут в результатирующем коде. То же самое и с инициализацией/финализацией: если модуль ну никак не юзается в программе, при чем тут его инициализация?


> Поэтому боюсь подключение ВСЕХ модулей сразу уведет приложение
> на десятки мегабайт объема

Вот как раз если верить тому что пишут о компиляторе Delphi этого никогда не произойдет. Чтобы программист не понаписал в USES, компилятор разгребет и оставит действительно только нужно. Какой-то даже парадокс: сама среда и многие статьи стараются минимизировать список USES, в то время как авторитетные источники заявляют что лишнее все равно включено не будет.

Похоже мой вопрос все-таки понят неправильно. Предложение подключить в uses google.com - яркое тому подтверждение. Попробую уточнить на примере. Когда я использую какую-то функцию из стандартных, например ShellExecute - мне необходимо добавить ShellApi в uses. Вопрос сводится к тому, почему для стандартных классов и прочих модулей идущих в поставке с Delphi не сделать автоматическое включение? Вообще даже не то что я добиваюсь этой возможности :) Просто интересует зачем uses вообще для внутренних модулей. Пока мне кажется самый точный ответ был дан тут: Германн (22.01.08 02:31) [5] Разумеется я своим постом не хочу сказать чтобы uses выкинули вообще: он нужен безусловно для своих модулей. Быть может USES оставили в том виде как есть по традиции. Или чтобы можно было по заголовку модуля уже понять какие модули он использует.


 
Германн ©   (2008-01-22 04:11) [19]


> > А вот наличие функций/процедур с одинаковым именем в разных
> > модулях - это вполне реальный случай И оптимизатор тут
> ничем не поможет, пока не достигнет уровня ИИ
>
> Ну и что? А если я значит руками прописываю оба модуля в
> которых есть  функции с одинаковыми именами, я этим самым
> превращаю оптимизатор в ИИ? :)))
>
>

Не. Тем самым ты берёшь на себя функцию ИИ. (Если сможешь конечно)


 
ketmar ©   (2008-01-22 04:14) [20]

>[18] Real©(22.01.08 04:03)
>Ну спасибо что написал что и как я понимаю :-) Свечку мне держал когда я
>учился? :))))

шо? ви таки хде-то учились? так шо я вам имею сказать: ваших учителей надо висилать за стопервый километр за то, шо они вас не вигнали сразу!

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

а это ви, голубчик, не той головкой литературу читаете, вот шо я вам имею сказать.

>почему для стандартных классов и прочих модулей идущих в поставке с
>Delphi не сделать автоматическое включение?

потому что не надо, голубчик, не надо этого. для компонентов сделано. дальше не надо.


 
Германн ©   (2008-01-22 04:20) [21]

Раз уж мой ник был упомянут в связи с "самым точным ответом", то должен напомнить о принципе "совместимости снизу вверх".


 
Piter ©   (2008-01-22 04:28) [22]

Real ©   (22.01.08 4:03) [18]
Если я не использую ни единой переменной из модуля который я указал в uses, то он будет просто отброшен компилятором и естественно переменные из него не будут в результатирующем коде


да что ты говоришь? А может сначала ты изучишь ликбез, прежде чем нести пургу с таким уверенным видом?

Real ©   (22.01.08 4:03) [18]
То же самое и с инициализацией/финализацией: если модуль ну никак не юзается в программе, при чем тут его инициализация?


а откуда компилятор знает что там в инициализации? В инициализации модуля может быть что угодно. Он вообще может работать "сам по себе", ты к нему НЕ обращаешься, но это не значит, что он не работает. Например, модуль может самостоятельно каждые полчаса отправлять на сайт производителя информацию о загрузке процессора.

Нифига себе, то есть подключаешь ты этот модуль (указываешь в uses) - и он начинает отправлять данные. Не подключаешь - не отправляет. По твоему нет никакой разницы?

Далее - ты хотя бы изучи инициализацию модуля Forms, которые ты везде используешь. Ты можешь вообще писать на WinApi, но подключив:

uses Forms...

сразу получишь увеличение размера EXE"шника в пару сотен килобайт. Не использовании никаких форм явно! Это по-твоему откуда берется?

Впрочем, с таким гонором не скоро ты, видимо, это поймешь.


 
Германн ©   (2008-01-22 04:38) [23]


> ketmar ©   (22.01.08 04:14) [20]

Даже Дарк срочно переселился в Одессу!
Это что-то да значит!


 
ketmar ©   (2008-01-22 05:19) [24]

>[23] Германн ©(22.01.08 04:38)
>Даже Дарк срочно переселился в Одессу!

это гены. у меня оба родителя Одессу очень любят, да…


 
KilkennyCat ©   (2008-01-22 08:52) [25]


> Piter ©   (22.01.08 04:28) [22]
>

> а откуда компилятор знает что там в инициализации? В инициализации
> модуля может быть что угодно. Он вообще может работать "сам
> по себе", ты к нему НЕ обращаешься, но это не значит, что
> он не работает.
>


Точно. Нечто подобное было в ключах защиты (хасп) Аладина.


 
Григорьев Антон ©   (2008-01-22 08:53) [26]


> Real ©   (22.01.08 04:03) [18]
> Если я не использую ни единой переменной из модуля который
> я указал в uses, то он будет просто отброшен компилятором
> и естественно переменные из него не будут в результатирующем
> коде. То же самое и с инициализацией/финализацией: если
> модуль ну никак не юзается в программе, при чем тут его
> инициализация?

А вот например с таким модулем - ShareMem - вы знакомы? В программе вы его никак явно не используете, весь его эффект получается благодаря тому, что прописано у него в initialization. Это к вопросу о том, при чём тут инициализация.


 
Reindeer Moss Eater ©   (2008-01-22 12:42) [27]

Зачем uses?
Чтобы быть самым быстрым компилятором в мире!
:)


 
Ega23 ©   (2008-01-22 13:01) [28]


> Reindeer Moss Eater ©   (22.01.08 12:42) [27]


+1
:)))


 
homm ©   (2008-01-22 13:10) [29]

> [14] Германн ©   (22.01.08 02:51)
> А вот наличие функций/процедур с одинаковым именем в разных
> модулях - это вполне реальный случай. И оптимизатор тут
> ничем не поможет, пока не достигнет уровня ИИ.

И даже тогда ничем не поможет. Ему проще будет программу переписать занаво, чем разобратся в человеческом корявом коде :)


 
Real ©   (2008-01-22 23:50) [30]


> А может сначала ты изучишь ликбез

А ты может сначала изучишь русский язык? :)

Мда, дух ответов как всегда на делфимастере: с невообразимым гонором, упрекают в гоноре :) Однако, радует что сквозь какую-то неумною злобу просачивается и полезная информация. Спасибо тем, кто отвечал нормально и по существу.

P.S. Ketmar, что символизирует твой внезапный переход на мову? Любовь к Одессе? :)


 
MsGuns ©   (2008-01-22 23:59) [31]

Кетмарь ! Мои аплодисменты и и "мы в восхищении !"


 
Piter ©   (2008-01-23 16:28) [32]

Real ©   (22.01.08 23:50) [30]
А ты может сначала изучишь русский язык?


я хорошо владею русским языком. По крайней мере, не хуже тебя.

А что касается гонора - ты или спрашивай, или утверждай. А то ты спрашиваешь, а потом когда тебе объясняют - ты утверждаешь ложь. Если ты так умён - тогда зачем спрашивать? А если уж спрашиваешь - так слушай.


 
ketmar ©   (2008-01-23 17:21) [33]

>[30] Real©(22.01.08 23:50)
символизирует то, что во мне проснулся старый, больной еврей.


 
Real ©   (2008-01-24 16:11) [34]


> я хорошо владею русским языком. По крайней мере, не хуже
> тебя.

Фраза: "а может сначала ты изучишь ликбез" - плохо сочетается с утверждением о хорошем владении языком (имхо ;)


> А что касается гонора - ты или спрашивай, или утверждай

Я и спросил, с целью послушать мнение других людей на этот счет. И никаких утверждений не выдвигал: я высказывал свое понимание, не утверждая что оно самое правильное. Если для тебя твое мнение есть и утверждение, то для меня это не так. В отличии от тебя, я не считаю себя умнее создателей Delphi ;) А вот ты, как обычно любой пост воспринимаешь как оскорбление своего (с твоей точки зрения) идеального моска :)))


 
Piter ©   (2008-01-25 00:56) [35]

Real ©   (24.01.08 16:11) [34]
Фраза: "а может сначала ты изучишь ликбез" - плохо сочетается с утверждением о хорошем владении языком (имхо ;)


что же там неправильного с точки зрения русского языка? Может, пояснишь, о уважаемый?


 
Павел Калугин ©   (2008-01-25 08:58) [36]

> [35] Piter ©   (25.01.08 00:56)

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


 
Галинка ©   (2008-01-25 12:22) [37]

чтобы на этапе разработки, можно было через точку получить совйства/методы класса ))) не учить же всю эту муть наизусть )))


 
Piter ©   (2008-01-25 13:30) [38]

Павел Калугин ©   (25.01.08 8:58) [36]

ах, вот оно что ;) Ну это не страшнее авторских:

"результатирующем коде" и слове "юзается", которого в русском языке и нету.
Так что автор просто не знает к чему придраться. Ему объяснили - разве он пошел проверил? Разве он почитал в гугле? Естественно, нет. Он тут же заявил, что это все лажа и на самом деле не так. При этом с уверенностью, странной от человека, который задает вопрос.


 
Игорь Шевченко ©   (2008-01-25 13:40) [39]

Павел Калугин ©   (25.01.08 08:58) [36]


> ликбез - ликвидация безграмотности. По руски можно "пройти
> ликбез"  но не "изучить ликбез" это тоже самое что "изучить
> ПТУ" или "изучить высшую школу"


Ты не прав. Ликбез еще можно выучить. Наизусть


 
Павел Калугин ©   (2008-01-25 13:51) [40]

> [39] Игорь Шевченко ©   (25.01.08 13:40)
> Ты не прав. Ликбез еще можно выучить. Наизусть

Прошк прощения, как?



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

Форум: "Прочее";
Текущий архив: 2008.03.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.044 c
3-1191992191
Mery
2007-10-10 08:56
2008.03.02
Проблема с построением запроса


2-1202123209
Uno-84
2008-02-04 14:06
2008.03.02
Записи в Базе Данных


15-1201592212
lead-in
2008-01-29 10:36
2008.03.02
MS SDK


2-1202146357
Санек
2008-02-04 20:32
2008.03.02
popupmenu выбор итема


15-1201268375
guav
2008-01-25 16:39
2008.03.02
Exceptions considered harmful ?





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