LINUX.ORG.RU

Обработка исключительных ситуаций в няшной Сишке


2

9

вы мне тут говорили, что Си это хорошо.

Но я не обнаружил в моем компиляторе try.

а бейсик таки поддерживает: ON ERROR GOSUB ....

керниган и ричи, таки не осилили то, что сделали студенты из дармутского колледжа...

а это ведь важнее локальных переменных, да.

Перемещено mono из talks

Ответ на: комментарий от TheKnight

Троллинг всегда возможен. Но и обозвать тролля умственно отсталым - вполне нормально :)

tailgunner ★★★★★
()
Ответ на: комментарий от chelovek-bugurt

У тебя какие-то проблемы с Гуглом?

Не-а. А у тебя явные проблемы с определением «кротовой норы», раз ты никак не хочешь его опубликовать.

tailgunner ★★★★★
()
Ответ на: комментарий от metawishmaster

то что ты тут лопочешь о «кротовых норах» говорит не только о том, что ты не умеешь пользоваться goto так, чтобы не создать эту норку. ну и разбираться в чужом коде не умеешь

Да что ж вы такие тугие. Goto ПО ОПРЕДЕЛЕНИЮ создаёт кротовую нору. Тут исчез, там появился.

P.S. Я в школе тоже был уверен, что goto - это зло. И на первых курсах Универа... но потом как-то попустило :)

Это в порядке вещей. Столкновение практики и теории, как правило, плачевно заканчивается для последней. Но это не означает, что можно полностью отринуть теорию и делать абы как, следуя капризам действительности. Так пороха не изобретёшь.

chelovek-bugurt
()
Ответ на: комментарий от tailgunner

Крото́вая нора́, также «крото́вина» или «червото́чина» (последнее является дословным переводом англ. wormhole) — гипотетическая топологическая особенность пространства-времени, представляющая собой в каждый момент времени «туннель» в пространстве.

chelovek-bugurt
()

а бейсик таки поддерживает: ON ERROR GOSUB ....

Это сильно далеко от нормальной системы обработки исключений. Чтобы с помощью сей конструкции сделать что-то более серьёзное, чем «вывести сообщение и убиться», нужно навелосипедить кучу дополнительных костылей.

Deleted
()
Ответ на: комментарий от chelovek-bugurt

Крото́вая нора́, также «крото́вина» или «червото́чина» (последнее является дословным переводом англ. wormhole) — гипотетическая топологическая особенность пространства-времени, представляющая собой в каждый момент времени «туннель» в пространстве.

Организуется с помощью оператора goto. На каких именно веществах ты сидишь?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Это сейчас модно - прикидываться дурачком? Что конкретно тебе непонятно из этого:

Код программы имеет одно или два измерения, а goto плодит кротовые норы

chelovek-bugurt
()
Ответ на: комментарий от chelovek-bugurt

Это сейчас модно - прикидываться дурачком?

Норкоман, уходи.

Код программы имеет одно или два измерения

А пространство-время - это четыре измерения %)

tailgunner ★★★★★
()
Ответ на: комментарий от KivApple

Си это мощный инструмент для более низкоуровневого программирования (не случайно там ООП нет)

Деннис Ритчи: Ну что, может сделаем без ООП?

Кен Томпсон: Да без базара.

anonymous
()
Ответ на: комментарий от chelovek-bugurt

Если программист употребляет goto, значит, он не умеет обращаться с алгоритмами.

Кнут употребляет goto.

anonymous
()
Ответ на: комментарий от djenterprise
ON ERROR GOSUB 10
A = 1/0
PRINT "OK"
RESTART
10 PRINT "Division by Zero"
RETURN

Фу как не структурировано.

korvin_ ★★★★★
()
Ответ на: комментарий от chelovek-bugurt

Код программы имеет одно или два измерения

А пространство-время - это четыре измерения %)

А кротовая нора позволяет обойти их ограничения.

Обойти ограничения пространства-времени в одномерной программе. Какая прелесть.

tailgunner ★★★★★
()
if (foo1(a,b) != 0)
       goto ERROR;

...
return OK;
ERROR:
return ERR;
Dudraug ★★★★★
()
Ответ на: комментарий от chelovek-bugurt

Код программы имеет одно или два измерения, а goto плодит кротовые норы.

