fbpx
Wikipedia

Mirah (programming language)

Mirah (formerly Duby) has been a programming language based on Ruby language syntax, local type inference, hybrid static–dynamic type system, and a pluggable compiler toolchain. Mirah was created by Charles Oliver Nutter to be "a 'Ruby-like' language, probably a subset of Ruby syntax, that [could] compile to solid, fast, idiomatic JVM bytecode."[1] The word mirah refers to the gemstone ruby in the Javanese language, a play on the concept of Ruby in Java.[2]

History edit

To foster more participation in the JRuby project from Ruby community members, Nutter began to explore the possibility of presenting Ruby syntax, but with a static type model and direct-to-native compiling. In this context, "native" meant mainly the Java virtual machine (JVM), but Mirah has been designed around the possibility of having alternative backends for other object-oriented runtimes like the Common Language Runtime (CLR) of the .NET Framework. The language needed to look and feel like Ruby, and to introduce no new library dependencies into JRuby (which precludes most other JVM languages) and to suffer no performance penalty (which precludes writing in Ruby).

Early versions of Mirah (then Duby) focused mostly on mathematical performance, where dynamic programming languages often pay the highest cost. Since then it has evolved into a full JVM language, with several users and real-world applications using it for core components.

Design edit

Mirah is mostly a pluggable compiler toolchain. The main elements of the chain are:

  1. A parser, based on JRuby's parser, that emits a Ruby abstract syntax tree (AST)
  2. A transformer that converts the Ruby AST into a Mirah AST
  3. A type inferrer that decorates the Mirah AST with appropriate typing information for the target backend
  4. A backend code generator

Of these phases, only the last two need specific knowledge of the eventual target platform. This makes Mirah suitable for many backends, and also makes it possible to write language plug-ins for Mirah's transformation phase that will apply to all supported backends equally.

For simple pieces of code and the JVM bytecode backend, the Mirah compiler emits nearly the same instructions as standard javac compilers.

No runtime library edit

Because Mirah is just a compiler, it ships no standard library. The intent is that Mirah users will choose what libraries they want to use, perhaps write plugins for the Mirah compiler to support them, and the compiler will do the rest. This is an explicit design goal, avoid introducing a requirement on any new external library. The standard library for Mirah, then, is whatever the standard library for the current backend is, and emphasis is placed on writing compiler plugins rather than libraries to extend and enhance the language.

Type system edit

Mirah does not impose a specific type system on users, instead relying on whatever the target backend provides. On the JVM, the type system is largely Java's type system, and type declarations refer to JVM classes, primitives, and interfaces.

Mirah is primarily a statically-typed language, but support is in development to allow dynamic typing also. The mechanism is similar to that provided in C# 4, with a special dynamic type indicating all dispatches against that variable's value should be done dynamically. Dynamic type support is currently planned only for Java 7 and higher, using the new invokedynamic bytecode.

Syntax edit

The syntax of Mirah is largely the same as the syntax of Ruby, but with a few modifications to support static typing:

  • Method parameters usually need to have their types declared:
    def foo(a:String, b:int) 
  • Because several transformations occur in the Mirah compiler toolchain, some strings that are valid identifiers in Ruby are treated as keywords in Mirah, such as the word interface used to specify a JVM-style interface.

Outside of these differences, Mirah code generally looks like Ruby code:

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

Status edit

As of 2012, Mirah is under development, but some developers are using Mirah for production applications of limited scope.

Frameworks edit

Dubious edit

Dubious is a project for running Mirah on Google App Engine. It provides a way to build apps in Mirah, with conventions familiar to developers using Ruby on Rails and Sinatra. Since everything is compiled ahead-of-time, Mirah applications have none of the initializing costs associated with JRuby. Dubious supports ERuby (ERb) and has a simple datastore adapter that uses a syntax similar to Datamapper.

See also edit

References edit

  1. ^ Duby: A Type-Inferred Ruby-Like JVM Language
  2. ^ "The Mirah Programming Language".

External links edit

  • Official website
  • Introduction to Mirah by Charles Nutter - Dr. Dobb's, March 25, 2011
  • Breaking the Rules - Making Java Fun with Mirah - Roja Buck, Mar 20, 2011
  • A Blend of Java and Ruby - The Mirah Language - InfoQ, July 27, 2010
  • Mirah brings Ruby niceties to Java - InfoWorld. July 23, 2010
  • "Mirah: Taking Performance to the Next Level with Java's Ruby" - O'Reilly Media, July, 2010
  • Introducing Duby, Ryan Brown
  • "Ruby Mutants Presentation", Railsconf 2009
  • Dubious framework
  • Video presentation: JRuby, Duby, and Surinx: Building a Better Ruby
  • Video Lightning talk: Rails Underground 2009 - Charles Nutter on Charles Nutter - Duby and Juby Languages
  • What does Mirah offer over JRuby, Groovy and Scala?

