La biblioteca ASM es un proyecto del consorcio OW2 . Proporciona una API simple para descomponer, modificar y recomponer clases binarias de Java (es decir, bytecode ). El proyecto fue concebido y desarrollado originalmente por Eric Bruneton. ASM está centrado en Java en la actualidad y no tiene un backend que exponga otras implementaciones de bytecode (como bytecode .NET , bytecode Python , etc.).
El nombre "ASM" no es un acrónimo: es sólo una referencia a la palabra clave asm de C, que permite implementar algunas funciones en lenguaje ensamblador. [1]
Usos
ASM proporciona una biblioteca sencilla que expone los componentes agregados internos de una clase Java determinada a través de su API orientada a visitantes . ASM también proporciona, además de esta API de visitantes, una API de árbol que representa las clases como construcciones de objetos. Ambas API se pueden utilizar para modificar el bytecode binario, así como para generar un nuevo bytecode (mediante la inyección de un nuevo código en el código existente o mediante la generación de nuevas clases en conjunto). La biblioteca ASM se ha utilizado en varias aplicaciones diversas, como:
- Rendimiento y elaboración de perfiles
- Las llamadas de instrumentación que capturan métricas de rendimiento se pueden inyectar en binarios de clase Java para examinar datos de memoria/cobertura. (Por ejemplo, inyectar instrumentación en puntos de entrada/salida).
- Implementación de la nueva semántica del lenguaje
- Por ejemplo, Groovy utiliza ASM para generar su código de bytes. Además, se han implementado adiciones orientadas a aspectos al lenguaje Java utilizando ASM para descomponer las estructuras de clase para la identificación de puntos de corte y, luego, nuevamente al reconstruir la clase, inyectando código relacionado con el aspecto nuevamente en el binario. (Ver: AspectWerkz )
Invocación dinámica
Desde la versión 3.2, ASM ha agregado soporte para el nuevo invokedynamic
código, que permite la invocación de métodos basándose en la verificación de tipos dinámicos en los últimos binarios JDK 7 , facilitando así el soporte para lenguajes tipados dinámicamente . [2] [3]
Historial de versiones
Esta tabla presenta solo versiones con pasos significativos en la historia de ObjectWeb ASM, además de versiones que principalmente corrigieron errores y mejoraron el rendimiento. [4]
Véase también
Referencias
- ^ Bruneton, Éric; Lenglet, Romain; Coupaye, Thierry (2002). "ASM: una herramienta de manipulación de código para implementar sistemas adaptables". FranceTélécom I+D, DTL/ASR. CiteSeerX 10.1.1.117.5769 . Consultado el 23 de agosto de 2023 .
- ^ ab Forax, Remi (11 de junio de 2009). "ASM ahora admite la función Invokedynamic" . Consultado el 14 de noviembre de 2009 .
- ^ "11 de junio de 2009: ASM 3.2 (cvs-tag: ASM_3_2)". ObjectWeb. 11 de junio de 2009. Consultado el 14 de noviembre de 2009 .
- ^ "Versiones". ObjectWeb . Consultado el 6 de junio de 2020 .
Enlaces externos
- Sitio web oficial
- OW2 Home - La página de inicio del Consorcio OW2.
- AspectWerkz - Página de inicio del proyecto AspectWerkz. (Uno de los proyectos de alta visibilidad que utiliza ASM).
- Bytecode Visualizer: complemento gratuito de Eclipse para visualizar y depurar bytecode de Java que utiliza la biblioteca ASM