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

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

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

Ответы [ 6 ]

9 голосов
/ 31 июля 2009

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

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

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

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

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

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

8 голосов
/ 31 июля 2009

много:

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

4 голосов
/ 31 июля 2009

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

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

3 голосов
/ 31 июля 2009

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

  • OCaml
  • D
  • Ад
  • Пролог
  • Clean
  • Eiffel
1 голос
/ 31 июля 2009

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

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

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

1 голос
/ 31 июля 2009

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

...