mirah, programming, language, mirah, formerly, duby, been, programming, language, based, ruby, language, syntax, local, type, inference, hybrid, static, dynamic, type, system, pluggable, compiler, toolchain, mirah, created, charles, oliver, nutter, ruby, like,. Mirah formerly Duby has been a programming language based on Ruby language syntax local type inference hybrid static dynamic type system and a pluggable compiler toolchain Mirah was created by Charles Oliver Nutter to be a Ruby like language probably a subset of Ruby syntax that could compile to solid fast idiomatic JVM bytecode 1 The word mirah refers to the gemstone ruby in the Javanese language a play on the concept of Ruby in Java 2 MirahParadigmsObject oriented imperativeDesigned byCharles Oliver NutterStable release0 2 1 September 26 2016 7 years ago 2016 09 26 Typing disciplinestatic with dynamic features strong inferredPlatformJava virtual machineOSCross platformLicenseApache License 2 0Websitehttps mirah org Influenced byRuby Java Boo Contents 1 History 2 Design 2 1 No runtime library 2 2 Type system 3 Syntax 4 Status 5 Frameworks 5 1 Dubious 6 See also 7 References 8 External linksHistory editTo foster more participation in the JRuby project from Ruby community members Nutter began to explore the possibility of presenting Ruby syntax but with a static type model and direct to native compiling In this context native meant mainly the Java virtual machine JVM but Mirah has been designed around the possibility of having alternative backends for other object oriented runtimes like the Common Language Runtime CLR of the NET Framework The language needed to look and feel like Ruby and to introduce no new library dependencies into JRuby which precludes most other JVM languages and to suffer no performance penalty which precludes writing in Ruby Early versions of Mirah then Duby focused mostly on mathematical performance where dynamic programming languages often pay the highest cost Since then it has evolved into a full JVM language with several users and real world applications using it for core components Design editMirah is mostly a pluggable compiler toolchain The main elements of the chain are A parser based on JRuby s parser that emits a Ruby abstract syntax tree AST A transformer that converts the Ruby AST into a Mirah AST A type inferrer that decorates the Mirah AST with appropriate typing information for the target backend A backend code generator Of these phases only the last two need specific knowledge of the eventual target platform This makes Mirah suitable for many backends and also makes it possible to write language plug ins for Mirah s transformation phase that will apply to all supported backends equally For simple pieces of code and the JVM bytecode backend the Mirah compiler emits nearly the same instructions as standard javac compilers No runtime library edit Because Mirah is just a compiler it ships no standard library The intent is that Mirah users will choose what libraries they want to use perhaps write plugins for the Mirah compiler to support them and the compiler will do the rest This is an explicit design goal avoid introducing a requirement on any new external library The standard library for Mirah then is whatever the standard library for the current backend is and emphasis is placed on writing compiler plugins rather than libraries to extend and enhance the language Type system edit Mirah does not impose a specific type system on users instead relying on whatever the target backend provides On the JVM the type system is largely Java s type system and type declarations refer to JVM classes primitives and interfaces Mirah is primarily a statically typed language but support is in development to allow dynamic typing also The mechanism is similar to that provided in C 4 with a special dynamic type indicating all dispatches against that variable s value should be done dynamically Dynamic type support is currently planned only for Java 7 and higher using the new invokedynamic bytecode Syntax editThe syntax of Mirah is largely the same as the syntax of Ruby but with a few modifications to support static typing Method parameters usually need to have their types declared def foo a String b int Because several transformations occur in the Mirah compiler toolchain some strings that are valid identifiers in Ruby are treated as keywords in Mirah such as the word interface used to specify a JVM style interface Outside of these differences Mirah code generally looks like Ruby code def fib a int if a lt 2 a else fib a 1 fib a 2 end endStatus editAs of 2012 update Mirah is under development but some developers are using Mirah for production applications of limited scope Frameworks editDubious edit Dubious is a project for running Mirah on Google App Engine It provides a way to build apps in Mirah with conventions familiar to developers using Ruby on Rails and Sinatra Since everything is compiled ahead of time Mirah applications have none of the initializing costs associated with JRuby Dubious supports ERuby ERb and has a simple datastore adapter that uses a syntax similar to Datamapper See also edit nbsp Free and open source software portal List of JVM languagesReferences edit Duby A Type Inferred Ruby Like JVM Language The Mirah Programming Language External links editOfficial website Introduction to Mirah by Charles Nutter Dr Dobb s March 25 2011 Breaking the Rules Making Java Fun with Mirah Roja Buck Mar 20 2011 A Blend of Java and Ruby The Mirah Language InfoQ July 27 2010 Mirah brings Ruby niceties to Java InfoWorld July 23 2010 Mirah Taking Performance to the Next Level with Java s Ruby O Reilly Media July 2010 Introducing Duby Ryan Brown Ruby Mutants Presentation Railsconf 2009 Dubious framework Video presentation JRuby Duby and Surinx Building a Better Ruby Video Lightning talk Rails Underground 2009 Charles Nutter on Charles Nutter Duby and Juby Languages What does Mirah offer over JRuby Groovy and Scala Retrieved from https en wikipedia org w index php title Mirah programming language amp oldid 1194693289, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.