Une courte introduction à


                           MacRuby
                               Objective-C, Cocoa, LLVM, Gr...
Olivier Gutknecht
olg@no-distance.net
twitter : olg




                                         MacRuby


  iCal, iSync, ...
Breaking News !

MacRuby developer
attacked by raptors
Text
 Text
Text
 Text
MacRuby
Mac OS X

  Applications


  Application
  Frameworks
                    Cocoa, WebKit, ...


Core Technologies   CoreGra...
Ruby sur OS X
2002   Mac OS X 10.2      Ruby 1.6.7

2005   Mac OS X 10.4      Ruby 1.8.2

2007   Mac OS X 10.5      Ruby 1...
Ruby sur OS X
• Ruby sur une plateforme Unix...
• Avec quelques agréments en plus...
  par ex: mongrel_rails_persists:
  i...
Une affaire de famille

         SmallTalk


Objective-C     Ruby
Ecrire une “vraie” appli
    Mac en Ruby ?




         GitNub
RubyCocoa
• Un vrai bridge (Fujimoto Hisakuni, 2001)
• Syntaxe... intéressante
• Ruby 1.8
• Green threads, non réentrant
•...
require 'osx/cocoa'; include OSX
app = NSApplication.sharedApplication
win = NSWindow.alloc.initWithContentRect_styleMask_...
Facile.
(si on connait Objective-C, Cocoa, Ruby, et les dragons qui se cachent dans les recoins du bridge)
MacRuby
MacRuby

• One GC to release them all
MacRuby

• One GC to release them all
• One runtime to bind them
MacRuby

• One GC to release them all
• One runtime to bind them
• In the land of Cocoa where Obj-C lie
MacRuby

• One GC to release them all
• One runtime to bind them
• In the land of Cocoa where Obj-C lie
• Et HotCocoa pour...
MacRuby
      Laurent Sansonetti
           (Apple)
          Vincent Isambart
            Kich Kilmer
             Eloy D...
En toute simplicité...


• La meilleure plateforme pour les devs Ruby
• Une plateforme de qualité pour les devs Cocoa
Bridge, quel bridge ?
$ macirb
>> s = "osdc"
=> "osdc"

>> s.class
=> NSMutableString

