[Linux-bruxelles] Thème pour les développeurs.

Vincent Blondel vincent.blondel at chello.be
Mar 7 Oct 20:51:19 CEST 2003


Je voudrais quand-même préciser une petite chose, et ceci indépendemment du 
langage que tu choisiras pour le développement de ton application :

Comme l'a précisé Thierry, le C a ce fantastique avantage de te donner une 
entière maîtrsise sur la gestion mémoire de ton application ( ce qu'aucun 
autre langage ne permet de faire , du moins de tous les langages que j'ai pu 
découvrir et/ou utiliser jusqu'à présent ).

Mais plus encore, je voudrais insister sur le fait que la programmation 
orientée objet n'a rien de spécifique à un langage ou un autre. Comprenez une 
fois pour toute que la programmation orientée objet est avant tout une 
question d'optique de programmation. On peut aussi bien programmer orienté 
objet en C que même en Korn Shell si bon te plait. 
Mon expérience en programmation C et  Unix Shell m'a prouvé depuis longtemps 
qu'il est aussi facile de développer des torchons en C++ autant que dans tous 
les autres langages. J'ai déjà vu au bureau des programmes écrit en C++ qui 
ne sont ni plus ni moins que du code procédural . C'est totalement illisible 
et non maintenable.


On Tuesday 07 October 2003 18:23, Ludovic Brenta wrote:
> "Cabuzel Thierry" <Thierry.Cabuzel at gial.be> writes:
> > Avant propos:
> > Je suis de l'avis de Brenta sur les grandes ligne et je ne suis pas
> > anti-C tant qu'il reste la ou de mon avis personnel il doit rester:
> > Un langage d'assemblage de haut niveau. Mon avis à été construit de
> > part ma formation d'ingénieur en génie logiciel (conception et
> > architecture de systèmes logiciels) et de mon expérience dans
> > l'industrie (7 ans).
>
> Merci pour ton soutien.  Pour la petite histoire, je suis arrivé à ma
> conclusion principalement anti-C par le même chemin (ingénieur
> industriel + 8 ans d'expérience en programmation sur 4 systèmes
> d'exploitation avec 7 langages différents).  J'ai écrit trop de bugs
> pour aimer le C (ou le C++, d'ailleurs).
>
> J'ajouterais que l'un des buts principaux poursuivis par les
> concepteurs du C était la facilité d'implémentation, c'est-à-dire que
> le langage devait être très simple pour pouvoir écrire un compilateur
> rapidement (d'où la notion d'assembleur de haut niveau).  Si vous
> pensez à GCC et à ses 1,6 millions de lignes de code, vous n'avez
> aucune idée de ce que pouvait être un compilateur C en 1972.  Il y a
> dans Debian un "tiny C compiler" (paquet "tcc") qui tient en 11000
> lignes de code.  Il faut aussi se rappeler que le public visé par le
> langage C était constitué de gourous qui avaient pour habitude de
> programmer des systèmes d'exploitation en langage machine, sur des
> ordinateurs incapables de faire tourner de gros programmes.  10 000
> lignes de code, à l'époque, c'était déjà une très grosse application.
>
> Le but poursuivi par les concepteurs d'Ada était exactement l'inverse:
> le langage devait permettre au compilateur d'offrir le plus de
> services possible aux développeurs, en particulier pour améliorer la
> fiabilité et la maintenabilité des programmes et pour aider des
> équipes entières à écrire de très grosses applications, et surtout à
> prouver (au sens mathématique, quand c'était possible) que leurs
> programmes étaient corrects.  Résultat, en Ada on programme deux fois
> plus vite qu'en C, et on produit 10 fois moins de bugs (voir l'étude
> exhaustive de Ziegler, dont j'ai donné l'URL dans mon précédent mail).
>
> Je n'aime pas beaucoup le Java parce qu'il n'a pas de génériques
> (templates) et donc sacrifie son typage fort, qui n'est que théorique,
> au profit d'un polymorphisme omniprésent.  Comment contrôler
> statiquement le type des données quand tout est un Object, en
> particulier dans les conteneurs?  Ceci a en outre un impact non
> négligeable sur la performance, puce Java ou pas, car toutes les
> méthodes sont virtuelles et donnent lieu à plusieurs indirections à
> chaque appel.  Au moins, en C++ ou en Ada, on a le choix de rendre les
> méthodes virtuelles ou non.  Comment contrôler statiquement les
> valeurs possibles d'une variable numérique, quand on n'a que "float",
> "double", "int" et "long", qui reflètent l'architecture interne de la
> machine virtuelle mais pas le problème à résoudre?  En Ada et dans
> certains dialectes Pascal, on peut spécifier l'intervalle des valeurs
> autorisées au moment de la déclaration du type.  Comment garantir que
> le programme tourne avec moins de X kilo-octets de mémoire?
> Impossible en Java.  Comment garantir un temps de réponse?  Impossible
> en Java.  Comment garantir la cohérence d'une application, quand le
> compilateur ne contrôle pas les dépendances entre classes
> transitivement?  Impossible en Java: le seul moyen est de tout
> recompiler (tout compilateur Ada gère parfaitement bien ce problème,
> parce que les règles de cohérence ont été incluses dans la définition
> du langage - pas besoin de Makefile). Etc.
>
> --
> Ludovic Brenta.





Plus d'informations sur la liste de diffusion Linux-bruxelles