¿Hay algún lenguaje de programación administrado que compile en código máquina?

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

  •  06-07-2019
  •  | 
  •  

Pregunta

Los idiomas administrados son los que manejan la limpieza de memoria por usted.

EDITAR No estoy hablando de recolección de basura. Simplemente estaba interesado en saber acerca de los idiomas que liberarían () memoria para mí automáticamente, y aún así compilarían en código máquina.

¿Fue útil?

Solución

Parece confuso " Gestionado " y "Recogida de basura", mientras que los lenguajes gestionados a menudo (por ejemplo, C # y Java) tienen recogida de basura automatizada, "gestionado" en realidad se refiere al hecho de que hay una "máquina virtual" que ejecuta su código (consulte http://en.wikipedia.org/wiki/Managed_code ) .

Entonces, por ejemplo, el CLR (Common Language Runtime) es la máquina virtual que ejecuta el código .Net, y la JVM (máquina virtual Java) es la máquina virtual que ejecuta el código Java.

De hecho, puede tener recolección de basura para idiomas no administrados (por ejemplo, C ++ ), y viceversa, han administrado idiomas sin recolección de basura (EDIT: estaba buscando algunos pero parece que no puedo encontrar ninguno a menos que El objetivo C cuenta, no estoy seguro de que tenga mucho sentido crear un lenguaje administrado sin recolección de basura de todos modos)

Tanto Java como C # pueden de hecho compilarse directamente en el código de la máquina, por lo que se ejecutan directamente y no usan una máquina virtual; para el código .Net esto se hace usando NGEN (de hecho, el CLR compila los ensambles .Net en la máquina código a medida que lo ejecuta, la denominada compilación "Just in time" (compilación Just in time)

EDITAR: Como una actualización de la actualización de su pregunta, de hecho, hay una serie de alternativas a la recolección de basura en un espectro entre el extremo de la gestión manual completa de la memoria y la recolección de basura, y un muchos lenguajes que se compilan en código máquina incorporan diversas formas de administración de memoria que no requieren que libere memoria explícitamente.

¿Puedo preguntar? ¿Es esto un "fuera de interés"? pregunta, o estás tratando de seleccionar un idioma para un proyecto? Si es esto último, ¿por qué estás tan interesado en que tu idioma se compile en código de máquina? Ciertamente, en el caso de que .Net tenga su código compilado JIT ofrece una serie de ventajas de rendimiento (en la mayoría de los casos), también NGENing su código no elimina la dependencia del marco .Net.

Otros consejos

lotes:

LISP (y variantes), Erlang, C # (en Mono), Haskell, Java (con gcj)

Claro que los hay. Java, por ejemplo. (gcj)

Sin embargo, el término administrado en sí mismo implica que debe llevar algo de tiempo de ejecución.

Unos cuantos más, en el sentido más amplio de "gestionado" lo que significa seguro (mediante verificación de tipo de tiempo de ejecución o análisis estático exhaustivo) y / o recolección de basura:

  • OCaml
  • D
  • Ada
  • Prolog
  • Limpiar
  • Eiffel

De manera análoga a la respuesta de Efraims, cualquier programa .NET también se compilará en código máquina, generalmente en 2 pasos (JIT), pero hay una herramienta NGEN para precompilar el MSIL a nativo.

Hay una opción semi-GC: GLIB.

Gilb usa el recuento de referencias para administrar la vida útil del objeto. Cuando el recuento de referencia se encuentra con 0, se limpia un objeto.

Es mucho más incómodo que .NET o Java o Python, pero cuando tienes que usar C, es mejor que nada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top