Ce que je voulais dire, c'est que pour la prog système, le C dispose de vraiment tout un panel de bibliothèque spécialisées, qui permet de vraiment tout faire assez facilement.
Post hoc ergo propter hoc.
Le C a été conçu comme un assembleur de haut niveau pour Unix. Le C est donc la lingua franca (oui, je fais trop de latin) des langages de programmation pour l’accès au système. Le système fourni des fonctions et il les fourni en C (section 2 des pages de manuel), il est donc normal qu’elles soient directement accessibles en C. Les autres langages peuvent les fournir aussi (bien qu’ils préfèrent souvent les cacher et fournir des services de plus haut niveau : fonctions de la libc ou carrément tout un système de services particuliers au langage) mais il leur faudra les encapsuler.
Et dans le (relativement peu) de codes système que j'ai vu en C++, c'était en fait du C encapsulé. Et je trouve ça vraiment dégueulasse : pourquoi choisir le C++ si c'est pour encapsuler du C ?
Le C++ étant compatible avec le C (c’est l’un des objectifs premiers), l’effort de concevoir un ensemble objet au dessus des fonctions système n’est pas nécessaire et n’avait pas encore été fait (il est en cours : ça fait un moment que chacun faisait ses petites classes système dans son coin, elles sortent du bois).
Alors oui, effectivement, utiliser les fonctions C en C++ est direct mais le C++ n’est pas du C et ça peut faire « dégueulasse » (surtout quand on doit jongler avec des std::string/char*) mais c’est aussi plus simple que dans un autre langage pour lequel il faudra encapsuler, faire correspondre les types (les modèles mémoire du C et du langage cible étant souvent différents), intégrer dans la philosophie du langage, etc.
(Bon, ok, c’est de moins en moins « plus simple », avec les nouveaux langages, swig…)
[^] # Re: peut etre que...
Posté par Sylvain Sauvage . En réponse au journal Un langage pour les nuls? Le langage D!. Évalué à 3.
Post hoc ergo propter hoc.
Le C a été conçu comme un assembleur de haut niveau pour Unix. Le C est donc la lingua franca (oui, je fais trop de latin) des langages de programmation pour l’accès au système. Le système fourni des fonctions et il les fourni en C (section 2 des pages de manuel), il est donc normal qu’elles soient directement accessibles en C. Les autres langages peuvent les fournir aussi (bien qu’ils préfèrent souvent les cacher et fournir des services de plus haut niveau : fonctions de la libc ou carrément tout un système de services particuliers au langage) mais il leur faudra les encapsuler.
Le C++ étant compatible avec le C (c’est l’un des objectifs premiers), l’effort de concevoir un ensemble objet au dessus des fonctions système n’est pas nécessaire et n’avait pas encore été fait (il est en cours : ça fait un moment que chacun faisait ses petites classes système dans son coin, elles sortent du bois).
Alors oui, effectivement, utiliser les fonctions C en C++ est direct mais le C++ n’est pas du C et ça peut faire « dégueulasse » (surtout quand on doit jongler avec des std::string/char*) mais c’est aussi plus simple que dans un autre langage pour lequel il faudra encapsuler, faire correspondre les types (les modèles mémoire du C et du langage cible étant souvent différents), intégrer dans la philosophie du langage, etc.
(Bon, ok, c’est de moins en moins « plus simple », avec les nouveaux langages, swig…)