Объединяющий перерыв, продолжить, вернуться и бросить - PullRequest
1 голос
/ 05 сентября 2011

При реализации языка, который поддерживает все эти конструкции, мне кажется, что должна быть возможность рассматривать break, continue, return и throw как аспекты одной и той же вещи, что-то вроде возвращения из (или выполнения tail)рекурсия на, в случае продолжения) функция дальше вверх по стеку вызовов, не обязательно текущая функция.

Очевидно, я не собираюсь быть первым, кто подумал об этом.Кто-нибудь знает какие-либо ссылки на обсуждение (или реализацию с открытым исходным кодом) этого способа ведения дел?

1 Ответ

3 голосов
/ 05 сентября 2011

Все эти вещи могут быть легко реализованы поверх продолжений первого класса (например, в Схеме).

Но я сомневаюсь, что это когда-либо может быть самой эффективной реализацией, поэтому лучший подход до сих пор состоит в том, чтобы рассматривать их как разные объекты - разрыв и продолжение разрешаются на этапе компиляции как простые переходы, реализация возврата зависит от соглашений о вызовах throw / catch также должен опираться на соглашения о вызовах и ABI, определенные для целевой платформы.

...