169 похожих чатов

А какие у этого try практические плюсы перед eval?

41 ответов

42 просмотра

Джава-господа не писаются с порога

С eval можно выстрелить себе в ногу. С помощью любых перловых try/catch тоже, но например, последствия локализации $@ обычно нивелируются.

Как и у всех правильно сделанных конструкций такого типа - правильное разматывание стека.

Если при выходе из евал вызывается деструктор, внутри которого есть евал, то значение $@ переписывается

Самуан Ункновн
Джава-господа не писаются с порога

Джава-господам должен заходить пхп, там эта часть один в один

Anton Petrusevich
Джава-господам должен заходить пхп, там эта часть ...

Да, но ядерный try/catch тоже чудной, что печалит

Andrey Smirnov / 𝓪𝓵𝓵𝓽𝓮𝓻 /
С eval можно выстрелить себе в ногу. С помощью люб...

Вы всему верите, что вам говорят? ) perl -e 'eval { die 5 }; print "`$@`\n"; eval {6}; print "`$@`\n";' `5 at -e line 1. ` ``

Что с eval нельзя выстрелить себе в ногу. Существует распространённое заблуждение, что удачно завершившийся eval не сбрасывает $@. Приведённый однострочник это опровергает

Oleg-Volkov Автор вопроса
Ярослав🧞 Косьмина
Что с eval нельзя выстрелить себе в ногу. Существу...

Эээ... Это где это такое распространено и по какой логике? Проверка $@ сразу после eval - это основное её использование и оно бы не работало если бы всё было согласно "заблуждению".

Oleg Volkov
Эээ... Это где это такое распространено и по какой...

Просто люди зачем-то модули вроде Try::Tiny используют и утверждают, что eval "плохо работает" )

Ярослав🧞 Косьмина
Просто люди зачем-то модули вроде Try::Tiny исполь...

потому что у того в доке описаны всякие corner cases, и он удобнее

Vadim Goncharov
потому что у того в доке описаны всякие corner cas...

Мне вот не удобно подниматься в начало файла и там прописывать use Try::Tiny и затем возвращаться. Хотя я и использую для этого закладки. Ещё он зачем-то подменяет $@ на $_. А если у меня в $_ уже есть значение, то его придётся перекладывать в какую-то переменную? Или под "удобно" имеется ввиду не удобство программирования, а нечто иное? )

Ярослав🧞 Косьмина
Мне вот не удобно подниматься в начало файла и там...

Если у тебя в $_ есть значение, то ты уже немношко не прав

Artem Tepponen
Если у тебя в $_ есть значение, то ты уже немношко...

Ты имеешь ввиду, что все перловики немножко не правы, что программируют на языке в котором есть $_ ? ;)

Ярослав🧞 Косьмина
Ты имеешь ввиду, что все перловики немножко не пра...

Не, $_ иногда полезна. Но... если есть возможность, лучше без.

Ярослав🧞 Косьмина
Мне вот не удобно подниматься в начало файла и там...

вы еще не используете тайд local $_ ? тогда мы идём к вам кипятить вас!

Ярослав🧞 Косьмина
Мне вот не удобно подниматься в начало файла и там...

а с началом файла ты нас просто троллишь пьяным пятничным вечером, признайся :)

Ярослав🧞 Косьмина
map { eval { 1/$_ } } 0..3

use Try::Tiny; my @floats; for my $integer (0.. 3) { . push @floats, try { . return 1/$integer; . } catch { . return; . } } Это правильнее?

Vadim Goncharov
вы еще не используете тайд local $_ ? тогда мы идё...

При чём тут local? Вот как переписать этот пример с local, без $x? map { my $x=$_; try { 1/$x } catch { say "$x $_" } } 0..3

Ярослав🧞 Косьмина
При чём тут local? Вот как переписать этот пример ...

это был тонкий намёк, что AnyEvent отучает от $_ или хотя бы заставляет локализовывать его :)

Ярослав🧞 Косьмина
При чём тут local? Вот как переписать этот пример ...

Перл много где позволяет изъебнуться. Но в большинстве ситуаций наверное не стоит

Ярослав🧞 Косьмина
Гм. Вместо счётчика caught

Illegal division by zero at -e line 2 вполне достаточно для дебага :)

Vadim Goncharov
не всё корофицировали :)

Всё что энифицировали, то всё и корофицировали, потому что в Coro есть rouse_cb/rouse_wait, для превращения выражений эниэвент в коро

Ярослав🧞 Косьмина
Всё что энифицировали, то всё и корофицировали, по...

прям всё настолько просто и без подводных граблей?

Vadim Goncharov
Illegal division by zero at -e line 2 вполне дост...

А на каком шаге произошла ошибка?

А если деление в недрах библиотечной функции происходит, а в ней делается минус 3 счётчику, например?

Ярослав🧞 Косьмина
А если деление в недрах библиотечной функции проис...

c библиотечной у тебя и в случае eval {} такие же проблемы

Vadim Goncharov
прям всё настолько просто и без подводных граблей?

Да. Ещё распространённая задача какие-то глобальные переменные переключать с переключением волокон. Для этого есть обработчики событий выхода и входа из/в произвольное волокно

Vadim Goncharov
c библиотечной у тебя и в случае eval {} такие же ...

map { . my $x=$_; . try { fn_in_lib($x) } . catch { say "$x $_" } } 0..3 map { . eval { fn_in_lib($_) }; . say "$_ $@" if $@; } 0..3 где это?

Ярослав🧞 Косьмина
map { . my $x=$_; . try { fn_in_lib($x) } . catc...

где-то в жопе, если fn_in_lib сама использует $_ =)

Ярослав🧞 Косьмина
Coro лучше AnyEvent, разве нет? )

AnyEvent всё равно остаётся, как более низкоуровневый инструмент.

Mons Anderson
AnyEvent всё равно остаётся, как более низкоуровне...

perl <- go <- c <- asm <- машинные коды <- плис <- микросхемы <- счёты

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта