91
O que tem de novo no Ruby 2? Fabio Akita @akitaonrails codeminer42.com

O que tem de novo no Ruby 2.0?

Embed Size (px)

DESCRIPTION

Palestra apresentada no evento "Don't Panic"

Citation preview

Page 1: O que tem de novo no Ruby 2.0?

O que tem de novo no

Ruby 2?Fabio Akita

@akitaonrailscodeminer42.com

Page 2: O que tem de novo no Ruby 2.0?
Page 3: O que tem de novo no Ruby 2.0?
Page 4: O que tem de novo no Ruby 2.0?

Ruby 0.95 Dez 1995

Ruby 1.8 Ago 2003

Rails 0.8 Dez 2005

Ruby 1.9 Dez 2007

Page 5: O que tem de novo no Ruby 2.0?

Ruby 0.95 Dez 1995

Ruby 1.8 Ago 2003

Rails 0.8 Dez 2005

Ruby 1.9 Dez 2007

Page 6: O que tem de novo no Ruby 2.0?

Ruby 0.95 Dez 1995

Ruby 1.8 Ago 2003

Rails 0.8 Dez 2005

Ruby 1.9 Dez 2007

Page 7: O que tem de novo no Ruby 2.0?

Ruby 0.95 Dez 1995

Ruby 1.8 Ago 2003

Rails 0.8 Dez 2005

Ruby 1.9 Dez 2007

Page 8: O que tem de novo no Ruby 2.0?

Ruby 2.024 de Fevereiro de 2013

Page 9: O que tem de novo no Ruby 2.0?

Compatível com 1.9

Page 10: O que tem de novo no Ruby 2.0?

Literal Symbol List

Page 11: O que tem de novo no Ruby 2.0?

> %q[hello world]=> "hello world"

> %i[hello world]=> [:hello, :world]

Page 12: O que tem de novo no Ruby 2.0?

Keyword Arguments

Page 13: O que tem de novo no Ruby 2.0?

def foo(options = {}) param1 = options[:param1] param2 = options[:param2] return [param1, param2]end

> foo param1: "Hello", param2: "World"=> ["Hello", "World"]

Page 14: O que tem de novo no Ruby 2.0?

def foo(param1: nil, param2: nil) return [param1, param2]end

> foo param1: "Hello", param2: "World"=> ["Hello", "World"]

Page 15: O que tem de novo no Ruby 2.0?

Module Prepend

Page 16: O que tem de novo no Ruby 2.0?

> [1,2,3].to_s=> "[1, 2, 3]"

Page 17: O que tem de novo no Ruby 2.0?

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

Page 18: O que tem de novo no Ruby 2.0?

> [1,2,3].to_s=> "[1, 2, 3], Foo"

> Array.ancestors=> [Array, Foo, Enumerable, Object, Kernel, BasicObject]

Page 19: O que tem de novo no Ruby 2.0?

module Foo def to_s super + ", Foo" endend

class Array prepend Fooend

Page 20: O que tem de novo no Ruby 2.0?

> [1,2,3].to_s=> "[1, 2, 3], Foo"

> Array.ancestors=> [Foo, Array, Enumerable, Object, Kernel, BasicObject]

Page 21: O que tem de novo no Ruby 2.0?

Lazy Enumerators

Page 22: O que tem de novo no Ruby 2.0?

> a = (0..3).map { |i| i }=> [0, 1, 2, 3]

Page 23: O que tem de novo no Ruby 2.0?

> 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

Page 24: O que tem de novo no Ruby 2.0?

> 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

Page 25: O que tem de novo no Ruby 2.0?

Re!nements

Page 26: O que tem de novo no Ruby 2.0?

module Foo def hello "Hello, #{to_s}" endend

class Array include Fooend

> [1,2,3].hello=> "Hello, [1, 2, 3]"

Page 27: O que tem de novo no Ruby 2.0?

module Foo refine Array do def hello "Hello, #{to_s}" end endend

using Foo

> [1,2,3].hello=> "Hello, [1, 2, 3]"

Page 28: O que tem de novo no Ruby 2.0?

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

Page 29: O que tem de novo no Ruby 2.0?

http://rvm.io

Page 30: O que tem de novo no Ruby 2.0?

curl -L https://get.rvm.io | bash -s stable --rails --autolibs=enabled

Page 31: O que tem de novo no Ruby 2.0?
Page 32: O que tem de novo no Ruby 2.0?
Page 33: O que tem de novo no Ruby 2.0?
Page 34: O que tem de novo no Ruby 2.0?
Page 35: O que tem de novo no Ruby 2.0?

http://gembundler.com/

Page 36: O que tem de novo no Ruby 2.0?
Page 37: O que tem de novo no Ruby 2.0?
Page 38: O que tem de novo no Ruby 2.0?
Page 39: O que tem de novo no Ruby 2.0?
Page 40: O que tem de novo no Ruby 2.0?

Browser

Linux

NGINX

Worker

Page 41: O que tem de novo no Ruby 2.0?

Browser

Linux

NGINX

Worker

Page 42: O que tem de novo no Ruby 2.0?

Browser

Linux

