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