У меня возникла небольшая проблема для написания управления памятью в отношении внутреннего представления типов в компиляторе для статически типизированных сложных языков. Рассмотрим простой фрагмент кода на С++, который легко демонстрирует тип, который ссылается на себя.
class X {
void f(const X&) {}
};
Типы могут иметь почти бесконечно сложные отношения друг с другом. Итак, как процесс компилятора, как вы убедитесь, что они правильно собраны?
До сих пор я решил, что сборка мусора может быть правильным способом, и я не буду слишком доволен, потому что хочу написать компилятор на С++, или, альтернативно, просто оставить их и никогда не собирать их для жизни фазы компиляции, для которой они необходимы (который имеет очень фиксированный срок службы), а затем собирать их все потом. Проблема в том, что если у вас было много сложных типов, вы могли бы потерять много памяти.