Pourquoi y a-t-il tant de langages de programmation?


130

Je parle assez bien le C / C ++ et je peux me familiariser avec les différents langages de script (awk / sed / perl). J'ai commencé à utiliser beaucoup plus python, car il combine certains aspects astucieux du C ++ avec les fonctionnalités de script de awk / sed / perl.

Mais pourquoi y a-t-il tant de langages de programmation différents? Je suppose que tous ces langages peuvent faire la même chose, alors pourquoi ne pas s'en tenir à un seul langage et l'utiliser pour programmer des ordinateurs? En particulier, y a-t-il une raison pour laquelle je devrais connaître un langage fonctionnel en tant que programmeur informatique?

Quelques lectures liées:


2
il existe également une différence entre OO et non-OO. De plus, certaines langues sont accompagnées de beaux packages: R, Maple, Matlab, Mathematica qui font souvent défaut dans d’autres langues.
Artem Kaznatcheev


4
Demandez-vous déjà aux programmeurs programmers.stackexchange.com/q/7551/45322
alain.janinm

2
Pour implémenter des algorithmes parallèles, la programmation fonctionnelle est préférable. En général, lorsque vous avez des objets mutables, il est préférable d'utiliser le paradigme OO, sinon (si vous voulez traiter des objets immuables ), il est préférable de le changer en modèle fonctionnel. Ce scénario existe largement dans le traitement parallèle. De plus, certains modèles d’OB excellents, tels que l’interface fluide et le chaînage de méthodes, fonctionnent comme un paradigme fonctionnel.

4
Pourquoi y a-t-il tant de voitures? Pourquoi y a-t-il tant d'avions? Et qu'en est-il des bateaux! Je veux dire vraiment! Vous descendez vers l'océan et il y a, comme, tous les types de choses dang! Quel est l' intérêt de toutes ces sortes de choses?!?!? C'est inefficace! C'est du gaspillage !! Et quel est le but de tous ces choix différents?!?!? Geez - sages les gens! Personne ne pourrait avoir besoin de rien sauf d’un Yugo, d’un F-150 et d’un paquebot! Oh, oui, les avions - les MD-80 fonctionneront très bien pour à peu près tout. Là. Maintenant que que ça tout réglé ... :-)
Bob Jarvis

Réponses:


116

Les langages de programmation évoluent et s’améliorent avec le temps (innovation).

Les gens prennent des idées de différentes langues et les combinent dans de nouvelles langues. Certaines fonctionnalités ont été améliorées (mécanismes d'héritage, systèmes de types), d'autres ajoutées (nettoyage de la mémoire, gestion des exceptions), d'autres supprimées ( gotoinstructions, manipulations de pointeur de bas niveau).

Les programmeurs commencent à utiliser un langage d'une manière particulière qui n'est prise en charge par aucune construction de langage. Les concepteurs de langage identifient ces modèles d'utilisation et introduisent de nouvelles constructions d'abstractions / langage pour prendre en charge de tels modèles d'utilisation. Il n'y avait aucune procédure en langage assembleur. Pas de classes en C. Pas de gestion des exceptions en (début) C ++. Pas de moyen sûr de charger de nouveaux modules dans les premières langues (facile en Java). Pas de threads intégrés (easy-peasy en Java).

Les chercheurs réfléchissent à des moyens alternatifs d’exprimer des calculs. Cela a conduit Lisp et la branche de langue fonctionnelle de l’arbre de langue, Prolog et la branche de programmation logique, Erlang et d’autres modèles de programmation basés sur des acteurs, entre autres.

Au fil du temps, les concepteurs / chercheurs en langage en viennent à mieux comprendre l'ensemble de ces concepts et leur interaction, et à concevoir des langages comprenant de nombreux concepts courants, tous conçus pour fonctionner de manière transparente. Cela aboutit à de merveilleux langages tels que Scala, qui contient des objets et des classes (exprimés par des traits au lieu d'un héritage unique ou multiple), des fonctionnalités de programmation fonctionnelles, des types de données algébriques bien intégrés au système de classes et à la correspondance de modèles, et une concurrence basée sur l'acteur.

Les chercheurs qui croient aux systèmes de types statiques s’efforcent d’améliorer leur expressivité, en autorisant des classes génériques typées en Java (et toutes les choses merveilleuses en Haskell), de sorte qu’un programmeur reçoive davantage de garanties avant d’exécuter un programme inattendu. se tromper. Les systèmes de types statiques imposent souvent un lourd fardeau au programmeur (saisie des types), aussi la recherche a-t-elle été prise en compte pour alléger ce fardeau. Des langages tels que Haskell et ML permettent au programmeur d’omettre toutes les annotations de type (à moins qu’ils ne fassent quelque chose de délicat). Scala permet au programmeur d'omettre les types dans le corps des méthodes, afin de simplifier le travail du programmeur. Le compilateur déduit tous les types manquants et informe le programmeur des erreurs possibles.

Enfin, certaines langues sont conçues pour prendre en charge des domaines particuliers. Les exemples incluent SQL, R, Makefiles, le langage de saisie Graphviz, Mathmatica, LaTeX. Intégrer (directement) les fonctionnalités de ces langages dans des langages d'usage général serait assez fastidieux. Ces langages sont basés sur des abstractions spécifiques à leur domaine particulier.

