Mirah (anteriormente Duby ) ha sido un lenguaje de programación basado en la sintaxis del lenguaje Ruby , inferencia de tipos local, sistema de tipos híbrido estático-dinámico y una cadena de herramientas de compilación conectable . Mirah fue creado por Charles Oliver Nutter para ser "un lenguaje 'similar a Ruby', probablemente un subconjunto de la sintaxis de Ruby, que [podría] compilarse a un bytecode JVM sólido, rápido e idiomático ". [ 1 ] La palabra mirah hace referencia a la gema rubí en el idioma javanés , un juego de palabras con el concepto de Ruby en Java. [ 2 ]
Historia
Para fomentar una mayor participación de la comunidad Ruby en el proyecto JRuby , Nutter comenzó a explorar la posibilidad de presentar la sintaxis de Ruby, pero con un modelo de tipos estático y compilación directa a nativo. En este contexto, "nativo" se refería principalmente a la máquina virtual de Java (JVM), pero Mirah se diseñó en torno a la posibilidad de tener backends alternativos para otros entornos de ejecución orientados a objetos, como el Common Language Runtime (CLR) del .NET Framework . El lenguaje debía tener la apariencia y la sensación de Ruby, no introducir nuevas dependencias de bibliotecas en JRuby (lo que excluye a la mayoría de los demás lenguajes de JVM ) y no sufrir ninguna penalización de rendimiento (lo que excluye escribir en Ruby).
Las primeras versiones de Mirah (antes Duby) se centraban principalmente en el rendimiento matemático, donde los lenguajes de programación dinámica suelen tener un coste elevado. Desde entonces, ha evolucionado hasta convertirse en un lenguaje completo para la JVM, y varios usuarios y aplicaciones reales lo utilizan para componentes clave.
Diseño
Mirah es principalmente una cadena de herramientas de compilación conectable. Los elementos principales de la cadena son:
- Un analizador sintáctico , basado en el analizador sintáctico de JRuby, que genera un árbol de sintaxis abstracta (AST) de Ruby.
- Un transformador que convierte el AST de Ruby en un AST de Mirah.
- Un inferidor de tipos que decora el AST de Mirah con la información de tipado apropiada para el backend de destino.
- Un generador de código de backend
De estas fases, solo las dos últimas requieren un conocimiento específico de la plataforma de destino final. Esto hace que Mirah sea compatible con muchos backends y, además, permite desarrollar complementos de lenguaje para la fase de transformación de Mirah que se aplicarán por igual a todos los backends compatibles.
Para fragmentos de código sencillos y el backend de bytecode de la JVM, el compilador Mirah genera prácticamente las mismas instrucciones que los compiladores javac estándar .
No hay biblioteca de tiempo de ejecución
Como Mirah es solo un compilador, no incluye ninguna biblioteca estándar . La idea es que los usuarios de Mirah elijan las bibliotecas que deseen usar, tal vez escriban complementos para que el compilador de Mirah las admita, y el compilador se encargará del resto. Este es un objetivo de diseño explícito: evitar la necesidad de utilizar nuevas bibliotecas externas. Por lo tanto, la biblioteca estándar de Mirah es la misma que la del backend actual, y se prioriza la escritura de complementos para el compilador en lugar de bibliotecas para extender y mejorar el lenguaje.
Sistema de tipos
Mirah no impone un sistema de tipos específico a los usuarios, sino que se basa en el que proporciona el backend de destino. En la JVM, el sistema de tipos es en gran medida el de Java, y las declaraciones de tipos hacen referencia a clases, tipos primitivos e interfaces de la JVM.
Mirah es principalmente un lenguaje de tipado estático, pero se está desarrollando la compatibilidad con el tipado dinámico. El mecanismo es similar al de C# 4, con un tipo dinámico especial que indica que todas las operaciones con el valor de esa variable deben realizarse de forma dinámica. Actualmente, la compatibilidad con el tipado dinámico está prevista solo para Java 7 y versiones posteriores, utilizando el nuevo invokedynamiccódigo de bytes.
Sintaxis
La sintaxis de Mirah es prácticamente la misma que la de Ruby , pero con algunas modificaciones para admitir el tipado estático:
- Los parámetros de un método generalmente necesitan que se declare su tipo:
def foo ( a : String , b : int )
- Debido a que en la cadena de herramientas del compilador Mirah se producen varias transformaciones, algunas cadenas que son identificadores válidos en Ruby se tratan como palabras clave en Mirah, como la palabra
interfaceutilizada para especificar una interfaz de estilo JVM.
Aparte de estas diferencias, el código de Mirah generalmente se parece al código de Ruby:
def fib ( a : int ) if a < 2 a else fib ( a - 1 ) + fib ( a - 2 ) end endEstado
A partir de 2012Mirah se encuentra en fase de desarrollo, pero algunos desarrolladores lo están utilizando para aplicaciones de producción de alcance limitado.
Marcos de trabajo
Dudoso
Dubious es un proyecto para ejecutar Mirah en Google App Engine . Proporciona una forma de crear aplicaciones en Mirah, con convenciones familiares para los desarrolladores que usan Ruby on Rails y Sinatra . Dado que todo se compila por adelantado , las aplicaciones Mirah no tienen los costos de inicialización asociados con JRuby. Dubious es compatible con ERuby (ERb) y tiene un adaptador de almacenamiento de datos simple que usa una sintaxis similar a Datamapper .
Véase también
Referencias
Enlaces externos
- Sitio web oficial
- Introducción a Mirah por Charles Nutter - Dr. Dobb's, 25 de marzo de 2011
- Rompiendo las reglas: ¡Haciendo que Java sea divertido con Mirah! - Roja Buck, 20 de marzo de 2011
- Una combinación de Java y Ruby: el lenguaje Mirah - InfoQ, 27 de julio de 2010
- Mirah incorpora las ventajas de Ruby a Java - InfoWorld. 23 de julio de 2010
- "Mirah: Llevando el rendimiento al siguiente nivel con Ruby de Java" - O'Reilly Media, julio de 2010
- Presentamos a Duby, Ryan Brown
- "Presentación de Ruby Mutants", Railsconf 2009
- Marco de trabajo dudoso
- Presentación en vídeo: JRuby, Duby y Surinx: Construyendo un Ruby mejor
- Vídeo: Charla relámpago: Rails Underground 2009 - Charles Nutter sobre Charles Nutter - Lenguajes Duby y Juby
- ¿Qué ofrece Mirah que no ofrezcan JRuby, Groovy y Scala?
- Lenguajes de programación de la JVM
- Lenguajes de scripting
- Lenguajes de programación orientados a objetos
- Familia de lenguajes de programación Java
- Software que utiliza la licencia Apache.
- Lenguajes de programación creados en 2008
- Lenguajes de programación de tipado estático