Mirah (linguagem de programação) - Mirah (programming language)

Mirah
Paradigmas Orientado a objetos , imperativo
Projetado por Charles Oliver Nutter
Versão estável
0.2.1 / 26 de setembro de 2016 ; 4 anos atras ( 26-09-2016 )
Disciplina de digitação estático, com recursos dinâmicos , forte , inferido
Plataforma Máquina Virtual JAVA
SO Plataforma cruzada
Licença Licença Apache 2.0
Local na rede Internet www .mirah .org
Influenciado por
Ruby , Java , Boo

Mirah (anteriormente Duby ) tem sido uma linguagem de programação baseada em Rubi sintaxe da linguagem, local, tipo de inferência , híbrido estático-dinâmico sistema de tipos , e uma pluggable compilador toolchain . Mirah foi criada por Charles Oliver Nutter para ser "uma linguagem 'semelhante ao Ruby', provavelmente um subconjunto da sintaxe Ruby, que [poderia] compilar em um bytecode JVM sólido, rápido e idiomático ". A palavra mirá se refere ao rubi de pedra preciosa na linguagem javanesa , uma brincadeira com o conceito de Ruby em Java.

História

Para promover mais participação no projeto JRuby de membros da comunidade Ruby, Nutter começou a explorar a possibilidade de apresentar a sintaxe Ruby, mas com um modelo de tipo estático e compilação direta para nativa. Nesse contexto, "nativo" significava principalmente a máquina virtual Java (JVM), mas Mirah foi projetada em torno da possibilidade de ter back-ends alternativos para outros tempos de execução orientados a objetos, como o Common Language Runtime (CLR) do .NET Framework . A linguagem precisava se parecer com Ruby e não introduzir novas dependências de biblioteca no JRuby (o que impede a maioria das outras linguagens JVM ) e não sofrer nenhuma penalidade de desempenho (o que impede a escrita em Ruby).

As primeiras versões do Mirah (então Duby) focavam principalmente no desempenho matemático, onde as linguagens de programação dinâmicas geralmente pagam o custo mais alto. Desde então, ele evoluiu para uma linguagem JVM completa, com vários usuários e aplicativos do mundo real usando-o para componentes principais.

Projeto

Mirah é principalmente um conjunto de ferramentas de compilador plugável. Os principais elementos da cadeia são:

  1. Um analisador , baseado no analisador JRuby, que emite uma árvore de sintaxe abstrata Ruby (AST)
  2. Um transformador que converte Ruby AST em Mirah AST
  3. Um inferidor de tipo que decora o Mirah AST com informações de digitação apropriadas para o back-end de destino
  4. Um gerador de código de backend

Dessas fases, apenas as duas últimas precisam de conhecimento específico da plataforma de destino eventual. Isso torna o Mirah adequado para muitos back-ends e também torna possível escrever plug-ins de linguagem para a fase de transformação do Mirah que se aplicarão a todos os back-ends com suporte igualmente.

Para partes simples de código e o back-end de bytecode JVM, o compilador Mirah emite quase as mesmas instruções que os compiladores javac padrão .

Sem biblioteca de tempo de execução

Como Mirah é apenas um compilador, ele não vem com uma biblioteca padrão . A intenção é que os usuários do Mirah escolham quais bibliotecas desejam usar, talvez escrever plug-ins para o compilador Mirah para suportá-los, e o compilador fará o resto. Este é um objetivo de design explícito, evite introduzir um requisito em qualquer nova biblioteca externa. A biblioteca padrão para Mirah, então, é qualquer que seja a biblioteca padrão para o backend atual, e a ênfase é colocada em escrever plug-ins de compilador em vez de bibliotecas para estender e aprimorar a linguagem.

Sistema de tipo

Mirah não impõe um sistema de tipo específico aos usuários, em vez disso, confia em tudo o que o back-end de destino fornece. Na JVM, o sistema de tipo é em grande parte o sistema de tipo do Java e as declarações de tipo referem-se às classes, primitivas e interfaces da JVM.

Mirah é principalmente uma linguagem de tipagem estática, mas o suporte está em desenvolvimento para permitir também a digitação dinâmica. O mecanismo é semelhante ao fornecido em C # 4, com um tipo dinâmico especial indicando que todos os despachos em relação ao valor daquela variável devem ser feitos dinamicamente. O suporte de tipo dinâmico está atualmente planejado apenas para Java 7 e superior, usando o novo invokedynamicbytecode.

Sintaxe

A sintaxe do Mirah é basicamente igual à sintaxe do Ruby , mas com algumas modificações para oferecer suporte à tipagem estática:

  • Os parâmetros do método geralmente precisam ter seus tipos declarados:
    def foo(a:String, b:int)
    
  • Como várias transformações ocorrem na cadeia de ferramentas do compilador Mirah, algumas strings que são identificadores válidos em Ruby são tratadas como palavras-chave em Mirah, como a palavra interfaceusada para especificar uma interface de estilo JVM.

Fora dessas diferenças, o código Mirah geralmente se parece com o código Ruby:

def fib(a:int)
  if a < 2
    a
  else
    fib(a - 1) + fib(a - 2)
  end
end

Status

Em 2012, o Mirah está em desenvolvimento, mas alguns desenvolvedores estão usando o Mirah para aplicativos de produção de escopo limitado.

Frameworks

Duvidoso

Dubious é um projeto para executar o Mirah no Google App Engine . Ele fornece uma maneira de construir aplicativos no Mirah, com convenções familiares aos desenvolvedores que usam Ruby on Rails e Sinatra . Como tudo é compilado com antecedência , os aplicativos Mirah não têm nenhum dos custos de inicialização associados ao JRuby. O Dubious oferece suporte ao ERuby (ERb) e possui um adaptador de armazenamento de dados simples que usa uma sintaxe semelhante ao Datamapper .

Veja também

Referências

links externos