Sans évolution dans la conception des langages de programmation, nous utiliserions toujours le langage assembleur ou C ++.

Quant à savoir un langage de programmation fonctionnelle : les langages fonctionnels vous permettent d'exprimer différemment les calculs, souvent de façon plus concise que d' utiliser d' autres langages de programmation. Réfléchissez à la différence entre C ++ et Python et multipliez-la par 4. Plus sérieusement, comme déjà mentionné dans une autre réponse, la programmation fonctionnelle vous donne une manière différente de penser les problèmes. Ceci s’applique à tous les autres paradigmes; certains sont mieux adaptés à certains problèmes, et d'autres non. C'est pourquoi les langages multi-paradigmes deviennent de plus en plus populaires: vous pouvez utiliser des constructions d'un paradigme différent si vous en avez besoin, sans changer de langue, et, plus difficile, vous pouvez mélanger des paradigmes dans un seul logiciel.


1
Entièrement d'accord. Je suis intéressé à savoir où les langues multi-paradigmes (par exemple, Scala) seront dans quelques années. S'ils permettent une intégration DSL facile, nous pourrions assister à une diminution progressive du nombre de langues.
Raphaël

2
Réponse très détaillée! Nous pourrions reconnaître que la plupart des langages de programmation peuvent être équivalents à Turing, mais cela ne signifie pas que l'abstraction qu'ils prennent en charge convient à tous les problèmes.
CyberFonic

Mettre le montage et le C ++ dans une même boîte me fait mal au cœur. C ++ a beaucoup évolué !! Spécialement depuis C ++ 11 et avant.
Peregring-lk

66

tldr: Il n’existe pas de solution miracle.

J'espère qu'ils ne me poursuivront pas en justice, mais voici une photo d'une des présentations de Stanford.

entrez la description de l'image ici

Lorsque vous décidez de choisir une langue, vous ne pouvez choisir que 2 de ces 3 fonctionnalités .

Et c’est la raison pour laquelle les gens sont tristes et veulent inventer un super-langage qui les couvrira tous les trois.

En fait, la liste des exigences est énorme (certaines d’entre elles sont visibles dans d’autres réponses), mais elles ne font qu’ajouter des détails aux fonctionnalités essentielles. De plus, il existe des raisons historiques et politiques de préférer une langue à une autre.

La combinaison de tels facteurs produit un nouveau langage.

( Et j'ai entendu dire que chaque bon programmeur devrait créer son propre nouveau langage;) )


11
Au fil du temps, le triangle se rétrécit, dans le sens où les angles se rapprochent ..... J'espère / rêve.
Dave Clarke

1
Les performances et la généralité peuvent être comparées plus facilement, mais j'ajouterai que l' expérience d'une langue vous donne plus de productivité qu'une langue en elle-même. Il n'est pas juste de comparer uniquement la "productivité des langues", car vous avez besoin de supposer savoir et savoir-faire. tous, une hypothèse très improbable.
Hernan_eche

C'est une déclaration intéressante qui me rappelle en quelque sorte le théorème de la PAC. Est-ce juste une argumentation informelle, ou peut-on prouver le triangle?
evnu

1
@evnu, voici l'argument quasi uniforme d'une partie: supposer que la généralité signifie que des programmes valides de longueur quelconque n dans la langue L couvrent un espace de problèmes plus large, chaque sous-espace de problèmes n'est couvert que par quelques fractions de la longueur n programmes. Si les programmes de longueur n situés en dehors de votre sous-espace particulier étaient plutôt à l'intérieur de votre sous-espace, vous auriez plus de chances de trouver un programme plus court qui résoudrait votre problème (pour que vous soyez probablement plus productif), mais le langage serait moins généraliste. --il résoudrait moins bien les problèmes dans d'autres sous-espaces (par exemple avec des programmes plus longs).
Jonas Kölker

Ceci est un bon argument: vous avez besoin d'au moins deux langages de programmation, ainsi que d'un grand nombre de langages spécifiques à un domaine, couvrant ainsi les trois côtés du triangle. Nous avons beaucoup, beaucoup, beaucoup plus que cela. (Et je mettrais c au sommet du triangle, mais c'est un petit reproche.)
Peter Shor

25

Le monde regorge de choses qui présentent de nombreuses variantes: traitement de texte, voitures, conceptions résidentielles, boissons, bonbons, stylos, pelles, etc. Nous pouvons en résumer autant de raisons que quelques principes:

  • Quelqu'un pense pouvoir améliorer les produits existants
  • Une conception différente est nécessaire pour des raisons locales (pensez: maisons sur pilotis ou maisons sur dalles de béton)
  • Une nouvelle catégorie de produit répond à un besoin là où il n'en existait pas auparavant

Rendez-vous dans n’importe quel magasin de fournitures de bureau et examinez la section «instruments d’écriture»: il existe des centaines de variétés de stylos. Ils font tous à peu près la même chose: distribuer de l’encre sur une surface d’écriture. Mais chaque stylo que vous voyez en vente est présent pour l'une des trois raisons ci-dessus.

  • Les stylos-plumes à cartouche sont une amélioration des stylos-plumes trempés, qui sont eux-mêmes une amélioration des piquants de plumes.
  • La NASA avait besoin d'un stylo capable d'écrire en l'absence de gravité. Le stylo roller pressurisé a donc été inventé.
  • Le tout premier stylo lui-même pourrait bien être un bâton pointu trempé dans du goudron ou du sang; Auparavant, les gens raclaient des roches ou enduisaient des pigments sur les murs avec de la fourrure. (Juste une supposition.)

L'évolution des stylos se poursuivra car aucun produit ne répond aux besoins de chaque utilisateur. Certains stylos sont bon marché et jetables, d'autres sont chers et construits avec des matériaux de haute qualité. certains utilisent des gels, certains utilisent de l'encre, d'autres des pigments; certains ont des casquettes détournées, d'autres pas du tout; fûts larges, fûts étroits, fûts ronds, fûts carrés; court long; rouge, blanc, noir, bleu. Etc.

Mais assez de stylos.

Notre myriade de langages de programmation actuels remonte aux tout premiers: les codes de la machine numérique pour les premiers ordinateurs des années 1940. Primitif, difficile à utiliser et laborieux pour entrer dans l'ordinateur, mais ils ont fait le travail. Peu de temps après, les programmeurs attribuaient aux codes de la machine des mots mnémoniques (tels que ADD, CALL, LOAD), donnant ainsi naissance à la classe de langages appelée "langages d'assemblage".

Différentes architectures de processeurs nécessitaient différents codes mnémoniques, en fonction des caractéristiques spécifiques des machines sous-jacentes. Prendre en compte ces différences impliquait d'inventer différents langages d'assemblage.

(Peut-être que maintenant vous pouvez voir où cela va ...)

Les programmeurs ont examiné leurs programmes en langage assembleur et leurs schémas: les mêmes séquences d'instructions seraient utilisées pour former des boucles, des conditions, des affectations de variables, des appels de fonction, etc. Ainsi, les langages de programmation procéduraux sont nés. Ces langages encapsulaient des groupes d'instructions sous des termes génériques tels que "if", "while", "let", etc.

Les langages fonctionnels sont issus d'une analyse mathématique de la programmation informatique - une toute nouvelle façon de considérer le calcul. Pas mieux, pas pire, juste différent.

Et puis, il y a orienté objet, typé statiquement, dynamiquement, liaison tardive, liaison anticipée, utilisation réduite de la mémoire, utilisation intensive de la mémoire, parallélisabilité, langages pour des utilisations spécifiques, et ainsi de suite.

En fin de compte, nous avons différents langages de programmation parce que nous voulons différents langages de programmation. Chaque concepteur de langage a ses propres idées sur l'apparence et le fonctionnement de son langage "de rêve". La diversité est une bonne chose.


Je ne vois pas de raison convaincante donnée ici pour expliquer pourquoi nous devrions avoir plusieurs langues en plus de ce que les gens veulent pour quelque raison que ce soit.
Raphaël

C'est ça exactement. Les programmeurs sont par nature des résolveurs de problèmes. Pour résoudre des problèmes, ils ont besoin d'outils qui prennent souvent la forme de langages de programmation. Si les outils ne peuvent pas les aider à résoudre leur problème comme ils le souhaitent, ils inventent de nouveaux outils. Pensez-y de cette façon: comme les outils sont des logiciels et que de nouveaux logiciels sont écrits pour résoudre de nouveaux problèmes, les outils eux-mêmes peuvent être des problèmes à résoudre. Ces problèmes sont résolus en fabriquant de nouveaux outils.
Barry Brown

Juste un nit: la branche fonctionnelle des langages est l’un des réflexes des mathématiciens sur la façon d’exprimer ce que nous appelons aujourd’hui "informatique", une idée qui a commencé à être considérée environ 50 ans avant les premiers ordinateurs. Ce n'est pas pour rien que LISP (sous une forme ou une autre) est la deuxième langue la plus ancienne, le premier étant le Fortran.
vonbrand

20

Les langages de programmation fonctionnels sont généralement basés sur le modèle de calcul différent (mais équivalent en puissance): lambda-calcul . Il existe certains langages non typés (typés Python) tels que LISP, Scheme (utilisé dans un livre / cours largement reconnaissable de Structure et interprétation de programmes informatiques ) et des langages statiques tels que Haskell, ML, F #.

Le SICP est ce qui m'a amené à la programmation fonctionnelle, mais d'autres personnes recommandent ce document de John Hughes et cet entretien avec lui.

La programmation fonctionnelle est maintenant poussée par Microsoft, par exemple, qui a inclus F # (son langage fonctionnel pour .NET) dans VS2010 et 11; ils emploient également des développeurs Haskell dans MSR, IIRC.

Notez qu'il existe également des langages de programmation fonctionnels autres que le lambda-calcul, tels que Refal , basé sur la recherche de motifs et la réécriture.

Comme le niveau d'abstraction dans les langages fonctionnels est différent, votre attitude face à la résolution de problèmes change lorsque vous utilisez des techniques de programmation fonctionnelle. Certains disent que cela peut faire de vous un meilleur programmeur en général.


1
Les langages de programmation logique, tels que Prolog, sont une autre classe intéressante de langages. Je n'ai eu qu'une expérience très limitée de DataLog, alors quelqu'un d'autre pourrait peut-être écrire une réponse à ce sujet?
Daniil

2
Je conviens que nous avons besoin d’un langage de programmation pour chaque paradigme de programmation: impératif, OO, déclaratif, fonctionnel, etc. Mais cela n’explique pas pourquoi nous avons tant de langages OO, disons.
Dai

@ Dai, eh bien, est-ce que nous le faisons vraiment? Le fondement théorique n'est pas la seule caractéristique d'une langue. Par exemple, on peut dire qu'une caractéristique clé de Java ou de C # est (comparée à C ++) la machine virtuelle, ce qui rend Java très différent.
Daniil

Mais alors, si C # et Java utilisent tous deux le concept de machine virtuelle, pourquoi n'utilisons-nous pas une syntaxe identique pour les deux langages? Je pense que chaque designer a ses idées fortes sur la façon dont sa langue doit ressembler et a tendance à créer son propre standard.
Dai

@ Dai, après tout, il existe de nombreuses différences mineures entre C # et Java. De plus, je pense qu'il y avait eu un différend juridique au sujet de la machine virtuelle Java pour Windows ou quelque chose du genre.
Daniil

19

En particulier, y a-t-il une raison pour laquelle je devrais connaître un langage fonctionnel en tant que programmeur informatique?

Oui. Parce que haskell a changé ma façon de penser. Cela pourrait changer votre façon de penser aussi.

Histoire: Je pensais pouvoir apprendre n'importe quel langage de programmation en une journée. Un jour j'ai commencé Haskell. J'ai terminé tout ce qui est arrivé avant les monades en une demi-journée. Maintenant, cela fait un an depuis ce jour et je suis toujours désespérément coincé à Monads.

Lis:

  1. Langues et wiki de pensée

  2. La notation comme outil de réflexion par Kenneth E. Iversion, conférence du prix Turing

Mais pourquoi y a-t-il tant de langages de programmation différents?

La notation est un outil de réflexion. Nous avons besoin de différentes notations sur mesure pour pouvoir gérer confortablement des pensées différentes. Nous créons donc de nouvelles langues.

Aussi, lisez . ;-)


5
Recourir est divin!
Pratik Deoghare

4
itérer est humain?
Suresh

1
Je ne sais pas si c'était une bonne publicité pour Haskell. ;)
Barry Brown

@Pratik Deoghare. Apprendre Haskell en une journée n'était probablement pas une bonne idée. Je dirais, lisez un bon livre de texte sur la programmation fonctionnelle, tel que Bird et Wadler, et prenez votre temps pour le faire. Alors les monades pourraient ne pas être si difficiles.
Uday Reddy

"J'ai terminé tout ce qui est arrivé avant les monades en une demi-journée." Vraiment? Vous avez appris les classes, les foncteurs, les tables rondes, les genres, etc. en une demi-journée? C'est impossible. LYAH a des monades au chapitre 12 sur 14. RWH n'a pas de monades jusqu'au chapitre 6, et elles sont introduites très progressivement - la définition complète se trouve au chapitre 14.
sdcvvc

13

Il était difficile de trouver un programmeur qui, à un moment donné, ne soit pas devenu frustré par les contraintes du langage qu’il utilisait et ait décidé de se gratter. Ainsi naît une nouvelle langue - ou dialecte d’une langue existante.

Abadi et Cardelli dans "Une théorie des objets" développent toute une famille de langages de programmation à partir de bases orientées objet. Ils prouvent que la programmation fonctionnelle est un cas particulier d’OO mais pas l’inverse.

Inventer quelque chose de nouveau est amusant, c'est pourquoi les gens sont plus susceptibles de créer une autre langue que de contribuer à améliorer une langue existante. Bien sûr, il y a des gardiens de langues qui n'apprécient pas les changements de vision. Le meilleur exemple est le gouffre entre les partisans de Common Lisp et de Scheme.


3
Une théorie des objets ne présente pas toute une famille de langages de programmation utilisables. Il présente une base pour les langages de programmation orientés objet, et un étrange, étant donné qu'il n'est pas basé sur des classes. Je ne vois pas le lien entre "Une théorie des objets" et la programmation fonctionnelle. Les calculs d'objet n'ont aucune notion de paresse, par exemple. Il existe également des recherches sur l’encodage de concepts d’OB en termes de fonctions et d’enregistrements, par exemple l’ouvrage de Pierce à la fin des années 90.
Dave Clarke


11

Pourquoi y a-t-il tant de pays dans le monde? Cela ne serait-il pas plus facile si nous n'avions que 5 ou 6 superpuissances, voire un seul royaume universel de la Terre? Il est facile de dire pourquoi cela ne serait pas mieux - pour commencer, la concurrence de différents pays peut conduire à des progrès, et du point de vue de la démocratie, des droits de l'homme, etc., de nombreux pays peuvent être meilleurs qu'un - - mais cela n'explique pas pourquoi nous avons beaucoup de pays. Cela explique seulement pourquoi beaucoup de pays seraient meilleurs .

De même, vous pouvez demander pourquoi tant de langues humaines différentes? Polonais, arabe, mandarin ... Ne serait-il pas plus facile s'il n'y avait qu'une seule langue? Vous pouvez argumenter d'une manière ou d'une autre, mais ce sont là les raisons pour lesquelles il serait préférable que la vie soit dans un sens ou dans l'autre. Cela n'expliquerait pas les causes de tant de langues humaines différentes.

Le problème, c’est qu’il ya beaucoup de monde sur la planète, et nous faisons tous notre travail, nous avons tous nos opinions, nous voulons tous être responsables et avoir notre propre pays ou langage de programmation, et nous pensons souvent que nous savons mieux que les autres, ou du moins, ne prenez pas la peine de comprendre ce que les autres ont à offrir.

Lisez cet article de blog très instructif, Pourquoi autant de frameworks Web Python? Apparemment, il existe environ 50 frameworks Web en Python. C'est juste ridicule. il n'y a absolument aucune raison rationnelle raisonnable pour cela. Mais l'auteur de l'article répond: il y a tellement de frameworks Web Python parce qu'il est si facile d'en créer un . Vous n'avez pas besoin d'une raison rationnelle pour avoir plus de frameworks web python ou plus de langages de programmation. Les gens vont en créer de nouveaux parce qu'ils ne savent pas ce qui est déjà disponible, ou parce qu'ils espèrent gagner de l'argent, ou simplement parce que créer de nouvelles choses est amusant!

Permettez-moi de décrire un exemple personnel. Il y a environ 10 ans, j'écrivais du code C ++ pour une société finlandaise. Vous savez, en Finlande, ils disposent de ces énormes camions qui voyagent sur de longues distances et transportent beaucoup de marchandises d'un endroit à l'autre. Je suis sûr qu’il existe également de tels camions en Amérique. Donc, un problème typique est de s’assurer que tous les 24 pneus vont bien. Bien sûr, il existe une technologie éprouvée: la pression et la température peuvent être surveillées, et des changements radicaux indiqueraient que quelque chose s'est mal passé. Bien sûr, toute cette technologie est exclusive, brevetée, avec toutes les implications. (N'oubliez pas que les brevets sont supposés promouvoir l'innovation!) Cette entreprise finlandaise a donc voulu détecter l'état des pneus par ... bon son. L'idée était d'installer des microphones pour écouter le son provenant de tous les pneus et de faire une sorte de traitement magique du signal sur ces sons afin de voir si l'un des pneus avait un problème quelconque, et je faisais un prototype. de cette folie. (Ils avaient même un laboratoire dédié pour enregistrer des échantillons de sons; une fois, ils m'ont envoyé un enregistrement vidéo impressionnant d'une occasion particulière où ils ont réussi à faire exploser un échantillon de pneu après l'avoir soumis à une pression de 5 ou 10 tonnes et l'avoir chauffé à une température ridicule. .) Clairement, encore une fois, il n’y avait pas de raison rationnelle particulière à ce développement, sauf que c’était amusant et que certaines personnes voulaient gagner de l’argent. Alors, comprenez aussi qu’il ya tellement de raisons pour lesquelles on commencerait à développer un nouveau langage de programmation. Il n'est ni nécessaire ni même possible de les apprendre tous. (Ils avaient même un laboratoire dédié pour enregistrer des échantillons de sons; une fois, ils m'ont envoyé un enregistrement vidéo impressionnant d'une occasion particulière où ils ont réussi à faire exploser un échantillon de pneu après l'avoir soumis à une pression de 5 ou 10 tonnes et l'avoir chauffé à une température ridicule. .) Clairement, encore une fois, il n’y avait pas de raison rationnelle particulière à ce développement, sauf que c’était amusant et que certaines personnes voulaient gagner de l’argent. Alors, comprenez aussi qu’il ya tellement de raisons pour lesquelles on commencerait à développer un nouveau langage de programmation. Il n'est ni nécessaire ni même possible de les apprendre tous. (Ils avaient même un laboratoire dédié pour enregistrer des échantillons de sons; une fois, ils m'ont envoyé un enregistrement vidéo impressionnant d'une occasion particulière où ils ont réussi à faire exploser un échantillon de pneu après l'avoir soumis à une pression de 5 ou 10 tonnes et l'avoir chauffé à une température ridicule. .) Clairement, encore une fois, il n’y avait pas de raison rationnelle particulière à ce développement, sauf que c’était amusant et que certaines personnes voulaient gagner de l’argent. Alors, comprenez aussi qu’il ya tellement de raisons pour lesquelles on commencerait à développer un nouveau langage de programmation. Il n'est ni nécessaire ni même possible de les apprendre tous. une fois qu’ils m’ont envoyé un impressionnant enregistrement vidéo d’une occasion particulière lorsqu’ils ont réussi à faire exploser un échantillon de pneu après l’avoir soumis à une pression de 5 ou 10 tonnes et à le faire chauffer à une température ridicule.) raison de ce développement, sauf que c’était amusant et que certaines personnes voulaient gagner de l’argent. Alors, comprenez aussi qu’il ya tellement de raisons pour lesquelles on commencerait à développer un nouveau langage de programmation. Il n'est ni nécessaire ni même possible de les apprendre tous. une fois qu’ils m’ont envoyé un impressionnant enregistrement vidéo d’une occasion particulière lorsqu’ils ont réussi à faire exploser un échantillon de pneu après l’avoir soumis à une pression de 5 ou 10 tonnes et à le faire chauffer à une température ridicule.) raison de ce développement, sauf que c’était amusant et que certaines personnes voulaient gagner de l’argent. Alors, comprenez aussi qu’il ya tellement de raisons pour lesquelles on commencerait à développer un nouveau langage de programmation. Il n'est ni nécessaire ni même possible de les apprendre tous.

