21
Java vs Ruby : a quick and fair comparison About the pros and cons of two popular programming languages Jean-Baptiste Escoyez 1 Thursday 19 February 2009

Ruby vs Java

Embed Size (px)

DESCRIPTION

A quick and unfair comparison of Ruby and Java.

Citation preview

Page 1: Ruby vs Java

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

Page 2: Ruby vs Java

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

Page 3: Ruby vs Java

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

Page 4: Ruby vs Java

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

Page 5: Ruby vs Java

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

Page 6: Ruby vs Java

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

Page 7: Ruby vs Java

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

Page 8: Ruby vs Java

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

Page 9: Ruby vs Java

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

Page 10: Ruby vs Java

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

Page 11: Ruby vs Java

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

Page 12: Ruby vs Java

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

Page 13: Ruby vs Java

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

Page 14: Ruby vs Java

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

Page 15: Ruby vs Java

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

Page 16: Ruby vs Java

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

Page 17: Ruby vs Java

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

Page 18: Ruby vs Java

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

Page 19: Ruby vs Java

Java vs Ruby : a quick and unfair comparison - Jean-Baptiste Escoyez

Solution: make them collaborate !

•JRuby : Demo

17Thursday 19 February 2009

Page 20: Ruby vs Java

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

Page 21: Ruby vs Java

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