Your SlideShare is downloading. ×
Ruby for C#-ers
       Thomas Lundström, Softhouse

Scandinavian Developer Conference, Göteborg
               March 17, 2...
Agenda
• What is Ruby?
• How does the
  language work?
• IronRuby specifics
• Where to apply
  IronRuby?
                  ...
Agenda
• What is Ruby?
• How does the
  language work?
• IronRuby specifics
• Where to apply
  IronRuby?
                  ...
What is Ruby?               Ruby was created in the 90’s by Matz, Yukihiro
                            Matsumoto

        ...
What is Ruby?                               Ruby was created in the 90’s by Matz, Yukihiro
                               ...
MRI is Open Source



        What is Ruby?
                              All other VM:s OSS as well

                    ...
Agenda
• What is Ruby?
• How does the
  language work?
• IronRuby specifics
• Where to apply
  IronRuby?
                  ...
Hello world   Demo: “ir.exe 001_HelloWorld.rb”

                       Take-away:
                       1. You don’t have...
Control structure
                             if condition
                                   do_stuff
                  ...
Everything’s an Object
                  no need for boxing/unboxing
                  everything is nullable (nil’able)

...
Blocks
                               Compared to Lambdas in C#:
                               * no add-on
              ...
Loops
                              for i in 1..10 do
                              can be replaced with
                 ...
Classes and methods
                              class MyClass
                              def method(param=1)
        ...
Mixins         Mixins can be used to implement
                              Reenskaug’s/Coplien’s DCI

                  ...
Metaprogramming

                         Super-simple to implement an internal DSL by using
                         meta...
Agenda
• What is Ruby?
• How does the
  language work?
• IronRuby specifics
• Where to apply
  IronRuby?
                  ...
DLR

Ruby
       DLR is a layer that makes it
       possible to run dynamic,
       interpreted languages

       IronRub...
Calling Ruby from C#

• Separate AppDomain           If you want to run Ruby from your



