rev, revactor, reia - fails.orgfails.org/rev_revactor_reia.pdf · cool.io: like eventmachine but...

116
Rev, Revactor, Reia Or, the journey to Reia

Upload: others

Post on 22-Jul-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Rev, Revactor, ReiaOr, the journey to Reia

Page 2: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Tony Arcieri@bascule

Page 3: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts
Page 4: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Rev, Revactor,

ReiaRedundant

Page 5: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Rev: Ruby event framework

http://github.com/tarcieri/rev

Page 6: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Cool.io

More on this later...

Page 7: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

I love network programming

Page 8: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Application

Web Framework

Rack

Web ServerOMFG network craziness!

Ruby VMOMFG compilers and VMs break my brain!

OS KernelHere Be Dragons

Page 9: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

There is life outside of HTTP

Page 10: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

2003

Page 12: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

BitTorrent but better

•Started writing a BitTorrent library in C, FOR SPEED!

•BitTorrent sucks, I can do it better

•Spent 2 years trying to develop a new protocol in C

Page 13: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

2005

Page 14: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

I’m not productive!

•I’d like to write things in a scripting language instead of C

•Ruby’s cool, but it’s not FOR SPEED

•Maybe YARV will be FOR SPEED

•OMFG RAILS!!! I can get a job with that!

Page 15: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

2006

Page 16: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

DistribuStream inRuby

•Written in Ruby instead of Python

•Using EventMachine to handle large numbers of connections

•Use central organization and collaborative filtering to organize the peer network

Page 17: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Rails has Problems

•CGI sucks

•FCGI sucks (who remembers lighttpd?)

•SCGI sucks

•Apache Coyote for Ruby??

Page 18: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

OMG MONGREL!

Page 19: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

RubyConf 2006

Page 20: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

RubyConf 2006

•Slept through Evan Phoenix’s keynote

•Waited for Matz’s announcement that YARV would be released on Christmas

•Where’s YARV on Christmas?

Page 21: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

YARV

Page 22: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

NO YARV FOR YOU!

