Version française
Home     About     Download     Resources     Contact us    
Browse thread
CamlP4 and Threads
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ 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