Since I'm very interested in C# Generics, in particular it's ability to improving typing and help close the performance gap with C/C++, I figured I'd post a summary of recent Generics information for anyone who is interested:
I'd also like to see generics (both in Java and C#) so I'd like to comment on your compiled information. Thanks for your work.
For me, improved type safety is the more important point. By my definition, a language like Java or C# must be considered statically unsafe as lony as null pointer/reference exceptions or class cast/invalid class exceptions can occur.
At least the latter can be worked around with generic types.
A more powerful type system (see for example nice.sf.net for a really nice superset of Java which doesn't have these problems anymore) would be required to get rid of null pointer exceptions.
similar needs as C++ templates or Generic Java (GJC). Currently the performance of collections in .NET (or JVM) is similar to that of Python, Perl, or Smalltalk because collections involve runtime dynamic type casting.
Smalltalk - I know for sure - has no concept of static types, therefore no concept for typecasts whatsoever and therfore has no such overhead and its collections work with every type of object without any runtime penalty. So I don't think that your comparison works. The performance is worse because to regain static type-safeness, both Java and C# have to inject runtime type checks into the getter methods.
Java furthermore suffers because you have to explicitely box and unbox primitive types. It might be possible that .NET could provide faster boxing and unboxing because the VM deals with this issue but I don't know. As languages like Smalltalk have no primitives types and use objects all the time, this penalty isn't there and collections in Smalltalk are more efficient. (Of course, not having primitives datatypes can cause larger memory footprint or less efficient arithmetics in other parts of the program but that's a different story. In fact, by using objects all the time, there's no integer overflow in Smalltalk and the transition from small to large integers (with unlimited precision) is transparent for the user.)
> Generics for .NET support runtime
specialization into static code, eliminating the extra typechecks, and bringing the performance of collections closer to that of C/C++.
Support, but not require. As I understand the specification, it would be pretty valid to use the same method as generic Java to fulfill the specification. However, there's an opportunity to generate special kinds of collections for primitive types.
It's still unclear for me what would be the better approach to spread the use of generics. The Java way which says we will not change the VM so that any code written with generic types will still run on old installations (although not faster than the old non-generic-code) or the .NET way which says you'll need a new VM (aka VES) but you might get better performance in exchange.
5) How is C# Generics different from Generic Java?
Isn't the extended type system which is the foundation for C# generics also more powerful that what Java has because its modeled after the ILX requirements which shall help to generate more efficient code for functional languages like F# (Ocaml) or Haskell(.NET)?
"retrofit" with parametric type-specifications. Generic Java is rumored to be slated for the next Java release (1.5?) for which no date is set.
It's not a rumor but part of the release 1.5 plan AFAIK. The generics compiler is already available, although that compiler doesn't feature the other syntax changes (boxing, enums, foreach-statement etc), yet which will also be introduced to 1.5 to probably should make Java to catch up with C# again.
The Eclipse project announced to add generics to their compiler as part of the 2.2 release which might be available in six months or so. Early access versions are hopefully available is a few months.
Java 1.5 should be available in early 2004 with a beta which will probably be released in July at the JavaOne conferrence (my guess, not confirmed).
run-time casts. Gyro, a reference implementation of Generic C#/CIL, is available as a patch to the Microsoft Shared Source CLI.
Does Gyro already has the mentioned CLI 2.0 and is there a measurable performance improvement?
bye -- Stefan Matthias Aust // www.3plus4software.de // Inter Deum Et Diabolum Semper Musica Est
_______________________________________________ Mono-list maillist - [EMAIL PROTECTED] http://lists.ximian.com/mailman/listinfo/mono-list
