Posté par boubou .
En réponse à la dépêche Mono 0.24.
Évalué à 1.
C'était nécéssaire pour garder la compatibilité avec C.
Vrai et faux. Il aurait fallu faire exactement le contraire, à savoir par défaut virtuelle, et optionnellement non virtuelle, comme en Java (et en Sather, mais avec un mécanisme plus complexe). Le problème est que C++ est encombré par des "optimisations" stupides qui sont effectivement intéressantes pour certains cas particuliers marginaux (le fait de pouvoir transformer un objet en struct pour pouvoir le passer à du C) mais qui pourissent le cas général. Cette idée du virtuel est vraiment la plus stupide de C++, alors que la volonté d'être compatible avec le C pouvait se résoudre dans l'autre sens. Quelle misère... Mais nous avons déjà eu cette discussion il y a quelques années, mon cher Guillaume.
Et si les premiers compilos C++ avaient du implémenter une analyse globale du code pour optimiser ça, on s'en serait jamais sorti.
Ca je veux bien le croire. Mais bon, les templates sont tellement délirants en C++ qu'il a fallut des années pour découvrir ce qu'on pouvait faire avec (les expressions templates, par exemple) et aussi des années pour les implémenter correctement (est-ce le cas d'ailleurs).
Par ailleurs, en C# les méthodes ne sont pas virtuelles par défaut. Je ne me souviens plus exactement pourquoi... une limitation de leur runtime, quelque chose dans ce genre.
[^] # Re: promouvoir Java plutot que C#
Posté par boubou . En réponse à la dépêche Mono 0.24. Évalué à 1.
Vrai et faux. Il aurait fallu faire exactement le contraire, à savoir par défaut virtuelle, et optionnellement non virtuelle, comme en Java (et en Sather, mais avec un mécanisme plus complexe). Le problème est que C++ est encombré par des "optimisations" stupides qui sont effectivement intéressantes pour certains cas particuliers marginaux (le fait de pouvoir transformer un objet en struct pour pouvoir le passer à du C) mais qui pourissent le cas général. Cette idée du virtuel est vraiment la plus stupide de C++, alors que la volonté d'être compatible avec le C pouvait se résoudre dans l'autre sens. Quelle misère... Mais nous avons déjà eu cette discussion il y a quelques années, mon cher Guillaume.
Et si les premiers compilos C++ avaient du implémenter une analyse globale du code pour optimiser ça, on s'en serait jamais sorti.
Ca je veux bien le croire. Mais bon, les templates sont tellement délirants en C++ qu'il a fallut des années pour découvrir ce qu'on pouvait faire avec (les expressions templates, par exemple) et aussi des années pour les implémenter correctement (est-ce le cas d'ailleurs).
Par ailleurs, en C# les méthodes ne sont pas virtuelles par défaut. Je ne me souviens plus exactement pourquoi... une limitation de leur runtime, quelque chose dans ce genre.
Une sacrée connerie du C#, si tu veux mon avis.