stringtranslate.com

Mirah (lenguaje de programación)

Mirah (anteriormente Duby ) ha sido un lenguaje de programación basado en la sintaxis del lenguaje Ruby , inferencia de tipos locales, 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 Ruby, que [pudiera] compilarse en un bytecode JVM sólido, rápido e idiomático ". [1] La palabra mirah se refiere a la piedra preciosa 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 en el proyecto JRuby por parte de los miembros de la comunidad Ruby, Nutter comenzó a explorar la posibilidad de presentar la sintaxis Ruby, pero con un modelo de tipo estático y compilación directa a nativa. En este contexto, "nativo" significaba principalmente la máquina virtual Java (JVM), pero Mirah se ha diseñado en torno a la posibilidad de tener backends alternativos para otros entornos de ejecución orientados a objetos como el Common Language Runtime (CLR) de .NET Framework . El lenguaje debía verse y funcionar como Ruby, y no introducir nuevas dependencias de biblioteca en JRuby (lo que impide la mayoría de los demás lenguajes JVM ) y no sufrir ninguna penalización de rendimiento (lo que impide escribir en Ruby).

Las primeras versiones de Mirah (en aquel entonces Duby) se centraban principalmente en el rendimiento matemático, donde los lenguajes de programación dinámica suelen ser los que pagan el precio más alto. Desde entonces, ha evolucionado hasta convertirse en un lenguaje JVM completo, que varios usuarios y aplicaciones del mundo real utilizan para los componentes principales.

Diseño

Mirah es principalmente una cadena de herramientas de compilación conectable. Los elementos principales de la cadena son:

  1. Un analizador , basado en el analizador de JRuby, que emite un árbol de sintaxis abstracta (AST) de Ruby
  2. Un transformador que convierte el Ruby AST en un Mirah AST
  3. Un inferidor de tipos que decora el AST de Mirah con información de tipado apropiada para el backend de destino
  4. Un generador de código backend

De estas fases, solo las dos últimas requieren un conocimiento específico de la plataforma de destino final. Esto hace que Mirah sea adecuado para muchos backends y también permite escribir complementos de lenguaje para la fase de transformación de Mirah que se aplicarán a todos los backends compatibles por igual.

Para fragmentos de código simples y el backend de bytecode JVM, el compilador Mirah emite casi las mismas instrucciones que los compiladores javac estándar .

Sin biblioteca de tiempo de ejecución

Como Mirah es solo un compilador, no incluye ninguna biblioteca estándar . La intención es que los usuarios de Mirah elijan qué bibliotecas quieren usar, tal vez escriban complementos para el compilador de Mirah para que los admita y el compilador hará el resto. Este es un objetivo de diseño explícito: evitar introducir un requisito en cualquier biblioteca externa nueva. La biblioteca estándar para Mirah, entonces, es la biblioteca estándar para el backend actual y se hace hincapié en escribir complementos del 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 lo que proporciona el backend de destino. En la JVM, el sistema de tipos es en gran medida el sistema de tipos de Java, y las declaraciones de tipos hacen referencia a las clases, primitivas e interfaces de la JVM.

Mirah es principalmente un lenguaje de tipado estático, pero se está desarrollando soporte para permitir también el tipado dinámico. El mecanismo es similar al que se proporciona en C# 4, con un tipo dinámico especial que indica que todos los envíos contra el valor de esa variable deben realizarse de forma dinámica. Actualmente, el soporte de tipo dinámico está previsto solo para Java 7 y versiones superiores, utilizando el nuevo invokedynamicbytecode.

Sintaxis

La sintaxis de Mirah es en gran medida la misma que la sintaxis de Ruby , pero con algunas modificaciones para soportar la tipificación estática:

Aparte de estas diferencias, el código de Mirah generalmente se parece al código de Ruby:

def fib ( a : int ) si a < 2 a de lo contrario fib ( a - 1 ) + fib ( a - 2 ) fin fin               

Estado

A partir de 2012 , Mirah está en desarrollo, pero algunos desarrolladores están usándolo para aplicaciones de producción de alcance limitado.

Marcos

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 con anticipación , las aplicaciones Mirah no tienen ninguno de los costos de inicialización asociados con JRuby. Dubious admite ERuby (ERb) y tiene un adaptador de almacén de datos simple que usa una sintaxis similar a Datamapper .

Véase también

Referencias

  1. ^ Duby: un lenguaje JVM similar a Ruby con inferencia de tipos
  2. ^ "El lenguaje de programación Mirah".

Enlaces externos