Bien sûr, tout cela ne s'applique que si vous croyez en l'évolution. Si vous croyez en une forme de conception intelligente, que Dieu a également créé tous les langages de programmation, vous devrez alors trouver un but derrière cette multitude. Peut-être que Dieu voulait promouvoir la concurrence entre différents langages de programmation afin que l'art du développement de logiciels atteigne son état le plus élevé possible.

En conclusion, il y a beaucoup de gens, beaucoup de pays, beaucoup de langages de programmation. C'est juste la nature de la vie! Soyons reconnaissants pour cela: cela signifie simplement que le domaine de la programmation / informatique est très vivant et florissant.


réponse très parfaite, je ne sais pas pourquoi cela n'a pas été accepté!
Am_I_Helpful

8

Pourquoi existe-t-il tant de langages de programmation différents?

Parce qu'il y a des choix à faire:

  • Mode de spécification: impératif vs fonctionnel
  • Dactylographie: typée statiquement ou dynamiquement
  • Ordre d'évaluation: appel par valeur ou appel par nom
  • Modularité: basée sur la classe ou sur le type de données abstrait
  • Modèle d'exécution: séquentiel vs simultané

Heureusement, les deux dernières sont des dichotomies inessentielles, c'est-à-dire que l'on pourrait regrouper les deux choix dans un seul langage de programmation. Mais les trois premières dichotomies donnent lieu à 8 combinaisons. Ainsi, même dans un monde idéal, il y aurait au moins 8 langages de programmation. Lorsque vous explorez en profondeur, il existe des choix de conception plus nuancés au sein de paradigmes particuliers. Par exemple, si on décide de faire un langage typé statiquement basé sur la classe, il existe différentes façons de concevoir le système de types. Il n'y a pas encore de manière canonique de le faire. Si l'on décide de faire un langage de programmation simultané, il existe différentes manières de représenter la concurrence: sémaphores, régions critiques conditionnelles, moniteurs, transmission de messages (synchrone ou asynchrone). Dans la transmission de messages synchrone,

