![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Goganchic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 678 Регистрация: 18.6.2004 Репутация: нет Всего: 5 |
Прочитал сейчас всю тему: чуть глаза из орбит не выкатились.
Попытаюсь ответить на все: гоуту - зло. Тут приводился пример с линуксом, насчет ручной оптимизации и применения фишек GCC это да, есть такое, и еще, насчет кода ядра, вы когда нибудь читали документацию если не ко всему ядру, то хотя бы к каким-нибудь его инфраструктурам? Я читал доки к netfilter'y и там ясно написано, что код писал хомяк, а чел только записывал коменты с его (хомяка) слов. Еще был пример с вложенным циклом, мне по этому поводу мой бывший препод информатики, у которого опыт практической разработки прог (т.е. он не просто теоретик, а так сказать заслуженный практик программирования) говорит так: не надо создавать такие ситуации чтобы были вложенные циклы из которых надо выходить сразу во вне и все будет хорошо. |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
как говорится, ну-ну просто не хочется в очередной раз доказывать, что ты не прав -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Goganchic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 678 Регистрация: 18.6.2004 Репутация: нет Всего: 5 |
MAKCim, мы говорим о Си или о Си++? Если последнее, то там гоуту просто не нужен, т.к. имеется механизм исключений, который может заменить гоуту, причем в более наглядной форме.
|
|||
|
||||
| 0lmer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 3.12.2006 Репутация: нет Всего: -1 |
Лично я за недолгие 3 года программирования использовал готу не больше 4 раз для выхода из циклов поскольку без него размер кода увеличивался а читабельность уменьшалась.
По моему сам по себе готу не есть зло, зло - это когда его криво используют. (это типа оружия: стреляет не оно само а человек который его держит) |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
а вот скорость на порядок снижается Добавлено через 1 минуту и 30 секунд а ты сказал применительно к чему? -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
А то и больше. ИМХО Исключения ни коим образом не сделаны для замены goto - слишком серьезный механизм, из пушки по воробьям. Если есть три-четыре вложенных цикла, из гущи которых нужно быстро выпрыгнуть, то при использовании механизма исключений будут очень ощутимые тормоза. При использовании дополнительных флагов - резко потеряется читабельность. А вот при наличии goto и удобочитаемой метки, да еще в обозримом пространстве программы - дешево и сердито. Всем понятно и красиво. |
|||
|
||||
| Goganchic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 678 Регистрация: 18.6.2004 Репутация: нет Всего: 5 |
Как сказал 0lmer, goto это оружие, ну так вот, оружие тоже разным бывает: одним владеть можно научиться легко, а другим можно и руки себе отхряпать, если ты не шаолиньский манах. Ну так вот, для широких масс goto это зло, я не спорю, что сливки программистского общества могут использовать этот оператор красиво и безопасно, но когда каждый второй начинает закашивать под профессионала, то получается сущая неразбериха и трудновыловимые баги. Себя я не отношу к сливкам программистского общества, поэтому goto не использую.
Теперь насчет исключений: по-моему, в Си++ многие вещи "жутко тормозят", но как известно, они позволяют сделать код более читаемым и кратким (при соответствующей документации и соблюдении стандартов кодирования, конечно, я не пытаюсь сказать, что любой Вася Пупкин сядет за Си++ и сразу же сделает офигительный шедевр). Современное оборудование может спокойной существовать с небольшой "тормознутостью", причем последняя будет не очень заметна (вы уж извините, но не каждый сидить и с секундомером измеряет за сколько времени у него загрузилась картинка, за 1 сек. или за 1.5). Так что вывод таков: если приложение не критично по скорости (если приложение - мощный веб-сервер, для которого 10% потеря в скорости подобна смерти, то тут я даже спорить не буду - все средства оптимизации хороши), то от использования конструкции goto можно отказаться вполне. Это мое мнение, может оно и не правильное, но я так думаю. Это сообщение отредактировал(а) Goganchic - 7.5.2007, 22:26 |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
По-моему весь спор о том, что можно от него отказаться или нужно. Конечно можно! Только вот вопрос: если с goto удобнее что-то сделать нужно ли менять логику программы, нагромождать скобки и условия с циклами, чтобы обойтись без него? Я даже встречал где-то мнение: Если вам не обойтись без goto пересмотрите логику вычислений... Ну-ну. Мы программируем, чтобы получить результат или текст программы на высокоуровневом языке без оператора goto? Смотря кто какую себе цель ставит
ИМХО. Код программы должен быть понятен для сопровождения. Но это не значит, что его надо писать ради сопровождения. Это не стихи - готовый продукт все-таки работающая программа. И если картинка грузится на 30 секунд дольше, а потом этот "легкий для сопровождения" код без доделок попадает в другую программу, где таких картинок нужно вывести 100 - получим 50 минут ИМХО Нет только черного и белого. За разумный компромис! Ну уж тут точно скорость от рук на 99% зависит! На мой взгляд Си++ позволяет писать очень скоростные программы (с goto или без - это как раз вторично). Вопрос правильного применения. |
|||
|
||||
| Goganchic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 678 Регистрация: 18.6.2004 Репутация: нет Всего: 5 |
Anikmar, MAKCim, JackYF, 0lmer, в общем я понял свой просчет: мы просто говорим о разных степенях слова "отказаться", просто в моем понимании отказаться, значит использовать только при очень крайней необходимости
|
|||
|
||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Гм, если отвлечься от Си++ и поговорить о Си, то я вообще не вижу альтернативы goto.
Как это сделать без goto? Можно завести переменную для хранения статуса и проверять её перед каждым действием. Можно воспользоваться известным трюком с do {} while(0) и вываливаться из цикла по break, если что-то сломалось. Но мне кажется, что goto и проще и понятней З.Ы. Видел имитацию исключений в Plain C с помощью setjmp/longjmp, завёрнутых в макросы типа TRY/CATCH etc -------------------- Не смей читать мою подпись!!! |
|||
|
||||
| nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: 3 Всего: 43 |
Однако я так и не понял, нахрена: когда писал сам, то у меня была только 2ая уровень вложеенности условий. Как и в примере. |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Лично я за 12 лет работы на С++ не использовал его никогда. Не то что бы из приниципа. Просто так получалось. Добавлено @ 10:30 Так у ж прямо на порядок? Ну и к тому же мой опыт показывает, что при создании больших программныъ комплексов, главное не быстродействие, а читаемость кода. Данный пример для С не катит
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Спор вялотекущий и ни очем, конечно. Видимо я старомодный. Но объяснять пользователю, в ответ на его претензии к быстродействию "Зато посмотрите, какой читаемый код" я вижу не совсем правильным. То что исключения разворачиваются по времени действительно на порядок медленнее - уже точно обсуждалось, когда спорили что лучше: возврат кода ошибки или исключение. |
|||
|
||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
То есть предлагаешь кучу вложенных if-ов ради того, чтобы избежать goto? Это ещё хуже -------------------- Не смей читать мою подпись!!! |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |