Promising Future

A glimpse of a promising future in which Ruby supports lazy evaluation.


Promises and futures both transparently defer the execution of a block. Promises evaluate the given block if and when its result is first needed. Futures evaluate the given block optimistically in another thread.

require 'promise'
require 'future'    # you can just require 'future' if using both

x = promise { 1 + 2 }
y = future  { sleep 10 && 6 * 7 }

puts x      #=> 3
sleep 5     # ... do work for 5 seconds ...
puts y      #=> 42, after blocking 5 seconds

Note that this is pretty useless in Ruby's interactive shell irb, as it will eagerly evaluate everything as part of its read-eval-print loop, forcing promises and futures to yield their results.

The library has been tested with Ruby 1.8.7, 1.9.1 and JRuby 1.5.0. YARD documentation is available at



The library is distributed via RubyGems:

$ gem install promise


The source is available at


Ben Lavender


Promising Future is free and unencumbered public domain software. For more information, see or the accompanying UNLICENSE file.