2011-05-30 16 views
11

Quiero un ensamblador JVM que sea sencillo y simple. Debería tomar un archivo de texto escrito en el lenguaje mnemónico descrito en The Java Virtual Machine Specification y producir archivos de clase, es decir, bytecode.¿Qué ensambladores de JVM hay?

Para ser claros: no quiero una biblioteca que pueda generar archivos de clase de invocaciones de una API.

¿Cuáles son los estados actuales de los ensambladores JVM? ¿Son compatibles invookedynamic (no es obligatorio para mí, pero una ventaja)? ¿En qué sistema operativo puedo usarlos? ¿Cuáles son sus pros y contras individuales?

+1

Tenga en cuenta que la especificación de JVM ** no ** proporciona un lenguaje completo para compilar archivos completos de "clase". Contiene el bytecode, pero no el "plomería" necesario (por ejemplo, cómo se declaran los métodos, cómo se escriben las jerarquías de clase en "ensamblaje", ...). Entonces cualquier ensamblador de JVM tendría que "inventarlo". –

+0

@Joachim Ese es un buen punto. Cualquier fontanería creativa está bien para mí. –

Respuesta

7

Jasmin es el estándar de facto. Las versiones recientes admiten invokedynamic. Está escrito en Java, por lo que es portátil.

9

Ha pasado algún tiempo, y ahora hay una alternativa a Jasmin llamada Krakatau.

Desde el README.txt:

El Krakatau ensamblador está pensado como un reemplazo para Jasmin, y fue escrito originalmente debido a las limitaciones de Jasmin. Es principalmente compatible con versiones anteriores de la sintaxis de Jasmin, aunque no necesariamente con las extensiones introducidas en JasminXT. Sin embargo, Krakatau ofrece muchas características nuevas, lo que es más importante la capacidad de especificar directamente referencias constantes de grupo.

En este momento, parece que Krakatau se actualizó por última vez hace un mes, y Jasmin se actualizó por última vez hace nueve años.

Krakatau es compatible con invokedynamic y utiliza los mismos nombres de instrucciones que se utilizan en el JVMS.

Krakatau se implementa en Python. Personalmente, me gusta que mis herramientas Java se implementen en Java, pero dada la naturaleza de esta herramienta (construir archivos de clase de fuentes que no son de Java) y la falta de competencia en este nicho, le daré una oportunidad.

+1

Para su información, también hay [este proyecto] (https://github.com/alexkasko/krakatau-java) que usa Jython para presentar Krakatau en un formato más aceptable para los desarrolladores de Java. – daveloyall

Cuestiones relacionadas