
Hi Chris, On Thu, 17 Feb 2005 10:50:12 -0600 (CST), Chris Lattner wrote: [snip]
So let me see if I understand correctly: you're writing the code you want in C, compiling it with the LLVM C compiler, and using void*'s. This means you get things like "[100 x sbyte*]" instead of "[100 x dictionary*]" as you would like. To get back the correct type, you're having the compiler "copy and paste" this code, inserting the correct types as appropriate.
To me, I don't think it's worth doing this. Instead, why not just compile these function to LLVM bytecode and link them into the program as you need them, inserting cases to/from sbyte* as appropriate? Sure, some amount of type-safety will be "lost" at the LLVM level, but I don't think that will significantly impeed the optimizers. The other nice thing about this approach is that you can modify the runtime library more easily, and performance won't be bad from the result: the LLVM inliner can inline these methods where it makes sense. Am I missing something?
Well, it was extremely easy to implement which justifies the approach a bit ;-). Since it works quite well I think I'll stick with it a bit and change it if problems come up (for example if there are lists of so many different types that the code bloat gets unbearable).
I will probably run into limitations whith this later. For example if I implement exceptions (which should not be too complicated using invoke and unwind) I can't raise them from within the C code that produces the list implementation.
Yeah, that is annoying. One trick that works well for doing the 'unwind' is to just write a simple llvm function that unwinds, and call it from C.
Invoke is a bit more tricky unfortunately.
Ok, maybe it is enough to unwind from within those functions. I can't think of any string, list, dict... method that actually catches an exception. So it seems best to set some global variables that indicate the error and then call a function written in llvm that unwinds. Does this sound ok? [snip] Thanks for your help! Regards, Carl Friedrich