IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Le langage de programmation C a 50 ans
Et reste l'un des langages les plus plébiscités

Le , par Bruno

123PARTAGES

16  1 
Le langage de programmation C a 50 ans et reste l'un des langages les plus plébiscités. « C'est absolument stupéfiant de voir à quel point les gens des Bell Labs ont tout simplement "vu juste". Le système d'exploitation et la philosophie d'Unix, l'interpréteur de commandes d'Unix et le langage de programmation C ont si bien défini l'interface et les abstractions qu'ils dominent toujours 50 ans plus tard. Je me demande quel logiciel créé aujourd'hui nous regarderons dans 50 ans avec autant de respect », déclare un internaute.

C est un langage de programmation informatique à usage général. Il a été créé dans les années 1970 par Dennis Ritchie et les Bell Labs, et reste très largement utilisé et influent. De par sa conception, les fonctionnalités de C reflètent clairement les capacités des processeurs ciblés. Il a trouvé une utilisation durable dans les systèmes d'exploitation, les pilotes de périphériques, les piles de protocoles, bien que de moins en moins pour les logiciels d'application, et est commun dans les architectures informatiques qui vont des plus grands superordinateurs aux plus petits microcontrôleurs et systèmes embarqués.

Successeur du langage de programmation B, C a été développé à l'origine aux Bell Labs par Dennis Ritchie entre 1972 et 1973 pour construire des utilitaires fonctionnant sous Unix. Il a été appliqué à la réimplémentation du noyau du système d'exploitation Unix. Au cours des années 1980, le C a progressivement gagné en popularité. Il est devenu l'un des langages de programmation les plus utilisés avec des compilateurs C disponibles pour presque toutes les architectures informatiques et tous les systèmes d'exploitation modernes. Le langage C est normalisé par l'ANSI depuis 1989 (ANSI C) et par l'Organisation internationale de normalisation (ISO).

C est un langage procédural impératif supportant la programmation structurée, la portée lexicale des variables et la récursion, avec un système de types statique. Il a été conçu pour être compilé afin de fournir un accès de bas niveau à la mémoire et des constructions de langage qui correspondent efficacement aux instructions de la machine, le tout avec un support d'exécution minimal. Malgré ses capacités de bas niveau, le langage a été conçu pour encourager la programmation multiplateforme. Un programme C conforme aux normes et écrit dans un souci de portabilité peut être compilé pour une grande variété de plates-formes informatiques et de systèmes d'exploitation avec peu de modifications de son code source.


Le C est un langage impératif et procédural dans la tradition d'ALGOL. Il possède un système de types statique. En C, tout le code exécutable est contenu dans des sous-routines (également appelées "fonctions", mais pas au sens de la programmation fonctionnelle). Les paramètres des fonctions sont transmis par valeur, bien que les tableaux soient transmis sous forme de pointeurs, c'est-à-dire l'adresse du premier élément du tableau. Le passage par référence est simulé en C par le passage explicite de pointeurs vers la chose référencée.

De nombreux langages ont emprunté directement ou indirectement au C, notamment C++, C#, le shell C d'Unix, D, Go, Java, JavaScript (y compris les transpilers), Julia, Limbo, LPC, Objective-C, Perl, PHP, Python, Ruby, Rust, Swift, Verilog et SystemVerilog (langages de description du matériel). [La plupart d'entre eux (Python étant une exception spectaculaire) expriment également une syntaxe très similaire à celle du C, et ils ont tendance à combiner la syntaxe reconnaissable des expressions et des déclarations du C avec des systèmes de types sous-jacents, des modèles de données et une sémantique qui peuvent être radicalement différents.

Depuis 2000, le langage C se classe régulièrement parmi les deux premiers langages dans l'indice TIOBE, une mesure de la popularité des langages de programmation.

« Je pense que Java/C# et Rust seront toujours utilisés et en bonne forme dans 50 ans. Les deux premiers sont bons pour la programmation de la couche application avec suffisamment de fonctionnalités pour être utiles mais pas trop pour permettre aux programmeurs de se tirer dans le pied à plusieurs reprises », ironise un programmeur C.

