Pourquoi plusieurs langages de programmation populaires sont-ils influencés par C? [fermé]


23

Les 10 principaux langages de programmation, selon l' indice TIOBE, semblent être fortement influencés par C:

1. Java

Le langage dérive une grande partie de sa syntaxe de C et C ++ mais a un modèle d'objet plus simple et moins d'installations de bas niveau. - wikipedia.org

2. C

C est l'un des langages de programmation les plus utilisés de tous les temps et il existe très peu d'architectures informatiques pour lesquelles un compilateur C n'existe pas. - wikipedia.org

3. C #

Au cours du développement du .NET Framework, les bibliothèques de classes ont été initialement écrites à l'aide d'un système de compilateur de code managé appelé Simple Managed C (SMC). En janvier 1999, Anders Hejlsberg a formé une équipe pour construire un nouveau langage à l'époque appelé Cool, qui signifie "C-like Object Oriented Language". - wikipedia.org

4. C ++

Il a été développé par Bjarne Stroustrup à partir de 1979 aux Bell Labs comme une amélioration du langage C. - wikipedia.org

5. Objectif-C

Objective-C est un langage de programmation orienté objet réfléchissant qui ajoute une messagerie de style Smalltalk au langage de programmation C. - wikipedia.org

6. PHP

Il a réécrit ces scripts sous forme de fichiers binaires CGI (Common Gateway Interface) du langage de programmation C, en les étendant pour ajouter la possibilité de travailler avec des formulaires Web et de communiquer avec des bases de données et a appelé cette implémentation "Personal Home Page / Forms Interpreter" ou PHP / FI. - wikipedia.org

8. Python

Python a été conçu à la fin des années 1980 et sa mise en œuvre a été lancée en décembre 1989 par Guido van Rossum à CWI aux Pays-Bas en tant que successeur du langage de programmation ABC (lui-même inspiré de SETL) capable de gérer des exceptions et de s'interfacer avec le système d'exploitation Amoeba. - wikipedia.org

ABC (langage de programmation) Ses concepteurs affirment que les programmes ABC sont généralement environ un quart de la taille des programmes Pascal ou C équivalents, et plus lisibles. - wikipedia.org

9. Perl

Perl emprunte des fonctionnalités à d'autres langages de programmation, notamment C, le script shell (sh), AWK et sed. - wikipedia.org

10. JavaScript

JavaScript utilise une syntaxe influencée par celle de C. - wikipedia.org

Il semble que la plupart d'entre eux empruntent leur syntaxe à C et / ou sont fortement influencés de plusieurs autres manières, au moins à leurs débuts. Pourquoi?


15
Avoir une syntaxe de type c n'est pas la même chose qu'être basé sur c.
Odé le

15
De plus, TIOBE est un index indésirable.
DeadMG

3
Puis-je plutôt demander pourquoi les langages de programmation basés sur C sont plus populaires?
Manoj R

3
@YannisRizos Grand sauvetage de la question! C'est en fait une excellente question maintenant.
maple_shaft

16
Parce que C est un descendant d'ALGOL, et ALGOL est pour les langues impératives de portée bloc ce qu'Abraham est pour les chrétiens, les juifs et les musulmans.
Ingo

Réponses:


40

Avec l'essor d'UNIX dans les années 1970, son langage de programmation de systèmes standard C est rapidement devenu la lingua franca du monde de la programmation. Pendant un certain temps, C était pratiquement obligatoire pour chaque programmeur. En tant que tel, le fait que C ait influencé presque tous les langages de programmation qui l'ont suivi d'une manière ou d'une autre n'est pas surprenant, pour deux raisons:

  • Lors de la conception d'un nouveau langage, il est logique de baser sa syntaxe, lorsque cela est possible, sur un langage existant populaire qui peut être supposé de notoriété publique.
  • Une nouvelle langue est plus susceptible de réussir si la courbe d'apprentissage est peu profonde, et une syntaxe qui ressemble à une langue déjà connue est généralement plus facile à apprendre (à moins qu'elle ne se comporte radicalement différemment malgré les similitudes apparentes). Ainsi, les langages qui empruntent la syntaxe à C gagnent généralement en popularité plus rapidement que ceux qui ne le font pas.

