I’ve been doing a bit of Io development in my spare time, and I wanted to bring forward a feature that really makes me happy.
The feature is called futures and here’s how it works:
val := futureSend( # some longish operation ) # some other things... val println
futureSend gets activated, it spins off a co-routine with the message passed to
futureSend and starts working on it.
When the value returned from
futureSend is actually used the operation blocks until the message has completed (if it hasn’t already), and then
val becomes the return value of the message.
Its a very clean way to handle joining because they’re totally transparent, meaning that
val may as well have been activated serially.
If you’re looking for a similar behavior other languages: