Сборка мусора
Как только определено множество недостижимых объектов, сборщик мусора может освободить память, занимаемую ими, и оставить остальное как есть. Также можно после освобождения памяти переместить все или часть оставшихся объектов в другие области памяти, обновив вместе с этим все ссылки на них. Эти два варианта реализации называются, соответственно, "неперемещающим" и "перемещающим".
Метапрограммирование
Второй случай представляет собой встраивание языка и реализуется тремя статическими методами c использованием макросредств языка или чистым встраиванием. В этом случае наработки, накопленные в процессе разработки метапрограмм, в дальнейшем могут интенсивно повторно использоваться для разработки новых метапрограмм.
Другие примеры: