I am exploring two new languages and a Distributed VCS. Go and Node.js. Go has Goroutines (sorta evented, sorta threaded) and Node.js is intrinsically event driven. Git is a VCS born of Linus Torvalds mind (tried Mercuria[hg] but git has won me and the majority over).
Monday, August 22, 2011
Tuesday, August 16, 2011
Syncronous coding style with EventMachine and Fibers
require 'fiber' require 'eventmachine' class AsyncIO < EM::Connection include EM::P::LineText2 def initialize df @df = df end def receive_line line @df.succeed line end end def get_line f = Fiber.current df = EM::DefaultDeferrable.new df.callback { |line| f.resume(line) } EM.connect '127.0.0.1', 3000, AsyncIO, df return Fiber.yield end EM.run { Fiber.new { line = get_line puts line EM.stop }.resume }
The truth is you should look at EM::Sychrony. Ilya Grigorik explains in he own Blog, how Fibers can help you write synchronous code while keeping the goodness of AsyncIO (ala EventMachine).
I don't find event driven code to be "callback hell" like Ilya Grigorik does. I find evented code easier to read than synchronous code sometimes. In Synchronous code you have to check every time if it failed and why. That is
if (rc < 0)with
switch (errno) case EINTR:code after every network call. In event driven code that stuff is dealt with in the event-loop and you just have to define the error callback once.
Ah well just use Node.js . If JavaScript event driven programming is "to hard" for your delicate sensibilities then explain to me how Millions of Web-monkeys pull it off everyday in the browser.