2010-01-30 18 views
8

Estoy pensando en escribir mi propio lenguaje.¿Qué es una buena VM para desarrollar un lenguaje de hobby?

Encontré algunas opciones, pero siéntase libre de sugerir más.

  • JVM
  • loro
  • OSA

Una gran cantidad de idiomas están utilizando la JVM, pero a menos que se escribe un lenguaje Java-ish, todo el poder del stdlib le da va a sentirse feo; Tampoco es muy bueno en materia dinámica.

Parrot parece una buena máquina virtual para el desarrollo de idiomas, pero tiene un pequeño proyecto abandonado/inacabado/hobby.

OSA es lo que impulsa Applescript, no una máquina virtual muy conocida, pero uso Mac, y ofrece una buena integración de sistema.

CLR + Mac no parece una buena combinación ...

Mi lengua va a ser un objeto orientado lenguaje de flujo de datos concurrentes funcional con tipos fuertes y una mezcla de Python y la sintaxis de Lisp. Suena bien, ¿eh?

[editar]
Acepté Python por ahora, pero me gustaría saber más acerca de OSA y Parrot.

+0

¿Qué hay de Scheme? –

+0

¿Qué pasa con los requisitos de rendimiento y escalabilidad? – skaffman

+0

Prefiero usar Python o Lua que Scheme, creo. Casi no hay requisitos de rendimiento y escalabilidad, solo se usará para pequeñas herramientas que escriba. – Pepijn

Respuesta

5

Un enfoque que he jugado es utilizar el módulo Python ast para construir un árbol de sintaxis abstracta que represente el código para ejecutar. La función Python compile puede compilar un código AST en bytecode de Python, que luego se puede ejecutar exec. Este es un nivel un poco más alto que la generación directa de bytecode, pero tendrás que lidiar con algunos caprichos del lenguaje Python (por ejemplo, la diferencia fundamental entre los enunciados y las expresiones).

Al hacer esto también he escrito un módulo "deparse" que intenta convertir un AST de nuevo a código fuente equivalente de Python, solo para la depuración. Puede encontrar el código en el repositorio psil si le interesa.

+0

Eso significa escribir mi lenguaje en Python, ¿no es así? Eso sería divertido ... Tendré que pensar en las limitaciones. – Pepijn

+0

Es cierto que el uso de la biblioteca 'ast' de Python es ciertamente más fácil desde Python. Sin duda podrías hacer algo peor que elegir Python. –

+0

¿Qué tal 'ast' para hacer un sistema de tipo estático y especialmente para escribir funciones de estilo de flujo de datos (llamar tan pronto como lleguen los datos)? – Pepijn

2
  • Lua tiene un pequeño, bien escrito y rápido VM
  • Python VM - realmente se puede adjuntar un nuevo lenguaje para que si lo desea. O escriba (¿usar?) Algo como tinypy, que es una implementación pequeña y simple de la máquina virtual de Python.

Ambas opciones anteriores tienen acceso a bibliotecas estándar útiles que le ahorrarán trabajo, y están codificadas en C relativamente limpias y modulares, por lo que no deberían ser difíciles de conectar.

Dicho esto, no estoy de acuerdo con que Parrot esté abandonado/hobby. Es bastante maduro y tiene desarrolladores muy fuertes trabajando en ello. Además, es específicamente una máquina virtual diseñada para ser dirigida por múltiples lenguajes dinámicos. Por lo tanto, fue diseñado con flexibilidad en mente.

+0

Me gustaría saber más acerca de por qué crees que la máquina virtual Lua o Python es adecuada para mí. El loro puede ser maduro, al menos la mayoría de los idiomas que contiene están incompletos o abandonados. – Pepijn

+0

@Pepijn: He actualizado la respuesta. ¿No está seguro de qué más sugerir, a menos que tenga preguntas más específicas? –

+0

Quiero pasar funciones y objetos como valores y estoy pensando en un sistema de tipo más o menos estático, también necesito cosas de flujo de datos. Python tiene una clara distinción entre funciones, valores, expresiones y declaraciones, pero su sistema de tipos es bastante dinámico. ¿Eso me obstaculizará? ¿Cómo es eso para Lua, Parrot, JVM o OSA? – Pepijn

4

Eche un vistazo a LLVM. No es una VM pura como tal, más un framework con su propio IR que le permite construir máquinas virtuales de alto nivel. Tiene cosas buenas como análisis de código estático y soporte JIT

+0

Sé que LLVM de Unladen traga. Debido a que mi lenguaje es solo un proyecto de pasatiempo, creo que es mejor tomar prestada una VM con un stdlib. – Pepijn

1

¿Has considerado Pypy?Por lo que he leído, además de ser un compilador Python JIT, también tiene la capacidad de manejar otros idiomas. Por ejemplo, hay a tutorial que explica cómo crear un compilador JIT Brainfuck utilizando Pypy.

Cuestiones relacionadas