>> s.class.ancestors
=> [NSMutableS...
Bridge, quel bridge ?

• Une classe Ruby est une classe Obj-C
• Une méthode Ruby est une méthode Obj-C
• Une instance Ruby...
Syntaxe
                                             Objective-C
Person *person = [Person new];

[person name];
[person se...
HotCocoa
require ‘hotcocoa’
include HotCocoa

application do
  win = window :title => ‘hello OSDC’, :frame => [0, 0, 200, ...
Ruby 1.9


Parseur     Runtime   Built-in classes

YARV         GC           Stdlib
MacRuby

               Runtime
 Parseur                      Stdlib

LLVM/Roxor     libobjc   Built-in Classes
AOT    JIT...
MacRuby 0.4 - 04/09

•   Intégration XCode

•   Embedding / Runtime
    Control

•   HotCocoa

•   Threaded GC
MacRuby 0.5 - xx/09

•   YARV ? LLVM !

•   RubySpec

•   AOT

•   GrandCentral

•   ...
Pourquoi LLVM ?
Coolest Logo Ever
Tout le monde adore
les microbenchmarks

(surtout s’ils sont menteurs
     et non significatifs)
C

static int fib(int n)
{
  if (n < 3) {
    return 1;
  } else {
    return fib(n - 1) + fib(n - 2);
  }
}
Objective-C

@implementation Fib
- (int)fib:(int)n
{
  if (n < 3) {
   return 1;
  } else {
   return [self fib:n - 1] + [...
4




                        3
temps d’exécution (s)




                        2




                        1




    ...
Ruby

def fib(n)
  if n < 3
    1
  else
    fib(n-1) + fib(n-2)
  end
end

p fib(ARGV.join("").to_i)
4




                        3
temps d’exécution (s)




                        2




                        1




    ...
MRI Ruby 1.8
$ ruby fibo.rb 40
102334155


                               MacRuby
$ macruby fibo.rb 40
102334155


         ...
Grand Central
# A GCD-based implementation of the sleeping barber problem:
#   http://en.wikipedia.org/wiki/Sleeping_barbe...
Le bonheur

   ?
Pourquoi MacRuby ?

• Ruby pour développer des applications
  desktop “mac-like”
• Un terrain d’expérimentation formidable...
Q&A
• Compatibilité Ruby 1.9
 • Actuellement ≈ 80% sur la suite
    rubyspec
• Portabilité sur d’autres plateformes
 • Dép...
Merci !
Introduction à MacRuby
Upcoming SlideShare
Loading in...5
×

Introduction à MacRuby

2,216

Published on

Une courte introduction à MacRuby, présentation donnée à OSDC.fr 2009

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
2,216
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Introduction à MacRuby

    1. 1. Une courte introduction à MacRuby Objective-C, Cocoa, LLVM, Grand Central et autres amusements Olivier Gutknecht - OSDC.fr - Oct. 3 2009
    2. 2. Olivier Gutknecht olg@no-distance.net twitter : olg MacRuby iCal, iSync, [...] co-founder Lurker actif Server Software
    3. 3. Breaking News ! MacRuby developer attacked by raptors
    4. 4. Text Text
    5. 5. Text Text
    6. 6. MacRuby
    7. 7. Mac OS X Applications Application Frameworks Cocoa, WebKit, ... Core Technologies CoreGraphics, CoreFoundation, ... Darwin Kernel, userland, libdispatch, ...
    8. 8. Ruby sur OS X 2002 Mac OS X 10.2 Ruby 1.6.7 2005 Mac OS X 10.4 Ruby 1.8.2 2007 Mac OS X 10.5 Ruby 1.8.6 RubyCocoa, gems, Rails 2009 Mac OS X 10.6 Ruby 1.8.7 RubyCocoa, gems, Rails 20xx ? Sky is the limit
    9. 9. Ruby sur OS X • Ruby sur une plateforme Unix... • Avec quelques agréments en plus... par ex: mongrel_rails_persists: intégration launchd, bonjour • Et Cocoa alors ?
    10. 10. Une affaire de famille SmallTalk Objective-C Ruby
    11. 11. Ecrire une “vraie” appli Mac en Ruby ? GitNub
    12. 12. RubyCocoa • Un vrai bridge (Fujimoto Hisakuni, 2001) • Syntaxe... intéressante • Ruby 1.8 • Green threads, non réentrant • Deux runtimes, deux GC • Ouch
    13. 13. require 'osx/cocoa'; include OSX app = NSApplication.sharedApplication win = NSWindow.alloc.initWithContentRect_styleMask_backing_defer( [0, 0, 200, 60], NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask | NSResizableWindowMask, NSBackingStoreBuffered, false) win.title = 'Hello World' button = NSButton.alloc.initWithFrame(NSZeroRect) win.contentView.addSubview(button) button.bezelStyle = NSRoundedBezelStyle button.title = 'Hello!' button.sizeToFit button.frameOrigin = NSMakePoint((win.contentView.frameSize.width/ 2.0)-(button.frameSize.width/2.0), (win.contentView.frameSize.height/ 2.0)-(button.frameSize.height/2.0)) button_controller = Object.new def button_controller.sayHello(sender) puts "Hello OSDC!" end button.target = button_controller button.action = 'sayHello:' win.display win.orderFrontRegardless app.run
    14. 14. Facile. (si on connait Objective-C, Cocoa, Ruby, et les dragons qui se cachent dans les recoins du bridge)
    15. 15. MacRuby
    16. 16. MacRuby • One GC to release them all
    17. 17. MacRuby • One GC to release them all • One runtime to bind them
    18. 18. MacRuby • One GC to release them all • One runtime to bind them • In the land of Cocoa where Obj-C lie
    19. 19. MacRuby • One GC to release them all • One runtime to bind them • In the land of Cocoa where Obj-C lie • Et HotCocoa pour rubyfier le tout
    20. 20. MacRuby Laurent Sansonetti (Apple) Vincent Isambart Kich Kilmer Eloy Duran Ben Stiglitz Matt Aimonetti ... http://www.macruby.org http://twitter.com/macruby
    21. 21. En toute simplicité... • La meilleure plateforme pour les devs Ruby • Une plateforme de qualité pour les devs Cocoa
    22. 22. Bridge, quel bridge ? $ macirb >> s = "osdc" => "osdc" >> s.class => NSMutableString >> s.class.ancestors => [NSMutableString, NSString, Comparable, NSObject, Kernel] >> s.upcase => "OSDC" >> s.uppercaseString => "OSDC" >> s.respondsToSelector(:upcase) => 1 >> s.respond_to?(:upcase) => true
    23. 23. Bridge, quel bridge ? • Une classe Ruby est une classe Obj-C • Une méthode Ruby est une méthode Obj-C • Une instance Ruby est une instance Obj-C
    24. 24. Syntaxe Objective-C Person *person = [Person new]; [person name]; [person setName:name]; [person setFirstName:first lastName:last]; MacRuby person = Person.new person.name person.name = myName person.setFirstName(first, lastName:last)
    25. 25. HotCocoa require ‘hotcocoa’ include HotCocoa application do win = window :title => ‘hello OSDC’, :frame => [0, 0, 200, 60] b = button :title => ‘Hello!’, :layout => {:align => :center} win << b b.on_action { puts “Hello OSDC!” } end
    26. 26. Ruby 1.9 Parseur Runtime Built-in classes YARV GC Stdlib
    27. 27. MacRuby Runtime Parseur Stdlib LLVM/Roxor libobjc Built-in Classes AOT JIT libauto CoreFoundation
    28. 28. MacRuby 0.4 - 04/09 • Intégration XCode • Embedding / Runtime Control • HotCocoa • Threaded GC
    29. 29. MacRuby 0.5 - xx/09 • YARV ? LLVM ! • RubySpec • AOT • GrandCentral • ...
    30. 30. Pourquoi LLVM ?
    31. 31. Coolest Logo Ever
    32. 32. Tout le monde adore les microbenchmarks (surtout s’ils sont menteurs et non significatifs)
    33. 33. C static int fib(int n) { if (n < 3) { return 1; } else { return fib(n - 1) + fib(n - 2); } }
    34. 34. Objective-C @implementation Fib - (int)fib:(int)n { if (n < 3) { return 1; } else { return [self fib:n - 1] + [self fib:n - 2]; } } @end
    35. 35. 4 3 temps d’exécution (s) 2 1 0 fib(40) C Objective-C
    36. 36. Ruby def fib(n) if n < 3 1 else fib(n-1) + fib(n-2) end end p fib(ARGV.join("").to_i)
    37. 37. 4 3 temps d’exécution (s) 2 1 0 fib(40) C MacRuby Objective-C
    38. 38. MRI Ruby 1.8 $ ruby fibo.rb 40 102334155 MacRuby $ macruby fibo.rb 40 102334155 MacRuby AOT $ macrubyc fibo.rb -o fibo $ ./fibo 40 102334155
    39. 39. Grand Central # A GCD-based implementation of the sleeping barber problem: # http://en.wikipedia.org/wiki/Sleeping_barber_problem # http://www.madebysofa.com/#blog/the_sleeping_barber waiting_chairs = Dispatch::Queue.new('com.apple.waiting_chairs') semaphore = Dispatch::Semaphore.new(3) index = -1 while true index += 1 success = semaphore.wait(Dispatch::TIME_NOW) if success != 0 puts "Customer turned away #{index}" next end waiting_chairs.dispatch do semaphore.signal puts "Shave and a haircut #{index}" end end
    40. 40. Le bonheur ?
    41. 41. Pourquoi MacRuby ? • Ruby pour développer des applications desktop “mac-like” • Un terrain d’expérimentation formidable • Des perspectives ... intéressantes
    42. 42. Q&A • Compatibilité Ruby 1.9 • Actuellement ≈ 80% sur la suite rubyspec • Portabilité sur d’autres plateformes • Dépendances FLOSS, aucun obstacle technique insurmontable... • ... des volontaires ?
    43. 43. Merci !
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×