Une partie de nos recherches en théorie du langage de programmation est consacrée à la résolution de ces dichotomies. Par exemple, j'ai travaillé sur la résolution de la dichotomie entre la programmation impérative et fonctionnelle dans un document intitulé " Assignments for language applicative " et notre méthode a maintenant été adoptée par Haskell, ce qui en fait un langage à la fois fonctionnel et impératif. Cela ne signifie pas que la dichotomie est complètement résolue. Un programmeur Haskell est toujours confronté au choix de résoudre son problème de manière fonctionnelle ou impérative. Luca Cardelli a travaillé à la résolution de la dichotomie statique et dynamique. Paul Levy a travaillé à la résolution de la dichotomie appel par valeur et appel par nom . Tous ces résultats n'ont pas encore été mis en œuvre dans des langages de programmation réels.


Si toutes ces langues peuvent faire la même chose, pourquoi ne pas s'en tenir à une langue et l'utiliser pour programmer des ordinateurs?

Parce que pour un programmeur dans le monde réel, il ne suffit pas de faire quelque chose. Il importe également de savoir comment cela se fait. Lorsque cela est fait correctement, le domaine du problème est représenté fidèlement dans le programme, la modularité du problème est conservée et les programmes deviennent faciles à comprendre, à modifier et à maintenir. Tous ces facteurs ont une incidence sur les coûts de développement et de maintenance du programme. Ils affectent également la fiabilité et la sécurité du logiciel.

