o que tem de novo no ruby 2.0?

Post on 10-May-2015

15.365 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

Palestra apresentada no evento "Don't Panic"

TRANSCRIPT

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

http://rvm.io

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

http://gembundler.com/

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

top related