Mirah (programmeringsspråk)
Paradigm | Objektorienterad , imperativ |
---|---|
Designad av | Charles Oliver Nutter |
Stabil frisättning | 0.2.1 / 26 september 2016
|
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 på 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:
- En parser , baserad på JRubys parser, som avger ett Ruby abstrakt syntaxträd (AST)
- En transformator som omvandlar Ruby AST till en Mirah AST
- En typinferrer som dekorerar Mirah AST med lämplig typinformation för målbackend
- 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
- Officiell hemsida
- Introduktion till Mirah av Charles Nutter - Dr. Dobb's, 25 mars 2011
- Breaking the Rules - Making Java Fun with Mirah - Roja Buck, 20 mars 2011
- En blandning av Java och Ruby - The Mirah Language - InfoQ, 27 juli 2010
- Mirah tar med Ruby finesser till Java - InfoWorld. 23 juli 2010
- "Mirah: Ta prestanda till nästa nivå med Javas Ruby" - O'Reilly Media, juli 2010
- Vi presenterar Duby, Ryan Brown
- "Ruby Mutants Presentation", Railsconf 2009
- Tveksamt ramverk
- Videopresentation: JRuby, Duby och Surinx: Building a Better Ruby
- Video Lightning talk: Rails Underground 2009 - Charles Nutter på Charles Nutter - Duby and Juby Languages
- Vad erbjuder Mirah över JRuby, Groovy och Scala?