(ouhla ça poste dans tous les sens, je repars de loin)
Ce n'est pas pour argumenter (je ne connais pas suffisamment .NET), juste pour que ce soit plus précis :
Zephyr (./24) :
- Plus grande cohérence au niveau des types (pas de types int / float & co qui sont non-objets et s'opposent donc à tous les autres)
Avec l'auto-boxing de Java 5 plus de problèmes (à part pour les passages par référence comme tu notes).
- Introduction de pas mal de mots-clés très agréables pour alléger l'écriture du code (foreach, is/as, etc)
Java 5 a ses boucles améliorées. instanceof est l'équivalent de is, mais il n'y a pas de as (est-ce vraiment utile ?)
- Concept de pointeurs sur fonction/méthode templatée ou non extrêmement puissant via les "delegate"
- Passage des variables par valeur ou référence au choix (et non pas "par valeur pour les int/float, par référence pour les objets")
- Vrai support des templates présent dès le début et pas ajouté à l'arrache => API correctement templatée
- Déclarations anonymes de fonctions avec accès au scope appelant, pour effectuer des recherches dans une collection selon plusieurs critères en 2 ou 3 lignes seulement par exemple
- Surcharge/redéfinition des opérateurs
- Gestion des évènements réduite à sa plus simple expression (mot clé "event")
Tout ça est pris en charge directement par
Groovy, lorsque l'on souhaite troquer Java pour des facilités syntaxiques. Groovy n'est pas une bizarrerie, il deviendra très probablement prochainement un langage standard alternatif (il est déjà
standardisé), et au moins un des pilier techniques. Il propose une compatibilité complète et bidirectionnel avec Java (le "vrai"). Je code au moins 1.5 fois plus vite avec et en 2 fois moins de place.