« Ils sont également très rapides pour la plupart des applications. Rust pourrait être l'avenir lorsque les performances ou la maîtrise du matériel sont nécessaires. Sinon, il ne restera que le C et le C++ (imaginez que le C ait 100 ans et qu'il y ait encore des gens qui l'embauchent pour programmer le code de leur nouvelle montre numérique)

« Peut-être qu'un ou deux des frameworks web populaires seront encore utilisés. Quelque chose comme React, Node js, ou Blazor (si vous adhérez au rêve de Microsoft de fournir un langage unique pour tout développer, suffisamment rapide et portable). Je ne vois pas pourquoi Python ne continuerait pas à se développer, étant toujours un langage de script puissant dans un demi-siècle », ajoute-il.

Et vous ?

Quelle est votre appréciation du langage C après 50 ans d'existence ?

Avez-vous une expérience avec le langage C ? Que pensez-vous de ce langage ?

Voir aussi :

Microsoft célèbre les 20 ans de .NET, son Framework de développement, les dépôts .NET seraient dans le top 30 des projets open source à plus haute vélocité sur GitHub depuis 2017

Microsoft a publié la version stable de Visual Studio 2022 avec une nouvelle expérience de rechargement à chaud pour les applications natives C++, cette version est disponible uniquement en 64 bits

Un développeur publie un langage de programmation qui peut être traduit automatiquement en C, C++, C#, Java, JavaScript, etc., avec une traduction rapide et sans machine virtuelle

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de JPLAROCHE
Membre éprouvé https://www.developpez.com
Le 22/04/2022 à 20:52
J'ai 70 ans et j'ai connu le C, c'était la révolution, chacun avait son C , borland , Metrowerks CodeWarrior, microsoft, .... chacun mettaient en avant ce que l'autre n'avait pas comme lib... ou comme doc. Celui de borland avait une doc d'enfer.

je passais mes voyages de transport pour aller au boulot a potassé, on se faisait tout notre TUI la base de données avec l'arbre Btree , les traces ou plutôt le sillon a été à jamais et sans aucun doute la marque indélébile. (j'ai gardé des livres que l'on ne trouve plus, mais qui sont d'une richesse…)

Il fallait écrire nos propres drivers par exemple communication avec les douchettes et j'en passe et des meilleurs, les premières communications avec TO7 l'ancêtre de boxes internet avec la ligne téléphonique 24k qui permettait de relier des dépôts avec l'ordinateur central...

Mais il y a d'autre langage comme le RPG d'IBM qui n'a cessé d'évoluer et qui lui aussi plus de 50 ans qui n'a cessé d'évoluer. Bon je dirais qu'ils avaient 30 d'avance sur tout ce qui existait et qu'en 1980 on parlait déjà de LG3 et très rapidement LG4 mais cela reste du propriétaire.

Aujourd'hui je fais encore du C voir C++ ça occupe la retraite. Beaucoup de langage on un compilateur en C en dessous...

Ce que je regrette les impressions avec les séquences escape pour des listes et autre en gestion, c'était tout bête. (ça ne veut pas dire qu'il n'y a rien aujourd'hui)
l'abandon du TUI qui avait ses lettres de noblesse, taille mémoire ridicule, le graphique à compliqué beaucoup de choses (à ne pas confondre avec utilité).

Ce que je vois aujourd'hui, on utilise des lib toutes faites, mais on ne regarde pas comment elles sont faites et si elles méritent d'être incorporées, j'ai toujours regardé et souvent repris une partie du code pour incorporer pour ce dont j'avais besoin et je pratique encore comme ça.

Je finis, Merci à ceux qui ont fait et font encore le C j'ai pris mon pied . Signé : un informaticien

@bientôt
13  1 
Avatar de Ehma
Membre averti https://www.developpez.com
Le 21/04/2022 à 11:34
Et bien, je crois que ce sera toujours une référence en la matière, mais il et vrai qu'il y a plus sexy de nos jours.

Je l'utilisais toute une époque sous Linux/Mac (au lieu de faire de gros script bash) mais je l'ai délaissé au profit de Purebasic, qui l'air de rien à une philosophie proche du C tout en adoptant la syntaxe et certaines spécificités du Basic.

