Oberon space

General Category => Общий раздел => Тема начата: vlad от Февраль 04, 2014, 05:53:31 am

Название: Классическая реализация вложенных процедур в оберона
Отправлено: vlad от Февраль 04, 2014, 05:53:31 am
Чего-то мне воображение рисует какие-то сложные схемы. Особенно для случая вызова внешних процедур (level - n) из локальных. Кто-нибудь разбирался как оно по Вирту должно быть?
Название: Re: Классическая реализация вложенных процедур в оберо
Отправлено: kkkk от Февраль 04, 2014, 11:45:06 am
Передача во вложенную функцию неявным параметром указателя на стек объемлющей функции не подойдёт?
Название: Re: Классическая реализация вложенных процедур в оберо
Отправлено: vlad от Февраль 04, 2014, 04:19:36 pm
Передача во вложенную функцию неявным параметром указателя на стек объемлющей функции не подойдёт?

Да, наверное можно. У меня просто подсознаетельно ощущение, что это не будет работать из-за привычки, что функция всегда может быть вызвана откуда угодно по указателю. А тут похоже все строго - начало стека всех объемлющих процедур всегда можно вычислить имея указатель на стек родительской.
Название: Re: Классическая реализация вложенных процедур в оберо
Отправлено: valexey_u от Февраль 04, 2014, 05:56:17 pm
Передача во вложенную функцию неявным параметром указателя на стек объемлющей функции не подойдёт?

Да, наверное можно. У меня просто подсознаетельно ощущение, что это не будет работать из-за привычки, что функция всегда может быть вызвана откуда угодно по указателю. А тут похоже все строго - начало стека всех объемлющих процедур всегда можно вычислить имея указатель на стек родительской.
Ну, поскольку вложенные процедуры никуда передавать нельзя, то и проблемы нет :-) (что, впрочем, делает оные процедуры много менее полезными чем могли бы быть)
Название: Re: Классическая реализация вложенных процедур в оберо
Отправлено: kkkk от Февраль 04, 2014, 08:42:31 pm
Если ввести параметры-процедуры с обязательным неявным указателем, значения которых нельзя присваивать, то ограничение на передачу можно обойти. Слишком мудрённо это для Оберона.
Название: Re: Классическая реализация вложенных процедур в оберо
Отправлено: vlad от Февраль 04, 2014, 09:19:50 pm
Если ввести параметры-процедуры с обязательным неявным указателем, значения которых нельзя присваивать, то ограничение на передачу можно обойти. Слишком мудрённо это для Оберона.

Вот здесь я как раз забуксовал. Одного связанного параметра мало - из-за возможности рекурсивного вызова. Или это будет параметр-указатель на некую стековую структуру, которая модифицируется в процессе рекурсивного вызова объемлющих процедур. Получается сложно и неочевидно. Уж лучше от классических замыканий плясать, если хочется чего-то большего.
Название: Re: Классическая реализация вложенных процедур в оберо
Отправлено: vlad от Февраль 04, 2014, 11:30:45 pm
Если ввести параметры-процедуры с обязательным неявным указателем, значения которых нельзя присваивать, то ограничение на передачу можно обойти. Слишком мудрённо это для Оберона.

Одного связанного параметра мало

Хотя не - еще раз прокрутил, вроде должно работать просто с одним параметром - указателем на стек объемлющий процедуры.
Название: Re: Классическая реализация вложенных процедур в оберо
Отправлено: igor от Февраль 05, 2014, 05:18:47 am
Кто-нибудь разбирался как оно по Вирту должно быть?
А чем не устраивает описание реализации от самого Вирта? "Построение компиляторов", гл. 12.
Название: Re: Классическая реализация вложенных процедур в оберо
Отправлено: vlad от Февраль 05, 2014, 02:30:07 pm
А чем не устраивает описание реализации от самого Вирта? "Построение компиляторов", гл. 12.

Ага, это оно, спасибо!