Size: a a a

Saint P Ruby Community

2020 January 13

SM

Sergei Maximov in Saint P Ruby Community
Ilya Nikolaevich
я вообще за всю свою жизнь гото в реальном проекте видел только 2 или 3 раза.
Главный пример был в математическом софте. Там какая-то хитрая ситуация была и мне мне объяснили, что только гото обеспечивает чистоту кода и быстродействие.
Но я уже ничего не помню об этом. Ни языка, ни конкретной ситуации.
Но в тот момент я согласился, что да, без гото решить задачу будет крайне сложно. И вероятно медленнее.
Так что верю что гото может быть крайне полезным инструментом, но в супер редких случаях
В виртуальной машине Erlang, например, goto используется для оптимизации выполнения инструкций. Каждый опкод инструкции является на самом деле указателем на код инструкции, и выполнение этой инструкции происходит через goto по этому адресу (вроде используется расширение GCC/clang computed goto).

А называется эта штука https://en.wikipedia.org/wiki/Threaded_code, используется в некоторых компиляторах и виртуальных машинах.
источник

IN

Ilya Nikolaevich in Saint P Ruby Community
Alex
Роллбэк через исключение это инструмент, который предоставляет нам фреймворк, но это не значит, что мы должны свой код в приложениях писать таким же образом, т.е. то, что в AR используется некая практика не делает практику автоматически хорошей.
удваиваю господина.
Ружье не может быть злом. Ты можешь или тещу подстрелить по пьяни, или добыть пропитание для семьи.
Инструмент не виноват.
источник

w

wi11son in Saint P Ruby Community
но всё же "добывать пропитание" правильнее, а потому и рекомендуют для тех кто НЕ разбирается использовать только в случаях, когда уже начал разбираться
источник

A

Alex in Saint P Ruby Community
Sergei Maximov
В виртуальной машине Erlang, например, goto используется для оптимизации выполнения инструкций. Каждый опкод инструкции является на самом деле указателем на код инструкции, и выполнение этой инструкции происходит через goto по этому адресу (вроде используется расширение GCC/clang computed goto).

А называется эта штука https://en.wikipedia.org/wiki/Threaded_code, используется в некоторых компиляторах и виртуальных машинах.
Коллеги, мы не с того начали. Я не утверждал, что goto есть квинтэссенция зла. Я говорил о том, что в повседневной жизни его использовать не стоит и использование является признаком наличия проблем с дизайном.
источник

w

wi11son in Saint P Ruby Community
как говорил сам Влад(имир): "читайте exceptional ruby"
источник

SM

Sergei Maximov in Saint P Ruby Community
Alex
Коллеги, мы не с того начали. Я не утверждал, что goto есть квинтэссенция зла. Я говорил о том, что в повседневной жизни его использовать не стоит и использование является признаком наличия проблем с дизайном.
Ну мне вроде в моём рубишном коде его использовать не приходилось (по крайней мере я не могу сейчас вспомнить), но тем не менее я знаю, в каких случаях и языках он будет полезен.
источник

АШ

Алексей Шеин in Saint P Ruby Community
Лучше чем что? :)
источник

SM

Sergei Maximov in Saint P Ruby Community
Sergei Maximov
Ну мне вроде в моём рубишном коде его использовать не приходилось (по крайней мере я не могу сейчас вспомнить), но тем не менее я знаю, в каких случаях и языках он будет полезен.
А так согласен, почти всегда можно сделать без него лучше.
источник

w

wi11son in Saint P Ruby Community
Алексей Шеин
Лучше чем что? :)
я тебе рефку подгоняю, а ты вопросы такие задаешь...
источник

A

Alex in Saint P Ruby Community
Sergei Maximov
А так согласен, почти всегда можно сделать без него лучше.
Об этом и речь, да.
источник

АШ

Алексей Шеин in Saint P Ruby Community
А, ок, я просто не сразу понял :)
источник

NS

Nikita Shilnikov in Saint P Ruby Community
у меня весь код на goto, правда это в гемах все
источник

IM

Igor Morozov in Saint P Ruby Community
эффектное заявление, сразу видно
источник

IM

Igor Morozov in Saint P Ruby Community
(плохой pun intended)
источник

NS

Nikita Shilnikov in Saint P Ruby Community
да что монады, что рода, все то же
источник

A

Alex in Saint P Ruby Community
монады и рода могут быть сделаны как угодно, специфические задачи могут требовать нестандартных подходов, но отлаживать сложную бизнеслогику на исключениях и goto я бы никому не пожелал:)
источник

IM

Igor Morozov in Saint P Ruby Community
я не так давно внезапно допёр, что идея «запихнуть нечистоты в сигнатуру функций» не просто старая, а очень старая

вот есть алг. эффекты — круто, в сигнатуре рядом с типами можно описать, что в функции есть IO, стейт, ещё что-то.

и в целом, идея вынести такие штуки в сигнатуру, и чтоб компилятор проверял — очень классная идея.

а потом осознал, что в Java это с исключениями уже давно сделали 🙈
источник

A

Alex in Saint P Ruby Community
Igor Morozov
я не так давно внезапно допёр, что идея «запихнуть нечистоты в сигнатуру функций» не просто старая, а очень старая

вот есть алг. эффекты — круто, в сигнатуре рядом с типами можно описать, что в функции есть IO, стейт, ещё что-то.

и в целом, идея вынести такие штуки в сигнатуру, и чтоб компилятор проверял — очень классная идея.

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

NS

Nikita Shilnikov in Saint P Ruby Community
Alex
монады и рода могут быть сделаны как угодно, специфические задачи могут требовать нестандартных подходов, но отлаживать сложную бизнеслогику на исключениях и goto я бы никому не пожелал:)
нормально делай — нормально будет
источник

IM

Igor Morozov in Saint P Ruby Community
Alex
В джаве чекед эксепшены это тот еще адок. Идея может быть и хорошая, но реализация сильно так себе. Ну и их, вроде бы, давно сделали необязательными.
Я на джаве только по совсем зелёной юности писал, а за счёт чего там адок?

Много писать? Мало пользы?
источник