Управление памятью для типов в сложных языках

Я столкнулся с небольшой проблемой при написании управления памятью в отношении внутреннего представления типов в компиляторе для статически типизированных сложных языков. Рассмотрим простой фрагмент кода на C ++, который легко демонстрирует тип, ссылающийся на самого себя.

class X {
    void f(const X&) {}
};

Типы могут иметь почти бесконечно сложные отношения друг с другом. Итак, как процесс компиляции, как убедиться, что они правильно собраны?

Пока что я решил, что сборка мусора может быть правильным путем, что мне не очень понравилось бы, потому что я хочу написать компилятор на C ++ или, альтернативно, просто оставить их и никогда не собирать их для жизни фазы компиляции, для которой они необходимы (которая имеет очень фиксированное время жизни), а затем собрать их все после этого. Проблема в том, что если у вас много сложных типов, вы можете потерять много памяти.

10
задан R. Martinho Fernandes 6 July 2011 в 15:03
поделиться