Mais d'autres langues existaient, et elles existent toujours, certaines d'entre elles sont même antérieures au C - il y a la famille LISP (CL, Clojure et Scheme étant les dialectes modernes les plus populaires), la famille ML (avec plusieurs dialectes modernes), il y a toute une armée de Les dialectes BASIC (VB.NET et VBA sont des implémentations modernes), il y a Pascal et ses parents (Delphi étant le plus connu) et de nombreuses langues `` bizarres '' qui ont pris des influences de nombreuses autres langues et ont inventé quelques choses elles-mêmes; les exemples incluent Go, Python, Lua, Haskell (et son prédécesseur, Miranda), Prolog et Erlang. Bien qu'aucun de ces langages (à l'exception de Python) ne figure dans votre top 10, beaucoup d'entre eux ont une base d'utilisateurs stable et une communauté active; ils ne s'en vont certainement pas.

En outre, il convient de noter que la quantité d'influence C dans ces langages diffère énormément, allant des langages compatibles C ++ et Objective-C presque 100% C, jusqu'à Python (qui abandonne délibérément de nombreuses fonctionnalités de syntaxe de C). Et ce n'est que la syntaxe: en termes de sémantique, la plupart des langues de cette liste n'ont pas grand-chose en commun avec C. La grande majorité a une gestion de la mémoire intégrée au langage, et par conséquent, copie de la sémantique, passage d'arguments, etc. , sont très différents. JavaScript, par exemple, a de fortes influences sémantiques de Scheme, tandis que sa syntaxe a été conçue pour ressembler à Java (qui, à son tour, base sa syntaxe bits et pièces sur C, mais pas sa sémantique). D'autres différences (à l'exception de C ++ et d'Objective-C, qui sont pour la plupart rétrocompatibles avec C) incluent la gestion des erreurs, les règles de portée,#include), et le fait que beaucoup de ces langages sont «virtualisés», c'est-à-dire qu'ils s'exécutent sur un interpréteur, un compilateur JIT ou une machine virtuelle.

Python, en passant, a une certaine influence C, mais il n'est certainement pas "basé sur" C. La syntaxe et la sémantique diffèrent assez radicalement de C, et c'est par conception. Python emprunte uniquement des fonctionnalités à C où d'autres alternatives sont également "bonnes" (selon le "Zen of Python" - tapez import thisdans un interpréteur python).

Quant à l'avenir de la programmation; les prévisions varient. L'influence de C ne disparaît pas, mais les développements récents dans le matériel (machines multicœurs devenant monnaie courante, GPU puissants, le CPU cessant d'être le goulot d'étranglement typique des performances, connexions réseau rapides et fiables, etc.) appellent des approches radicalement différentes de la programmation en général. Quiconque a déjà écrit une application distribuée multithread dans un langage impératif peut dire que c'est incroyablement difficile, tandis que des langages comme Haskell ont des fonctionnalités qui suppriment la plupart des problèmes typiques et offrent une approche plus abstraite et plus structurée du traitement distribué, simultané et parallèle. (la pureté étant un concept important dans ce contexte). Les langages de programmation plus récents (par exemple C # ou D) incluent déjà de nombreuses fonctionnalités pour prendre en charge un tel idiome. Dans tout les cas,


Bonne réponse, mais "le CPU cesse d'être le goulot d'étranglement typique"? D'après mon expérience, les problèmes de performances abondent - CPU, IO, vous l'appelez. Sinon, les profileurs ne seraient pas nécessaires, même s'ils ne sont pas très efficaces.
Mike Dunlavey

6
@MikeDunlavey: Habituellement, les goulots d'étranglement que je rencontre sont causés par les E / S, la mise en réseau, les performances du cache du processeur, le débit du bus et la communication interprocessus (inefficace). À l'époque, le processeur était presque inévitablement le goulot d'étranglement; ce n'est tout simplement plus vrai.
tdammers

