¿De qué manera (s) es LLVM Low Level?

12

¿De qué manera (es) es LLVM (Máquina virtual de bajo nivel) Bajo nivel? (Al momento de escribir este artículo, no encontré esta expansión de la abreviatura "LLVM" en su sitio web, pero en Wikipedia .)

¿Se le llama "Nivel bajo" en lo que se diseñó para (una infraestructura de compilación) o porque funciona en un "nivel más bajo" que otras herramientas?

Como una (tipo de) "ilustración" de esto, LLVM es de nivel inferior que JVM y CLR , o ¿está diseñado solo para usos de "nivel inferior"?

    
pregunta Abbafei 31.03.2011 - 04:46

4 respuestas

16

LLVM tiene un nivel inferior al de las máquinas virtuales típicas como JVM y CLR. Por ejemplo, aunque tiene ganchos para un recolector de basura, no proporciona un recolector de basura en sí mismo.

Del mismo modo, la JVM tiene un compilador JIT incorporado (excepto en versiones realmente antiguas). LLVM tiene algunos compiladores JIT para LLVM IR, pero aún depende del desarrollador juntar cosas y en realidad JIT el código.

Cuando la JVM encuentra un externo no resuelto, sale y encuentra la clase adecuada para satisfacerla, y sabe cómo buscar archivos .class directamente en el sistema de archivos y en los archivos .jar 1 . Los compiladores JIT de LLVM tienen ganchos donde puedes decidir cómo se manejan esas cosas. Como es de esperar, algunas personas han escrito algunas versiones predeterminadas, por lo que puede hacer las cosas más o menos en el mismo orden que la JVM, pero también es libre de ignorarlas y hacer las cosas de manera diferente si tu eliges.

En pocas palabras, si está desarrollando un compilador (o algo en ese orden) tiene muchas herramientas para facilitarle la vida. En lugar de preocuparse mucho por la optimización, puede hacer aproximadamente la traducción más simple que puede administrar desde su código fuente a LLVM IR, y luego usar las bibliotecas LLVM para administrar la optimización, JITing, enlaces, etc. No obstante, son bibliotecas: proporciona algunas funciones realmente útiles para que no tengas que lidiar con todos los detalles, pero aún son funciones y aún estás escribiendo código para invocarlas. No es un producto terminado, solo son herramientas útiles para crear productos de manera relativamente rápida y sencilla.

1 Técnicamente, no todo esto está integrado en la JVM propiamente dicha. Especifica lo que se suele llamar el cargador de clases primordial como parte de la JVM propiamente dicha, y luego hay cargadores de clases de usuarios especificados en java.util.ClassLoader que manejan otras cosas. Algunos cargadores de clases están incluidos de forma predeterminada y, si lo desea, puede complementarlos definiendo los suyos propios.

    
respondido por el Jerry Coffin 31.03.2011 - 08:34
12

Es nivel bajo porque está diseñado para que las máquinas virtuales existentes o futuras (la JVM) puedan usarlo como el núcleo de su implementación.

Véalo de esta manera: las máquinas virtuales de Java y Python son muy portátiles porque están escritas en C estándar y dependen mucho de sus propias bibliotecas. La intención de LLVM es proporcionar una infraestructura para que sea fácil portar cualquier máquina virtual a una plataforma que ya sea compatible con LLVM.

LLVM ofrece soporte para estática y compilación JIT, y está diseñado de forma que pueda ejecutarse en un espacio de sistema operativo confiable. Eso significa que, en teoría, ejecutar una máquina virtual encima de LLVM debería significar mucho menos trabajo y producir algo mucho más rápido y eficiente. En teoría.

Luego, LLVM, al ser de nivel inferior, debería ser más fácil de portar a diferentes arquitecturas de hardware y sistemas operativos.

Se pueden obtener grandes ahorros si los implementadores de lenguaje pudieran escribir en una única plataforma de bajo nivel fácil de portar. Las máquinas virtuales más conocidas están a mitad de camino entre el idioma que sirven y el sistema operativo, y tienen que implementar sus propias representaciones intermedias y JITC.

    
respondido por el Apalala 31.03.2011 - 06:14
5

La parte de "nivel bajo" del nombre de LLVM se refiere al nivel del conjunto de instrucciones virtuales utilizado. El lenguaje intermedio (IR) que utiliza LLVM está cerca del nivel del código de máquina, aunque es arquitectónico y general.

Por otra parte, el código de bytes de la JVM y CLR es bastante alto, ya que tiene instrucciones que se encuentran en una capa de abstracción superior. Ambos son lenguajes de ensamblaje basados en pila orientados a objetos. Por ejemplo, la JVM tiene la instrucción invokevirtual, que es una instrucción que debe conocer el modelo de objeto específico del lenguaje Java.

    
respondido por el Zayenz 31.03.2011 - 08:04
3

Es ciertamente más bajo que cualquiera de las máquinas virtuales específicas del idioma y las máquinas virtuales unificadas como JVM y CLR. Su diseño es cercano a la representación intermedia de bajo nivel en GCC (GIMPLE) y compiladores similares. No hay un GC predeterminado, no se aplica un sistema de tipo de alto nivel específico, no se supone una alineación (debe especificarse explícitamente), los tipos de datos de enteros y puntos flotantes son explícitos (y dependen de la plataforma), y el nivel más bajo de todos: Aritmética de puntero decente está disponible.

    
respondido por el SK-logic 31.03.2011 - 11:56

Lea otras preguntas en las etiquetas