Ruby

NGINX

Worker

Page 43: O que tem de novo no Ruby 2.0?

Browser

Linux

Rails

Ruby

NGINX

Worker

Page 44: O que tem de novo no Ruby 2.0?

Browser

Linux

Rails

Ruby

NGINX

Worker

Page 45: O que tem de novo no Ruby 2.0?

Browser Browser Browser Browser

Linux

Rails

Ruby Ruby Ruby Ruby

NGINX

Rails Rails Rails

Worker Worker Worker Worker

Page 46: O que tem de novo no Ruby 2.0?

Browser Browser Browser Browser

Linux

Rails

Ruby Ruby Ruby Ruby

NGINX

Rails Rails Rails

Worker Worker Worker Worker

Page 47: O que tem de novo no Ruby 2.0?

M&SMark & Sweep GC

Page 48: O que tem de novo no Ruby 2.0?

struct RBasic { VALUE flags; VALUE klass;};

RString

klass

flags

Page 49: O que tem de novo no Ruby 2.0?

RString

klass

flags

RString

klass

flags

RString

klass

flags

Page 50: O que tem de novo no Ruby 2.0?

RString

klass

flags

RString

klass

flags

RString

klass

flags

fork()

Page 51: O que tem de novo no Ruby 2.0?

RString

klass

flags

RString

klass

flags

RString

klass

flags

fork()

Page 52: O que tem de novo no Ruby 2.0?

RString

klass

flags

RString

klass

flags

RString

klass

flags

GC.start()

RString

klass

flags

RString

klass

flags

RString

klass

flags

Page 53: O que tem de novo no Ruby 2.0?

OOBWOut of Band Work

Page 54: O que tem de novo no Ruby 2.0?
Page 55: O que tem de novo no Ruby 2.0?
Page 56: O que tem de novo no Ruby 2.0?

LazyLazy Sweep GC - Ruby 1.9.3

Page 57: O que tem de novo no Ruby 2.0?

“CoW”Copy on Write

Page 58: O que tem de novo no Ruby 2.0?

RString

klass

flags

RString

klass

flags

RString

klass

flags

Page 59: O que tem de novo no Ruby 2.0?

RString

klass

flags

RString

klass

flags

RString

klass

flags

Page 60: O que tem de novo no Ruby 2.0?

RString

klass

flags

RString

klass

flags

RString

klass

flags

Page 61: O que tem de novo no Ruby 2.0?

RString

klass

flags

RString

klass

flags

RString

klass

flags

Page 62: O que tem de novo no Ruby 2.0?
Page 63: O que tem de novo no Ruby 2.0?

fork()

Page 64: O que tem de novo no Ruby 2.0?
Page 65: O que tem de novo no Ruby 2.0?
Page 66: O que tem de novo no Ruby 2.0?
Page 67: O que tem de novo no Ruby 2.0?
Page 68: O que tem de novo no Ruby 2.0?

GC.start

Page 69: O que tem de novo no Ruby 2.0?
Page 70: O que tem de novo no Ruby 2.0?
Page 71: O que tem de novo no Ruby 2.0?
Page 72: O que tem de novo no Ruby 2.0?
Page 73: O que tem de novo no Ruby 2.0?

BitmapBitmap Marking GC - Ruby 2.0

Page 74: O que tem de novo no Ruby 2.0?
Page 75: O que tem de novo no Ruby 2.0?
Page 76: O que tem de novo no Ruby 2.0?

9 00001001

8 00001000

7 00000111

Page 77: O que tem de novo no Ruby 2.0?

9 00001001

8 00001000

7 00000111

Page 78: O que tem de novo no Ruby 2.0?

9 00001001

8 00001000

7 00000111

Page 79: O que tem de novo no Ruby 2.0?
Page 80: O que tem de novo no Ruby 2.0?

00000001 2^0 1 User

00000010 2^1 2 Moderator

00000100 2^2 4 Administrator

Page 81: O que tem de novo no Ruby 2.0?

00000001 2^0 1 User

00000010 2^1 2 Moderator

00000100 2^2 4 Administrator

Page 82: O que tem de novo no Ruby 2.0?

00000001 2^0 1 User

00000010 2^1 2 Moderator

00000100 2^2 4 Administrator

Page 83: O que tem de novo no Ruby 2.0?

0 0 0 0 0 0 0 01 1 1

Page 84: O que tem de novo no Ruby 2.0?

0 0 0 0 0 0 0 01 1 1

fork()

Page 85: O que tem de novo no Ruby 2.0?

fork()

Page 86: O que tem de novo no Ruby 2.0?

fork()

Page 87: O que tem de novo no Ruby 2.0?

Browser Browser Browser Browser

Linux

Rails

Ruby Ruby Ruby Ruby

NGINX

Rails Rails Rails

Worker Worker Worker Worker

Page 88: O que tem de novo no Ruby 2.0?

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

Page 89: O que tem de novo no Ruby 2.0?

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

Page 90: O que tem de novo no Ruby 2.0?

Rails 3.2.12+

Rails 4.0

Page 91: O que tem de novo no Ruby 2.0?

Thanks!@akitaonrails