:(

Page 23: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

That made me a sad panda...

but there was an open bar :D

Page 24: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Ask Matz a question!

ME: WHERE’S YARV?!#$!$#!$

Page 25: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

I met this guy...

Page 26: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts
Page 27: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Earlier that day...

Page 28: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

“I’m Zed Shaw and I wrote Mongrel”

THUNDEROUS APPLAUSE

Page 29: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Zed and I

•OMG why don’t people care about that sort of thing?

•CGI Multipart EOF Bug OMG!

•Zed: EventMachine sucks. You should work on Ruby/Event

Page 30: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Meanwhile...

Page 31: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Denver Accord

•Matz, ko1, _why, et al talked for 4 hours on the Sunday night after RubyConf 2006

•Create NEW repo for 1.9

•Prohibit commits to MATZ

•Merge YARV into NEW

Page 32: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

2007

Page 33: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

EventMachine

•I became a committer

•I tried to fix as many problems as I could

•I eventually succumbed to too many OMFGs/sec

Page 34: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Rev

•Started by Franki Rai and Zed

•A Ruby wrapper for the libev library

•Both of them soon left, leaving me as the principal author

Page 35: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

"The best way to complain is to make things." - James Murphy

Page 36: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Zed wanted a new blog theme...

so I introduced him to our designer

Page 37: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts
Page 38: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Zed’s exit

Page 39: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Cool.io: Ruby event framework

http://github.com/tarcieri/cool.io

Page 40: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Use Cases

• Large numbers of connections• Large amounts of I/O• Shared state between connections

Page 41: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Example Applications

• Web Spiders• HTTP Push Servers• Chat Servers

Page 42: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Supported Platforms

• Ruby MRI (1.8.6+)• Ruby YARV (1.9.0+)• Rubinius HEAD

Page 43: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Evented Programming Crash Course

Instead of:

response = request.get(params)

do:

request.start(params)

def on_success(response); ...; enddef on_failure(response); ... end

Page 44: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Block Form

start_request(params) do |response|if response.success?...YAY...

else...BOO...

endend

Page 45: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Cool.io: like EventMachine but with Ruby I/O primitives

Page 46: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Cool.io concepts

•Cool.io::Loop is the core event loop and the only thing that blocks EVAR

•Attach event listeners to it

Page 47: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Echo Server Example

Page 48: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

require 'rubygems'require 'cool.io'

ADDR = '127.0.0.1'PORT = 4321

class EchoServerConnection < Cool.io::TCPSocket  def on_connect    puts "#{remote_addr}:#{remote_port} connected"  end

  def on_close    puts "#{remote_addr}:#{remote_port} disconnected"  end

  def on_read(data)    write data  endend

event_loop = Cool.io::Loop.defaultCool.io::TCPServer.new(ADDR, PORT, EchoServerConnection).attach(event_loop)

puts "Echo server listening on #{ADDR}:#{PORT}"event_loop.run

Page 49: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

HTTP Client Example

Page 50: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

require 'rubygems'require 'cool.io'

class MyHttpClient < Cool.io::HttpClient  def on_connect    super    STDERR.puts "Connected to #{remote_host}:#{remote_port}"  end

  def on_connect_failed    super    STDERR.puts "Connection failed"  end

  def on_response_header(header)    STDERR.puts "Response: #{header.http_version} #{header.status} #{header.http_reason}"  end

  def on_body_data(data)    STDOUT.write data    STDOUT.flush  end

  def on_request_complete    STDERR.puts "Request complete!"  end

  def on_error(reason)    STDERR.puts "Error: #{reason}"  endend

loop = Cool.io::Loop.defaultclient = MyHttpClient.connect("www.google.com", 80).attach(l)client.request('GET', '/search', :query => { :q => 'foobar' })loop.run

Page 51: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

It's got filesystem monitoring!

Watchr uses it

Page 52: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Ry wrote a web server called Ebb

•Based on libev

•Ry showed me better ways Rev could work with Ruby 1.8’s scheduler

•Ry would later adapt Ebb into Node.js

Page 53: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Next steps: - async file I/O (libeio, like Node) https://github.com/tarcieri/cool.io/tree/libeio

- libevent support ($50 bounty!)

Page 54: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

OMG ERLANG!

Page 55: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts
Page 56: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Erlang seemed REALLY awesome

Page 57: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Please cover your ears if you are sensitive to

loud noises

Page 58: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts
Page 59: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

My “dream” model

•Evented I/O loop

•One scheduler thread per CPU core

•Lightweight userspace processes that talked using messages

Page 60: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Erlang did this OVER 9000 times better than I ever

could have

Page 61: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

I took the ideas of Erlang and started

working on Revactoron Ruby 1.9 Fibers

Page 62: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Christmas:YARV released!

I’m a happy panda

Page 63: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

2008

Page 64: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

January 2008: Revactor released

Page 65: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Revactor: Actors for 1.9

http://github.com/tarcieri/revactor

Page 66: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

My boss said I couldn't use Erlang :(

Fuck it, do it in Ruby!

Page 67: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Combine Rev Cool.io + Fibers to get callback-free async

programming!

Later seen in NeverBlock and em-synchrony

Page 68: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Evented Programming Crash Course

Instead of:

response = request.get(params)

do:

request.start(params)

def on_success(response); ...; enddef on_failure(response); ... end

THIS SUCKS

Page 69: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Block Form

start_request(params) do |response|if response.success?...YAY...

else...BOO...

endend

THIS SUCKS

Page 70: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Evented Programming smells like...

•Callback soup

•Callback spaghetti

•Callback HELL

Page 71: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Revactor was the first and still the most comprehensive solution for Fibers+events

•NeverBlock and em-synchrony merely wrap events in synchronous APIs

•Revactor uses messages to let fibers communicate

Page 72: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Echo Server Example

Page 73: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

# An example echo server, written using Revactor::TCP# This implementation creates a new actor for each# incoming connection.

require 'revactor'

HOST = 'localhost'PORT = 4321

# Create a new listener socket on the given host and portlistener = Revactor::TCP.listen(HOST, PORT)puts "Listening on #{HOST}:#{PORT}"

# Begin receiving connectionsloop do # Accept an incoming connection and start a new Actor # to handle it Actor.spawn(listener.accept) do |sock| puts "#{sock.remote_addr}:#{sock.remote_port} connected"

# Begin echoing received data loop do begin # Write everything we read sock.write sock.read rescue EOFError puts "#{sock.remote_addr}:#{sock.remote_port} disconnected"

# Break (and exit the current actor) if the connection # is closed, just like with a normal Ruby socket break end end endend

Page 74: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Async web apps with Rainbows!Unicorn for asynchronous backends

http://rainbows.rubyforge.org/

Page 75: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Rainbows! do  use :Revend

Rainbows! do  use :Revactorend

(That’s all I got, sorry)

Page 76: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Acting the Actor Model

Page 77: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Want to know more about Actors?

http://revactor.org/

Page 78: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

I became disenchanted with fake synchronous

I/O on top of Fibers

Page 79: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Why?

Page 80: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts
Page 81: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Evented programming in Ruby is not POLS

Threads are

If you want evented programming, try Node.js

Page 82: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Erlang fizzled

Page 83: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

People keep asking me, “What will happen to Erlang? Will it be a popular language?” I don’t

know. I think it’s already been influential. It might end up like Smalltalk. I think Smalltalk’s been

very, very influential and loved by an enthusiastic band of people but never really very widely

adopted. And I think Erlang might be like that.

-- Joe Armstrong, Coders at Work

Page 84: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

“It might need Microsoft to take some of its ideas and put curly braces here and there”

Or it might just need Ruby syntax... :)

