This repository is private.
All pages are served over SSL and all pushing and pulling is done over SSH.
No one may fork, clone, or view it unless they are added as a member.
Every repository with this icon (
) is private.
Every repository with this icon (
This repository is public.
Anyone may fork, clone, or view it.
Every repository with this icon (
) is public.
Every repository with this icon (
ekgregg (author)
Fri Apr 10 14:29:46 -0700 2009
OSCON 2008, Session 8: Ruby 1.9: What to Expect
Major features
- Performance, factor of 3 improvement in some cases
- Real threads! Also, fibers
- Encoding support for character sets
- gems is built-in (mostly)
- no contribs
One lesson
- if String.method_defined(:encode) for instance allows you to make code that works in all major Ruby versions. Brilliant
CI Efforts
- He took a bunch of libraries and got them to work in 1.9
What’s Changed?
Single character strings are strings!
Ruby 1.9:
?c => "c"
Ruby 1.8.x:
?c => 99
String array access
Ruby 1.9:
"cat"[1] => a
Ruby 1.8.x:
"cat"[1] => 99
Hash issues
{1,2} is now valid, not T_ASSOC error
String to_s
[1,2,3].to_s => "[1, 2, 3]" [1,2,3].to_s => 123
Colon is not longer valid in when statements
Ruby 1.9:
case 'a'; when /a/: puts 'word'; end => SyntaxError
Dummy variables are not modified in scope
Ruby 1.9:
i=0; [1,2,3].each{|i|}; puts i => 0
It still happens when you do a for loop, which is debatable.
to_sym for integers
- 5.to_sym doesn’t work anymore
- But, you can use "5".to_sym
- rake breaks on the [] function!
Hash Keys "unordered"
Ruby 1.8.x:
{:a=>"a", :b=>"b", :c=>"c"}
=> {:a=>"a", :c=>"c", :b=>"b"}
Ruby 1.9:
{:a=>"a", :b=>"b", :c=>"c"}
=> {:a=>"a", :b=>"b", :c=>"c"}
- Insertion order is guaranteed apparently
Stricter unicode regex
Ruby 1.9:
/\x80/u => SyntaxError
- TR and Regexp are now unicode
BasicObject
- You have to put :: in front of things now inside classes inherited from BasicObject
$KCODE produces warnings
Instance methods are now arrays of symbols
Ruby 1.9:
{}.methods.sort.last => :zip
Ruby 1.8.x:
{}.methods.sort.last => "zip"
encoding:
- You can define encoding at the top of your source file
Real threading
- Race conditions
- Assumptions
Implications
- Changes are straightforward
- Cumulative effect is massive
- Lots of gems are non-maintained, 1.9 breaks them. Who fixes them?
Recommendations
- Make gems that work with 1.8.x and 1.9
- use git
- to_enum
Lambda shorthand
Ruby 1.9:
p = -> a,b,c {a+b+c}
puts p.[1,2,3]
Complex is builtin
Ruby 1.9:
Complex(3,4) = 3 + 4.im
Splat in the middle
def foo(first *middle, last)
Fibers
- No blocking IO
- Lightweight threads
- Does the equivalent of co-routines
When you break, you can choose what to return
break line if line.match('foo')
"nested" methods
class F
def foo
def foo
"subsequent"
end
"first"
end
end
f = F.new
f.foo => "first"
f.foo => "subsequent"











