[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | Jonathan Bryant <jtbryant@v...> |
| Subject: | CamlP4 and Threads |
I'm think I'm finally understanding CamlP4 and I'm trying to make a small syntax extension using it, but I can't find the rule I need to extend. I want to turn this: let f x y x = .... let x = |f| x y z into this: let f x y z = ... let x = let c = Event.new_channel () in let _ = Thread.create (fun c -> let x = f x y z in Event.sync (Event.send c x)) in Event.receive c but, like I said, I can't seem to find the rule I need to extend. I can do it for an arbitrary expression: let x = |3 + 5| to let x = let c = Event.new_channel () in let _ = Thread.create (fun c -> let x = 3 + 5 in Event.sync (Event.send c x)) in Event.receive c just not function application. I've tried extending Pcaml.expr's "apply" but that doesn't seem to work, and I can't see any other place to do it. Also, it seems that the implementation of the Event module has an error: the above code causes a space leak if x is not synchronized upon. In CML (the basis for the Event module), threads are GCed when they go out of scope, so this is not a problem. As a matter of fact, it is cited as the way to go about things. But since OCaml doesn't GC threads, this is a problem. Does anyone know of a workaround for this? And/or should it be submitted as a bug report? --Jonathan Bryant