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
⢠DifďŹcult 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 ďŹexibility 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
⢠DeďŹning 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 ďŹexible
⢠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 ďŹexible
⢠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 ďŹeld
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 ďŹnd 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 ďŹexibility
⢠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