![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Ramirez |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 18.1.2005 Где: Moscow, ExUSSR Репутация: 4 Всего: 5 |
Собственно, вопрос о производительности / логичности разбиения большой программы на кучу модулей. Кроме логичности кода/удобства есть плюсы? Потери в скорости интерпретации будут (пока он там все файлы соберет подключит)?
|
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Конечно будут. Только для человека, зачастую, важнее удобство работы с программой чем её производтельность. Если юзать ООП, то будет работать ещё медленей.
-------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Vaneska |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 15.3.2005 Где: Москва Репутация: 3 Всего: 4 |
То есть получается чем больше вызовов функций, подключения модулей, и других напрямую не связанных с алгоритмом программы действий, тем медленнее программа и более читаемый код.
Получается, если производительность действительно критична, надо делать без ООП и с минимумом функций и модулей - чистый алгоритм. Но с читаемостью этого добра действительно проблемы будут. Судя по твоему сучаю (большая прога) наверно лучше будет всетаки разбить на модули, систематизировать код. Потом гораздо проще в нем разбираться и изменять/дополнять по прошествии времени. --------------------
http://isokolov.blogspot.com/ |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Лично я, по возможности, стараюсь пользоваться ООП. Почему???
Потому что, когда ты подключаешь класс и создаёшь объект этого класса, ты ничего не грузишь, все методы подгружаются по мере их нужды, т.е. вызовов. Да и код получается более элегантный, плюс не будет конфликта, если у тебя, в текущем пространстве имён текущего пакета, есть функции с такими же именами, как и в подключаемом модуле. У модуля немного другая стратегия, он как правило всегда экспортирует свои функции в текущий пакет main. Производительность при использовании модуля выше, потому как он делает экспорт на стадии компиляции. Потому когда подключаешь какой-нить модуль, всегда нужно стараться использовать его на полную катушку, да бы оправдать его самого. Вот например: часто встречаю код, где люди подключают, не маленький, модуль CGI.pm, при этом в подключении используют экспорт стандартных функций use CGI qw( :standard ), что ещё хуже вижу такое подключение use CGI qw( :all );, а пользуются только функией param() Это сообщение отредактировал(а) korob2001 - 28.5.2005, 09:00 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Ramirez |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 18.1.2005 Где: Moscow, ExUSSR Репутация: 4 Всего: 5 |
Спасибо за ответы. В частности, отдельная благодарность тов. korob2001 за его грамотные и содержательные ответы, и вообще за поддержку этого форума, всегда приятно сюда зайти. (давно хотел сказать, да как-то руки не доходили =)). Еще раз - респект.
Это сообщение отредактировал(а) Ramirez - 29.5.2005, 02:05 |
|||
|
||||
| versus |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 8.3.2005 Где: Переславль-Залесс кий Репутация: нет Всего: 3 |
Конечно! Real programmers code in binary!
:-)) |
||||
|
|||||
| Anarki |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 326 Регистрация: 14.3.2005 Репутация: 1 Всего: 11 |
korob2001
Так, а вот я использую use CGI qw( :param ); но у меня в коде есть вызовы `start_html()`, `end_html()`,`cookie` однако всё прекрасно работает - Perl делает "дозагрузку" этих частей? |
|||
|
||||
| korob2001 |
|
||||||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Просто ты наверное юзаешь ООП и соответственно ты можешь обращаться к любому методу, через объект, т.е. скорее всего ты пишешь так:
Это не правильно, потому как ты экспортировал функцию param() в текущий пакет и наверняка юзаешь её так:
Получаются накладные расходы. Вот что происходит: 1. Экспортируется функция param() в тещее пространство имён. 2. Ты создаёшь объект. 3. Вызываешь param() через объект. Вопрос: зачем нужно было экспортировать param(), если ты всё равно пользуешься ООП подходом??? Т.е. шаг 1 абсолюно не нужен. Вобщем, когда юзаешь ООП не нужно вообще ничего экспортировать в текущее пространство имён, ты же обращаешься к методам через объект. Другими словами достаточно написать:
или так:
Попробуй запустить такой код:
И получишь такую ошибку: Undefined subroutine &main::header called at Untitled line 5. А теперь давай исправим ошибки, т.е. экспортируем все нужные функции:
Вот теперь код будет работать на ура. Если хочешь, попробуй удали из списка экспортируемых функций, хотя бы одну из них, например: :end_html И получишь опять сообщение об ошибке. Удачи. Это сообщение отредактировал(а) korob2001 - 29.5.2005, 15:31 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||||||||||
|
|||||||||||||||
| Anarki |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 326 Регистрация: 14.3.2005 Репутация: 1 Всего: 11 |
Ок, спасибо за разъяснения.
Я использовал метод объекта
|
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |