Mirah (linguagem de programação) - Mirah (programming language)
Paradigmas | Orientado a objetos , imperativo |
---|---|
Projetado por | Charles Oliver Nutter |
Versão estável | 0.2.1 / 26 de setembro de 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 |
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:
- Um analisador , baseado no analisador JRuby, que emite uma árvore de sintaxe abstrata Ruby (AST)
- Um transformador que converte Ruby AST em Mirah AST
- Um inferidor de tipo que decora o Mirah AST com informações de digitação apropriadas para o back-end de destino
- 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 invokedynamic
bytecode.
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
interface
usada 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
- Website oficial
- Introdução ao Mirah por Charles Nutter - Dr. Dobb, 25 de março de 2011
- Quebrando as regras - Tornando o Java divertido com Mirah - Roja Buck, 20 de março de 2011
- A Blend of Java and Ruby - The Mirah Language - InfoQ, 27 de julho de 2010
- Mirah traz sutilezas Ruby para Java - InfoWorld. 23 de julho de 2010
- "Mirah: Levando o desempenho ao próximo nível com Java's Ruby" - O'Reilly Media, julho de 2010
- Apresentando Duby, Ryan Brown
- "Ruby Mutants Presentation", Railsconf 2009
- Quadro duvidoso
- Apresentação do vídeo: JRuby, Duby e Surinx: Construindo um Ruby Melhor
- Vídeo Lightning talk: Rails Underground 2009 - Charles Nutter em Charles Nutter - Duby e Juby Languages
- O que Mirah oferece sobre JRuby, Groovy e Scala?