Существуют ли какие-либо управляемые языки программирования, которые компилируются в машинный код?

StackOverflow https://stackoverflow.com/questions/1213043

  •  06-07-2019
  •  | 
  •  

Вопрос

Управляемые языки - это те, которые обрабатывают очистку памяти за вас.

Редактировать Я не говорю о сборе мусора.Мне просто было интересно узнать о языках, которые могли бы free() память для меня автоматически, и все равно компилируется вплоть до машинного кода.

Это было полезно?

Решение

Вы, похоже, сбиваете с толку " Управляемое " и «Сборка мусора», в то время как часто управляемые языки (например, C # и Java) имеют автоматизированную сборку мусора, «управляемые». на самом деле относится к тому факту, что существует «виртуальная машина» который выполняет ваш код (см. http://en.wikipedia.org/wiki/Managed_code ) .

Так, например, CLR (общеязыковая среда выполнения) - это виртуальная машина, выполняющая код .Net, а JVM (виртуальная машина Java) - это виртуальная машина, выполняющая код Java.

На самом деле вы можете собирать мусор для неуправляемых языков (например, C ++ ) и наоборот управляли языками без сбора мусора (РЕДАКТИРОВАТЬ: я искал некоторые, но, кажется, не могу найти ни одного, кроме Цель C имеет значение, я не уверен, что в любом случае имеет смысл создавать управляемый язык без сборки мусора)

Как Java, так и C # фактически могут быть скомпилированы непосредственно в машинный код, поэтому они выполняются напрямую, а не с использованием виртуальной машины - для кода .Net это делается с помощью NGEN (фактически CLR компилирует сборки .Net в машину код во время его выполнения, так называемая «компиляция как раз вовремя»

РЕДАКТИРОВАТЬ . В качестве обновления к обновлению вашего вопроса на самом деле существует целый ряд альтернатив для сбора мусора в диапазоне от крайнего полного ручного управления памятью до сбора мусора, и Многие языки, которые компилируются в машинный код, включают различные формы управления памятью, которые не требуют явного освобождения памяти.

Могу я спросить - это "из интереса"? вопрос, или вы пытаетесь выбрать язык для проекта - если последний, то почему вы так заинтересованы в том, чтобы ваш язык компилировался в машинный код? Конечно, в случае .Net с вашим JIT-кодом, скомпилированным с вашим кодом, вы получаете ряд преимуществ в производительности (в большинстве случаев), также NGENing ваш код не снимает зависимость от .Net Framework.

Другие советы

Лоты:

LISP (и варианты), Erlang, C # (под Mono), Haskell, Java (с gcj)

Конечно, есть. Java, например. (GCJ)

Однако сам термин «управляемый» подразумевает, что вы должны иметь некоторое время выполнения.

Еще несколько, в более широком смысле "управляемых", означающих безопасные (с помощью проверки типов во время выполнения или исчерпывающего статического анализа) и / или собранные файлы мусора:

  • OCaml
  • D
  • Ada
  • Пролог
  • Чистый
  • Эйфелева Башня

Аналог ответа Efraims, любая программа .NET также будет компилироваться в машинный код, обычно за 2 шага (JIT), но есть инструмент NGEN для предварительной компиляции MSIL в native.

Есть выбор полу-GC: GLIB.

Гилб использует счетчик ссылок для управления сроком службы объекта. Когда счетчик ссылок соответствует 0, объект очищается.

Это гораздо более неудобно, чем .NET, Java или Python, но когда вам приходится использовать C, это лучше, чем ничего.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top