Am I the only one who thinks that types should not be required at run time?
Am I the only one who thinks that types should not be required at run time?
Additional obvious factors are Java's multi-platform support (which is the prime reason I've developed in Java and not yet in C#) and C#'s better support for integrating with code developed in other languages.
Specifically with regards to the presented features:
out parameters are better than nothing (Java) but I think there are better alternatives for this functionality (touples).
Anonymous functions are nice, but why not simply allow nested functions? Also, I notice in one example that anonymous functions support closures. This is very interesting and I wonder how they are building this functionality into the VM. And again, why not provide general closure support? This feature alone could get me using C#.
Looking at the same sample (the large account filter) one can't help but notice how delegates are just a very verbose alternative to functions as first class citizens. Couldn't they just make this whole delegate thing implicit?
The Ada model, for example, allows generic units that are type safe. Types are not needed at run time.
Proposals for generics in Java and C# can follow the same approach (i.e., compiling into standard byte codes) or propose changes to the VM itself.
I think this is the key observation. Java and C# have various relative advantages and disadvantages. Nothing either way is a clear tipping point.
As they compete for favor the worst that could happen is feature competition.
After all they are both good enough to host a good implementation of Scheme. 8^)
Yes - Java/JVM and C#/.NET/CLR are really just inefficient but broadly interoperable target platforms for real languages. No-one actually writes Java code by hand, do they???