Тебя головой об стену слишком часто били. Нормальный человек говорил бы про reducible vs. irreducible CFG, и был бы соответственно послан, потому как есть огромное количество ситуаций, когда irreducible CFG предпочтителен.

Например, большинство конечных автоматов совершенно irreducible.

Не, конечно, наговнокодить и забыть можно, но сопровождать это спагетти даже высококвалифицированному программисту будет сложно.

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

А что касается вас, бугуртящих в этой теме насчёт goto, ну и пользуйтесь им, кто вам запрещает?

Пойди, поори на Торвальдса или Кнута. Они ж, ламеры такие, goto во все щели пихают.

Только не нужно выдавать это за показатель мастерства. Подумаешь, говнокодер! Где сейчас высококачественных программистов найти можно?

Ну уж не тебе, сыну шлюхи-наркоманки, рассуждать о высококачественных программистах. Сам то ты, говна кусок, даже fizz-buzz без ошибок не напишешь.

anonymous
()
Ответ на: комментарий от chelovek-bugurt

Да что ж вы такие тугие. Goto ПО ОПРЕДЕЛЕНИЮ создаёт кротовую нору. Тут исчез, там появился.

Але, сявка, это ты сам тугой на всю свою крошечную бестолковку. В SSA- или в CPS- представлении код перепиши, а после этого попробуй свой убогий бред повторить.

Но это не означает, что можно полностью отринуть теорию и делать абы как, следуя капризам действительности. Так пороха не изобретёшь.

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

Согласно теории как раз в goto вообще ничего плохого нет. Потому как любой control flow в рамках одной процедуры это частный случай goto. Согласно теории, любой irreducible CFG можно привести в reducible (соответственно, к структурным конструкциям), но иногда это будет довать полиномиальный рост сложности кода.

Если какое-то из слов в предыдущем абзаце тебе, сопляку, не понятно - то не стесняйся, спрашивай у гугла.

anonymous
()
Ответ на: комментарий от chelovek-bugurt

Код программы имеет одно или два измерения, а goto плодит кротовые норы.

А все стандарты писали идиоты значит.

Где сейчас высококачественных программистов найти можно?

В твоем пту.

tensai_cirno ★★★★★
()
Ответ на: комментарий от chelovek-bugurt

Goto ПО ОПРЕДЕЛЕНИЮ создаёт кротовую нору.

Пфф. Goto как раз прозрачен, тут появился, туда попал. А call/cc как раз создает кротовую нору.

tensai_cirno ★★★★★
()
Ответ на: комментарий от tensai_cirno

Интересно, этот бугурт видел когда либо Duff's device? Не пора ли ему начать крестовый поход против switch/case?

anonymous
()
Ответ на: комментарий от anonymous

Доводы против оператора goto.

Эдсгер В. Дейкстра

За многие годы я утвердился во мнении о том, что квалификация программистов - функция, обратно зависящая от частоты появления операторов go to в их программах. Позже я открыл, почему оператор go to производит такой пагубный эффект, и я убежден в том, что оператор go to должен быть отменен в языках программирования «высокого уровня» (т.е. отовсюду, кроме, возможно, простого машинного кода).

Archer73
()
Ответ на: комментарий от Archer73

И теперь будем повторять троллинг Дийкстры как священную мантру?

Вот откуда вы все выползаете-то, ничтожества? Дийкстра-то троллил против жуткого, лапшеобразного подхода, традиционного для Фортрана. Сейчас ситуация другая, и вся эта социальная реклама про «goto это зло, goto ест детей» уже абсолютно неуместна.

А если вы, ничтожества, ничего кроме апелляции к авторитету вообще за аргумент не считаете, тогда все равно, Кнут на порядок круче чем всякие там Дийкстры.

anonymous
()
Ответ на: комментарий от Archer73

Доводы против оператора goto.

Все эти теоретические рассуждения разбиваются о практику применения конкретных языков. Например в С/С++ это самый адекватный способ прервать несколько вложенных циклов, в Си так проще обрабатывать ошибки, некоторые конечные автоматы с goto тоже очень хорошы и лаконичны.

staseg ★★★★★
()
Ответ на: комментарий от Dark_SavanT

Этому в development не место ИМХО

Цы! Не мешай анонимусу развлекаться.

staseg ★★★★★
()
Ответ на: комментарий от tensai_cirno

А call/cc как раз создает кротовую нору.

Если ты думаешь, что этот школьнег бугурт знает, что такое call/cc, то, скорее всего, ты глубоко заблуждаешься.