1

C'est un peu comme demander pourquoi l'anglais est la langue dominante aux États-Unis. Pourquoi pas espagnol ou français? Ils contrôlaient davantage le territoire américain que les colonies anglaises. Pourquoi pas le néerlandais? La première capitale américaine se trouvait dans une ancienne colonie néerlandaise. Je ne suis pas sûr qu'il puisse y avoir une "réponse" à cela.

Cependant, la chronologie "Historique des langages informatiques" ( http://www.levenez.com/lang/ ) fournit toutes les réponses possibles.


6
Parce que la Grande-Bretagne des années 1600-1880 était à peu près la principale puissance industrielle et financière du monde, suivie par les États-Unis de 1880 à nos jours (<- discutable). Il est devenu la langue du commerce international et est parlé couramment par plus de 2 milliards de personnes dans le monde. Ça et personne ne veut parler espagnol ou néerlandais :)
maple_shaft

6
@maple_shaft - "personne ne veut parler espagnol"?! ... savez-vous même dans combien de pays elle est parlée? en.wikipedia.org/wiki/Spanish_language
Tour

12
@ S.Lott: Vous voulez dire la partie où l'Empire britannique a été le plus grand empire à avoir jamais existé et occupait 25% de la surface mondiale? Ce genre de "pas puissant"?
DeadMG

3
@DeadMG: Je ne parle pas du monde. Je parle des États-Unis dans les années 1700, où les Français avaient les Britanniques cernés dans une petite zone le long de la côte. Je parle de la perte des engagements militaires britanniques dans ce théâtre uniquement. Les Français contrôlaient clairement la majeure partie de ce qui est devenu les États-Unis. Encore. Les États-Unis ont fini par parler anglais. Pas français. La même analyse s'applique à C. C'est une histoire complexe avec beaucoup de facteurs d'influence. Il n'y a pas de réponse insignifiante.
S.Lott

4
@ S.Lott Les Français n'ont pas gagné chaque rencontre. En regardant l'Amérique du Nord, ils ont remporté la majorité; mais la perte de 4 des 5 batailles majeures de NA au cours de 1559/60 a entraîné une défaite écrasante dans le théâtre. Les captures des forts Ticonderoga et Niagara, des plaines d'Abraham et de la bataille de Restigouche sont toutes des victoires britanniques. En coupant l'approvisionnement / le renforcement, ce dernier a rendu la victoire française à Sainte-Foy hors de propos.
Dan Neely

0

Si vous créez un nouveau langage de programmation, une syntaxe similaire à celle des langages existants populaires facilite l'apprentissage de vos nouveaux utilisateurs. Surtout si de nombreux concepts sont similaires entre les langues.

Je pense également que la syntaxe de style C est relativement facile à lire. Pour comparer avec Pascal, l'utilisation des symboles "{" et "}" pour les blocs de code est plus lisible que "begin" et "end", qui sont optiquement très similaires aux identifiants. Python est encore plus lisible, mais l'inclusion d'espaces dans la syntaxe ouvre un nouvel ensemble de problèmes avec l'édition. Autre exemple: Lisp et JavaScript partagent quelques idées, mais lorsque la même chose est écrite dans la syntaxe de style C, elle est moins obscure.

Je suis sûr que beaucoup de gens seraient en désaccord avec le deuxième paragraphe, parce que tout le monde a son propre langage préféré, mais je pense que la popularité de la syntaxe de style C est en partie une coïncidence historique, mais en partie cela montre également que les auteurs de C ont fait quelques bons les décisions.


-1

Les langages de programmation évoluent avec le temps tout comme les langages naturels, certains langages plus anciens influençant cette évolution de manière plus forte que d'autres, tandis que d'autres s'estompent dans l'obscurité et leur influence est plus difficile à retracer au niveau de la surface, c'est-à-dire la syntaxe.

