Hi,<br><br>I'm about designing the compiler backend of my script language and I have generic types in the language. An example is the array. An array#int means array of integers. You can compare it to Java's generics. Whenever i have a variable of the type "generic", the type should be replaced by the really used type.<br>
Now the question is: how do i represent them in llvm without losing too much memory or CPU cycles?<br>I figured out three ways to do it. Which do you think is the best?<br><br>1. Duplicating the implementations for each used type<br>
very hard to implement because it needs a lot of restructuring the backend<br><br>2. Defining data type "generic" as a record of all possible types<br>would be fast but memory intensive; would need an optimization pass that removes unused variables from a struct (is there such pass?)<br>
<br>3. Defining data type "generic" as a union of all possible types<br>would safe a lot of memory, but would destroy all optimizations because of the bitcasts; i dont know how to implement unions in llvm<br><br>
3 is the way it is done in the interpreter, so i would prefer a way that is very close to 3.<br>Suggestions?<br>