Par exemple, beaucoup de gens utilisent un programme appelé " Quicken " pour les comptes financiers. Le programme original a été développé dans une version interne de Visual Basic et il était plutôt bon. Cependant, il a été difficile de l'étendre et de le maintenir. Au fil des années, alors que l'entreprise tentait de l'étendre à de nouvelles fonctionnalités, le programme devenait de plus en plus complexe avec des millions de clients insatisfaits partout. Ils bénéficieront probablement d’une nouvelle ingénierie du logiciel dans un langage de programmation orienté objet fortement typé.


En particulier, y a-t-il une raison pour laquelle je devrais connaître un langage fonctionnel en tant que programmeur informatique?

Historiquement, la "programmation fonctionnelle" a été inventée par Godel, Kleene et Church selon la pratique mathématique standard, et la "programmation impérative" par Turing pour définir la notion de calcul mécanique. Avant Turing, rien n'indique que les mathématiques aient jamais analysé des idées de programmation impératives. (Bien que tous les algorithmes mathématiques traditionnels aient été exprimés dans un "style impératif", leur contenu essentiel était toujours fonctionnel.) La programmation impérative est donc très nouvelle pour la civilisation humaine et ses mathématiques ne sont pas encore bien comprises. La raison numéro un pour laquelle tout le monde devrait connaître une programmation fonctionnelle est de comprendre comment la programmation peut être mathématique. (Je ne reconnais pas que la programmation impérative n’est pas mathématique, c'est ce que les programmeurs fonctionnels voudraient vous faire croire. Mais je conviens qu'avec l'état actuel des connaissances, nous ne savons pas encore programmer mathématiquement de manière impérative. Beaucoup d’entre nous travaillent précisément sur ce problème.)


