Если я вас правильно понял, вы спрашиваете, можно ли взять язык сборки мусора и скомпилировать его в эквивалентную программу на языке без сборки мусора, не внося ошибок памяти или утечек, просто добавив free
s в нужных местах (т.е. нет подсчета ссылок или иным образом отслеживания ссылок или реализации алгоритма сбора мусора в любом случае или выполнения чего-либо еще во время выполнения, что можно считать сборкой мусора).
Нет, это невозможно , Чтобы сделать что-то подобное, вы должны иметь возможность статически ответить на вопрос «Какой смысл в программе, после которого на данный объект больше не ссылаются», который является нетривиальным свойством semanti c и, таким образом, неразрешимой согласно теореме Райса.
Вы можете определить достаточно ограниченное подмножество языка (что-то вроде «только одна живая переменная может одновременно содержать сильную ссылку на объект, а все остальное должно использовать слабые ссылки»), но программирование в этом подмножестве будет настолько отличаться от программирования на языке оригинала… что в этом не будет особого смысла.
¹ И, возможно, еще важнее: маловероятно, что существующий код будет соответствовать этому подмножеству. Поэтому, если есть компилятор, который может скомпилировать мой код в эффективный собственный код, свободный от G C, но только если я полностью переписываю свой код, чтобы он соответствовал неудобному подмножеству языка, почему бы мне просто не переписать проект в русте вместо? Тем более, что взаимодействие с библиотеками, которые не записаны в подмножестве, вероятно, также будет невозможно.