caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* CamlP4 and Threads
@ 2007-01-27 23:21 Jonathan Bryant
  2007-01-28  4:12 ` [Caml-list] " Martin Jambon
  0 siblings, 1 reply; 2+ messages in thread
From: Jonathan Bryant @ 2007-01-27 23:21 UTC (permalink / raw)
  To: caml-list

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


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2007-01-28  4:13 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-01-27 23:21 CamlP4 and Threads Jonathan Bryant
2007-01-28  4:12 ` [Caml-list] " Martin Jambon

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).