Как вы правильно отмечаете, виртуальные машины в основном используются для абстрагирования от машино- зависимые свойства базовых платформ. Сбор мусора является ортогональной технологией. Обычно это не обязательно для языка, но считается желаемым свойством среды выполнения. Есть действительно языки с примитивами для распределения памяти (например, new
в Java и C#), но без примитивов, чтобы освободить его. Их можно рассматривать как языки со встроенным GC.
Один такой язык программирования - Eiffel. Большинство Eiffel составители генерируют C код для удобства переносимости. Этот код C используется для создания машинного кода по стандарту C компилятор. Реализации Eiffel обеспечивают GC (а иногда и точную GC) для этого скомпилированного кода, и нет необходимости в VM. В частности, VisualEiffel компилятор сгенерировал собственный машинный код x86 непосредственно с полной поддержкой GC.
Скомпилированы Java и .NET. Возможно, вы спрашиваете о языках, которые скомпилированы в собственный код? –