Upload
fabio-akita
View
15.365
Download
2
Embed Size (px)
DESCRIPTION
Palestra apresentada no evento "Don't Panic"
Citation preview
O que tem de novo no
Ruby 2?Fabio Akita
@akitaonrailscodeminer42.com
Ruby 0.95 Dez 1995
Ruby 1.8 Ago 2003
Rails 0.8 Dez 2005
Ruby 1.9 Dez 2007
Ruby 0.95 Dez 1995
Ruby 1.8 Ago 2003
Rails 0.8 Dez 2005
Ruby 1.9 Dez 2007
Ruby 0.95 Dez 1995
Ruby 1.8 Ago 2003
Rails 0.8 Dez 2005
Ruby 1.9 Dez 2007
Ruby 0.95 Dez 1995
Ruby 1.8 Ago 2003
Rails 0.8 Dez 2005
Ruby 1.9 Dez 2007
Ruby 2.024 de Fevereiro de 2013
Compatível com 1.9
Literal Symbol List
> %q[hello world]=> "hello world"
> %i[hello world]=> [:hello, :world]
Keyword Arguments
def foo(options = {}) param1 = options[:param1] param2 = options[:param2] return [param1, param2]end
> foo param1: "Hello", param2: "World"=> ["Hello", "World"]
def foo(param1: nil, param2: nil) return [param1, param2]end
> foo param1: "Hello", param2: "World"=> ["Hello", "World"]
Module Prepend
> [1,2,3].to_s=> "[1, 2, 3]"
module Foo def self.included(base) base.class_eval do alias_method :original_to_s, :to_s def to_s original_to_s + ", Foo" end end endend
class Array include Fooend
> [1,2,3].to_s=> "[1, 2, 3], Foo"
> Array.ancestors=> [Array, Foo, Enumerable, Object, Kernel, BasicObject]
module Foo def to_s super + ", Foo" endend
class Array prepend Fooend
> [1,2,3].to_s=> "[1, 2, 3], Foo"
> Array.ancestors=> [Foo, Array, Enumerable, Object, Kernel, BasicObject]
Lazy Enumerators
> a = (0..3).map { |i| i }=> [0, 1, 2, 3]
> a = (0..3).lazy.map { |i| i }=> #<Enumerator::Lazy: #<Enumerator::Lazy: 0..3>:map>
> a.next=> 0> a.next=> 1> a.next=> 2> a.next=> 3
> a = (0..Float::INFINITY).lazy.map { |i| i }=> #<Enumerator::Lazy: #<Enumerator::Lazy: 0..Infinity>:map>
> a.next=> 0> a.next=> 1> a.next=> 2> a.next=> 3
Re!nements
module Foo def hello "Hello, #{to_s}" endend
class Array include Fooend
> [1,2,3].hello=> "Hello, [1, 2, 3]"
module Foo refine Array do def hello "Hello, #{to_s}" end endend
using Foo
> [1,2,3].hello=> "Hello, [1, 2, 3]"
module Foo refine Array do def hello "Hello, #{to_s}" end endend
using Foo
> [1,2,3].hello=> "Hello, [1, 2, 3]"
def bah [1,2,3].helloend
> bah.helloNoMethodError: undefined method `hello' for "Hello, [1, 2, 3]":String
curl -L https://get.rvm.io | bash -s stable --rails --autolibs=enabled
Browser
Linux
NGINX
Worker
Browser
Linux
NGINX
Worker
Browser
Linux
Ruby
NGINX
Worker
Browser
Linux
Rails
Ruby
NGINX
Worker
Browser
Linux
Rails
Ruby
NGINX
Worker
Browser Browser Browser Browser
Linux
Rails
Ruby Ruby Ruby Ruby
NGINX
Rails Rails Rails
Worker Worker Worker Worker
Browser Browser Browser Browser
Linux
Rails
Ruby Ruby Ruby Ruby
NGINX
Rails Rails Rails
Worker Worker Worker Worker
M&SMark & Sweep GC
struct RBasic { VALUE flags; VALUE klass;};
RString
klass
flags
RString
klass
flags
RString
klass
flags
RString
klass
flags
RString
klass
flags
RString
klass
flags
RString
klass
flags
fork()
RString
klass
flags
RString
klass
flags
RString
klass
flags
fork()
RString
klass
flags
RString
klass
flags
RString
klass
flags
GC.start()
RString
klass
flags
RString
klass
flags
RString
klass
flags
OOBWOut of Band Work
LazyLazy Sweep GC - Ruby 1.9.3
“CoW”Copy on Write
RString
klass
flags
RString
klass
flags
RString
klass
flags
RString
klass
flags
RString
klass
flags
RString
klass
flags
RString
klass
flags
RString
klass
flags
RString
klass
flags
RString
klass
flags
RString
klass
flags
RString
klass
flags
fork()
GC.start
BitmapBitmap Marking GC - Ruby 2.0
9 00001001
8 00001000
7 00000111
9 00001001
8 00001000
7 00000111
9 00001001
8 00001000
7 00000111
00000001 2^0 1 User
00000010 2^1 2 Moderator
00000100 2^2 4 Administrator
00000001 2^0 1 User
00000010 2^1 2 Moderator
00000100 2^2 4 Administrator
00000001 2^0 1 User
00000010 2^1 2 Moderator
00000100 2^2 4 Administrator
0 0 0 0 0 0 0 01 1 1
0 0 0 0 0 0 0 01 1 1
fork()
fork()
fork()
Browser Browser Browser Browser
Linux
Rails
Ruby Ruby Ruby Ruby
NGINX
Rails Rails Rails
Worker Worker Worker Worker
BrowserBrowser
Linux
Rails
Ruby
NGINX
Worker
Ruby Ruby Ruby Ruby Ruby Ruby Ruby Ruby Ruby
Rails Rails Rails Rails Rails Rails Rails Rails Rails
WorkerWorkerWorkerWorkerWorkerWorkerWorkerWorkerWorker
BrowserBrowserBrowserBrowserBrowserBrowserBrowserBrowser
BrowserBrowser
Linux
Rails
Ruby
NGINX
Worker
Ruby Ruby Ruby Ruby Ruby Ruby Ruby Ruby Ruby
Rails Rails Rails Rails Rails Rails Rails Rails Rails
WorkerWorkerWorkerWorkerWorkerWorkerWorkerWorkerWorker
BrowserBrowserBrowserBrowserBrowserBrowserBrowserBrowser
Rails 3.2.12+
Rails 4.0
Thanks!@akitaonrails