В Обероне есть сборщик мусора, обычно консервативный, либо Mark & Sweep. Обычно данные он не уплотняет.
Т.е. можно запрашивать куски памяти, а когда на них не будет указателей, сборщик их соберёт. Сборщик можно вызвать явно (Kernel.GC) или же он вызывается сам неявно (обычно при вызове NEW).

Есть примеры использования Оберон-систем в задачах жёсткого реального времени, когда сборщик отключен.
Rust конечно предлагает свои подходы, может быть более интересные, но определённо более сложные.