L'influence de C provient de nombreuses sources - c'est un niveau bas, répandu, soutenu par les cercles Unix et Microsoft. C'est aussi la survie du problème le plus adapté - il est facile de voir que la syntaxe concise de type C avait plus d'attrait que la syntaxe verbeuse dérivée d'Algol de Pascal et d'autres concurrents de C dans les années 1970 et 1980. Il a donc été largement adopté par les langues qui l'ont suivi.

La croissance actuelle de l'importance de la programmation multithread et des langages fonctionnels y étant particulièrement bien adaptée, je dirais que nous verrons leur influence grandir à l'avenir. Exemple: Python, qui a même fait cette liste dans le post de questions.

Une belle chronologie de l'histoire de la langue à méditer


Vous avez tort. PASCAL et C sont tous deux des descendants d'ALGOL.
Ingo

Certes, mais Algol lui-même est un descendant de Fortran et a choisi certaines des constructions auxquelles je faisais référence (programme, fin, sous-programme par rapport aux crochets de c). Pourtant, ce que j'avais à l'esprit était en fait une syntaxe de type Algol. Édité.
scrwtp

La syntaxe concise de type C avait plus d'attrait que la syntaxe verbeuse dérivée d'Algol de Pascal et d'autres concurrents de C dans les années 70 et 80 +1 pour cela. commencent les programmeurs sont aussi des êtres humains finissent commencent ceux qui croient qu'il est commode de la carte des signes de ponctuation à des mots comme commencer à la fin de leur combat pour perdre des accolades fin de l' histoire
moucheron

Je ne vois aucune preuve que la syntaxe C est moins obscure, sauf dans le sens où la plupart des développeurs connaissent C ou une sorte de langage lié à C, et donc cela semble plus familier. AFAICT, C a conquis Pascal en raison de sa structure et du fait que les implémentations n'ont pas eu à rouler leur propre liaison, pas leur syntaxe.
David Thornley

@ David-D'après ce dont je me souviens, l'une des raisons pour lesquelles C a gagné sur les autres langages était en raison de la relative facilité d'accès à la mémoire en C (c'est-à-dire les pointeurs). Je sais qu'ils sont ratés maintenant, mais à l'époque où 1 Ko de RAM était beaucoup de mémoire, c'était une caractéristique très puissante du langage. Je sais que d'autres langages fournissent des fonctionnalités de type pointeur, mais aucune aussi facilement que C.
Dunk

-3

La plupart des langages que vous listez n'ont pratiquement rien à voir avec C, à part des similitudes syntaxiques non pertinentes. Les deux seuls dérivés C réels sont Objective-C et C ++.


Si nous ne considérons pas la syntaxe, alors les seules différences entre les langages sont la disponibilité de constructions de langage générales (boucles, conditionnelles, variables, abstractions de celles-ci comme les classes et fermetures, etc.) et qu'elles correspondent toutes au comportement de la machine code. Toutes les langues de bas niveau sont similaires les unes aux autres et toutes les langues de haut niveau sont extrêmement similaires les unes aux autres à ce stade.
maple_shaft

2
Vous ne devez pas considérer un langage comme ses fonctionnalités, mais comment il communique le comportement des applications. Votre code source est votre niveau de documentation le plus bas et on écrit du code source pour les personnes et NON pour les machines . Si nous écrivions du code strictement pour les machines, nous serions tous en train de coder en assembleur.
maple_shaft

1
@maple_shaft: C'est vrai! On m'a demandé dans une interview d'expliquer la différence entre le langage machine (assembleur) et le langage de programmation. Ma réponse a été: "Le langage machine est pour les machines, le langage de programmation est pour les programmeurs."
Treb

1
@maple_shaft: La syntaxe est sans importance quant à sa communication avec les gens . Si je remplaçais un mot anglais par une orthographe différente, l'anglais serait toujours la même langue. La forme syntaxique n'est pas pertinente, ce qui est communicatif, c'est la sémantique du langage.
DeadMG

3
@DeadMG: Mais la question concerne la syntaxe. Vous pouvez considérer que les similitudes syntaxiques ne sont pas pertinentes, mais la personne qui pose la question veut savoir pourquoi ces similitudes non pertinentes existent .
Nicol Bolas
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.