anonymous
()
Ответ на: комментарий от anonymous

---тут было предположение о том, что от лица анонимуса к нам заглянул VSL---

Dark_SavanT ★★★★★
()
Последнее исправление: Dark_SavanT (всего исправлений: 1)
Ответ на: комментарий от tensai_cirno

А все стандарты писали идиоты значит.

Их писали не идиоты, а просто больше практики, чем теоретики.

chelovek-bugurt
()
Ответ на: комментарий от staseg

Например в С/С++ это самый адекватный способ прервать несколько вложенных циклов, в Си так проще обрабатывать ошибки, некоторые конечные автоматы с goto тоже очень хорошы и лаконичны.

Пример с выходом из нескольких вложенных циклов, единственный случай в моей практике, когда я убедился в нужности goto. В меня тоже учителя вбивали, что goto вреден и противоречит концепциям структурного программирования. В то же время мне доводилось работать со старыми длинными программами на Fortran-77 в которых goto во всех щелях. Разбирать эту лапшу неприятно и мучительно.

Archer73
()

Эдсгер В. Дейкстра

Студентов, ранее изучавших Бейсик, практически невозможно обучить хорошему программированию. Как потенциальные программисты они подверглись необратимой умственной деградации.

Archer73
()
Ответ на: комментарий от rand

а это ведь важнее абстрактных фабрик абстрактных визиторов, да.

нет, не важнее. Без указателей отлично создаются и работают программы. А без фабрик код превращается в говно.

JFreeM ★★★☆
()
Ответ на: комментарий от Archer73

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

Твоя практика убога. Очевидно, ты - быдлокодер. Тебе никогда не приходилось делать быстрые FSM. Тебе никогда не приходилось генерить код на Си из более высокоуровневого языка или даже с его собственным препроцессором. Тебе не приходилось писать интерпретаторы VM. Ты - формошлепщик, и не более того. Вон из профессии!

В меня тоже учителя вбивали, что goto вреден и противоречит концепциям структурного программирования.

Твои учителя - дебилы и свиньи. И ты таким же у них получился.

anonymous
()
Ответ на: комментарий от JFreeM

Без указателей отлично создаются и работают программы. А без фабрик код превращается в говно.

Но работает? Да, и даже ты это признаешь. Так что фабрики кода уж точно не важнее указателей.

P.S. в Java ссылки - просто немного замаскированные указатели.

tailgunner ★★★★★
()
Ответ на: комментарий от Archer73

В меня тоже учителя вбивали, что goto вреден и противоречит концепциям структурного программирования.

В общем, они были правы, но немного перестарались.

Разбирать эту лапшу неприятно и мучительно.

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

tailgunner ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Лучше бы никаких учителей не было, чем такие.

anonymous
()
Ответ на: комментарий от Archer73

Ну так - классика троллинга, не хрен свинячий. Дийкстра вообще в этом деле моду задал на годы вперед.

anonymous
()
Ответ на: комментарий от Archer73

да, да, да.

аффтар, скойжы, а спагетти-код - это явление PHP и JSP, где есть все операторы структурного программирования, да?

GOTO и GOSUB - это инструмент.

Структурное программирование - это методология. Она может реализовано и с GOTO и с GOSUB

и даже на ассемблере, да

djenterprise
() автор топика
Ответ на: комментарий от Archer73

программами на Fortran-77

Окстись, это же хуже, чем BASIC на ZX_Spectrum — там хоть можно было через двоеточие несколько выражений в if .. then воткнуть, а в фортране никак. Вот если бы кто на сишке начал лепить

if (a > b) goto l_10;
l_15:
if (b < c) goto l_20;
return;
l_10: b = a;
goto l_15;
...

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

if (acquire_resource_1()) {
    if (acquire_resource_2()) {
        if (acquire_resource_3()) {
            return f(resource_1, resource_2, resource_3);
        }
        release_resource_2();
    }
    release_resource_1();
    return error_code;
}
принципиально лучше, чем
    if (!acquire_resource_1()) goto res1_fail;
    if (!acquire_resource_2()) goto res2_fail;
    if (!acquire_resource_3()) goto res3_fail;
    return f(resource_1, resource_2, resource_3);
res3_fail:
    release_resource_2();
res2_fail:
    release_resource_1();
res1_fail:
    return error_code;

red_eyed_peguin
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.