Форум: "Прочее";
Текущий архив: 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