История изменений
Исправление io, (текущая версия) :
Формально ничто не мешает реализовать это и без исполняемого стека. Собственно причина использования следующая:
1. В том случае когда вложенная функция должна передаваться как аргумент, то передать адрес «универсальной» функции нельзя, т.к. ей могут потребоватья локальные данный текущего вызова охватывающей процедуры. Как следствие нужно породить минимальный огрызок, который обеспечивает вызов «универсального» куска с требуемым контекстом. Именно адрес этого огрызка и передается в качестве параметра.
2. Нужно где-то выделить место под огрызок. Проще всего это сделать в стеке. При этом гарантируется освобождение памяти при завершении охватывающей процедуры. Никто не мешает каждый раз выделять память, прописывать там требуемый огрызок (обеспечивать, если требуется выполняемость кода), и, после выполнения охватывающей процедуры, освобождать место.
Что-то подсказывает мне, что вызов/окончание могут быть не очень эффективны при отказе от использования стека. Впрочем можно попробовать иметь два «стека» для каждой из нитей.
Исходная версия io, :
Формально ничто не мешает реализовать это и без исполняемого стека. Собственно причина использования следующая:
1. В том случае когда вложенная функция должна передаваться как аргумент, то передать адрес «универсальной» функции нельзя, т.к. ей могут потребоватья локальные данный текущего вызова охватывающей процедуры. Как следствие нужно породить минимальный огрызок, который обеспечивает вызов «универсального» куска с требуемым контекстом. Именно адрес этого огрызка и передается в качестве параметра.
2. Нужно где-то выделить место под огрызок. Проще всего это сделать в стеке. При этом гарантируется освобождение памяти при завершении охватывающей процедуры. Никто не мешает каждый раз выделять память, прописывать там требуемый огрызок (обеспечивать, если требуется выполняемость кода), и, после выполнения охватывающей процедуры, освобождать место.
Что-то подсказывает мне, что вызов/окончание могут быть не очень эффективны при отказе от использования стека. Впрочем можно попробовать иметь два стека для каждой из нитей.