Page 85: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Zed got me interested in making my own languageand Erlang had horrible syntax

Page 87: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

I started Reia in 2008

Page 88: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Erlang’s strengths:•Nonstop systems (99.999over9000%

uptime OMFG!)

•Realtime systems

•Fault-tolerant systems

•Hot code swapping

•Concurrent systems

•Distributed systems

Page 89: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Erlang with Ruby syntax

Page 90: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Immutable State

Page 91: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

OBLIGATORY GAGA

Page 92: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

2009

Page 93: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Reia @ Erlang Factory

•Mostly working implementation!

•Concurrent object model based on Erlang/OTP gen_servers

•Web framework: Ryan

Page 94: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

I thought of objects being like biological cells and/or individual computers on a network, only able to communicate with messages, so messaging came at the very beginning. It took a while to see how to do messaging in a programming language efficiently enough to be useful.

-- Alan Kay, creator of Smalltalk

Page 95: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Meanwhile...

Page 96: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Node.js got people interested in event-driven programming

Page 97: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Node and Cool.io share technologies

Cool.io: libev+Ruby(+libeio)Node: libev+libeio+V8

Page 98: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Late 2009

•REIA ZOMG TOO SLOW!!!

•Everything’s fucked! I didn’t know what I was doing

•If you fuck up a language project and don’t rewrite it, you get PHP

Page 99: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

2010

Page 100: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Reia rewrite

•ZOMG OVER 9000x FASTER!

•Clean Erlang codebase which isn’t impossible to workwith

•Use concepts from the Erlang compiler

•Everything-is-an-object (although no concurrent objetcts yet, coming soon!)

Page 101: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Let’s look at Reia!

Page 102: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Ilya Grigorik created em-synchrony

Page 103: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

People are now actually interested in fake

synchronous programming on an

evented backend

Page 104: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

I think em-synchrony is aimed at

ROFLSCALING

Page 105: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

BUT... I dusted off Cool.io and Revactor

just in case you’re interested

Page 106: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

I still like Reia better :)

Page 107: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Reia has had horrible

documentation...

Page 108: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

New web site!http://reia-lang.org/

Inspired by CoffeeScript

Page 109: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Reia PEG Grammar

•https://github.com/graeme-defty/reia

•Built on Neotoma: Treetop for Erlang

•Written by Graeme Defty and Kim Shrier

•It has TESTS OMG!

Page 110: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Why PEG is better

•Whitespace handling

•Nested interpolated strings e.g. (“foo #{“bar #{“baz”}”}”)

•Regex literals ala /.../

Page 111: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Reia next steps:

•Singleton classes

•Concurrent objects

•Namespaces

•Default and keyword arguments

•Metaprogramming

Page 112: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

One more thing...

Page 113: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

COMPILERS AREN’T HARD

Page 114: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Create Your Own Freaking Awesome

Programming Language

Page 115: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

If I can do it you can to...

Page 116: Rev, Revactor, Reia - fails.orgfails.org/rev_revactor_reia.pdf · Cool.io: like EventMachine but with Ruby I/O primitives. Cool.io concepts

Links

• Cool.io: http://github.com/tarcieri/cool.io• Revactor: http://github.com/tarcieri/revactor• Reia: http://github.com/tarcieri/reia• Twitter: http://twitter.com/bascule• Blog: http://unlimitednovelty.com