Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Mirah Talk for Boulder Ruby Group

1,415 views

Published on

In which I talk about what Mirah is and some of it's fine features.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Mirah Talk for Boulder Ruby Group

  1. 1. Mirah
  2. 2. What’s Mirah?
  3. 3. It’s a small, fast,JVM language that uses Ruby syntax.
  4. 4. How’d it come about?
  5. 5. Charles Oliver Nutter, JRuby guy
  6. 6. Wanted to writeJava code in Ruby
  7. 7. Wanted to writeJava code in Ruby
  8. 8. Wanted to write Javacode in a language as expressive as Ruby.
  9. 9. Expressive as Ruby?
  10. 10. http://www.flickr.com/photos/caroslines/513429518/
  11. 11. Syntactic Sugar• Optional Arguments• Internal Iteration(each, map, etc)• Closures• Literals• String Interpretation
  12. 12. Mirahs got the sugar.
  13. 13. How Mirah Differs from Ruby
  14. 14. 1. It’s statically typed and compiled
  15. 15. Basically,No RuntimeObject/ClassModification
  16. 16. 2. It uses Java’s type system
  17. 17. It has slightly differentsemantics than Rubys
  18. 18. e.g.,Mirah has interfaces
  19. 19. So, what’s it look like?
  20. 20. FibonacciExample
  21. 21. Rubydef fib(a)  if a < 2    a  else    fib(a - 1) + fib(a - 2)  endend
  22. 22. Mirahgithub.com/mirah/mirah/examples/fib.mirahdef fib(a:int):int  if a < 2    a  else    fib(a - 1) + fib(a - 2)  endend
  23. 23. See what I did there?
  24. 24. def fib(a:int):int
  25. 25. def fib(a:int):int
  26. 26. Ruby Syntax+ Java Types- Runtime Modification
  27. 27. Other Super Powers
  28. 28. Type Inference & Macros
  29. 29. Type Inference?
  30. 30. Javaclass Foo { private int bar; Foo() { bar = 1; } public int bar() { return bar; }}
  31. 31. Rubyclass Foo def initialize @bar = 1 end def bar @bar endend
  32. 32. Mirahclass Foo def initialize @bar = 1 end def bar @bar endend
  33. 33. @bar is inferred to be an Integer
  34. 34. Mirahclass Foo def initialize @bar = 1 end def bar @bar endend
  35. 35. Javaclass Foo { private int bar; Foo() { bar = 1; } public int bar() { return bar; }}
  36. 36. Mirah Java// Generated from foo.mirahpublic class Foo extends java.lang.Object private int bar; public Foo() { this.bar = 1; } public int bar() { return this.bar; }}
  37. 37. Ruby Syntax+ Java Types- Runtime Modification+ Type Inference
  38. 38. Macros
  39. 39. For Convenience & Awesomeness.
  40. 40. Used by the compiler
  41. 41. For example,
  42. 42. puts =>System.out.println();
  43. 43. Macros:How each, map, ==, etc are implemented
  44. 44. Macro Basics
  45. 45. say you have code like:logger.debug( "this #{takes_too_much_time}")
  46. 46. runtakes_too_much_time in production?
  47. 47. No,it takes too much time.
  48. 48. Macros to the rescue
  49. 49. macro def debug debug_input quote do if logger.debugEnabled logger.debug `debug_input` end endend
  50. 50. macro def debug debug_input quote do if logger.debugEnabled logger.debug `debug_input` end endend
  51. 51. macro def debug debug_input quote do if logger.debugEnabled logger.debug `debug_input` end endend
  52. 52. macro def debug debug_input quote do if logger.debugEnabled logger.debug `debug_input` end endend
  53. 53. macro def debug debug_input quote do if logger.debugEnabled logger.debug `debug_input` end endend
  54. 54. debug( "this #{takes_too_much_time}")
  55. 55. if logger.debugEnabled logger.debug("this #takes_too_much_time}" )end
  56. 56. debug( "this #{takes_too_much_time}")
  57. 57. So, Macros are nifty
  58. 58. Ruby Syntax+ Java Types- Runtime Modification+ Type Inference+ Macros
  59. 59. Oh, theres another thing.
  60. 60. No Runtime Library
  61. 61. You can do this:$ mirahc -e "puts hello BRG"$ java -classpath . DashE.class
  62. 62. No Runtime ==Small compiled footprint
  63. 63. Small Footprint ==good for mobile
  64. 64. For example, see Pindah
  65. 65. Ruby Syntax+ Java Types- Runtime Modification+ Type Inference+ Macros- Runtime Library
  66. 66. Get Started$ rvm jruby$ gem install mirah$ mirah -e "puts hello world
  67. 67. Mirah projects to check out: • Dubious - Rails-like web framework for Google App Engine • Pindah - Android App framework
  68. 68. Im Nick@baroquebobcat
  69. 69. I work at
  70. 70. Were Hiring.gnip.com/jobs
  71. 71. A couple links mirah.orggithub.com/mirah
  72. 72. Questions?

×