![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Sun |
|
|||
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: нет Всего: 48 |
Все знают что "goto" это плохо, но почему в ядре Linux он встречается почти в каждом модуле? Или настоящие программеры не боятся оператора "goto"?
-------------------- Account removed |
|||
|
||||
FdX |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 13.8.2002 Репутация: нет Всего: нет |
Ага. Ну а вообще не достаточно просто уметь_писать на С++. Надо знать ещще тонкости вроде работы со стеком (на уровне комманд асма) при вызове функций и тому подобные вещи. Если знаешь, как все пашет, проги не будут глючить |
|||
|
||||
Grey |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 25.3.2002 Репутация: нет Всего: нет |
Плохо, когда лепят его где непопадя.
Хорошо, когда использование goto упрощает код и облегчает его понимание. А догматичные запреты на его использование, это полный бред помоему. |
|||
|
||||
Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
На самом деле, ничего плохого нету в goto. Просто это считается дурным тоном...Вспомним ассемблер...там без меток - это маразм...Да и ведь goto - это ведь инструкция jmp, а её используют циклы и т.д.
-------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
Tamerlann |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 10.11.2002 Где: Минск, Беларусь Репутация: нет Всего: 2 |
А зачем вообще использовать goto, когда в С++ уже всё необходимое есть: циклы, if'ы и процедуры. Мне кажется, прога построенная на процедурах гораздо легче читается и понимается, никогда не запутаешся.
![]() --------------------
http://timursdev.blogspot.com/ |
|||
|
||||
Fantasist |
|
||||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Что все так к ассемблеру аппелируют? Это крайне не типичный язык - структурности в нем никакой нету. goto как раз и не реккомендуют использовать, потому что он нарушает структурное построение. Если ты пишишь для себя, то пожалуйста, хоть на каждом шаге его ставь. И если ты потом сам в ней сможешь разобраться то никаких проблем. Будешь работать в команде, тебя так за это будут пинать. Кстати, расказывал один человек работающий в софтверной компании, что он видел как у них кто-то применил goto. Выглядело это примерно так:
![]() -------------------- Волны гасят ветер... |
||||
|
|||||
Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
Я к тому, что на уровне кода цикл обычный не отличается от того же гото.
А про удобочитаемость, дык тут тоже не всегда верно... Есть варианты, когда гото читается легче, чем циклы. (токо вот я их превисти не могу ![]() з.ы. а сам я гото не использую почему-то ![]() ![]() -------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
Vano |
|
|||
Unregistered |
Тут все про циклы, а вот я знаю пример использования goto в фунции, вместо того чтоюы плодить сотни рекурсивных вызовов ее, и что структурнее и в чем прще разобраться это еще вопрос (это из области создания компиляторов, если пример интересный могу привести)
|
|||
|
||||
Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: нет Всего: 207 |
Fantasist правильно сказал. Если кому-то удобно использовать Goto пусть использует, беды никакой нет, а вот если в комманде работаешь, то я бы крайне не рекомендовал - могут быть серьёзные проблемы. Я пару месяцев назад вынужден был работать с кодом моего коллеги, который очень уж охоч до Goto - на сотой строке я уже готов был его убить, после тысячной я уже всерьёз задумался не надо ли сходить к начальству и попросить спустить директиву о запрещении пользования Goto программистами компании...
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
Alex101 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: нет Всего: 10 |
Ну, все же для цикла с пареметром есть команда loop ... А насчет goto... Есть программа генерации перестановок в нерекурсивном варианте, так там goto очень даже к месту... -------------------- С уважением, А. Фролов. |
|||
|
||||
HexoGenus |
|
|||
![]() Шустрый ![]() Профиль Группа: Экс. модератор Сообщений: 110 Регистрация: 28.8.2002 Где: Ростов-на-Дону Репутация: нет Всего: нет |
Вопрос что удобнее использовать для расчетов ![]() Счеты или компьютер...? Вот вам нужно выполнить расчет какой-то экономической операции... Рядом стоят счеты на которых это можно быстро сделать и компьютер который нужно загрузить, запустить к примеру тот же ексел, подумать как составить форму, какие вписать в нее формулы, выключить компьютер. Ну так что ![]() Вот тут и появляется такой термин как информационная культура... 1. человек который всегда в первую очередь хватается за счеты обладает низкой информационной культурой, 2. человек который всегда сначала хватается за компьютер - это программист ![]() 3. а человек который вместо того что бы сразу за что то хвататься, сначала подумает, может ли данный расчет использоваться как типовой и применяться в дальнейшем и если да то в первую очередь попробует решить задачу при помощи компьютера - это разумный человек обладающий высокой информационной культурой... (Надеюсь всем присутствующим не нужно объяснять почему компьютер для большинства расчетов лучше чем счеты? Часть размышлений по этому поводу опускаю...) так и с оператором гото... - сначала был ассемблер - язык с низкой упорядоченностью текстов программ - потом появились языки высокого уровня целью которых было все это упорядочить, уменьшить вероятность появления ошибок, при помощи специальных оптимизирующих компиляторов добиться автоматического улучшения скоростных характеристик получаемых кусков кода... и еще много, много, много всего такого... Что нам говорят боги программирования: - оператор гото снижает читаемость программ... - следовательно повышает вероятность появления ошибок... - ухудшает условия для работы оптимизирующих компиляторов (а следовательно при большом количестве гото программа в большинстве вариантов будет работать медленнее чем та же программа построенная при помощи конструкций языков высокого уровня) - человек начавший использовать гото без явной необходимости для данной реализации подобен наркоману который каждый день хочет увеличить дозу вдвое ... Теперь, что нам говорят любители использовать гото и любители использовать счеты: 1. Некоторые реализации более легко читаемы если использовать гото... 1. Некоторые расчеты быстрее сделать используя счеты... 2. Тут все про циклы, а вот я знаю пример использования goto в фунции, вместо того чтобы плодить сотни рекурсивных вызовов ее, и что структурнее и в чем прще разобраться это еще вопрос ... 2. Тут все говорят про компьютеры а я вот баланс своего ларька подбила используя тетрадь и счеты быстрее многих финансистов... 3. Все знают что "goto" это плохо, но почему в ядре Linux он встречается почти в каждом модуле? Или настоящие программеры не боятся оператора "goto"? (Дело в том что ядро операционной системы должно быть максимально скоростным и поэтому там используется ручная оптимизация кода - что является уделом программистов которые для меня боги, которым кажется что разница в скорости выполнения MOV AX,0 и SUB AX,AX понятна и ёжику, там используется тесная связь с ассемблером а он без оператора безусловного перехода становится очень громоздким) 3. Почему говорят что в расчетах надо использовать компьютеры... Вот я на столе у главбуха тоже видела счеты (калькулятор) и хотя рядом стоит компьютер ОН счетами тоже пользуется!!!!! Так значит компьютер не нужен!!!! Это сколько же нужно выучить, его еще и купить нужно... Зачем он нам нужен когда есть счеты!!!! Надеюсь никого не обидел ![]() ![]() Теперь скажите мне вы будете уважать бухгалтера который не смотря на то что рядом стоит компьютер иногда использует счеты ? ![]() Но если зайдете на форум бухгалтеров и увидете бухгалтера который будет поливать помоями компьютеры и кричать что счеты это руллез форева и он не согласен с тем что их нельзя использовать в бухгалтерии ![]() Это будет просто показатель его низкой профессиональной грамотности (не в смысле что он бухгалтерию плохо знает а в том смысле что он и сам будет перед каждым отчетом сидеть по уши в бумагах и своих подчиненных будет долбать как дятел за то что они ему долго ведомости ручками переписывают хотя он и попросил всего три экземпляра простыни на 5 метров ![]() Вобщем каждый кто пытается в форуме при всем народе кричать о том что гото можно использовать в программах (а то мы этого не знали) лишний раз показывает свой низкий профессиональный уровень и пытаясь спорить с теми кто пишет учебники (вроде как он умнее этих профессоров) уподобляется человеку плюющему на богов сидящих в небе (закон всемирного притяжения еще никто не отменял)... --------------------
Когда невозможно уже работать напряженнее, начни работать умнее. |
|||
|
||||
Paradox |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1135 Регистрация: 18.11.2002 Где: Россия Репутация: нет Всего: 1 |
HexoGenus по-моему тут никто не кричал гото рулезз форева...
Человек, который сразу хватается за компьютер это не программист, или по крайней мере бестолковый программист. Толковый же в свою очередь сначала подумает как и что он будет делать а уж потом хватается. И вот если я к примеру в процессе работы над некоторой проблеммой прихожу к выводу что гото будет к месту (а все реализации без гото либо потребуют больших усилий, либо сделают программу нечитаемой) я его использую. Оговорюсь сразу:в профессиональной деятельности я еще ни разу гото не использовал, но предубеждений по поводу его использования у меня нет. Этот вопрос сродни тому хорошо ли иметь в программе глобальные переменные или нет. По этому поводу можно дискуссию развести еще больше этой. Кстати интересно, какой трактат по этому поводу напишет HexoGenus -------------------- --- |
|||
|
||||
HexoGenus |
|
||||||||||
![]() Шустрый ![]() Профиль Группа: Экс. модератор Сообщений: 110 Регистрация: 28.8.2002 Где: Ростов-на-Дону Репутация: нет Всего: нет |
Я не говорю что здесь кто то об этом кричал но постоянно кто нибудь это тему в форумах нет нет да и поднимет ![]()
Имеется в виду что программисты обычно знания о счетах и калькуляторах со временем отбрасывают как избыточные рудиментарные остатки и поэтому для нас любую задачу (почти всегда) просто приятнее решать при помощи компа ... (в каждой шутке есть доля шутки)
Ты вообще до конца мой фельетончик прочитал ![]() Или не вытерпел и сразу ответ написал... ![]() Я же там понятно написал что я не против использования гото там где это действительно необходимо а против постоянных попыток доказать что он нужен... Повторю еще раз... это показывает не только уровень непрофессионализма но и то что человек не хочет прислушиваться к мнению профессионалов ... Часто этот вопрос про гото задается только для того что бы подразнить админов и профи ![]() Мне кажется что по этому вопросу стоило бы заготовить что то вроде перечня случаев когда гото можно удачно использовать, когда он приводит к ухудшению кода и образцы программ начинающих программистов насыщенных гото как арбуз семечками и вот этот документик скидывать на почту данному участнику форума одновременно удаляя его вопрос ...
Кстати еще одна из причин почему не стоит использовать гото без причины... Если мы создаем цикл и внутри него переменную то сразу за его пределами она уничтожается за ненадобностью ... а если мы реализуем цикл через гото то область жизни переменной может стать чрезмерной излишне засоряя память... Только понимая все эти ньюансы (а их очень не мало) можно понять почему начинающим программистам рекомендуют вообще не использовать гото... Разве это называется ПРЕДУБЕЖДЕННОСТЬ?
Заказывали? Получите... распишитесь... ![]() --------------------
Когда невозможно уже работать напряженнее, начни работать умнее. |
||||||||||
|
|||||||||||
Chingachguk |
|
||||||||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Именно так. Лично я пробовал и без него (писал и пишу на Pas,C,Asm...) так и с ним (Pas,C,Asm,..). Да, я не оговорился - пакет win32 masm позволяет писать на ассемблере в струкутрном виде (с IF,ELSE...). Иногда лучше так, иногда - нет. А ВЫ пробовали его использовать, или только цитируете классиков ?
Примерно в 70-е годы проводился конкурс шахматных программ. Участники были представлены разными навороченными алгоритмами, написанными в силу их сложности на структурных языках. В то же время наша программа ("Каисса"?) была написана исключительно тупо и на ассемблере - те с goto. И что ? Победила именно она !
Все верно. Главное - результат. Если ваша БД, написанная на "структурном" языке со всякими моделями в RWin добавляет 1 запись 60 секунд, то нафиг ее.
Видимо, те люди предпочитают все проверить и выбрать ЛУЧШЕЕ, а не верить многократно скопированным изречениям. -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
||||||||
|
|||||||||
HexoGenus |
|
|||
![]() Шустрый ![]() Профиль Группа: Экс. модератор Сообщений: 110 Регистрация: 28.8.2002 Где: Ростов-на-Дону Репутация: нет Всего: нет |
Хммммм.... ну спасибо ![]() ну хорошо давайте так... гото позволяет в любой момент перейти в другую точку программы так ![]() этим самым достигается то что какая то часть программы может использоваться повторно не более того...? Что еще реализует эту идею? Циклы для многократного повтора подряд и функции для повтора рекурсивного или непериодического... Что несут в себе полезного циклы? 1. Задание области видимости переменных которые не будут нужны за пределами цикла... 2. Повышенная наглядность при чтении программы... Что несут в себе полезного функции? Да замучаешься перечислять... тут и удобная передача аргументов и ... и... да возьми любую книжку по С и поймешь что именно благодаря тому что здесь наглядно определяются функции этот язык и получил такую популярность... Когда мы вместо функций и циклов начинаем применять гото (а именно так обычно и поступают многие из-за того что лень чуть больше постучать по кнопочкам) то мы отказываемя от всех этих преимуществ... Когда гото получает преимущество перед конструкциями языков высокого уровня? Как только нужно максимально все ускорить, ведь на вызовы функций и передачу им аргументов идет время... а если нужен цикл вечный то что может быть проще гото... ![]() Мое предложение такое давайте выложим не просто метафизические рассуждения хорошо или плохо а так: В данных случаях будет польза: ......... В данных случаях будет вред: ......... ![]() --------------------
Когда невозможно уже работать напряженнее, начни работать умнее. |
|||
|
||||
AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Если отвечать на поставленный вопрос именно относительно Linux, то там ответ прозрачный и идет от его создателя - goto используется для оптимизации кода по скорости и используются особенности компилятора gcc.
А философские рассуждения - нужен goto или не нужен вообще. Даже матом выругаться бывает к месту. И если смотреть коды Linux, то если смотреть контекст, когда используется goto, достаточно все ясно и не вызывает проблем. |
|||
|
||||
Paradox |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1135 Регистрация: 18.11.2002 Где: Россия Репутация: нет Всего: 1 |
Процитирую HexoGenus:
По-моему тут дело не втом что лень лишний раз постучать по кнопочкам, а лень просто лишний раз сесть и немного подумать как можно обойтись без гото
По-моему на асемблере трудно что то написать без гото а точнее без jz,jmp и т.д. А еще в 70-х был Алгол 68 и Fortran со своей знаменитой записью идентификаторов и последующей ошибкой стоимостью 10 000 000 000$ ![]() -------------------- --- |
||||
|
|||||
Fantasist |
|
||||||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
На уровне кода нет ни имен, ни типов, ни классов. На уровне кода мы вообще имеем только цифры. Но это ничего не показывает. 2Chingachguk: А ты вообще не лезь в наш структурный мир. ![]() Chingachguk, ты пишишь на ассемблере, и ты мыслишь ассемблером. Мышление уже у тебя так натренировалось. Ты очень крут в своей области, но это не типично и мало подходит для крупной командной разработки. Шахматная программа не сложна как программа. В ней сложны алгоритмы. Взаимодействий там довольно мало - она все обращена в себя.
Более того, память может быть выделенна динамически и никогда не освобождаться. Потому что кто-то решил перескачить через тот кусок кода, который отвественен за это - а так по тексту этого и не заметно. Куча ошибок можно получить. А без goto он подумает, как это сделать по другому, и тогда он более вероятно заметит, что должно быть выполнено. Новичкам поэтому вообще сильно не реккомендую использовать goto. Именно потому, что положившись на него, они будут меньше уделять внимания построению правильной структуры. Еще пример:
Казалось бы все логично, но кому-то может оказаться невдомек, что объект err скорее всего должен был быть уничтожен при выходе из catch{}, однако этот этап мы перескочили. -------------------- Волны гасят ветер... |
||||||
|
|||||||
Chingachguk |
|
||||||||||||||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Не вопрос:
_ЗЫ_1: Только не надо говорить мне, что есть локальные подпрограммы. В-первых, это ненужный довесок (чего он делает более понятным ?). Во-вторых, например у меня в BC.310 у меня их просто нет. Или я пишу для терминалов (сейчас) на СИ - TXO. И там тоже нет локальных подпрограмм. _ЗЫ_2: Это был ход ..e7-e6, если Вы хотите играть белыми. И я знаю немало хороших продолжений ;)
Можно, есть пакет под win32 со всей фигней типа IF, ELSE. Например, так можно писать даже VXD.
![]() ![]() Да ООП есть даже в ассемблере ! (см. Тома Свана книгу).
Ж)
А кто-то пробовал иначе - работать в команде на ассемблере ? Видимо, да. Вот примеры: 1. ДОС. Да, ДОС3+ очень грамотная и достаточно устойчивая, понятная разработчику ЛЮБОГО уровня система. Написана на ассемблере. 2. win98. Большая часть драйверов переписана на асм и от этого она сильно выиграла по сравнению с 95. Тоже была команда.
Это был пример того, что главное - это Результат. Как бы тупо он не был написан. Если Петя напишет тупейший код через goto, а Маша - через классы, но Петина программа будет работать в 10 раз быстрее, то чью программу предпочтет пользователь ? -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
||||||||||||||
|
|||||||||||||||
Fantasist |
|
||||||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
С каких это пор ассемблере стал кодом? Вроде как был языком так и оставался. И даже если там есть что-то типа ООП, то уж точно по типизации ассемблер не сравниться с высокоуровневыми языками.
Chingachguk, а как ты думаешь, почему сейчас так мало пишут на ассемблере? Я имею в виду цельные коммерческие проекты чисто на ассемблере? Покажите мне софтверную фирму, которая разрабатывает продукты хотя бы для среднего бизнеса на ассемблере. Ни в жизнь не поверю что такая есть. А ДОС могли и два человека написать. [/QUOTE]2. win98. Большая часть драйверов переписана на асм и от этого она сильно выиграла по сравнению с 95. Тоже была команда
Да конечно. Если ты, Chingachguk, напишишь операционную систему на асм, котороя будет быстрее и безглючнее чем Windows, и не будет уступать ей по возможностям, возможно многие пользователи предпочтут ее. Теперь, сколько шансов ее написать тебе в одиночку? Далее тебе понадобиться выпустить следующую версию, причем быстро. Надо же расширяться, продвигаться. Придут люди которых ты заставишь работать с твоим кодом, а его будет ОЧЕНЬ много. Каковы шансы, что они разберуться с ним быстро и правильно? Что они не повтыкают туда до фига глюков, ибо чего-то не заметили или на так поняли? Почему ты думаешь, слово "инкапсуляция", так часто витает в воздухе передового программерского мира? Все дело в том же - борьба за более строгую структурность, ибо только так можно поддерживать устойчивость при современных темпах и объемах разроботки программного обеспечения. -------------------- Волны гасят ветер... |
||||||
|
|||||||
Fantasist |
|
|||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Кстати, а почему эта тема все еще не во флейме?
-------------------- Волны гасят ветер... |
|||
|
||||
Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: нет Всего: 207 |
По определению, здесь обсуждаются вопросы о языке C, я не вижу причин почему нельзя обсудить и такой вопрос тоже. -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
Fantasist |
|
|||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Не-а, здесь уже обсуждают философию программирования. К С++ это прямиком не относится.
-------------------- Волны гасят ветер... |
|||
|
||||
MadGhost |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 20.11.2002 Репутация: нет Всего: нет |
по моему разговор ни о чем, там где он нужен, т.е. там где он необходим конечно лучше его поставить. Но если можно обойтись без него и вспоминать его не стоит.
У меня например никогда не вставал вопрос нужен гото или нет, я просто даже не знаю как и где метки ставить, оно мне не надо. кодю на Delphi, C++. т.е. реализация этих языков позволяет полностью избавить от ненужных GOTO. |
|||
|
||||
Turboman |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 11.12.2002 Где: Краснодар Репутация: нет Всего: нет |
Goto как goto...
![]() ![]() ![]() |
|||
|
||||
Андрей |
|
|||
Unregistered |
По-моему товарищ Chingachguk абсолютно прав по-поводу
использования goto для выхода из вложенных циклов. Я, например, если и применяю его то только с этой целью. Конечно, если посидеть да подумать можно организовать циклы так, чтобы можно было обойтись и без goto, но зачем. А вот слишком много их, это конечно не к месту. Где-нибудь один раз на 1000 строк -- это вполне нормально. |
|||
|
||||
Lelik12345 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 5.2.2006 Репутация: нет Всего: нет |
народ, помогите студентке, т.е. мне, очень надо!!
![]() в общем прога состоит из диалога, там про возраст, есть функция goto? которая бесконечно все пишет, как мне из нее выти??? помогите плиз, или подскажите другую функцию бесконечную, которая автоматом выходит...пожалуйста!!! ![]() Добавлено @ 00:23 ой забыла сказать, это все на С++3.1 на досе |
|||
|
||||
Dreamer_0x01 |
|
||||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: нет Всего: 12 |
что значит состоит из диалога? Хм...Надо бы записать в афоризмы ![]()
Так. Давайте для начала выясним, что означают эти понятия. А потом уже разберемся с вашей проблемой. -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
||||
|
|||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 4 Всего: 67 |
ж) телепаты в отпуске, так что код в студию....и желательно в отдельном топике...
-------------------- СУВ, Partizan. |
|||
|
||||
secado |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 5.2.2006 Репутация: нет Всего: 3 |
Если вы хотите использовать goto полезно будет знать следующее: по умолчанию, все операторы условные команды jmp в Assembler указывающие на предыдущие команды отмечаются как вероятно исполняемые (по модулю предсказанию переходов) - как составные части циклов, а те которые указывают далее по программе - как не исполняемые (счиатется, что jyb исполняют переход при невыполнении какого-то условия, if then .... else). Можно в ручном режиме указать модулю предсказания переходов возможность исполнения того или иного jmp, путем префикса - 2E (да) и 3E(нет)
|
|||
|
||||
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? Это ещё хуже ![]() -------------------- Не смей читать мою подпись!!! |
|||
|
||||
Goganchic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 678 Регистрация: 18.6.2004 Репутация: нет Всего: 5 |
srd, про си отдельный разговор: в си goto - необходимость
|
|||
|
||||
Goganchic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 678 Регистрация: 18.6.2004 Репутация: нет Всего: 5 |
Зато с твоей стороны ситуация просто супер, когда пользователь говорит, а я вот хочу еще одну маленькую фичку, на что ему начинают объяснять, что мол мы сможем сделать тебе такую фичку только за пол года, т.к. у нас код очень производительный и понимает его только компилятор. |
|||
|
||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Вы просто никогда не занимались поддержкой долгоживущих комплексов, когда код напиман в команде, причем от первоначальной команды уже никого нет в наличии. Вы так же наверное не выполняли CR( change request) и не видели удивленного взгляда заказчика, когда они видел количество часов, в которые это выливалось. А что делать? Если вместо читаемого кода и централизованного отлова ошибок автор занимался никому не нужной оптимизацией и отлавливанием эксепшенов по месту и привращеним их в коды возврата с последущим goto. -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
HappyLife |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 3 Всего: 8 |
А мне вот интересно, наступит ли момент, когда каждый перестанет спорить, с тем у кого больше или меньше опыта. Неужели всем так важно доказать свою правоту, вместо того чтобы жить, программировать как удобно, так как подсказывает опыт, так как умеешь. Так как требует ситуацию.
|
|||
|
||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Вы противоречите сами себе ![]()
и А вот это весьма спорно. Иногда при постановке вопроса "как удобно, как умеешь" выясняется , что такого программирования никому, кроме Вас, не надо. -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
Goganchic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 678 Регистрация: 18.6.2004 Репутация: нет Всего: 5 |
Vyacheslav, полностью согласен
|
|||
|
||||
popovda |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 290 Регистрация: 9.6.2006 Где: Москва Репутация: нет Всего: 6 |
"А зачем вообще использовать goto".
Например, затем, чтобы из нескольких вложенных циклов изящно выйти. C++ - это не Фортран 90/95, где есть имена циклов - т.н. безопасные метки. Очень удоно, кстати. А если применять goto не в пределах всего кода, а лишь в пределах блока {...} и не использовать его вместо if-else или switch, то все нормально и красиво. Весь ассемблер - это сплошные goto (jmp), и все довольны. -------------------- С уважением, Попов Д.А. |
|||
|
||||
Anikmar |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Если вы посмотрите мое отношение к goto - я никогда не приветствую его применение, если это запутывает код. Мой пост относился к мнению, что исключения призваны заменить goto с чем я не согласен. Если нужно запутать код - то и с goto и без оного его можно сделать просто нечитаемым.
Сейчас мой род занятий резко отличается от программирования и последним я занимаюсь как раз в неосновное рабочее время. А 7 лет я работал программистом, в команде из 20 человек, с поддержкой кода, написанного уволенными сотрудниками, и адаптации их к нуждам заказчиков. Причем это были аппаратно-программные комплексы, включающие АСУ (программирование контроллеров) и АРМы верхнего уровня. И при разборе чужого кода меня больше бесило отсутствие комментариев, а не наличие goto. Это спором назвать сложно - так как нету особого повода для спора. Тут скорее обмен мнениями - кто с чем сталкивался на практике. У нас таким авторам сразу давалось по рукам. Начальство следило. А вообще нас заставляли писать так, чтобы чужой код мог быть запросто разобран другим программистом - так как в командировки ездили все и отлаживали код на местах. И не всегда ехал тот, кто писал конкретный участок. Все вопросы читабельности и модульности решались на этапе проектирования. Были даже соглашения по именам переменных.
Тут перечислены все беды - и исключения и коды возврата и goto. Я то высказывал мнение, что нельзя использовать однозначно что-нибудь одно - для каждой ситуации нужно находить элегантный, понятный и быстрый код насколько это, конечно возможно. |
||||
|
|||||
Goganchic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 678 Регистрация: 18.6.2004 Репутация: нет Всего: 5 |
как показывает практика в 99% случаев это код без goto ![]() |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
||||
|
||||
Жуть |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 27.6.2006 Репутация: нет Всего: нет |
для 0.00001%
Добавлено через 1 минуту и 35 секунд хотя яб добавил еще пару "0" между "." и "1" |
|||
|
||||
Goganchic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 678 Регистрация: 18.6.2004 Репутация: нет Всего: 5 |
Anikmar, точно
![]() |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
![]() и много у вас было практики? ![]() -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
А ты столько кода столько 100 / (0.000001 ) == 10^8 == 100 метров написал вообще за свою жизнь? |
|||
|
||||
Hurricane |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 10.4.2007 Репутация: 6 Всего: 9 |
Ну налетели, коршуны... ![]() ![]() |
|||
|
||||
Goganchic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 678 Регистрация: 18.6.2004 Репутация: нет Всего: 5 |
MAKCim, опыта у меня достаточно, да к тому же пока что ни один заказчик не жаловался на написанный мной код: ни на скорость его работы, ни на расширяемость.
Это сообщение отредактировал(а) Goganchic - 10.5.2007, 19:17 |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
Goganchic,
верю, не обижайся ![]() -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
||||
|
||||
v_nikolaev |
|
|||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 6.5.2007 Репутация: нет Всего: нет |
не знаю, может уже кто-то написал. конструкции языка не приводят к так называемым несводимым циклам (циклы у которых несколько входов). а с такими циклами оптимизатору работать труднее. чаще всего он проводит цикловые оптимизации только в сводимых циклах, а несводимые старается свести, но это не всегда удаётся. другой вопрос в том, что и goto далеко не всегда приводит к несводимым. представляю себе стандартную ситуацию, в которой принято использовать goto - переход в конец функции. видел такие примеры, где удобство использования его было вызвано тем, что наваяли нереально большую функцию - вот с этим злом нужно было бы бороться, а думать пользоваться, что тут удобен гото. ну ещё есть и определённые правила хорошего тона. как однажды аргументировали на разборе задач на олимпиаде: - перебором пользоваться неудобно. - в каком смысле. - в том же смысле, как нехорошо использовать оператор goto ![]() |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Ну не будешь же ты говорить, что случаев употребления может быть меньше, чем байтов в исходниках? ![]() Так что это я взял минимальный вариант. На самом деле там еще полтора-два порядка нужно накинуть. ![]() |
|||
|
||||
Goganchic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 678 Регистрация: 18.6.2004 Репутация: нет Всего: 5 |
Anikmar, лучше так считать: минимальная конструкция с goto будет иметь вид
Т.е. содержать 7 символов + 2 символа - сама метка + двоеточие итого 9 символов. А вот теперь 9 используй вместо 100. А вообще, кто сказал, что что он уже больше не будет писать код в своей жизни? Может пока что идут те 99.999... а гоуту будет потом ![]() |
|||
|
||||
Anikmar |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
![]()
Нет, вы просто не попали в тот процент программистов, которые не заморачиваются и используют любые конструкции языка если им это удобнее ![]() Вопрос не в количестве кода, а в качестве ![]()
Фильм "Москва слезам не верит" - Переведи... И-и-ик... ![]() |
||||
|
|||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Не понял... |
|||
|
||||
Anikmar |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Да это так, в этом фильме момент есть прикольный. По поводу социального статуса и т.п. Просто я не понял вашей фразы:
И вобще - я уже просто нагло офтоплю, мне стыдно... ![]() |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |