vak: (Бодхидхарма)
[personal profile] vak
Пока Дейкстра ругался на оператор goto (1968), Martin Richards изобрёл (в языке BCPL, 1967) механизм нелокальных переходов longjmp. Кен Томпсон и Деннис Ритчи встроили это дело сначала в язык Би, потом в Си. Идея прижилась, позже превратившись в try/catch в Си++.

Нелокальные переходы штука полезная в умелых руках. Иногда без неё не обойтись. Там есть куча подводных камней. Мне когда-то приходилось реализовывать setjmp/longjmp на разных архитектурах. Уже подзабылось маленько. Может кто и описал это дело в книжках, но где ж те книжки отыщешь. Благо имеем ИИ, можно спросить.

Вот статья с хорошим изложением темы от Клода: "Non-Local Jumps in C: Understanding setjmp and longjmp"

Целевая аудитория: программисты на C, знакомые с функциями, указателями и стеком вызовов, но ещё не сталкивавшиеся с нелокальным управлением потоком выполнения.

Цель: сформировать чёткое представление о том, как работают setjmp/longjmp, когда их следует использовать и — что не менее важно — когда их следует избегать.

Date: 2026-05-23 22:56 (UTC)
From: [personal profile] dijifi

Date: 2026-05-23 23:21 (UTC)
From: [personal profile] dijifi

Плаугера не замай!

Date: 2026-05-24 01:47 (UTC)
From: [personal profile] dijifi

Она и учит. Если она у Вас на полке, посмотрите на предыдущую страницу.

Despite my initial caveat, 1 present here versions of the functions set jmp and long jmp written in C. I do so only to illustrate the principles involved. Do not use this code in a serious implementation. It barely works, and then only for implementations that have special properties: • The calling environment for the calling function and other dynamically allocated storage are stored in a contiguous area at the top of the stack. • The calling environment includes all information that must be preserved by set jmp and restored by long imp. You can reliably capture this information by copying a fixed number of characters.

Date: 2026-05-24 01:05 (UTC)
sab123: (Default)
From: [personal profile] sab123
На нем портабельно пишутся coroutines.

Date: 2026-05-24 01:51 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
Мне повезло, я старался держаться от такой дикой хрени подальше, и мне удалось.

Date: 2026-05-24 05:11 (UTC)
x86128: (Default)
From: [personal profile] x86128
Так-то очень опасно если память не на стеке выделять...