Pourquoi c# est un "mauvais" langage objet ....
pourquoi c# est un mauvais langage objet .... rapidement:
C# conserve le mot clef "virtual" qui est une abérration pour un langage objet moderne, qui est en plus basé sur une VM ... Cette scorie est tellement enorme que cela descend le langage et ses concepteur: soit ceux qui ont fait le langage ne comprennent rien à l'objet et ont fait n'importe quoi (peu probable) soit c'est le marketing qui à dit au développeurs de faire un langage "comme C++" (qui lui était déja un trés mauvais langage objet, mais il pouvait ce defendre dans l'esprit par lequel il se voyait: tous sacrifier pour une execution rapide.). C# est basé sur une VM, donc conserver toute les disgrétion de C++ est nul.
Il y à d'autre exemple (mais je ne pourrais tous les expliquer précisement et rapidement) mais rien que celui-ci fait qu'il ne faut pas promouvoir ce langage.
Java avait à l'époque fait un grand pas avec son (preque)tout référence, son garbage collector, ses interfaces, sont typage statique .... il à amener quelque chose de plus qu'il fallait conserver. C#, pour un nouveau langage, reprend les défaut les plus criticable de ses prédécesseur ... pourquoi alors l'utiliser ?
Heu Taroth ... tu peu un peut preciser car ...
J'ai pas dut comprendre le post du dessu car:
c# n'accepte pas non plus d'héritage multiple. Seul le sous typage multiple est possible grace au interface (comme en Java). La plateforme .Net est prevu pour un héritage simple, donc c'est déja pas evident d'implémenter un langage à héritage multiple dessu (precisons que eiffel# l'a fait -heritage multiple sur .Net- mais au prix d'une certaine bidouille dans leur compilo, il faut biens l'avouer). Donc Java et C# non rien à se reprocher l'un contre l'autre usr ce coup la...
Le virtual qui est inadmissible est celui des méthodes, que l'on doit expliciter partout (aberration: vous ètes dans un langage dit "objet" mais vous devez specifier partout que vous desirez la selection dynamique des methode -le virtual-, qui est une caracteristique indispensable pour ètre qualifier de langage "objet")
D'autre problèmes vienne quand on lit les explications du lagage: souvent on parle de l'implémentation des objet, on parle d'allocation dans la pile, dans le tas, tous ca pour "coller" un peu plus à C++ .... Non mais on rigole ou quoi? c# va ètre compilé pour une VM, on s'en fous si c'est dans la pile ou dans le tas! En plus il pourra ètre recompilé vers du natif aprés, qu'est-ce que vous en avez à faire dans quelle partie de la mémoire cela va ce situer ... pourquoi ne pas pouvoir spécifier de rester dans le cache du processeur? ou meme dans quelle barette memoire balancer notre objet tant que l'on y est! .... Java avais reussi a faire une reele abstraction de cela, et C# reviens en force avec tous ces anciens problèmes ... tiens d'ailleur, c# à t-il garder le "goto"? (je sais pas mais ca me ferrais bien marrer)
J'ai étais un peu méchant dans le paragraphe precedent mais bon, quand le marketing se mèle du développement d'un nouveua langage, et bien c'est pas joli ... (je dit "marketing" car je n'ose penser que ce soit réélement les concepteur du langage qui aient laisser c'est scories)
neo.51->Non c# n'est pas un bon langage objet
Citation:
Envoyé par neo.51
C# ou java, il est dificile de dire quel est le meilleur langage sachant que tous deux sont de bon langages orientés objet.
Non! C# n'est pas un "bon" langage objet. lit les posts du dessu.
Si l'on pousse le vice un peu plus loin (mais pas bcp plus ...) on peut même dire que c# n'est un langage "Objet" que de justesse! La selection dynamique des méthode est une propriétée ESSENTIELLE d'un langages pour etre qualifier de "objet". Devoir être obliger de le spécifier (avec le mot clef 'virtual') fait, dans un sens, que l'on est obligé de dire au langage "d'etre objet".
Java est quand meme un meilleur langage objet, meme si il n'est pas parfait. C# est un nouveau langage qui n'est pas meilleur, et même pire, donc il ne faut pas l'utiliser.
Pour Taroth: Pouvoir, dans un langage, spécifier des contrainte d'implémentation (inlining, allocation pile/tas) et trés dangereux, compliqué, sujet à bug, et va à l'encontre d'un langage objet moderne (toujours + d'abstraction pour gerer de plus gros projet/applications, meilleur compilo qui ferrons le boulot pour toi et mieux que toi). De plus C# va touner sur une machine virtuelle, tu croit vraiment gagner bcp de perf en bidouillant avec ta VM ? Je ne pense pas, ou alors au prix de tellement d'effort que cela ne vaudra pas le coup. Les bug coutent biens plus chers que quelques cycle d'horloge. Mais c'est vrais qu'il ne faut pas ce satisfaire de la "lenteur" des langages ;)