On 19/11/2010, at 8:46 AM, Erick Tryzelaar wrote: > On Wed, Nov 17, 2010 at 4:20 PM, john skaller > <skal...@users.sourceforge.net> wrote: >> >> I now have to make a key decision: whether to support relocation >> (all closed bound tables start at offset 0 and on loading get relocated >> to a free address) or somehow fix the addresses (eg by hashing, >> or just do everything in some sequence and if there's a clash throw >> it all out and rebuild from scratch). > > For what it's worth, For felix2 I'm planning on using a combination of > hash consing the internal structure and serializing out to indexed > values on disk. The hope is that I can avoid having to manually track > array indexes in maps and get cheap comparisons between values. I > haven't done much prototyping yet, so I have yet to see if it's a > worthwhile idea yet.
I've tried hash-consing: slows the program down 2x. The parsing, table building stuff really doesn't matter much because it's a per-file thing. No matter how slow it is, the speed is limited by the physical file size, if you're compiles are too slow, just break your file into pieces. Only the changed bits get recompiled. It's the whole program analysis that matters. The first stage should strip unused stuff out. Still, processing time .. including g++ compilation times .. depend on the size of your program. At present I know the optimiser does multiple pointless passes rebuilding caches because I couldn't figure out how to maintain them. It's doubtful if Felix2 will get off the ground: there aren't enough people working on the project with enough time to even get Felix 1 operational :) I have another weird bug from a transformation which should have been transparent: [cal_call] call non procedure, index_10342<10342>[<T10340>] type=int * (int * <T10340> -> void) * avl[<T10340>] -> (int * (int * <T10340> -> void) * avl[<T10340>] -> void) In build/release-optimized/lib/std/avl.flx: line 204, cols 5 to 19 203: } 204: aux(0, f, tree); *************** 205: } remember, none of the tables I'm building and caching on disk are actually used: the only side effect I know about is gratuitous incrementation of the fresh bid counter. If you look at name of the routine above it is "index_10342" (hmm .. that number was lower before .. ) This is what the print routine says when the index can't be found in the symbol table.. yet it has a type: T -> (T -> void) which is a function taking a T and returning a procedure accepting a T. It isn't a procedure, but it also isn't the aux() function you can see, that's was just bound (correctly). The only change to the binding code is that the state parameters are passed marginally more transparently. -- john skaller skal...@users.sourceforge.net ------------------------------------------------------------------------------ Beautiful is writing same markup. Internet Explorer 9 supports standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2 & L3. Spend less time writing and rewriting code and more time creating great experiences on the web. Be a part of the beta today http://p.sf.net/sfu/msIE9-sfdev2dev _______________________________________________ Felix-language mailing list Felix-language@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/felix-language