Je l'utilise toujours pour l'Arduino, mais peut-on encore parler de C, tant on est très limité ?
8  1 
Avatar de Ehma
Membre averti https://www.developpez.com
Le 21/04/2022 à 23:52
Citation Envoyé par chrtophe Voir le message
Plus sexy, je sais pas, mais au moins on le trouve partout le C.

Et ça m'étonnerait qu'il y ait des projets d'envergure développé en Basic like même moderne.
Tout dépend de ce que l'on appel "des projets d'envergure". Oui, en tout cas, Purebasic pourrait, avec des performances très honnêtes et il existe des outils sérieux de GRH ou de Facturation fait avec Visual Basic (bon, on ne parle pas des performances).

En aucun cas je ne dis que le C est fini, bien loin de moi cette idée. Il a toujours son utilité et je l'ai pratiqué et c'est pour cette raison que je peux dire qu'il n'y a pas de raison que Purebasic ne le puisse pas.

Ce que Purepasic ne pourrait pas, c'est faire un OS (du moins je ne le pense pas). J'ai très longtemps été développeur Delphi (qui n'était pas tout à fait pris au sérieux non plus), C++ Builder, une peu de Qt et je ne vois pas pourquoi un langage qui a une dialectique basic ne pourrait pas. Purebasic, comme je le dis, n'a que le voccabulaire du Basic, pas sa structure ni son fonctionnement, là il est plus proche du C (il y a aussi des pointeurs, des includes, des structures, ....).

Pour en revenir à l'envergure d'un projet, ça n'a rien à voir avec le langage (pourvu qu'il ait le minimum requis), mais avec la façons dont on organise le projet. J'ai vu d'affreux chaos en Java par des société très très réputées (qui participent au lancement de fusées dans l'espace) et des choses très solides en interprété (Bash par des sysadmin par exemple).

Le seul reproche que je pourrais faire au C, c'est que la portabilité est difficile à gérer si on veut du GUI, réseau, database, ... on dépend toujours de frameworks tiers et de leur qualité. C'est en ça que je le trouve moins sexy. Le C devrait s'inspirer de Purebasic et inclure des obj réseau, GUI, database, indépendant des plateformes. Ca,je le sais, c ne l'aura jamais.

Moi, ça me sert surtout de Purebasic pour automatiser/faciliter/rendre accessible aux utilisateurs, des choses compiquées sur nos serveurs, qu'ils soient Windows ou Linux et ce depuis un poste Windows/Mac/Linux. En C, ce serait, en effet, très vite un projet d'envergure alors que là en moins de 500 lignes, c'est souvent fait et de bonne qualité, pour toutes les plateformes.

Comme disait un de mes profs, avant la grande guerre, il faut choisir son langage en fonction de ce que l'on doit faire : le C peut tout faire, mais si on peut se faciliter la tâche, il serait stupide de s'en priver.

Si je parle beaucoup de Purebasic, c'est à titre d'exemple, c'est, à tort, considéré comme langage de hobbistes. Mais ça pourrait être tout à fait autre chose. C n'a pas le monopole du bon développement ni de la performance.
6  0 
Avatar de Guesset
Membre émérite https://www.developpez.com
Le 03/05/2022 à 19:27
Bonjour,

Attention scoop ! Le meilleur langage est celui qui permet de résoudre un type de problème avec confort et efficacité. Selon le problème et le développeur, le meilleur langage changera allègrement. Ce qui me paraît important est que le développeur diversifie ses techniques afin d'être plus à l'aise dans ses choix. S'il a seulement un marteau, tous les problèmes seront des clous.

  • J'aime bien C pour son efficacité et son aptitude à faire des programmes optimisés et de grosses bêtises.
  • J'aime bien C++ pour la richesse de ses bibliothèques qui permettent de traiter en peu de lignes des problèmes complexes avec une syntaxe hélas de plus en plus lourde (par exemple les cast).
  • J'aime bien les assembleurs qui permettent paradoxalement d'utiliser des instructions de haut niveau de plus en plus implémentées dans les CPU. Elles correspondent chacune à plusieurs lignes de code en langage classique quasi impossible pour un compilateur de résumer en une seule instruction ASM. La plus simple est peut être la rotation binaire rot. Et puis ce qui est bien avec l'assembleur, c'est que, 3 mois plus tard, le code même bien documenté fait perdre beaucoup de cheveux.
  • J'aime bien les langages de scripts et autres interprétés pour la rapidité de développement assortie d'une belle occupation mémoire et de lenteurs.
  • J'aime bien Pascal presqu'aussi efficace que le C tout en étant heureusement (?) beaucoup plus verbeux.
  • J'ai bien aimé le FORTAN pour ses tests arithmétiques (un test, trois sorties) et ses labyrinthes de goto calculés.
  • J'ai regardé RUST qui apporte beaucoup de sécurité mais je n'ai pas envie de remettre des petites roues à mon vélo.
  • J'ai bien aimé LISP, Prolog, Forth pour me sentir intelligent alors même que les résultats n'étaient pas là.
  • Etc.


Tout ça pour dire qu'il y a des raisons pour aimer et haïr tous les langages. Que ces motifs sont en partie objectifs mais également subjectifs. Sur un même point objectif l'un mettra une pondération forte tandis que l'autre le négligera. C'est humain. Comme quelquefois l'exagération et la mauvaise fois.

Heureusement, à la fin, chacun sait qu'il a raison

Salutations
5  0 
Avatar de chrtophe
Responsable Systèmes https://www.developpez.com
Le 21/04/2022 à 20:10
Plus sexy, je sais pas, mais au moins on le trouve partout le C.

Et ça m'étonnerait qu'il y ait des projets d'envergure développé en Basic like même moderne.
5  1 
Avatar de destroyedlolo
Membre habitué https://www.developpez.com
Le 28/04/2022 à 20:23
Salut,

Citation Envoyé par Jacti Voir le message
du développement d'un compilateur de langage C avant même qu'il soit normalisé
Mon projet de fin d'étude début des années 90 portait sur un émulateur C (que j'ai mis d'ailleurs sur mon GIT ... 30 ans après, il se compile encore ) et comme je m'étais mis comme cible Gcc sur Amiga et sur NetBSD, le CC natif de VAX/Ultrix et le Borland sur wintruc, j'ai soufere encore du manque de standardisation. Heureusement, elle s'est imposé par la suite (et comme je ne développe plus pour wintel, ca a encore enlever d'autres problèmes )

Citation Envoyé par Jacti Voir le message
- Il n'est que faiblement typé donc pas du tout "secure" (conversions implicites)
il suffit d'activer les warning/erreurs qui vont bien des compilos modernes.

Citation Envoyé par Jacti Voir le message
- On peut arriver à faire n'importe quoi avec les pointeurs en C grâce au "cast"
Il suffit juste de savoir ce que l'on fait. C'est sur que si on fait des cast a tord et a travers juste pour supprimer des warning sans chercher ce qu'il y a derriere ... ca ne peut que mal se finir.

Citation Envoyé par Jacti Voir le message
- Le "switch/case" est une horreur car on est obligé d'utilisé break sans arrêt
??? Du coup, les do/done des shells doivent te donner des boutons, non ?
Je trouve au contraire que c'est très logique car ca indique que le bloc est terminé et permet de regrouper plusieurs conditions en un seul code lorsqu'on l'omet.

Citation Envoyé par Jacti Voir le message
- Ler #define est une horreur car il oblige à faire des interactions dans le compilateur entre la phase d'analyse lexicale et syntaxique
"Oblige", pourquoi "Oblige". Quel je sache, rien ne t'impose d'envoyer des directives aux pré-processeurs.
A nouveau, très utile pour faire de la compilation conditionnelle et avoir binaire nettoyé de tout code de debug pour la prod (quand on sait bien l'utilisé et qu'on fait de vrais tes d'intégrations).

Citation Envoyé par Jacti Voir le message
- L’équivalence pointeur/tableau qui a obligé Stroustrup a définir un « grigris » en C++ (la paire de crochet sur delete) pour indiquer qu’on veut détrire toutes les instances d’un tableau et pas seulement le premier élément.
Ben ouai, le C est un langage de plus bas niveau que la POO
Maintenant, si on reste en C, il suffit d'avoir une programmation propre et de passer soit par des pool mémoire, soit par des fonctions de gestions de la collection. C'est franchement basic.

Je développe depuis que j'étais ados, d'abord sur Amiga puis Unix et embarqué et je trouve beaucoup d'avantages par rapport aux autres langages que je trouve rapidement frustrant. Par exemple, les profs voulaient m'imposer le Pascal en DUT alors que je programmais depuis 3 ou 4 ans en C : quelles galères ! (et, a la fin, ils grognaient parce que je programmais en C pour tester mes algos puis ensuite je transformais en Pascal alors qu'ils voulaient le contraire )

Mais bon, les gouts et les couleurs.
5  1 
Avatar de chrtophe
Responsable Systèmes https://www.developpez.com
Le 29/04/2022 à 8:15
Merci pour ma culture générale pour le retour sur PL/1.

J'ai regardé la fiche Wikipedia de PL/1. Voila ce qu'il faut en retenir :

Son objectif était d'être universel et de pouvoir remplacer indifféremment les langages à destination scientifique, tels que FORTRAN et ALGOL, et le langage COBOL, plus adapté aux problèmes de comptabilité et de gestion
Ce langage avait beaucoup des caractéristiques de ce qui sera plus tard le C, et même déjà certaines du C++.
Le C est effectivement bas niveau. Si gérer une chaine comme un pointeur sur son 1er élément et/ou comme un tableau gène, que sa taille ne soit pas modifiable, dans ce cas, il vaut mieux utiliser string : en C++, si vous ne savez pas gérer/ne voulez pas gérer vous même la mémoire, utilisez C++

dans le compilateur, on est obligé de traiter tous les cas et que ça impose des aller/retours entre la phase d'analyse lexicale et la phase d'analyse syntaxique ce qui est contraire à une architecture "propre" d'un compilateur.
c'est l’histoire compilation simple-passe ou multi-passe. Faire du multi-passe permet d'avoir des compilateurs plus performants qui multiplient les optimisations.


Par ailleurs, concernant le switch/case, le s compilateurs C ne les transforment pas en if/else imbriqués mais construisent en interne un tableau avec des branchements directs sur les bon cas
un switch/case ou une liste de if..else, sont des sauts conditionnels. Au niveau du code intermédiaire généré par le compilateur, ça revient au même. Ca ne change pas le code généré mais plutôt la relecture du source C, c'est ce que je voulais dire.

ce qui est bien plus efficace que de dérouler, à l'exécution
Dérouler à l’exécution peut être plus avantageux en terme de performance. Exemple : Le déroulage de boucles fait partie des optimisations d'un compilateur moderne. Pour ceux qui ne savent pas, un déroulage de boucle signifie que le compilateur va supprimer la boucle et la transformer en suite d'instructions répétées. Le code sera plus long en terme d'instructions exécutées, mais plus rapide en terme d’exécution. Le compilateur va jouer sur les spécifications du CPU de destination.
4  0 
Avatar de Jacti
Membre habitué https://www.developpez.com
Le 01/05/2022 à 11:47
Citation Envoyé par chrtophe Voir le message


Dans ce cas pourquoi parle t'on de compilateurs simple passe et multipasse ?
Voir par exemple : https://www.geeksforgeeks.org/single...ass-compilers/
Il y a une note qui mentionne : Note: Single pass compiler almost never done, early Pascal compiler did this as an introduction.
En fait un VRAI compilateur en une passe ça n'existe pas.
Pour donner un ordre d'idées : un compilateur C (avec optimiseur), ça fait environ 80 à 100 Kls (Kilo lignes source) et un compilateur COBOL ça fait environ 250 Kls.
Quand je cherche sur Internet ce qui est écrit sur le sujet, je suis effaré. Il y a surtout des montagnes de bêtises écrite et surtout dans Wikipedia.
Un des seuls livres vraiment sérieux sur la construction des compilateurs est celui-ci : https://www.abebooks.fr/978032148681...0321486811/plp ()
Aho et Ullman ont écrit en 72 et 73 deux livres qui sont, encore aujourd'hui, les bibles sur le sujet (je pense que ces livres sont introuvables aujourd'hui) :
The Theory of Parsing, Translation, and Compiling, Vol. 1, Parsing. Prentice Hall, 1972. ISBN 0-13-914556-7
The Theory of Parsing, Translation, and Compiling, Vol. 2, Compiling. Prentice-Hall, 1973. ISBN 978-0-13-914564-3
4  0 
Avatar de WhiteCrow
Membre éprouvé https://www.developpez.com
Le 03/05/2022 à 16:12
Citation Envoyé par Jacti Voir le message

Citation Envoyé par WhiteCrow Voir le message
Alors comme le rappelle (à demi-mot) pvincent :

FORTRAN date de 57, fortran, la version moderne actuellement utilisée (enfin je crois …) est post 70, voitre 90.

Voir : https://fr.wikipedia.org/wiki/Fortran
où je lis :
Citation Envoyé par Wikipedia


  • 1957 : le compilateur FORTRAN est déployé courant avril sur tous les IBM 704, sur bande magnétique2, avec son manuel intitulé Preliminary Operator's Manual5. Fin 1957, un manuel plus complet, le Programmer's Primer6 rédigé par Grace E. Mitchell, est édité. FORTRAN est un succès et une révolution car il n'est plus nécessaire d'être un expert de l'ordinateur pour écrire et déboguer des programmes. Mary Tsingou, physicienne et mathématicienne au Los Alamos National Laboratory et qui travailla avec Fermi, Pasta et Ulam, dira ainsi : « Quand le Fortran est arrivé, c'était presque comme le paradis »7. L'instruction GO TO permet de sauter à une ligne numérotée par une étiquette. Le IF de cette première version est arithmétique : IF (A-B) 10, 20, 30 permet de sauter aux instructions d'étiquettes 10, 20 ou 30 selon que l'expression A-B est négative, nulle ou positive.
  • 1991 : Fortran 90 (ISO/IEC 1539:1991, puis ANSI X3.198-1992)19 est une version majeure ayant pour objectif de mettre Fortran au niveau des autres langages modernes. La norme apporte en particulier les modules, la récursivité, les arguments optionnels et nommés, la surcharge des opérateurs, une syntaxe pour le calcul sur les tableaux, l'allocation dynamique des tableaux grâce à l'attribut ALLOCATABLE, les types dérivés, l'attribut POINTERnote 3, l'instruction IMPLICIT NONE pour rendre obligatoire la déclaration des variables, les structures de contrôle SELECT CASE, les procédures SYSTEM_CLOCK et DATE_AND_TIME pour accéder à l'horloge du système, etc. Les restrictions concernant la mise en forme des programmes (colonnes 1 à 72) disparaissent : l'écriture se fait en format libre. Afin de rester compatible avec les nombreux codes industriels écrits en FORTRAN (Nastran, bibliothèques NAG et IMSL, etc.), Fortran 90 est conçu de telle façon que FORTRAN 77 en constitue un sous-ensemble.

Citation Envoyé par Jacti Voir le message


L'héritage te permet d'écrire du code élégant, très factorisé que ne permet pas la composition dans le cas que j'ai cité (salarié)
Très certainement, mais tu as tellement la tête dedans que l'idée que ce ne soit pas LA (dixit) seule manière de faire ne t'effleure même pas.

Citation Envoyé par Jacti Voir le message


Ce que tu présente est du code assembleur qui doit s'exécuter.
Dans mon exemple de C++ il n'y a aucun code généré, pas d'assembleur, rien. Tout le code écrit à l'aide des templates donne comme résultat
Code : Sélectionner tout
x = 24;
Je vais peut-être t'expliquer plus simplement.

Tu dis
Citation Envoyé par Jacti Voir le message
...
•exemple d'optimisation de calcul mathématique :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template<unsigned int N>
struct Fact {
    enum {
        value = N * Fact<N - 1>::value
    };
};
template<>
struct Fact<0> {
    enum {
        value = 1
    };
};
// x vaudra 24 avant même que le programme ne soit lancé; coût à l'exécution : 0
unsigned int x = Fact<4>::value;
•dans cet exemple, le calcul de factorielle est effectué à la compilation, conduisant à une exécution sans calcul

Je te montre un autre exemple où (dixit) «le calcul de factorielle est effectué à la compilation».

Dans l'exemple que j'ai donné, à la compilation, le code généré ne fait aucun appel à fact pour afficher factorielle de 24, ce 24 a été calculé lors de la compilation … ce qui conduit à (dixit) «une exécution sans calcul [de la factorielle]»
Pas besoin de metaprogrammation pour ça ; un compilateur évolué suffit,. C'est bien pour cela qu'il est de plus en plus avantageux d'aider le compilo à optimiser que d'optimiser soi-même.

Citation Envoyé par Jacti Voir le message

Je déteste Microsoft, Windows, etc. donc je ne sais même pas de quoi tu parles. Je n'ai pas d'œillères, l'objet c'est juste une réalité. Ce n'est pas de ma faute si les langages les plus utilisés à part le langage C sont objet.
Cite-moi les méthodes de conception les plus utilisées.
Tu emploies exactement les mots d'un évangéliste (pas au sens religieux du terme), militant si tu préfères Ton discours est fait pour que la vraie vérité éclate, etc.
C'est clair qu'en gros 60% des langages les plus utilisés sont «objet» dans le sens «proposent la possibilité native d'un développement objet», mais ils ne proposent pas que cela (fort heureusement). La plupart de ces langages proposent également d'autres paradigmes (procédural,fonctionnel, modulaire, …) et C++ en profite également. C++ n'est pas «La programmation objet».

Maintenant, mis à part C++ et Python, quels sont les langages qui proposent un héritage multiple ? quel sont les paradigmes proposés par les langages émergents ?
Parce qu'au fond, le fond de commerce de «la programmation objet» c'est quoi ?

Utiliser l'héritage de classes, l'encapsulation et avoir des instances sur lesquelles on appelle des méthodes ?
On peut très bien se débrouiller sans, tout en programmant «élégamment», on peut utiliser la composition d'objet (oui, le terme n'est pas réservé à la POO) structurés, on peut utiliser le polymorphisme (qui n'est pas une feature OO), on peut bénéficier de fonctions qui sont des objets à part entière, avoir de vrai modules qui élargissent la notion d'encapsulation d'objet, etc ... Et tu remarqueras que tout ce que je viens de citer a été rajouté par la suite à C++ ; pourquoi ? parce que cela manquait tout simplement.

Je ne déteste pas C++, ni autre chose d'ailleurs. Je ne suis clairement pas un professionnel de la conception de langage ou de quoi que ce soit d'autre au niveau théorique. Je n'ai qu'une simple opinion forgée après quelques années en développement informatique, et, àmha, C++ a atteint un pic. Quel sera le prochain changement majeur de paradigme ? je ne sais pas … le fonctionnel ? une OO raisonnée et raisonnable ? aucune idée. Mais ce que je constate, c'est que C++ a profité d'un engouement qui périclite. Il a surfé sur la vague C, puis cassé la gueule avec C with classes, puis est revenu en force avec C++ qui est un C with classes agrémenté d'une foulitude de notions non OO …
Bref.
Joyeux cinquantenaire au C, vie longue et prospère.
4  0 
Avatar de yahiko
Rédacteur/Modérateur https://www.developpez.com
Le 27/04/2022 à 7:56
Sans doute le langage qui a eu le plus d'influence dans l'industrie de l'informatique avec comme principale qualité sa simplicité et sa cohérence syntaxique.

Je noterais quand même qu'il n'a pas vraiment introduit de concepts d'avant-garde, si ce n'est mettre l'emphase sur la programmation structurée, ce qui certes à l'époque n'allait pas encore de soi.

Aussi, certains éléments dans le langage C trahissent le fait que les auteurs ne se sont pas résolus à aller jusqu'au bout de cette logique de programmation structurée, je pense au reliquat "goto" ou encore au peu élégant "switch / case / break" qui a été repris en l'état dans d'autres langages, hélas.

Quoiqu'il en soit, une longévité méritée, avec des cas d'usage toujours pertinents à l'heure actuelle comme l'embarqué ou la gestion du matériel.
Pour le reste, les langages qui lui ont succédé ont permis aux développeurs d'être nettement plus productifs grâce à l'apport du paradigme orienté objet qui a lui aussi été une révolution en favorisant l'encapsulation et la modularité. C'est possible en C, mais au prix d'une discipline et d'une verbosité contre-nature.
3  0