Si quieres competir con las implementaciones existentes, mira las otras respuestas.
Si desea una implementación pequeña que pueda ejecutar un subconjunto de aplicaciones Java, en realidad es muy factible. Todo lo que realmente necesita es leer los archivos de la clase, saber escribir un intérprete y las especificaciones de JVM.
Para el primero, es posible que tenga la suerte de encontrar una biblioteca que pueda analizar los archivos por usted, de lo contrario, deberá escribir un analizador a mano. Existen muchos recursos sobre cómo escribir un analizador sintáctico, o puede usar un generador de analizador sintáctico siempre que sea compatible con la entrada binaria. El hecho de que la JVM utilice un formato binario con longitudes codificadas significa que el análisis es en realidad más fácil de lo habitual.
Si nunca ha escrito un intérprete, escriba uno para Brainfuck antes de continuar. Puede intentar convertir el código de bytes en una estructura de árbol primero, pero es completamente opcional. Al final, el intérprete solo pasa por cada instrucción y realiza cualquiera que sea su operación. Para los campos de objetos, un simple hashmap debería ser suficiente.
- ¿Qué otras habilidades necesita uno si ya conoce C / C ++, Python a nivel intermedio para el campo de IoT?
- ¿Existe una plataforma en línea para mostrar mis habilidades artísticas?
- Me gustaría mejorar mi inglés y mis habilidades de escritura también. ¿Dónde comenzaría esas habilidades?
- ¿Cómo no perder mis habilidades de programación de bajo nivel?
- ¿Cuáles son algunas de las habilidades de programación más esotéricas que has visto en un candidato?
La especificación JVM será su mejor amigo y asegúrese de mantenerla abierta en todo momento durante el proyecto. De particular mención es el capítulo 4, que será importante al escribir el analizador, y el capítulo 6, que será importante al escribir el bucle central en el intérprete. El Capítulo 5 también será útil si desea intentar ejecutar aplicaciones reales o con el tiempo de ejecución oficial.
Si le preocupan cosas como la recolección de basura, siempre puede tomar la opción simple: no lo haga. Es posible que se quede sin memoria o no recolecte basura, pero funcionará bien hasta entonces. Otra opción es aprovechar tu idioma de host. Mi primer proyecto JVM fue en Go, por lo que no tuve que hacer nada para administrar la memoria porque podía dejar que el tiempo de ejecución Go se encargara de eso.
Actualmente estoy trabajando en el segundo intento, esta vez en Kotlin. Y sí, Kotlin se ejecuta en la JVM. (Me especializo en lo poco práctico).