1

Vous pourriez regarder comme une évolution.

Au début, les ordinateurs étaient programmés uniquement avec des codes binaires. Après cela, les mnémoniques et les langages d'assemblage ont été introduits, dépendant principalement du processeur utilisé.

Après l’introduction de ces langages de niveau supérieur (3e niveau) (Pascal, C, ADA, Cobol), certains très génériques (comme le C), d’autres plus adaptés au traitement des données (Cobol), d’autres aux calculs (Fortran).

Après cela, les langages de 4ème niveau sont apparus, comme les langages logiques (comme Prolog). Les langues les plus génériques sont les successeurs des langues de troisième niveau; certains d'entre eux sont Java, C #.

Nous voyons également des langues spécifiques à Internet / Web, comme ASP.NET, PHP.

Et des langues pour un domaine spécifique (DSL), qui fonctionnent généralement avec un langage générique.

Ensuite, il existe des langues pour que les enfants puissent apprendre la programmation, comme LOGO.

Également des langages pour écrire rapidement du code, comme Python, Ruby, etc., des langages pour manipuler XML (XSLT).

Et j'ai probablement oublié beaucoup de langues et même des catégories de langues.


1
Votre chronologie est confuse. Prolog date de 1972, ce qui est plus jeune qu'Ada (1983). Je ne sais pas ce que vous entendez par "successeurs de langues de troisième niveau"; peu de langues ne sont pas des descendants de Fortran, y compris C et Pascal (qui ont engendré Ada).
prosfilaes

1
@prosfilaes, façon confuse. Le FORTRAN était la première langue encore utilisée, puis venaient le LISP, puis le COBOL. Algol a été défini pour la publication d'algorithmes et non pour l'utilisation de machines (mais des compilateurs en sont venus à être de toute façon), avec ofshots Pascal et plus tard, C. PL / 1 était un étrange mélange de FORTRAN et de COBOL avec des structures de contrôle Algolish.
vonbrand

1

d'autres réponses sont bonnes, ajouteront quelques nouveaux angles. comme DC écrit les langues évoluent comme de vraies langues humaines! et ils empruntent à nouveau leurs concepts et leur syntaxe comme de vrais langages humains. autrement dit, il existe également une étude assez réelle de l' étymologie des langages informatiques.

Cela signifie également qu'il y a eu une longue histoire et une chronologie qui a principalement commencé vers les années 1930 avec le calcul lambda .

il existe une forte interaction / synergie / symbiose entre la théorie et l’application avec les langages de programmation. de nouvelles applications sont inventées qui mènent à de nouvelles théories et vice versa. un langage de programmation est à bien des égards un pont entre théorie et application .

Fortran est une étude de cas intéressante de l'histoire. il est mal connu, mais les versions antérieures de Fortran (surtout avant Fortran77) avaient une grammaire ambiguë . cela signifie que la même commande peut être légitimement "interprétée" / compilée de différentes manières par le compilateur car il y avait plusieurs "interprétations" valides (ce n'est pas le même sens technique des langages "interprétés").

la théorie sur les grammaires formelles était donc développée à peu près au moment de l’invention de Fortran, et la découverte de la question de l’ambiguïté linguistique était une petite crise. La syntaxe de Fortan a été reformulée pour éviter cette ambiguïté et les langages ultérieurs ont été plus sensibles à l'ambiguïté grammaticale dans leur conception. OOP est également un exemple très important / avant tout d'un concept / avance théorique dans les langages de programmation qui "impacte" ou "ondule" dans de nombreux langages existants, en les transformant.

d'autres études de cas sont l'invention de nouvelles technologies. Par exemple, l'invention de la base de données relationnelle a eu un impact considérable sur les langages informatiques, par exemple avec SQL et ses interfaces en langage informatique (par exemple en Java, "JDBC"). De même, le Web avec un impact encore plus massif. il semblait y avoir une explosion de langages juste au moment du boom de la bulle Internet, qui coïncidait en grande partie avec la croissance initiale du WWW et pouvait être comparée à des explosions évolutives .

