From: Bardur A. <oca...@sc...> - 2004-05-03 15:40:52
|
Hi all, More specifically, it seems that the "enum", "values" and "keys" functions in ExtHashtbl.Hashtbl all cause an infinte loop when you force (regardless of whether you actually use "force", "iter" or "fold") the enumeration. The following code shows the problem (revised syntax, but that shouldn't really matter): ---------------- open ExtHashtbl; let h = Hashtbl.create 64 in (do { (* Works fine: *) (Enum.iter (fun i -> printf "i=%d\n" i) (List.enum [1; 2; 3; 4; 5])); flush stdout; Hashtbl.replace h 1 1; Hashtbl.replace h 2 2; Hashtbl.replace h 3 3; Hashtbl.replace h 4 4; Hashtbl.replace h 5 5; (* Any of the following just goes into an infinite loop... *) (Enum.iter (fun (k,d) -> printf "k,d=%d,%d\n" k d) (Hashtbl.enum h)); flush stdout; (Enum.iter (fun d -> printf "d=%d\n" d) (Hashtbl.values h)); flush stdout; (Enum.iter (fun k -> printf "k=%d\n" k) (Hashtbl.keys h)); flush stdout; }) --------------- Isn't this buggy behavior, or am I missing something? I've tried this with both 1.0b and the CVS (updated earlier today). -- Bardur Arantsson <ba...@im...> <ba...@sc...> Anything that goes up, must come down. Ask any system administrator. |
From: Martin J. <mar...@em...> - 2004-05-03 16:45:45
|
On Mon, 3 May 2004, Bardur Arantsson wrote: > Hi all, > > More specifically, it seems that the "enum", "values" and > "keys" functions in ExtHashtbl.Hashtbl all cause an > infinte loop when you force (regardless of whether you > actually use "force", "iter" or "fold") the enumeration. > > The following code shows the problem (revised syntax, but > that shouldn't really matter): [ snip ] > Isn't this buggy behavior, or am I missing something? I've > tried this with both 1.0b and the CVS (updated earlier > today). This is strange... It works perfectly on my box (OCaml 3.07+2, Linux, CVS ExtLib). I tested in an interactive session and compiled to native code. Here is my code: open ExtHashtbl open ExtList open Printf let h = Hashtbl.create 64 let _ = (* Works fine: *) (Enum.iter (fun i -> printf "i=%d\n" i) (List.enum [1; 2; 3; 4; 5])); flush stdout; Hashtbl.replace h 1 1; Hashtbl.replace h 2 2; Hashtbl.replace h 3 3; Hashtbl.replace h 4 4; Hashtbl.replace h 5 5; (* Any of the following just goes into an infinite loop... *) (Enum.iter (fun (k,d) -> printf "k,d=%d,%d\n" k d) (Hashtbl.enum h)); flush stdout; (Enum.iter (fun d -> printf "d=%d\n" d) (Hashtbl.values h)); flush stdout; (Enum.iter (fun k -> printf "k=%d\n" k) (Hashtbl.keys h)); flush stdout EOF Output: i=1 i=2 i=3 i=4 i=5 k,d=1,1 k,d=2,2 k,d=3,3 k,d=4,4 k,d=5,5 d=1 d=2 d=3 d=4 d=5 k=1 k=2 k=3 k=4 k=5 |
From: Bardur A. <oca...@sc...> - 2004-05-03 17:20:51
|
On Tue, May 04, 2004 at 12:41:34AM +0800, Martin Jambon wrote: > On Mon, 3 May 2004, Bardur Arantsson wrote: > > > Hi all, > > > > More specifically, it seems that the "enum", "values" and > > "keys" functions in ExtHashtbl.Hashtbl all cause an > > infinte loop when you force (regardless of whether you > > actually use "force", "iter" or "fold") the enumeration. > > > > The following code shows the problem (revised syntax, but > > that shouldn't really matter): > > [ snip ] > > > Isn't this buggy behavior, or am I missing something? I've > > tried this with both 1.0b and the CVS (updated earlier > > today). > > This is strange... It works perfectly on my box (OCaml 3.07+2, Linux, CVS > ExtLib). Hmm... it turns out that I may not, in fact, have been using the CVS version after all. I just tried again but this time compiled directly within the extlib directory itself; suddenly it worked... Time to uninstall the system-installed extLib 1.0b, I guess. Thanks for your time. -- Bardur Arantsson <ba...@im...> <ba...@sc...> - Me? The 13th Duke of Wimbourne? In a student nurse's hall of residence at three in the morning? With my reputation? ... Bingo! The 13th Duke of Wimbourne | The Fast Show |
From: Dave B. <ra...@ra...> - 2004-05-12 03:20:54
|
Bardur Arantsson <ocaml-lib-devel <at> scientician.net> writes: > More specifically, it seems that the "enum", "values" and > "keys" functions in ExtHashtbl.Hashtbl all cause an > infinte loop when you force (regardless of whether you > actually use "force", "iter" or "fold") the enumeration. I have been experiencing the exact same problem. I am using the latest versions of ocaml and extlib from Debian/unstable: ocaml 3.07.2a-2 and libextlib-ocaml- dev 1.0b-3. I have reproduced the problem on two different machines. I haven't tried the CVS version yet. My guess is that it's been fixed and that Debian needs an update. I'm glad I found your message. I've been searching everywhere for an answer to this one... Dave |