Mirah (programmeringsspråk)

Mirah
Paradigm Objektorienterad , imperativ
Designad av Charles Oliver Nutter
Stabil frisättning
0.2.1 / 26 september 2016 ; för 6 år sedan ( 2016-09-26 )
Maskinskrivningsdisciplin statisk, med dynamiska egenskaper , stark , antydd
Plattform Java virtuell maskin
OS Cross-plattform
Licens Apache-licens 2.0
Hemsida http://www.mirah.org,%20http://mirah.org/
Influerad av
Ruby , Java , Boo

Mirah (tidigare Duby ) har varit ett programmeringsspråk baserat på Ruby- språksyntax, lokal typinferens , hybrid statisk-dynamisk typsystem och en pluggbar kompilatorverktygskedja . Mirah skapades av Charles Oliver Nutter för att vara "ett 'Ruby-liknande' språk, förmodligen en delmängd av Ruby-syntax, som [kunde] kompilera till solid, snabb, idiomatisk JVM - bytekod ." Ordet mirah hänvisar till ädelstensrubinen det javanesiska språket , en lek om begreppet rubin på Java.

Historia

För att främja mer deltagande i JRuby -projektet från Ruby-gemenskapsmedlemmar började Nutter undersöka möjligheten att presentera Ruby-syntax, men med en statisk typmodell och direkt-till-infödd kompilering. I det här sammanhanget betydde "native" främst den virtuella Java-maskinen (JVM), men Mirah har designats kring möjligheten att ha alternativa backends för andra objektorienterade körtider som Common Language Runtime (CLR) i .NET Framework . Språket behövde för att se ut och kännas som Ruby, och för att inte införa några nya biblioteksberoenden i JRuby (vilket utesluter de flesta andra JVM-språk ) och för att inte drabbas av prestationsstraff (vilket utesluter att skriva i Ruby).

Tidiga versioner av Mirah (då Duby) fokuserade mest på matematisk prestanda, där dynamiska programmeringsspråk ofta betalar den högsta kostnaden. Sedan dess har det utvecklats till ett fullständigt JVM-språk, med flera användare och verkliga applikationer som använder det för kärnkomponenter.

Design

Mirah är mestadels en pluggbar kompilatorverktygskedja. Huvudelementen i kedjan är:

  1. En parser , baserad på JRubys parser, som avger ett Ruby abstrakt syntaxträd (AST)
  2. En transformator som omvandlar Ruby AST till en Mirah AST
  3. En typinferrer som dekorerar Mirah AST med lämplig typinformation för målbackend
  4. En backend- kodgenerator

Av dessa faser är det bara de två sista som behöver specifik kunskap om den eventuella målplattformen. Detta gör Mirah lämplig för många backends, och gör det också möjligt att skriva språk plug-ins för Mirahs transformationsfas som kommer att gälla för alla backends som stöds lika.

För enkla bitar av kod och JVM-bytecode-backend, avger Mirah-kompilatorn nästan samma instruktioner som standard javac -kompilatorer.

Inget runtime-bibliotek

Eftersom Mirah bara är en kompilator, levereras det inget standardbibliotek . Avsikten är att Mirah-användare ska välja vilka bibliotek de vill använda, kanske skriva plugins för Mirah-kompilatorn för att stödja dem, och kompilatorn kommer att göra resten. Detta är ett explicit designmål, undvik att införa ett krav på något nytt externt bibliotek. Standardbiblioteket för Mirah är alltså vad standardbiblioteket för den nuvarande backend än är, och tonvikten läggs på att skriva kompilatorplugins snarare än bibliotek för att utöka och förbättra språket.

Typ system

Mirah påtvingar inte användarna en specifik typ av system, utan förlitar sig i stället på vad mål-backend än tillhandahåller. På JVM är typsystemet till stor del Javas typsystem och typdeklarationer hänvisar till JVM-klasser, primitiver och gränssnitt.

Mirah är i första hand ett statiskt typat språk, men stöd är under utveckling för att även tillåta dynamisk typning. Mekanismen liknar den som tillhandahålls i C# 4, med en speciell dynamisk typ som indikerar att alla utskick mot variabelns värde bör göras dynamiskt. Stöd för dynamisk typ är för närvarande endast planerat för Java 7 och högre, med den nya invokedynamic bytekoden.

Syntax

Syntaxen för Mirah är i stort sett densamma som syntaxen för Ruby , men med några modifieringar för att stödja statisk typning:

  • Metodparametrar måste vanligtvis ha sina typer deklarerade:
       def  foo  (  a  :  String  ,  b  :  int  ) 
    
  • Eftersom flera transformationer sker i Mirahs kompilatorverktygskedja, behandlas vissa strängar som är giltiga identifierare i Ruby som nyckelord i Mirah, till exempel ordgränssnittet som används för att specificera ett JVM-liknande gränssnitt.

Utanför dessa skillnader ser Mirah-koden i allmänhet ut som Ruby-kod:

 
     
    
  
          
  
 def  fib  (  a  :  int  )  om  a  <  2  a  else  fib  (  a  -  1  )  +  fib  (  a  -  2  )  slutände  _ 

Status

Från och med 2012 är Mirah under utveckling, men vissa utvecklare använder Mirah för produktionsapplikationer av begränsad omfattning.

Ramar

Tveksamt

Dubious är ett projekt för att köra Mirah på Google App Engine . Det ger ett sätt att bygga appar i Mirah, med konventioner som är bekanta för utvecklare som använder Ruby on Rails och Sinatra . Eftersom allt är sammanställt i förväg , har Mirah-applikationer inga av initialiseringskostnaderna förknippade med JRuby. Dubious stöder ERuby (ERb) och har en enkel datalagringsadapter som använder en syntax som liknar Datamapper .

Se även

externa länkar