From: Dave C. <dc...@do...> - 2009-07-06 03:01:41
|
> > So there are two choices > > • Continue to treat int = inlined Integer. Now for v: > > HashMap(Object, String), you cannot say v(3) = "Three". > > I'd favor this. > I don't see why there is all this effort to support this. If one is sufficiently hellbent on needing such a hashmap, then one can just define a class that implements a tagged union and use HashMap[TaggedUnion,String], thus allowing v(3) = "Three" v(3.0) = "Floating point three" v("3") = "String three" etc I have actually done this myself in C++, when extending the functionality of the Lua scripting language. It was trivial. I'll write it in X10 if you want. We can even provide the TaggedUnion class as part of XRX, with support for all the primitive types and Object. Including Object in the union would allow the user to box any types that were not directly implemented, e.g. String in the above example. We can even @NativeRep the TaggedUnion and use a proper union { } to avoid wasting memory. The performance is probably acceptable for the sort of applications that would want such a hashmap, and it avoids cluttering the semantics. The user can of course write their own tagged union if they have their own classes and they want to use them as inlined keys alongside int etc without boxing. |