lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


Asko Kauppi wrote:
[...]
> I've long wanted to have seeming parallelism in Lua, something akin to
> DBUS-kind message passing but made to be syntactically so "sweet" it
> would seem native, transparent, and noncluttered in the code. Lately, I
> crafted a mechanism that would make such calls seem like regular
> function calls, using userdata as handles to the returned values.

[searches on Wikipedia]

Aha. I thought this concept seemed familiar.

http://en.wikipedia.org/wiki/Future_%28programming%29

Guy I knew at university wrote an entire language based around futures (and
Linda-based process synchronisation, which is extremely neat but not yet
actually *useful*). It worked in much the same way you describe, but had
language support so that you didn't need any extra syntax to access the value
of the future.

For Lua, given that we'd need syntactic help anyway, I'd be more inclined to
use actual objects. So, lane(f) creates a new thread object; calling
o:result() (or possibly just accessing o.result) would block until the thread
returned a value. It would probably be sensible to allow the thread to return
multiple values, too.

function thread()
	for i=1, 10 do lane.return(i) end
end

lo = lane(thread)

while lo:running() do
	print(lo:result())
end

Hmm. I think we may be reinventing Communicating Sequential Processes...

-- 
┌── dg@cowlark.com ─── http://www.cowlark.com ───────────────────
│ "I have always wished for my computer to be as easy to use as my
│ telephone; my wish has come true because I can no longer figure out how to
│ use my telephone." --- Bjarne Stroustrup

Attachment: signature.asc
Description: OpenPGP digital signature