Introduction to the Ruby Language

Presentation and notes from a talk on the Ruby language to the St. Louis Unix User Group.

On June 12, 2002, I gave a talk at the St. Louis Unix user group introducing the Ruby language. The presentation is available for download here:

The text of the presentation, without useful formatting also appears here, so that search engines (particularly the one I need to add to this web site) will be able to find it.

We don’t use Ruby much (yet?) at Oasis Digital, but there are some interesting and useful ideas in it; I recommend looking it to expand your exposure to what’s possible in language design, even if you don’t need or plan to use yet another scripting language.

Addendum: Oasis Digital’s resident “Pythonista” pointed out that like Ruby, Python now supports multiple inheritance and garbage collection (not just reference counting).

Introduction To Ruby

Kyle Cordes

Oasis Digital Solutions Inc.

St. Louis Unix User Group

June 12, 2002


What is Ruby?


Look at some code



What is Ruby?

“Ruby is the interpreted scripting language for
quick and easy object-oriented programming.”

What does that mean?


Actually it gets “compiled” to an internal representation
when loaded, somewhat like Perl


Everyone says this, but it’s not really clear what
it means

Object Oriented

Every piece of data is an object

History of Ruby

Written by Yukihiro Matsumoto, a.k.a “Matz”

started in 1993

it’s Ruby, or ruby, but not RUBY

Matz wanted an OO scripting language; goal to be
better than Perl, more OO than Python

Ruby’s Growth

more popular than Python in Japan since 1999

Gaining popularing here

I could find no real numbers

Very few job posts

Ruby and XP

Ruby gets mentioned a lot in the Extreme Programming

Likely reasons:

Ruby support very “soft” code

Ruby is highly OO

Ruby bears resemblance to Smalltalk

Features of Ruby

Explanations and


Simple Syntax

Many thing that look like syntax, are not.

Ruby documents talk about a “Principle of Least
Surprise” (POLS), which means that things work the way you expect them to,
with few special cases or exceptions;

Personally, I find there are really a lot of those

Line Oriented

Lines of code don’t end in “;”

Rather, they end at the end of the line, unless
they obviously don’t:

puts 3 + 4 +
5 + 6

I like this – because it optimizes for the usual
case (one statement per line)

Control Structures and Block Structure

if n > 3
puts “this”
elsif n >2
puts “that”
puts “whatever”

Note that the “begin” of a block is implicit.

Perl-like “if”

print “this” if someVar > 5

doSomeWork while temperature < 65

Array and Hashes are built in

… like Perl, Python, etc.

arr = []
arr << 45 # adds to the end

h = {}

h[‘key’] = ‘Value’

Regular Expressions

Built in, very Perl-like

if str =~ /Some|Thing/
print “Found it”

Dynamically Typed

Ruby uses late binding; decisions deferred until
run time

You can change your design without changing types

Note that it is type-safe

No variable declarations

You don’t declare variable types

You don’t declare variables at all

The “first use” rule tells Ruby the difference between
a variable and a method


a = “this”
a = 45
a =

Big Numbers

num = 7

9.times {

print ‘num is a ‘ , num.type , ‘ and its value
is ‘ , num

num = num * num


Here Documents

str1 = <<END
some text
and some more

Nothing new here, just a nice Perlism.

Structured Exception Handling

(like Java, C++, Python, etc.:)

# code here
rescue NameError => err # “catch”
# deal with it
ensure # like “finally”
# do this no matter what

Operators are Syntax Sugar

They are just aliases for methods.

Pure OO

All data in Ruby is an object

All code is a method.

Even the basic types (numbers) are objects, though
there are some optimizations under the hood.

Single Inheritance

Like Java, C#, Python

Not like C++

Mixin modules, which are unique toRuby, support
many of the same ideas as MI.

Access Conrol


Like C++


Like C++


Rather unusual – private to this instance, not
this class
. This actually makes a lot of sense.

Mix-in Modules

Modules are sets of methods that can be added in
to any class

They typically give it a “personality”

Example: Enumeration

Enumeration Mixin

Provides, with a tiny bit of help from the programmer,
all the normal “list” methods:












map, max



array = [1, 2, 3]
x = 5
array.collect! { | elem | elem + x }
p array # => [6, 7, 8]

More Block Examples

array.each { | elem | puts elem }
hash.each { | key, val | puts “#{key} => #{val}” }
file.each { | line | puts line }

array.each_with_index { | elem, i |
puts “array[#{i}] = #{elem}”

How Blocks Work

There is nothing special about the build in iterarors;
you can write your own easily:

def method1(x)
5.times {

methods(9) { |x| puts x }


Closures are what blocks create; they “enclose”
the state of the variables in scope at the time the block was created.

Garbage Collection

Ruby is a GC language. You only allocate memory,
never explicitly free it.

This is true GC, not reference counting like Python.

Open question: how robust and performant is the
garbage collector?


the range syntax

(1..10).each { |i| sum += I }

(0 .. 9).each { | i | sum += i }
(‘a’ .. ‘z’).each { | str | puts str }
(0 … array.size).each { | i | puts array[i] }

Ranges stay Ranges

Ranges are a class Range; they don’t expand to a
list, so you can say this without any memory problems:

range1 = 10 .. 10000000

Introspection (reflection)

Ruby code and inspect itself at runtime, determine
an object’s methods, etc.

Try this:

a = [1, 2, 3] # create an object of class Array

puts a.methods # get a list of its methods

Naming Conventions

The naming conventions are part of the language,
including first-letter case:






Method aliasing

Many methods in Ruby have more than one name;

This is considered a convenience.

I am not convinced.

C integration

Ruby comes with a toolkit to easy make C code callable
from Ruby

Singleton methods

A singleton method is an instance method associated
with one specific object.

class Foo
foo = Foo.newdef foo.hello
puts “Hello”

Singleton classes

class << foo
attr :name, TRUE
def hello
“hello. I’m ” + @name + “\n”

This modifies one instance by adding a new method

OS-Independent Threading

Ruby contains language-level threading;

Of course this is cross-platform,

But of course it also does not natively thread,
so one OS operation blocks all the Ruby threads.


Most Unixes


Macintosh (OS 9 and OS X)




Windows 95/98/NT/2K

Cygwin and non-Cygwin variations

Great One-Liners

IO.foreach(“file”) {| x | print x}

sort files by date:
Dir.glob(“*”).sort{|a,b| File.mtime(b) <=> File.mtime(a)}

OLE / ActiveX support

(Windows – boo, hiss!)

ie =‘InternetExplorer.Application’)
ie.visible = true

You can also call any function in a DLL, access
ODBC, etc.

More Examples

class Person
attr_accessor :name, :age
def initialize(name, age)
@name = name
@age = age.to_i
def inspect
“#@name (#@age)”


p1 =‘elmo’, 4)
p2 =‘zoe’, 7)p1 # -> elmo (4)
p2 # -> zoe (7)


Powerful, flexible language

Simple, consistent syntax ?

Simple like Perl some would say 🙂

Easy to learn the basics (especially if coming from
another P____ language)

Very OO

Good systems-admin features in the libraries (manipulating
files, etc.)

… continued

Core langauge is mature (seven years old)

Rich libraries

Helpful community

The author of the language answers questions on
the main mailing list.

… and Disadvantages

Not well known; not many installations

(then again this was also true for Perl, Java, etc.)

No big vendors pushing it

Documentation is not as broad as more common languages

and many are in Japanese

…. continued

Only a few books

Weak (IMO) thread implementation

Not many Ruby developers to hire

Some parts are not so mature

One implementation, one main author, etc.

Ruby Compared to Python

Ruby has objects all the way down, while Python
is moving in that direction

Ruby is a bit more dynamic

Ruby has blocks

Ruby Compared to Python

Python appears to be in much broader use in the

Python has more apps using it

Python is simpler, Ruby has more Perlisms in the

Ruby compared to Perl

Ruby has a lot of Perlisms

Ruby is pervasively OO, while Perl supports OO in
addition to everything else.

Perl is much more mature.

Resources, Downloads, Etc.

Getting Ruby and learning more about it.

Downloading it:

Unix or Linux:


Free software, distributed under GPL, or an Artistic-like,
less restrictive license.

Ruby Application Archive

The RAA aims to be the “CPAN” of the Ruby world.

Like other things that aim to be like CPAN for other
languages, it is much less mature then CPAN.

Some of the libraries are in Japanese.

The Pragmatic Programmers

Dave Thomas and Andy Hunt:

wrote a book with this title

have a company with this name

wrote a Ruby book

are leading users of Ruby, apparently for their
consulting engagements.


Think of this as a “community home page” for Ruby:

The PP book is here for download:


Discussion Topics:

What is a scripting language, anyway?

Anyone here using Ruby?

How hard is it to introduce a new language to a team / project / company?

What minimum features are needed for a language to be “ready for prime time”? Life can be hard without a profiler, for example.


Slides will be on my site: