On Jun 26, 2005, at 11:48 PM, Faré wrote:
One option would be to do global program transformation to CPS (as in Screamer or UCW),
Yes CPS is the option I'm currently pursuing. But it is far from ideal (no pre-emption in standard functions for example). Eventually there will have to be some implementation hacking and/or CLRFI'ing...
some kind of ANF or even lower-level machine, and thus provide interruptible lightweight green threads.
Indeed.
Sriram Srinivasan wrote:
ok, good. I understand. I'm doing a similar project for java, so I won't be able to contribute directly to your effort directly at this point.
Of course, it is "a little" more convenient to rewrite CL code into CPS, than it is to rewrite java byte-code. :(
The biggest problem with CPS in CL is (as far as I'm concerned) that you can only do it to your own code, and not the implementation's. So in CPS-Erlisp you'll probably want to write
(loop for x in very-long-list collect (f x))
rather than
(mapcar #'f very-long-list)
(That is, if pre-emption is important for this operation.)
A compromise can be reached by using multiple threads with several of these "CPS processes" per thread. That's basically the road I plan to pursue first.
But I'm not sure what "my" Summer of Code student is going to do, or in fact who he/she is...
Kind regards,
Dirk Gerrits