• ScriptRuntime (in same AppDoma...
Calling C# from Ruby

                       Add reference = require a dll

                       Search rules:
         ...
Putting it all together
• Hosting an IronRuby DSL from C#
         Subscription.App (C#)


              DSL (Ruby)


    ...
Agenda
• What is Ruby?
• How does the
  language work?
• IronRuby specifics
• Where to apply
  IronRuby?
                  ...
Web
                            Ruby on Rails
                            - the big reason ruby is so popular

           ...
DSL:s
                            Using ruby in a subset of
                            the product

                     ...
Testing


          RSpec for unit-level tests
          Cucumber for acceptance tests
          Some of you may have alre...
Build environment
            Rake is a DSL for dependency and build
            management

            There are a numbe...
IronRuby drawbacks    i.e. don’t use IronRuby for high-performant systems




• Performance
 • Throughput
 • Start-up (lat...
Thanks!

• Thomas Lundström, Softhouse
• thomas.lundstrom@softhouse.se
• Twitter: @thomaslundstrom
• http://blog.thomaslun...
Upcoming SlideShare
Loading in...5
×

Ruby for C#-ers (ScanDevConf 2010)

1,738

Published on

Presentation about Ruby for C#-ers from Scandinavian Developer Conference, March 17 in Gothenburg, Sweden.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,738
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Ruby for C#-ers (ScanDevConf 2010)"

  1. 1. Ruby for C#-ers Thomas Lundström, Softhouse Scandinavian Developer Conference, Göteborg March 17, 2010
  2. 2. Agenda • What is Ruby? • How does the language work? • IronRuby specifics • Where to apply IronRuby? http://www.flickr.com/photos/puntodevista/84796578/
  3. 3. Agenda • What is Ruby? • How does the language work? • IronRuby specifics • Where to apply IronRuby? http://www.flickr.com/photos/puntodevista/84796578/
  4. 4. What is Ruby? Ruby was created in the 90’s by Matz, Yukihiro Matsumoto For those of you who haven’t touched any ruby code at all: Pure object-oriented (everything’s an object) Interpreted, Dynamic Runs in different VM:s MRI JRuby MacRuby MagLev IronRuby No real specification, defined by MRI But: RubySpec: http:/ /blog.rubybestpractices.com/ posts/gregory/006-brian-ford-rubyspec.html is coming along TODO: fyll på här http://www.wordle.net/show/wrdl/1665715/What_is_Ruby%3F
  5. 5. What is Ruby? Ruby was created in the 90’s by Matz, Yukihiro Matsumoto For those of you who haven’t touched any ruby code at all: Pure object-oriented (everything’s an object) Interpreted, Dynamic Runs in different VM:s MRI JRuby MacRuby MagLev IronRuby No real specification, defined by MRI But: RubySpec: http:/ /blog.rubybestpractices.com/ posts/gregory/006-brian-ford-rubyspec.html is coming along http://www.wordle.net/show/wrdl/1665715/What_is_Ruby%3F
  6. 6. MRI is Open Source What is Ruby? All other VM:s OSS as well Gems * Pre-packaged open source components - For Java devs, similar to mvn (on steroids) - infrastructure (e.g. aws gems) - domain logic (e.g. aasm, state machine impl) - resolves dependencies - gem install <gem-name> - Incredibly easy to share and use other developers’ code irb - a REPL (Read, Eval, Print, Loop) In a transition, 1.8 to 1.9 • Open Source 1.9 main feature: Multilingualization support • Comes with a REPL • Transition 1.8 to 1.9 (Multilingualization)
  7. 7. Agenda • What is Ruby? • How does the language work? • IronRuby specifics • Where to apply IronRuby? http://www.flickr.com/photos/puntodevista/84796578/
  8. 8. Hello world Demo: “ir.exe 001_HelloWorld.rb” Take-away: 1. You don’t have to use public void main(string [] args) { //code } 2. You don’t have to use parenthesizes if the interpreter understands your code puts(“Hello World”) • puts “Hello World”
  9. 9. Control structure if condition do_stuff end do_stuff if condition • if/else/elsif do_stuff unless condition • unless • Switching places on if/unless and result
  10. 10. Everything’s an Object no need for boxing/unboxing everything is nullable (nil’able) a=3 puts a.class a = nil puts a.class puts a.class.ancestors • Even numbers!
  11. 11. Blocks Compared to Lambdas in C#: * no add-on * most API:s support blocks * The culture is to use blocks/lambdas whenever possible * (It’s getting better in .NET land, though) a.each do |item| do_stuff if (item%2 == 1) end • API:s use blocks as a first-class citizen
  12. 12. Loops for i in 1..10 do can be replaced with (1..10).each do |i| • Not used as much as in C#
  13. 13. Classes and methods class MyClass def method(param=1) puts param end end c = MyClass.new c.method # => 1 c.method(2) # => 2 • No curlies • Default method parameters • All classes are open for modification
  14. 14. Mixins Mixins can be used to implement Reenskaug’s/Coplien’s DCI module MyMod def mod_method puts "from module" end end c.extend MyMod c.mod_method # => “from module” class OtherClass include MyMod end o = OtherClass.new o.mod_method • Adds behaviour to classes
  15. 15. Metaprogramming Super-simple to implement an internal DSL by using meta programming Rails use this a lot (:has_many etc) Demo: Show the SubscriptionDeals DSL • Used to create internal DSL:s
  16. 16. Agenda • What is Ruby? • How does the language work? • IronRuby specifics • Where to apply IronRuby? http://www.flickr.com/photos/puntodevista/84796578/
  17. 17. DLR Ruby DLR is a layer that makes it possible to run dynamic, interpreted languages IronRuby runs in interpreted mode DLR at first, but later it’s JIT’ed CLR
  18. 18. Calling Ruby from C# • Separate AppDomain If you want to run Ruby from your • ScriptRuntime (in same AppDomain) own apps 3 different ways of hosting the DLR (and ruby code) from your own C# code • ScriptScope The higher in the list, the more isolated (and heavyweight)
  19. 19. Calling C# from Ruby Add reference = require a dll Search rules: The current folder IronRuby bin folder GAC • Very similar to C# require ‘System.Windows.Forms’ = add reference include System::Windows::Forms = using ...
  20. 20. Putting it all together • Hosting an IronRuby DSL from C# Subscription.App (C#) DSL (Ruby) Domain Model (C#)
  21. 21. Agenda • What is Ruby? • How does the language work? • IronRuby specifics • Where to apply IronRuby? http://www.flickr.com/photos/puntodevista/84796578/
  22. 22. Web Ruby on Rails - the big reason ruby is so popular For light-weight web solutions (some json etc): Sinatra http://rubyonrails.org/ http://www.sinatrarb.com
  23. 23. DSL:s Using ruby in a subset of the product -if reqs often change and we can’t wait for a re- deploy e.g. rules engine for a stock-trading app • Internal DSL:s + Ruby = a treat
  24. 24. Testing RSpec for unit-level tests Cucumber for acceptance tests Some of you may have already seen cucumber
  25. 25. Build environment Rake is a DSL for dependency and build management There are a number of toolkits for building C# solutions in Rake, e.g. Albacore For an introduction, see Martin Fowler’s article about rake, http:// martinfowler.com/articles/rake.html
  26. 26. IronRuby drawbacks i.e. don’t use IronRuby for high-performant systems • Performance • Throughput • Start-up (latency)
  27. 27. Thanks! • Thomas Lundström, Softhouse • thomas.lundstrom@softhouse.se • Twitter: @thomaslundstrom • http://blog.thomaslundstrom.com

×