il semble également y avoir une longue tendance à la hausse dans les nouveaux langages de programmation, en même temps que la puissance de traitement de la loi de Moores, qui augmente de manière exponentielle, et dont certains pensent qu'elle pourrait ralentir.

Les tendances actuelles à long terme dans les langages de programmation semblent aller vers le Big Data et la parallélisation, par exemple avec MapReduce . il y a aussi un intérêt actuel pour les fermetures .

Un autre aspect essentiel des langues est qu'elles représentent des niveaux d'abstraction croissants . ils s'appuient sur des abstractions de niveau inférieur pour créer des abstractions de niveau supérieur (similaires à une pyramide). De cette manière, les progrès de l’évolution du langage informatique sont probablement sans fin et nous pouvons être relativement certains que d’autres importants continueront d’être inventés dans le futur. cela est probablement analogue à un concept similaire en psychologie appelé « découpage en morceaux» - a indiqué de manière approfondie, construisant des concepts mentaux de niveau supérieur à partir de blocs de construction de niveau inférieur.

quiconque a étudié de nombreux langages informatiques doit admettre qu'il est possible d'observer une mentalité de groupe, certains de leurs aspects se révélant être des modes sur-typés, c'est-à-dire moins critiques que ceux recommandés, ou même mourir (utilisés) au fil du temps! certaines des idées ou des changements fondamentaux demeurent, mais le (trop) battage médiatique s'estompe. En ce sens, les langages de programmation sont également à la mode . À mon avis, deux cas survenus au cours des cinq dernières années sont certes utiles mais ont été surexaminés:

On constate de plus en plus une auto-similarité dans de nombreux langages majeurs, de sorte qu'ils convergent tous vers la mise en œuvre de nombreuses fonctionnalités similaires à leur manière, c'est-à-dire comme avec les tableaux de comparaison de produits qui "cochent" de nombreuses fonctionnalités dans une grille.


voir aussi les modèles de conception qui traversent souvent les langues et sont mis en œuvre dans les langues. les fonctionnalités implémentées dans les bibliothèques
vzn

FORTRAN n’a jamais eu de description formelle, encore moins la complexité d’expression pouvant conduire à des ambiguïtés grammaticales (oui, j’ai commencé à programmer dans une abomination appelée PDQ FORTRAN, et plus tard FORTRAN IV) le langage dans lequel l’ambiguïté (très embarrassante) du La grammaire est apparue à Algol, la première langue définie par une grammaire.
vonbrand

point pris par rapport au FORTRAN original / début, mais les versions ultérieures ont été plus formalisées avec des définitions de grammaire plus rigoureuses. c'est une étude de cas montrant l' évolution d'une langue avec sa théorie.
vzn

FORTRAN a été nourri de force avec une grammaire, mais n’a jamais été conçu autour d’une grammaire. Algol a lancé cette tendance, qui a été poursuivie par Pascal, la famille Modula, Oberon, C et sa famille, PL / 1, Ada et autres. Compte tenu de la technologie de grammaire sans contexte et de la compréhension de l'analyse syntaxique, la définition d'une grammaire et sa traduction en analyseur syntaxique sans erreur est presque triviale, aucune nouvelle langue ne s'en passe.
vonbrand

addendum, étude de cas dans les langues nouvelles / émergentes: Google go , node.js , Apple swift
vzn

-3

Ils ne l'étaient pas, ce n'est qu'un gadget marketing - si vous donnez à la langue une apparence un peu "C", alors cela réduit l'apparente barrière à l'entrée.

Quelques-uns qui n’ont aucune influence du C: SQL, Pascal, Delphi, FORTRAN, COBOL, Ada, PowerBuilder, HyperTalk, Lisp, Simula, FOCAL, BASIC, PL / I, Algol, Algol-68, SNOBOL, Modula, Visual BASIC, Tuteur, logo, Forth, DIBOL, Helix, AppleScript, Python, Erlang, Ruby, Choix, anglais, RPG, PL / SQL, ASP, Prolog, SmallTalk, Perl, bash, Wand BASIC, REXX, langage de traitement par lots DOS.

Ceux qui ressemblent un peu au C, mais qui ont très peu en commun avec lui: JavaScript, Java, C #, (sans doute) Objective-C.

Tout est en marketing, Java, C ++ et JavaScript ressemblent un peu au C, mais pourraient difficilement être plus différents sous les couvertures.


5
"Ils ne l'étaient pas" - qu'est-ce qui n'était pas quoi? En tout cas, je ne vois pas comment cela répond à la question. C'est simplement une liste de langues, avec une affirmation totalement infondée selon laquelle le marketing est en quelque sorte impliqué.
David Richerby

2
"Certains qui n'ont aucune influence du tout C ... Algol, Algol-68, ..." - C'est drôle, vous devriez le dire, étant donné que C est issu d'Algol. "Si vous donnez à la langue une apparence un peu" C ", cela réduit l'apparente barrière à l'entrée" - iirc, cela s'est avéré faux. Les étudiants sans connaissance préalable de la programmation apprennent plus rapidement avec d'autres langues (je pense qu'ils ont utilisé Haskell dans cette étude).
Raphaël
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.