Size: a a a

2021 August 30

VT

Vasily Terkin in Modern::Perl
выход из функции с ошибкой часто goto
источник

VT

Vasily Terkin in Modern::Perl
еще как присутствует
источник

VT

Vasily Terkin in Modern::Perl
    goto LABEL
   goto EXPR
   goto &NAME
           The "goto LABEL" form finds the statement labeled with LABEL and
           resumes execution there. It can't be used to get out of a block
           or subroutine given to "sort". It can be used to go almost
           anywhere else within the dynamic scope, including out of
           subroutines, but it's usually better to use some other construct
           such as "last" or "die". The author of Perl has never felt the
           need to use this form of "goto" (in Perl, that is; C is another
           matter). (The difference is that C does not offer named loops
           combined with loop control. Perl does, and this replaces most
           structured uses of "goto" in other languages.)
источник

P

Prizëm e hënës in Modern::Perl
А, значит с чем-то путаю. С Питоном, наверно.
источник

VT

Vasily Terkin in Modern::Perl
в питоне полагаются на исключения
источник

P

Prizëm e hënës in Modern::Perl
Да, но это уже не совсем goto?
источник

VT

Vasily Terkin in Modern::Perl
ваще не goto
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
да, это гораздо хуже
источник

VT

Vasily Terkin in Modern::Perl
неотловленное иключение может ужалить в совершенно неожиданном месте
источник

SZ

Sergey Zhmylove in Modern::Perl
Тебя го покусал?
источник

VT

Vasily Terkin in Modern::Perl
я его близко не подпускаю
источник

a

allter in Modern::Perl
Как оно может ужалить, если оно неотловленное? А вот криво отловленное может. Поэтому я понимаю гугловцев с их стремлением от них отказаться. Но не разделяю его, т.к. отказ от исключений - это ад в более-менее сложном коде.
источник

VG

Vadim Goncharov in Modern::Perl
что такое криво отловленное? ад же из кода делают как раз исключения
источник

a

allter in Modern::Perl
Например, когда где-то на верхнем уровне приложения есть отлов и обработка исключений, после чего при обработке исключения есть попытка перезапустить сбойную часть кода приложения ещё раз.

Если в команде не умеют в RAII и не снабжают код разными гвардами, то в момент, когда это исключение прилетит, структуры данных приложения будут в беспорядочном состоянии (в зависимости от того, какое исключение возбудилось и где). И когда сработает обработчик, то при попытке ретрая будут возникать "наведённые" ошибки.

Но вот если в команде всё через коды возвратов, то, как правило, более-менее сложные ретраи реализовать вообще нереально. Когда глубина стека, где может возникнуть ошибка превышает 20-50 (т.е. потенциальное количество ветвлений 2^20 и больше), анализ, правильно ли прокидывается ошибка из таких глубоких обработчиков кодов возврата - практически нереально произвести.

Соответственно, при грамотном использовании исключений с управлением ресурсами через RAII (или другой принятый в языке механизм) надёжность программы увеличивается за счёт того, что уменьшается количество мест, где ошибка неправильно сконвертируется и пробросится.
источник

VG

Vadim Goncharov in Modern::Perl
> превышает 20-50

кто сказал Java
источник

VG

Vadim Goncharov in Modern::Perl
и как же в ядрах без исключений живут, бедные
источник

a

allter in Modern::Perl
любая программа, которая работает не по парадигме "запрос - ответ/немедленное действие без состояния"
источник

a

allter in Modern::Perl
Если ты про un*x, то благодаря этому (максимальной простоте и обработке ошибок) и живут. В ядре нет необходимости сложной логики.
источник

VG

Vadim Goncharov in Modern::Perl
ыы, да щаз
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
> Когда глубина стека, где может возникнуть ошибка превышает 20-50 (т.е. потенциальное количество ветвлений 2^20 и больше)

просто не надо говнокодить
источник