SlideShare uma empresa Scribd logo
1 de 103
Baixar para ler offline
ThoughtWorks




               comparing
          groovy & jruby *
* please check all knives, guns, pitchforks, and torches at the door



                             NEAL FORD        software architect / meme wrangler



                                       ThoughtWorks
                           nford@thoughtworks.com
                           3003 Summit Boulevard, Atlanta, GA 30319
                           www.nealford.com
                           www.thoughtworks.com
                           blog: memeagora.blogspot.com
                           twitter: neal4d
housekeeping
ask questions at the end
(insane amount of material!)


download slides from
nealford.com



download samples from github.com/nealford
agenda:
syntax

closures

eigenclass approaches

meta-programming

framework approach
geek fu test:
Groovy dynamicizes   JRuby brings Ruby to
 the Java platform
       TM

                       the Java platform
                             TM
differences & observations
syntax
sigils
this.name

   vs

 @name
auto-encapsulation?
Perl !!!!!!!!!
Ruby has some Perl-isms...

...with significant differences
closures
passing closures
auto-blocks
passing closures
everything except...
in Java™, everything is an object...

...except primitives and nulls

in Groovy, everything is an object...

except null

in JRuby, everything is an object.
null is null


 ?. handles protected
      reference

person?.address?.street
nil is an instance of
   NilClass
switch/case statement
===   isCase()
“spread” operator
“elvis” operator
side effects of
encapsulating
    Java™
things added to Object
supporting collections
really? really!
JRuby additions
    JRuby adds artifacts to “Rubify” Java™




ArrayList


                                             Fixnum
    ...but doesn’t add collection stuff to Object
Groovy is (kind of)
optionally typed
search exists on Stack




but not on ArrayList
      or List!
interfaces & mixins
Groovy & interfaces

allows you to interact with Java™ interfaces


can wrap proxies around them if needed


“fake out” interfaces via closures using as
be careful when implementing with a map:
NullPointerException if you forget a method
Ruby has no interfaces
mixin

first appeared in symbolic logic’s flavors system

named after ice cream mix-ins

not a form of specialization

a way to collect functionality
comparisons
comparisons
comparisons
violating handshakes
mixins in Groovy,
interfaces in JRuby
interfaces in JRuby?
meta-programming
mostly parity (functionally)




very different implementations
executable declarations
much of Ruby’s infrastructure is meta-
programming

meta-programming methods:

   attr_reader, attr_writer,
   attr_accessor

   include


   private, protected, public
AST transformations
implementation
optional inclusion
conditional method
attributes
hook methods
sticky attributes




private, protected, public
eigenclass
adding methods via
      proxies
Groovy’s eigenclass
framework
 approach
encapsulate
 & extend
Groovy & Grails
leverage the existing industrial strength Java™
stack

encapsulate best-of-breed frameworks

use Groovy to simplify and humanize them

encapsulate, then build up
abstraction
layers
via
meta || dsl
Ruby

tends to build things as abstraction layers atop
Ruby using meta-programming & dsl techniques

Ruby on Rails = software factories + dsl’s

Ruby language is always 1 abstraction layer
down

lightweight abstraction layers
case study: builders
GroovyObjectSupport




  BuilderSupport




   MarkupBuilder
builder
builder works via
method_missing

 but what about this?
the problem:

how do you inherit from object...

 ...with inheriting from object?
Jim Weirich’s
           1.8     BlankSlate

 Object           BasicObject
                  BlankSlate




Builder
Recorder          Builder
                  Recorder
                  Recorder




           1.9
                  BasicObject
different philosophies

Groovy encapsulates and builds up

Ruby either builds

   abstractions with dsl’s

   via meta-programming
summary
the good
unparalleled Java™ integration

willing to evolve the language

the real JDK™ 2.0!

building up from best-of-breed
the bad
fast changing at the core

single runtime platform

never spread out of the Java™ community

framework approach?
def name

     public String getName()
public void setName(String name)
the good
well established (older than Java™)

virtually effortless meta-programming

futuristic framework approach

truly cross platform, for the new definition of
platform

interpreted, then jit-ted
the bad
some impedance mismatch with Java™ (smaller
all the time)

yet another language to learn

unfamiliar frameworks

you have to switch to a new community

you have to learn to think like a Ruby-ist
ThoughtWorks




                                ?’s
            please fill out the session evaluations
             samples at github.com/nealford
                                                       NEAL FORD        software architect / meme wrangler



                                                                 ThoughtWorks
                                                     nford@thoughtworks.com
