TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
Ruby vs Java
1. Java vs Ruby : a quick and fair comparison
About the pros and cons of two popular programming languages
Jean-Baptiste Escoyez
Thursday 19 February 2009 1
2. Java vs Ruby : a quick and unfair comparison
About the elegance of Ruby
About the performance of Java
And how they can live together
Jean-Baptiste Escoyez
Thursday 19 February 2009 2
3. Ruby is interpreted, Java is compiled (before being interpreted)
>ruby my_program.rb >javac MyProgram.java
>java MyProgram
• Code can be loaded at runtime
• Code is easily accessible
• Difficult to ship closed-source software
• Speed performance issues
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Thursday 19 February 2009 3
4. Ruby use dynamic typing
• Values have type, variables not def len(list)
x=0
list.each do |element|
• Decrease language complexity x += 1
end
end
- No type declaration
public static int len(List list)
- No type casting {
int x = 0;
Iterator listIterator =
• Increase flexibility list.iterator();
while(listIterator.hasNext()){
x += 1;
• Errors appears at run-time }
}
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Thursday 19 February 2009 4
5. Ruby syntax is terse
• Example 1 : The empty program
• Java
• Ruby
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Thursday 19 February 2009 5
6. Ruby syntax is terse
• Example 1 : The empty program
Class Test {
• Java public static void main(String[] args){}
}
• Ruby
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Thursday 19 February 2009 5
7. Ruby syntax is terse
• Example 2 : Basic getters and setters
Class Circle
• Java private Coordinate center, float radius;
public void setCenter(Coordinate center){
this.center = center;
}
public Coordinate getCenter(){
return center;
}
public void setRadius(float radius){
this.radius = radius;
}
public Coordinate getRadius(){
return radius;
}
}
class Circle
• Ruby attr_accessor :center, :radius
end
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Thursday 19 February 2009 6
8. Ruby syntax is terse
• Example 3 : Playing with lists
• Java List<String> languages = new LinkedList<String>();
languages.add(quot;Javaquot;);
languages.add(quot;Rubyquot;);
languages.add(quot;Pythonquot;);
languages.add(quot;Perlquot;);
• Ruby stuff = []
stuff << quot;Javaquot;, quot;Rubyquot;, quot;Pythonquot;
stuff = [quot;Javaquot;, quot;Rubyquot;, quot;Pythonquot;]
stuff = %w(Java Ruby Python)
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Thursday 19 February 2009 7
9. Everything is an object (really everything!)
>3.times { puts quot;Hello FOSDEM !quot; }
=> Hello FOSDEM !
=> Hello FOSDEM !
=> Hello FOSDEM !
>self.class
=> Object
>1.class
=> Fixnum
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Thursday 19 February 2009 8
10. Core classes can be extended easily
• A program which makes you crazy
class Fixnum
def +(i)
self - i
end
end
>1 + 1
=> 0
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Thursday 19 February 2009 9
12. Blocks
>find_integer([quot;aquot;,1, 4, 2,quot;9quot;,quot;cquot;]){|e| e.odd?}
=> 1
>def find_integer(array)
> for element in array
> if element.is_a?(Integer) && yield element
> return element
> end
> end
>end
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Thursday 19 February 2009 11
13. Tidbits of metaprogramming
• Execution of given code
>eval(quot;puts 'Hi FOSDEM'quot;)
=> Hi FOSDEM
• Class extension
>speaker = Class.new
>speaker.class_eval do
> def hello_fosdem
> puts “Hello FOSDEM!”
> end
>end
>jean_baptiste = speaker.new
>jean_baptiste.hello_fosdem
=> “Hello FOSDEM!”
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Thursday 19 February 2009 12
14. Going a bit further
• Defining methods
>people = [quot;stevequot;, quot;aurelienquot;]
>speaker = Class.new
>speaker.class_eval do
> people.each do |person|
> define_method(quot;hello_#{person}quot;){
> puts quot;Hello #{person}quot;
> }
> end
>end
>jean_baptiste = speaker.new
>jean_baptiste.methods - Object.methods
=> [quot;hello_stevequot;, quot;hello_aurelienquot;]
>jean_baptiste.hello_steve
=> “Hello steve”
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Thursday 19 February 2009 13
15. Summary
• Ruby is elegant
• Ruby is meaningful
• Ruby is flexible
• Ruby is easily extensible
• Ruby is terse
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Thursday 19 February 2009 14
16. Summary
• Ruby is elegant
• Ruby is meaningful
• Ruby is flexible
• Ruby is easily extensible
• Ruby is terse
Is that all ???
What about Java?
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Thursday 19 February 2009 14
17. Java win on performance field
Source : http://shootout.alioth.debian.org/u32q/benchmark.php
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Thursday 19 February 2009 15
18. On a business point of view
• Java is a well-known technology
• Lots of developments have been made with it
• Easy to find experts
• Still not that much available Ruby developers
• Opensource fear
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Thursday 19 February 2009 16
19. Solution: make them collaborate !
•JRuby : Demo
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Thursday 19 February 2009 17
20. Conclusion
• Languages wars do not make sens
• Ruby is great for its terseness, readability and flexibility
• Java is great for its performances
• JRuby makes them talk together
• Ruby + Java is a great combo
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Thursday 19 February 2009 18