Я разрабатываю язык. Во-первых, я хочу решить, какой код сгенерировать. Язык будет иметь лексические замыкания и основанное на прототипе наследование, подобное javascript. Но я не поклонник gc и стараюсь избегать как можно большего. Итак, вопрос: есть ли элегантный способ реализовать закрытие, не прибегая к тому, чтобы выделить стек стека в кучу и оставить его сборщику мусора?Как реализовать закрытие без gc?
Мои первые мысли:
- Используйте подсчет ссылок и собирать мусор циклов (я на самом деле не так)
- стек использования спагетти (выглядит очень неэффективно)
- Предел формирования замыканий на в некоторых контекстах, так что я могу уйти с стеком обратного адреса и стекю locals.
Я не буду использовать язык высокого уровня или соблюдать любые соглашения о вызовах, поэтому я могу разбить стек столько, сколько захочу.
(Edit: Я знаю, что подсчет ссылок является формой сбора мусора, но я использую дс в более общем смысле)
Что значит быть «не поклонником GC»? Имейте в виду, что подсчет ссылок является формой сбора мусора. Кроме того, что означает «лексические закрытия» в ситуации, когда вы «не будете ... следовать любым соглашениям о вызовах»? – Allen 2008-09-18 01:47:50
соглашения о вызовах, такие как stdcall, fastcall, cdecl, thiscall ... – artificialidiot 2008-09-18 01:52:42
@Allen Ссылка на подсчет не является сборкой мусора. Это форма автоматического управления. Не всякое автоматическое управление памятью - сбор мусора. – 2014-02-04 17:56:09