This work is licensed under the Creative Commons     3003 Summit Boulevard, Atlanta, GA 30319
                                                     www.nealford.com
       Attribution-Share Alike 3.0 License.          www.thoughtworks.com
                                                     blog: memeagora.blogspot.com
 http://creativecommons.org/licenses/by-sa/3.0/us/   twitter: neal4d
ThoughtWorks




                    resources
Cow in the Road photo by Sophia Huda, from
Flickr, under a Creative Commons license
groovy web site
http://groovy.codehaus.org

jruby site
http://jruby.codehaus.org

ola bini’s blog
http://olabini.blogspot.com/

charles nutter’s blog
http://headius.blogspot.com/
ThoughtWorks




                     resources
jeff brown’s blog
http://javajeff.blogspot.com/

graeme rocher’s blog
http://graemerocher.blogspot.com/

aboutGroovy
http://aboutGroovy.com

venkat subramaniam’s blog
http://www.agiledeveloper.com/blog/

Mais conteúdo relacionado

Semelhante a Comparing groovy and_j_ruby(neal_ford)

Introduction to JRuby
Introduction to JRubyIntroduction to JRuby
Introduction to JRuby
elliando dias
 
Neal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary ArchitectureNeal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary Architecture
Thoughtworks
 
Your java script library
Your java script libraryYour java script library
Your java script library
jasfog
 
Dynamic Languages on the JVM
Dynamic Languages on the JVMDynamic Languages on the JVM
Dynamic Languages on the JVM
elliando dias
 
Ruby object model
Ruby object modelRuby object model
Ruby object model
mbeizer
 
Write Better JavaScript
Write Better JavaScriptWrite Better JavaScript
Write Better JavaScript
Kevin Whinnery
 
Write Better JavaScript
Write Better JavaScriptWrite Better JavaScript
Write Better JavaScript
Kevin Whinnery
 

Semelhante a Comparing groovy and_j_ruby(neal_ford) (20)

Introduction to JRuby
Introduction to JRubyIntroduction to JRuby
Introduction to JRuby
 
Lunch and learn as3_frameworks
Lunch and learn as3_frameworksLunch and learn as3_frameworks
Lunch and learn as3_frameworks
 
Neal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary ArchitectureNeal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary Architecture
 
Feelin' Groovy: An Afternoon of Reflexive Metaprogramming
Feelin' Groovy: An Afternoon of Reflexive MetaprogrammingFeelin' Groovy: An Afternoon of Reflexive Metaprogramming
Feelin' Groovy: An Afternoon of Reflexive Metaprogramming
 
Practical JRuby
Practical JRubyPractical JRuby
Practical JRuby
 
Your java script library
Your java script libraryYour java script library
Your java script library
 
Groovy And Grails
Groovy And GrailsGroovy And Grails
Groovy And Grails
 
Dynamic Languages on the JVM
Dynamic Languages on the JVMDynamic Languages on the JVM
Dynamic Languages on the JVM
 
Why Extension Programmers Should Stop Worrying About Parsing and Start Thinki...
Why Extension Programmers Should Stop Worrying About Parsing and Start Thinki...Why Extension Programmers Should Stop Worrying About Parsing and Start Thinki...
Why Extension Programmers Should Stop Worrying About Parsing and Start Thinki...
 
Ruby object model
Ruby object modelRuby object model
Ruby object model
 
IronRuby for the Rubyist
IronRuby for the RubyistIronRuby for the Rubyist
IronRuby for the Rubyist
 
Groovy and Grails
Groovy and GrailsGroovy and Grails
Groovy and Grails
 
Groovy Finesse
Groovy FinesseGroovy Finesse
Groovy Finesse
 
Groovy Finesse
Groovy FinesseGroovy Finesse
Groovy Finesse
 
Raphael Amorim - Scrating React Fiber
Raphael Amorim - Scrating React FiberRaphael Amorim - Scrating React Fiber
Raphael Amorim - Scrating React Fiber
 
Design Pattern Automation
Design Pattern AutomationDesign Pattern Automation
Design Pattern Automation
 
Ruby on Rails 3 Day BC
Ruby on Rails 3 Day BCRuby on Rails 3 Day BC
Ruby on Rails 3 Day BC
 
Javascript Apps at Build Artifacts
Javascript Apps at Build ArtifactsJavascript Apps at Build Artifacts
Javascript Apps at Build Artifacts
 
Write Better JavaScript
Write Better JavaScriptWrite Better JavaScript
Write Better JavaScript
 
Write Better JavaScript
Write Better JavaScriptWrite Better JavaScript
Write Better JavaScript
 

Último

Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Último (20)

Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 

Comparing groovy and_j_ruby(neal_ford)