Upload
belighted
View
48.709
Download
0
Tags:
Embed Size (px)
DESCRIPTION
A quick and unfair comparison of Ruby and Java.
Citation preview
Java vs Ruby : a quick and fair comparison
About the pros and cons of two popular programming languages
Jean-Baptiste Escoyez
1Thursday 19 February 2009
Java vs Ruby : a quick and unfair comparison
About the elegance of RubyAbout the performance of JavaAnd how they can live together
Jean-Baptiste Escoyez
2Thursday 19 February 2009
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Ruby is interpreted, Java is compiled (before being interpreted)
• Code can be loaded at runtime
• Code is easily accessible
• Difficult to ship closed-source software
• Speed performance issues
>ruby my_program.rb >javac MyProgram.java>java MyProgram
3Thursday 19 February 2009
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Ruby use dynamic typing
• Values have type, variables not
• Decrease language complexity
- No type declaration
- No type casting
• Increase flexibility
• Errors appears at run-time
def len(list)x = 0list.each do |element|x += 1
endend
public static int len(List list){int x = 0;Iterator listIterator = list.iterator();while(listIterator.hasNext()){x += 1;
}}
4Thursday 19 February 2009
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Ruby syntax is terse
• Example 1 : The empty program
• Java
• Ruby
5Thursday 19 February 2009
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Ruby syntax is terse
• Example 1 : The empty program
• Java
• Ruby
Class Test { public static void main(String[] args){}}
5Thursday 19 February 2009
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Ruby syntax is terse
• Example 2 : Basic getters and setters
• Java
• Ruby
Class Circle 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 attr_accessor :center, :radiusend
6Thursday 19 February 2009
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
• Example 3 : Playing with lists
• Java
• Ruby
Ruby syntax is terse
List<String> languages = new LinkedList<String>();languages.add("Java");languages.add("Ruby");languages.add("Python");languages.add("Perl");
stuff = []stuff << "Java", "Ruby", "Python"
stuff = ["Java", "Ruby", "Python"]
stuff = %w(Java Ruby Python)
7Thursday 19 February 2009
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Everything is an object (really everything!)
>3.times { puts "Hello FOSDEM !" }=> Hello FOSDEM !=> Hello FOSDEM !=> Hello FOSDEM !
>self.class=> Object
>1.class=> Fixnum
8Thursday 19 February 2009
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Core classes can be extended easily
• A program which makes you crazy
class Fixnum def +(i) self - i endend
>1 + 1=> 0
9Thursday 19 February 2009
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
• Java
• Ruby
• Java
• Ruby
require ‘activesupport’
if ( 1 % 2 == 1 ) System.err.println("Odd!")=> Odd!
if 11.odd?; print "Odd!=> Odd!
System.out.println("Running time: " + \ (3600 + 15 * 60 + 10) + "seconds");
puts "Running time: \#{1.hour + 15.minutes + 10.seconds} seconds"
10Thursday 19 February 2009
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Blocks
>def find_integer(array)> for element in array> if element.is_a?(Integer) && yield element> return element> end> end>end
>find_integer(["a",1, 4, 2,"9","c"]){|e| e.odd?}=> 1
11Thursday 19 February 2009
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Tidbits of metaprogramming
• Execution of given code
• Class extension
>eval("puts 'Hi FOSDEM'")=> Hi FOSDEM
>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!”
12Thursday 19 February 2009
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Going a bit further
• Defining methods
>people = ["steve", "aurelien"]>speaker = Class.new>speaker.class_eval do> people.each do |person|> define_method("hello_#{person}"){> puts "Hello #{person}"> }> end>end>jean_baptiste = speaker.new>jean_baptiste.methods - Object.methods=> ["hello_steve", "hello_aurelien"]>jean_baptiste.hello_steve=> “Hello steve”
13Thursday 19 February 2009
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Summary
• Ruby is elegant
• Ruby is meaningful
• Ruby is flexible
• Ruby is easily extensible
• Ruby is terse
14Thursday 19 February 2009
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Summary
• Ruby is elegant
• Ruby is meaningful
• Ruby is flexible
• Ruby is easily extensible
• Ruby is terse
Is that all ???What about Java?
14Thursday 19 February 2009
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Java win on performance field
Source : http://shootout.alioth.debian.org/u32q/benchmark.php
15Thursday 19 February 2009
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
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
16Thursday 19 February 2009
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
Solution: make them collaborate !
•JRuby : Demo
17Thursday 19 February 2009
Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez
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
18Thursday 19 February 2009
Thank you!Questions?
References :http://www.rubyrailways.com/sometimes-less-is-more/http://www.javaworld.com/javaworld/jw-07-2006/jw-0717-ruby.htmlhttp://shootout.alioth.debian.org/u32q/benchmark.php?test=all&lang=java&lang2=rubyhttp://ola-bini.blogspot.com/2008/04/pragmatic-static-typing.html
19Thursday 19 February 2009