Ну как же не используется? В оконных менеджерах обычно требуется динамически выделяемая память для сохранения содержимого экрана под окнами. Я еще в 1995г сделал на спеке менеджер кучи, да и уверен, кроме моей были и другие реализации. Любая ось, в том числе синклер-бейсик, выделяет динамические ресурсы. RST 8 в бейсике - простейший случай реализации исключений, хоть и одноуровневый.
Динамически выделенные ресурсы необходимо освобождать при любой модели их организации, будь то куча, стек или еще что-то. Ключевой момент здесь в том, что имеет место динамическое выделение, а куча или не куча - дело десятое.
Я думал, ты в курсе, как работает RST 8, но если нет - поясню. Он восстанавливает SP из системной переменной ERR_SP и выполняет возврат. Таким образом, при выполнении RST 8 где-нибудь во вложенной подпрограмме из бейсика, выполняется "ускоренный возврат" на верхний уровень исполнения. При этом освобождается ресурс - стек, на котором хранятся адреса вложенных подпрограмм и сохраненные значения регистров. Временно выделенная память не освобождается, но по-видимому, RST 8 не используется в тех местах бейсика, где нужно освобождать временно выделенную память, либо такое освобождение реализуется до вызова RST 8, то есть в обход механизма исключений.
Если RST 8 срабатывает при проверке синтаксиса - то бейсик отображает знак вопроса в редактируемой строке, в противном случае - печатает сообщение об ошибке. То есть налицо некое подобие блоков TRY/CATCH, так как по RST 8 возврат не всегда происходит в одно и то же место кода.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
А зря! Бейсик написан умными людьми, я почерпнул оттуда немало идей, изучая Ян-логановский дизассемблер. Не говоря уже о том, что узнал некоторые полезные и малоизвестные особенности бейсика, которые потом использовал в своих прогах.
Который, в свою очередь, (см. Википедия Longjmp) обычно используется для реализации в языке C механизма исключений. Средства разные, концепция одна.
Можно передавать ошибки насквозь через флаг CY. Но в таком стиле надо писать ВСЕ подпрограммы.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)