Как реализовать замыкания без gc? - PullRequest
12 голосов
/ 18 сентября 2008

Я создаю язык. Во-первых, я хочу решить, какой код генерировать. Язык будет иметь лексические замыкания и наследование на основе прототипов, подобное javascript. Но я не фанат gc и стараюсь избегать как можно больше. Итак, вопрос: существует ли элегантный способ реализовать замыкания, не прибегая к выделению кадра стека в куче и предоставлению его сборщику мусора?

Мои первые мысли:

  1. Использовать подсчет ссылок и собирать циклы мусора (мне это не очень нравится)
  2. Используйте стек спагетти (выглядит очень неэффективно)
  3. Ограничить формирование замыканий некоторыми контекстами таким образом, чтобы я мог избежать использования стека обратных адресов и стека локальных компьютеров.

Я не буду использовать язык высокого уровня и не буду следовать никаким соглашениям о вызовах, поэтому могу разбить стек столько, сколько захочу.

(Редактировать: я знаю, что подсчет ссылок является формой сборки мусора, но я использую gc в более общем смысле)

Ответы [ 13 ]

0 голосов
/ 02 ноября 2010

Полагаю, если процесс очень короткий, что означает, что он не может использовать много памяти, тогда GC не нужен. Ситуация аналогична беспокойству о переполнении стека. Не вкладывайте слишком глубоко, и вы не можете переполниться; не бегайте слишком долго, и вам не понадобится сборщик мусора. Очистка становится вопросом простого восстановления большого региона, который вы предварительно выделили. Даже более длительный процесс можно разделить на более мелкие процессы, которые имеют свои собственные заранее выделенные кучи. Это будет хорошо работать с обработчиками событий, например. Это не работает хорошо, если вы пишете компилятор; в этом случае GC, безусловно, не является большой помехой.

0 голосов
/ 15 января 2009

Я читал, что последние версии ML используют GC только экономно

0 голосов
/ 21 октября 2008

Создать несколько стеков?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...