Pourquoi ne peut-il pas y avoir un langage de programmation «universel» qui remplisse tous les objectifs? [fermé]

57

pourquoi ne pas combiner les meilleures fonctionnalités de tous les langages de programmation existants et les intégrer dans un langage de programmation universel?

killown
la source
23
Le terme «meilleur» étant subjectif, vous ne disposerez jamais d'un meilleur traitement accepté universellement. Bien sûr, il existe assez peu de langues qui conviennent à un large éventail de développements sur toutes les plateformes. C ++ et Java étant les deux principaux.
GrandmasterB
5
@GrandmasterB Vous avez oublié C #
Daniel Little
15
Il y a, ça s'appelle 'C'
Martin Beckett Le
9
en tant qu'espèce, nous avons une capacité innée à ne pas être d'accord (en raison de notre individualité), nous ne nous entendrons donc jamais sur ce qui est universellement requis, et il n'y en aura donc jamais une (du moins pas une créée par l'homme!)
Nim
9
Un langage de programmation universel? Vous voulez dire, analogue au langage humain universel que tout le monde a adopté il y a tant d'années?
Kyralessa

Réponses:

116

Pour la même raison, vous n'utilisez pas de couteau suisse pour découper un poulet ...

http://upload.wikimedia.org/wikipedia/commons/thumb/4/48/My_swiss_army_knife.JPG/800px-My_swiss_army_knife.JPG

Le couteau suisse a généralement une lame, ainsi que divers outils, tels que des tournevis, des ouvre-boîtes et bien d'autres. Ces attachements sont rangés dans la poignée du couteau grâce à un mécanisme de point pivot ...

La conception du couteau et sa flexibilité ont conduit à une reconnaissance mondiale ...

moucheron
la source
26
Pour la même raison, vous n'apportez pas de fourgonnette à une course de dragsters. Pour la même raison, vous n’apportez pas de pistolet à eau en duel.
Chris
20
@Chris Et si c'était un duel pistolet à eau?
Rusty
44
Pour la même raison, vous n'entrez jamais avec un sicilien lorsque la mort est en jeu.
Rusty
6
Si vous avez un couteau suisse qui fait tout ce dont vous avez besoin pour construire une maison, serait-il bon à l’un d’eux?
Brad Mace
4
Cette réponse est une analogie horrible. Peut-être que si vous aviez écrit: parce que la langue française permet une fidélité d’expression différente de la langue anglaise, j’aurais peut-être préféré l’analogie. Mais les langages informatiques ne sont pas des "choses", ni des langages humains. La réponse correcte est: nous ne savons pas. Il faudra plus de perspicacité dans la façon dont les humains expriment leur logique et comment ils en arrivent à ce stade. En outre, certaines langues sont des «méta-langues», capables d’exprimer d’autres DSL. Devrions-nous les inclure dans votre question?
Dibbeke
80

Parce que

  1. personne ne veut réécrire tout le code hérité.
  2. Il est difficile de s'entendre sur tous les objectifs
  3. Une fois que vous avez dressé une liste complète d’objectifs, ceux-ci changent avant que vous ne puissiez le construire.
  4. Quelqu'un commencerait une langue complètement différente en raison d'un nouvel objectif.
  5. Microsoft
  6. Pomme
  7. Open source
  8. Que ferions-nous avec tous les poissons Babel?
  9. Impossible de rendre SQL universel.
JeffO
la source
Vous avez arrêté court. Je m'attendais à l'une de ces listes du "Top 10" ha-ha-seulement-sérieuses.
Jeffrey Hantin
4
+1 pour empêcher, du moins pour le moment, une campagne "Sauvez le poisson de Babel". Maudits hippies.
Rusty
2
comme pour le poisson Babel, faites des sushis!
Muad'Dib
1
En ce qui concerne le point 1, tout le code existant devra éventuellement être ré-écrit de toute façon en utilisant la dernière lubie de code / bibliothèques ou ne sera pas en mesure de fonctionner efficacement sans un montant ridicule des coûts de support.
Michael,
38

Ce que vous avez en programmation est un très gros problème. Ce domaine s'étend extrêmement et dans de nombreuses directions.

C'est pourquoi les contrôleurs de vol intégrés sont écrits en C et les sites Web en PHP, Java, Rails, .NET et bien d'autres.

Pour le contrôleur de vol intégré, j’ai environ 128K de mémoire sur laquelle travailler. En plus, si mon code reçoit une exception non gérée, l’appareil se bloque, 200 personnes décèdent, je suis poursuivi en justice pour une amende de 1 milliard de dollars et je dois envoyer des ingénieurs à chaque dans le monde entier pour réparer les avions immobilisés, perdant 10 millions de dollars par jour à mes clients. Je dois travailler avec un langage très serré et avec un petit nombre de pièces mobiles qui pourraient mal tourner.

Pour mon application Web, je dispose de plusieurs Go de mémoire, mais la vitesse du réseau est limitée (dans une moindre mesure, tous les jours, mais il s'agit probablement de la plus grande limite Web). Je vais chercher un langage qui me donne une tonne de fonctionnalités et qui produit une sortie pouvant être transmise aussi rapidement que possible. Peu m'importe si mon site tombe en panne, je vais peut-être perdre quelques ventes (100 $) et devoir corriger le cas d'utilisation qui a été bombardé, ce n'est pas grave.

Les sites Web n'ont pas été écrits en C depuis plus de 15 ans (tout le monde utilise des scripts cgi?) Et, autant que je sache, les contrôleurs de vol commencent tout juste à regarder en C ++, mais même de manière très restreinte.

Bill Leeper
la source
3
La plupart des sites qui gagnent réellement de l'argent perdront plus de 100 dollars s'ils connaissent des temps d'arrêt importants. Cela ne veut pas dire que c'est comparable à une situation de vie ou de mort, mais néanmoins, cela minimise un peu le risque.
Aaronaught
3
Avez-vous une idée de la complexité de Facebook? Ils ont récemment posté qu'ils poussaient du code toutes les 37 minutes. Leur site est constamment bouché d'une manière ou d'une autre et ils ont un million de tickets dans leur carnet de commandes. Le problème, c’est que sur le Web, personne ne mourra, vous risquez de perdre quelques ventes, mais dans l’ensemble, vous ne courez pas beaucoup de risques. La plupart des problèmes auxquels vous êtes confrontés ne concerneront que quelques clients, pas la base entière
Bill Leeper
24
  1. Allez dans votre garage (ou chez vos parents).
  2. Ouvrez la boîte à outils.
  3. Si vous voyez plus d'un outil, réfléchissez à la manière dont cela s'applique à votre question.

Si vous n’avez pas de boîte à outils, ou si vous n’avez qu’un de ces petits marteaux avec les embouts de tournevis dans le manche creux, alors j’ai beaucoup de sympathie pour vous.

Sérieusement. Si vous allez dans un magasin d’automobiles, votre mécanicien n’a-t-il qu’un seul outil à faire dans sa boîte à outils? Il (ou elle) est un professionnel, avec des outils de qualité professionnelle spécialement conçus pour effectuer diverses tâches de réparation automobile.

De même, les développeurs de logiciels professionnels devraient posséder un ensemble suffisant d’outils pour exercer leur métier. Si vous ouvrez votre boîte à outils et ne voyez que [l'équivalent logiciel] d'un tournevis Philips, vous ne pouvez pas vous considérer comme un professionnel.

Vous pouvez faire tourner un boulon avec une clé à fourche, une clé à fourche, une clé à cliquet ou une clé à molette. Vous pouvez même faire tourner un boulon avec une pince à joint coulissant, maladroitement, avec des dommages mineurs à graves. Mais il est assez difficile de faire tourner un boulon avec une masse.

brettmjohnson
la source
C'est pour inclure "le garage des parents". Cela le rend vraiment plus clair, puisque je n'ai pas de garage.
Dan Rosenstark
5
Une meilleure analogie serait qu'un langage ressemble à une boîte à outils plutôt qu'à un outil individuel.
Tom Hawtin - tackline le
4
Il peut y avoir 20 outils différents dans la boîte. Mais je parie que vous n'avez besoin que d'un seul langage pour les décrire.
ThomasX
2
De nos jours, la boîte à outils ressemble davantage aux bibliothèques disponibles pour le langage en question.
Michael,
18

Un autre type de réponse aux autres - je pense en fait qu’une langue peut devenir une langue "universelle", permettant les caractéristiques et les paradigmes de nombreuses autres langues, bien que ce ne soit peut-être pas une langue strictement conçue à laquelle vous pourriez penser.

Pour reprendre l'analogie de brettmjohnson ci-dessus, l'idée que chaque langage de programmation est l'outil à l'intérieur d'une boîte (ou d'un couteau suisse) est l'hypothèse que tout le monde émet, mais est en réalité une hypothèse erronée.

Et si le langage de programmation était la boîte à outils?

Je veux dire, si vous pouviez ajouter et supprimer des fonctionnalités de la langue à votre guise, et disposer de votre propre boîte à outils avec les outils dont vous avez besoin - même si les outils ont des objectifs différents.

Le concept existe déjà partiellement. Par exemple, des langues telles que Nemerle vous permettent d' ajouter une syntaxe à la langue . Ainsi, vous pourrez peut-être utiliser "la meilleure fonctionnalité de la langue X" et l'ajouter à Nemerle (ou à la vôtre). Cela ne signifie pas nécessairement que vous écrivez constamment vos propres macros - chaque langage (ou paradigme) peut être défini à l'intérieur d'une macro dans une bibliothèque standard - de manière à ce que vous puissiez le faire import Haskell; import Prolog;, et commencez à écrire les deux langages comme s'ils faisaient partie de Votre langue?

La question est alors de savoir comment faire en sorte que les fonctionnalités de langages / paradigmes différents fonctionnent les unes avec les autres. Bien que je ne puisse pas répondre à cela, des frameworks tels que .Net et JVM offrent une partie de la solution: les langages sont au moins partiellement compatibles en raison de la façon dont ils sont compilés. Vous pouvez prendre n'importe quel code écrit en C # par exemple et l'utiliser de F # sans vous plaindre.

Le problème avec la solution actuelle est que, pour utiliser ces langues ensemble, vous devez les créer en tant que projets distincts, qui ne peuvent pas se référencer. Vous ne pouvez avoir qu'une référence à une voie. La barrière de la langue réside dans le fait que chaque projet compile tous ses fichiers séparément dans Common Intermediate Language avant qu'aucun autre projet ne puisse y accéder.

Un tremplin vers la suppression de cette barrière consisterait à permettre à du code de langages différents (par exemple, C # et F #) de compiler dans le même projet. En théorie, vous pouvez compiler chaque fichier séparément (ou en groupes - s'ils ont des types partiels ou des références circulaires), puis compiler des fichiers d'un langage différent pouvant accéder aux objets déjà compilés (CIL). Vous devrez cependant définir strictement l’ordre de compilation pour que cela fonctionne - mais un ordre de compilation est déjà requis dans le cas de F #.

Quoi qu'il en soit, je ne dis pas "il peut certainement y avoir un langage universel". Je suggère qu’il existe actuellement un potentiel d’amélioration de l’interopérabilité entre les langues. En réalité, il est peu probable que la situation s'améliorera très bientôt, à cause du travail considérable que représente la mise en œuvre d'un langage et des bibliothèques, des outils, etc. nécessaires à son utilisation.

Mark H
la source
4
Tout le monde n'est pas un PC. La majorité des processeurs de cette planète ont moins de 64 Ko d'octets d'espace mémoire total. Un langage qui peut être utilisé sur ces processeurs doit être jusqu'ici réduit de ceux que la plupart des utilisateurs de ce forum semblent utiliser pour que votre langage universel devienne un langage d'assemblage amélioré. Je pense que cela s'appellerait "C".
Uu
10

Les meilleures caractéristiques de certaines langues entrent en conflit avec les meilleures caractéristiques des autres.

Par exemple: Les réflexions tenant compte de la frappe sont une fonctionnalité très intéressante, mais cela ne vaudrait pas la peine d’être écrit dans un langage mal typé, mais une frappe lâche peut aussi être un réel avantage.

Même dans une langue, vous ne pouvez pas toujours utiliser toutes les meilleures fonctionnalités en même temps, car elles sont en conflit.

Facture
la source
mais si cette fonctionnalité était activée / désactivée selon les nécessités, par exemple: vous pouvez activer les réflexions sensibles au type et désactiver la capacité de langage faiblement typé et ainsi de suite ...
killown
2
et si vous essayiez de combiner un ensemble de fonctionnalités de langages en un langage qui pourrait tout faire, vous obtiendriez beaucoup de redondance, de confusion, de bugs de toutes les manières permettant d’utiliser différentes combinaisons de fonctionnalités, et beaucoup de fonctionnalités. effort inutile en spécifiant le paradigme que vous utilisez sur cette ligne.
Killown vous avez raison, mais résoudre le problème en rendant le langage ultra-configurable rend le langage difficile à utiliser comme décrit par fennic. J'aime un langage flexible qui autorise certaines choses même si elles sont dangereuses dans certains cas, mais le niveau de configuration nécessaire pour combiner certains concepts rendrait le processus plus complexe que de simplement revenir en arrière et écrire la solution en C de bas niveau ou quelque chose du genre. .
Bill
1
+1 pour les éléments en conflit
Frank Shearar le
Je pense que le problème ne réside pas seulement dans le conflit des fonctionnalités linguistiques, mais dans le fait que de nombreuses langues supposent un framework sous-jacent comprenant des fonctionnalités qui imposent un certain niveau de temps système, tout en permettant de simplifier certaines opérations. Les langues sont généralement associées à certains "modèles d'utilisation typiques". Le choix des caractéristiques à inclure dans un cadre et des schémas de codage à utiliser implique des compromis; et différentes combinaisons de caractéristiques et de motifs conviennent mieux à différentes applications.
Supercat
7

"Homme à tout faire - maître de rien." vient à l'esprit.

Certains programmes nécessitent de la vitesse, d'autres de grandes quantités de mémoire ou un accès rapide au disque. Certaines langues sont bonnes dans l’une, mais mauvaises dans l’autre - je ne pense pas que vous auriez une langue qui soit bonne du tout.

Ainsi, bien que vous puissiez écrire pratiquement n'importe quel programme dans n'importe quelle langue, ce que vous obtenez n'est pas garanti d'être le "meilleur" programme que vous puissiez écrire pour résoudre ce problème.

ChrisF
la source
4

Il y a. Outil Aucun est le meilleur de tout, mais certains outils comme de nombreux langages de programmation servent à toutes fins utiles, pas mieux à tous.

Vous pouvez choisir le meilleur outil pour le travail, mais il existe des langages de programmation pouvant être utilisés à toutes fins et vous pouvez les choisir. Je ne le recommande pas mais c'est possible.

bigown
la source
4

A cause de quelque chose que j'appelle le "paradoxe de généralisation / spécialisation", qui porte probablement un autre nom et qui n'est pas vraiment un paradoxe

Plus un langage de programmation est généralisé, plus il faut de code pour accomplir quelque chose. Plus la langue est spécialisée, moins vous pouvez accomplir avec elle.

Homde
la source
2
Je suis d'accord avec vous, sauf qu'il est possible d'avoir des bibliothèques spécialisées dans un langage généralisé.
dan_waterworth
@dan: D'accord, mais uniquement si le langage vise à fournir des fonctionnalités aux rédacteurs de bibliothèques. Mes deux langues préférées sont D et Python. Les deux sont des langages assez généralistes (en particulier D), mais ils offrent de nombreuses fonctionnalités aux rédacteurs de bibliothèques. Vous pouvez donc créer vos propres bibliothèques pour gérer les tâches spécialisées. Je méprise les langages spécifiques au super domaine comme Matlab et R.
dimanche
4

Les langues façonnent la façon de penser des gens. Ceci est vrai pour les langues naturelles. Si un enfant ne connaît qu'une seule langue avec les chiffres "un, deux, beaucoup", enseigner cet enfant aux mathématiques est ... difficile. (Désolé, je n'ai pas le lien) En anglais, nous parlons de moments différents comme s'il s'agissait de lieux - d'où l'idée de voyager dans le temps est possible. Dans d’autres langues, l’idée de voyager dans le temps ne se présentera jamais à ses locuteurs.

Ceci est également vrai pour les langages de programmation.

Par conséquent, si nous avons un seul langage de programmation, tout le monde réfléchira exactement de la même manière à toutes les tâches de calcul. Ainsi, nous n'explorerons pas d'autres solutions, et la meilleure façon de faire restera inconnue.

Le langage C est très proche des concepts matériels sous-jacents (comment les choses se passent réellement dans le matériel) et les programmes de chaque langage sont convertibles en C. (Voir comment CFront a utilisé les compilateurs C pour l'assembleur Le problème avec C est que les conversions mentionnées ci-dessus n’auraient aucun sens pour les programmeurs C.

"Lambdas" étaient toujours possibles en C. La syntaxe est désactivée, y compris le code répandu dans l'ensemble du projet / fichier, ce n'était donc pas une solution privilégiée. Avec une version sans capture / valeur supérieure / etc, définissez une fonction ailleurs et transmettez un pointeur à la fonction. (voir qsort () ) Pour utiliser lambdas avec des valeurs capturées, la quantité et la complexité du code que vous devez écrire augmentent beaucoup - pour autant que je sache, personne n'a jamais écrit le code pour utiliser cette méthode de programmation en C. Contrairement aux langues où les lambdas font partie de la langue et sont essentiellement utilisés partout.

La principale différence entre C et C ++ réside dans la manière dont vous pouvez demander à C ++ de s’occuper de tout pour vous; mais alors vous ne pouvez plus voir, à partir d’une seule ligne de code, à quel point vous le demandez réellement. La réponse devient: ça dépend (de tout cet autre code).

Certains langages de programmation sont excellents pour des tâches spécifiques, mais la plupart des programmes actuellement utilisés dans le monde n’auraient tout simplement aucun sens si ils étaient programmés dans ce langage. Autrement dit, si le langage pouvait être utilisé pour mettre en œuvre ce programme, ce n’est pas une donnée.

MaHuJa
la source
2
"Dans d'autres langues, l'idée de voyager dans le temps ne se présenterait jamais à ses locuteurs." Citation requise. L’hypothèse Sapir-Whorf n’est en aucun cas largement acceptée, spécialement sous sa forme forte.
Muhammad Alkarouri
4

L'impossibilité technique d'avoir un langage universel? C'est un non-sens total. Vous pourriezavoir un langage universel qui couvre toutes les bases. Le problème est essentiellement historique: différentes langues ont été inventées pour faire différentes choses et être utilisées dans différentes communautés. Beaucoup d'entre eux sont restés coincés. Ajoutez à cela vos préférences (vi! Emacs! Wait, je parlais de Java! C #, attendez je parlais de Microsoft, Open Source, etc. etc.) et de l'intégration générale d'accidents historiques ... Regardez les langages naturels dans un pays minuscule masse comme certains pays européens pour voir à quel point ce sujet peut devenir fou. Certaines villes ont leur propre fierté et leur joie, un petit dialecte dont elles ne parlent que. Les nations et les communautés de programmation ne sont pas si différentes, pas plus que les communautés de programmation ne sont plus rationnelles. S'ils l'étaient, nous parlerions tous l'espéranto et programmerions dans Universal quelque chose, quelque chose comme ça ...

Yar
la source
1
Le problème est plus profond que cela. Plus vous mettez à disposition d'options, plus vous devez spécifier explicitement plus au lieu d'être la seule manière implicite de fonctionner dans cette langue. Les problèmes deviennent plus évidents si, au lieu de comparer Java avec C #, vous comparez Java avec Prolog. Disposer des fonctionnalités des deux langues dans une langue compliquerait la syntaxe de la langue composée. Un choix plus raisonnable peut être de réduire la syntaxe au minimum et de permettre à toute fonctionnalité d'être implémentée en tant que bibliothèque de métaprogrammation. C'est essentiellement ce que fait Lisp, bien que son noyau ne soit pas assez bas pour certains emplois.
Steve314
4

C'est une erreur de penser que "combiner toutes les fonctionnalités" fera un meilleur langage.

Vous êtes plus susceptible de vous retrouver avec un gâchis gonflé, complexe et illisible.

Une bonne conception linguistique nécessite des choix et des compromis. On peut dire que les langues les mieux / les plus révolutionnaires / les plus réussies sont celles qui suppriment quelque chose et fournissent une meilleure alternative plutôt que d'ajouter de nouvelles choses.

  • Langages de programmation structurés (C, Pascal) - supprime "goto", remplace par des procédures et des boucles structurées, etc.
  • Java - supprime la "gestion manuelle de la mémoire", la remplace par la mémoire GC / gérée
  • Haskell / Clojure - supprime "l'état mutable incontrôlé"
  • Lisp - supprime la plupart des "syntaxes de langage", remplace par un arbre homoiconique flexible d'expressions S

Oncle Bob Martin - Le dernier langage de programmation parle fort de ce sommet

Mikera
la source
"Langages de programmation structurés (C, Pascal) - supprime" goto ", remplace par des procédures et des boucles structurées, etc." - Désolé, vous vous trompez: C a goto. Mais j'aime le reste de la réponse. La principale chose que C fait est que vous ne vous souciez pas de savoir exactement où se trouve tout ce qui est mémorisé et dans quel registre, à quel moment, et cela cache le compteur de programme presque un niveau de précision de montage avec un goto).
Wyatt8740
0

Il n'y a pas d'outil qui a toutes les meilleures fonctionnalités. Par exemple, une des fonctionnalités intéressantes de Javascript et Scheme est leur petite taille, donc si vous commencez à intégrer des fonctionnalités, vous avez déjà perdu sur celle-ci.

Néanmoins, Cobra semble prometteur dans le sens d'avoir toutes les fonctionnalités intéressantes d'autres langues. :-)

Andrea
la source
0

Parce que si vous créez un tel langage, ce sera encore un nouveau langage. Vous aurez peut-être une grande base de fans, mais toutes les autres langues existeront toujours.

C existe toujours même si beaucoup de nouveaux langages ont été inventés depuis.

On pourrait dire que le python est un langage tellement universel, mais il y a aussi le rubis.

La raison pour laquelle il y a beaucoup de langues est simplement parce qu'il y a beaucoup de programmeurs et que certains aiment créer de nouveaux langages.

La raison pour laquelle il n’existe pas de langage universel sur lequel tout le monde s’accorde, c’est que la programmation en tant que métier n’est pas dictée par une institution qui prend toute la décision. Chacun est libre de faire ce qu'il veut.

C'est une bonne chose.

hasen
la source
Je dirais également que ce n'est ni bon ni mauvais, mais plutôt un artefact du fait que le génie logiciel n'a même pas cent ans et qu'il est très immature par rapport à tous les autres types d'ingénierie existants.
Michael
0

Avec tout ce qui a été écrit jusqu'à présent, il est difficile d'ajouter beaucoup de nouvelles raisons, mais je vais en ajouter quelques-unes.

  • Évolution: Il n’ya pas que les systèmes biologiques qui sont introduits, mutent et subissent une compétition du plus apte pour les ressources et un créneau à s’appartenir. La compétition est bonne et fait avancer les choses.

  • Maturité: Nous développons des langages informatiques depuis probablement moins d’un siècle. Nous ne pouvons pas encore avoir la réponse car nous ne connaissons même pas encore toutes les questions.

  • Genèse séparée: Ce n'est pas le mot qui convient, mais dans le monde, il existe de nombreux systèmes d'écriture qui ont vu le jour dans de nombreuses régions géographiques. Pensez à Cunéiforme, dicté en partie par les exigences de la taille réduite en tablettes d’argile. Pensez au sanscrit, aux alphabets grec, hébreu, romain et arabe. Hiéroglyphes, la méthode chinoise de l'écriture belle avec plus de 6000 symboles qui est partagée dans de nombreux pays d'Asie de l'Est. Pensez à des alphabets mixtes plus modernes à base phonétique tels que le cyrillique, le katakana et l'hirigana. Je ne suis pas un linguiste, alors ne critiquez pas trop les inexactitudes, mais lorsque les cultures du monde entier auront besoin de quelque chose, elles le créeront et en feront le leur par nécessité. Les langages informatiques sont apparus quand il y avait beaucoup de communication dans le monde et comme les systèmes impériaux et métriques, venaient d'endroits avec un leadership d'idées puissant. Mais les langages de programmation servent de nombreuses cultures différentes (certaines d’entre elles des cultures d’entreprise), ils reflètent donc les personnes qui les ont créés. Les langages informatiques sont accompagnés d'un héritage culturel qui a façonné leur conception et leur utilisation. Dans la culture du noyau du système d'exploitation, C et C ++ ne seront probablement pas bientôt obsolètes pour Java (ou l'inverse) car ils permettent la génération de code natif, un couplage étroit / efficace avec du matériel pour la création de couches d'abstraction matérielle et une installation importante.

  • Design of Design: Les langages de programmation utilisent différents paradigmes organisationnels. COBOL et Ada appartenaient à des comités faisant partie du DOD, qui avait beaucoup de hiérarchie. Si je me souviens bien, C, C ++, Java et probablement beaucoup d’autres venaient d’un ou de quelques concepteurs. Fred Brooks compare les résultats du comité aux approches visionnaires dans son article, Design of Design (http://www.youtube.com/watch?v=pC-DlX-PaF4). Si nous nous assoyions aujourd’hui pour choisir un Da Vinci ou un comité chargé de définir le langage de programmation universel, saurions-nous qui ou quelle méthode l’architecture devrait être appliquée?

DeveloperDon
la source
0

Peut-être un peu différent sur tout cela:

Qu'est-ce qu'une langue? Pour être ridiculement simple, il s’agit de vocabulaire, de syntaxe et de sémantique.

Quelle est la première chose que vous faites avec un langage de programmation?
Vous définissez des choses - classes, variables, méthodes - vous développez le vocabulaire et la sémantique.

Pourquoi? Alors maintenant, vous pouvez dire des choses que vous ne pouviez pas dire avant.
Qu'on le veuille ou non, vous avez créé un nouveau langage spécifique.

IMHO, ce qu'il faut rechercher dans un langage généraliste, c'est s'il est facile de créer des langages spéciaux.

Mike Dunlavey
la source
0

En plus de l'argument couteau suisse (ce qui a un sens - il est plus difficile de concevoir un bon langage à large spectre qu'un langage spécifique à un domaine - mais cela ne signifie pas qu'un tel langage ne serait pas à la fois possible et une bonne idée), il existe des problèmes pour "combiner les meilleures fonctionnalités":

  • Pour les caractéristiques linguistiques, "le meilleur" est subjectif, ou au moins (interminablement) discutable.
  • Certaines fonctionnalités ne sont pas compatibles. une bonne fonctionnalité d'une langue peut exploser lorsqu'elle est combinée avec une bonne fonctionnalité d'une autre langue.
  • Nous n'avons pas encore fini de proposer de nouvelles fonctionnalités.

En bref, la conception de la langue est plus difficile et plus compliquée que cela. Bien que, vous pouvez regarder Scala .

venir
la source
-2

Il existe un langage de programmation universel. C'est ce qu'on appelle le "langage machine" et tout ce qui se trouve dans un autre langage informatique est finalement exécuté en langage machine.

À quoi cela ressemble-t-il? Une chaîne de 0 à 9 et AF.

Mais c'est une chienne à utiliser. Alan invente donc un langage qui peut être traduit en langage machine et qui convient mieux à ce qu’Alan veut faire. Bill invente un langage différent pour ce que Bill veut faire. Avant longtemps, vous avez Cobol et Fortran et Lisp et Java. Tous ne sont que des versions simplifiées du langage machine, plus faciles à écrire pour certains types de programmes mais plus difficiles, voire impossibles, pour écrire d’autres types de programmes. L’un est bon pour la comptabilité, un autre est bon pour contrôler la navette spatiale.

Andy Canfield
la source
6
Le langage machine n'est pas universel. même pas proche. Chaque machine a sa propre langue.
Hasen
3
En outre, ce n'est pas une chaîne de 0-9 et AF. C'est 1 et 0.
David Conrad
@hasen @David n'est-il pas raisonnable de suggérer, comme @Andy, que chaque langue est, d'un point de vue, une langue spécifique à un domaine, construite sur d'autres langues?
Armand
J'ai dit 0-9 et AF parce que c'est ce qu'il fallait savoir pour utiliser les codes de perforation multiple sur une machine à pointer les touches. Cela ressemble à 0-1, 0-15 ou 0-255 si vous le prenez en chiffres, selon la taille d'un morceau à la fois. Et Hansen a raison. chaque type de machine a sa propre langue. Presque tous les ordinateurs acceptent aujourd'hui les codes 80386; même mon téléphone va! Mais l'iPad ne le fera pas.
Andy Canfield
@hasenj et avec des caractéristiques très différentes. L'état d'esprit requis pour la programmation d'un 6502 diffère de celui d'un x86 et, à son tour, d'une puce RISC. Très loin de l'universel.
-2

Juste parce que

il n'y a pas d'ordinateur UNIVERSAL.

pas une plateforme UNIVERSELLE.

pas un programmeur UNIVERSAL.

et même pas un client UNIVERSAL.

: P

Nous avons donc simplement besoin d’un autre pour un autre. ;)

necixy
la source
-2

La plupart des réponses ici se concentrent sur l'utilisation du meilleur outil pour chaque problème. Je ne crois pas que ce soit une raison suffisante.

Si vous regardez les grandes entreprises, elles auront généralement tendance à utiliser un seul (ou un petit nombre) de langues et de technologies, même si, pour un projet spécifique, il existe une meilleure langue.

Cela est dû au fait que les avantages découlant d'une normalisation améliorée, d'une assistance simplifiée, du partage de code, etc. sont (dans la plupart des cas) plus importants que la valeur ajoutée d'un langage spécifique.

Ophir Yoktan
la source
1
Je n'ai jamais vu de projet d'entreprise décent utilisant moins de 4 langues différentes. Et je ne crois en aucun de ces "avantages" de la sélection d'outils impropres. Ça ne marche jamais.
SK-logic
-3

Je pense que toutes les réponses "parce que vous ne sculptez pas les statues avec un crayon" manquent.

Qui ici, VRAIMENT sélectionne une langue avant chaque nouveau projet?

La vérité est que nous n’avons besoin que de quelques langages de programmation et que le monde de la programmation en serait meilleur: les gens s’efforceraient d’améliorer le langage de script au lieu d’être dispersés entre python / ruby ​​/ perl / younameit, par exemple.

C # est programmé sur / pour Windows (bon, il y a Mono, tout le monde ici exécute-t-il une application C # sous Mono tous les jours?), Ce qui incite les utilisateurs à acheter Windows 7/8 et à Microsoft.
D'autres sociétés font de même, alors que l'open source le sait mieux, alors monsieur le génie aussi ... et nous avons beaucoup de langues qui se ressemblent, c'est juste la nature égocentrique de l'humanité.

3 tours
la source
D'accord - la plupart du temps, nous n'avons besoin que d'un langage "sûr" de haut niveau, d'un langage de programmation système "peu sûr" de bas niveau, de tous les langages d'assemblage (un par CPU, ils sont inévitables mais cachés), ainsi que de fonctions spécifiques (spécifiques à un domaine). langages (par exemple SQL). Le vrai problème, c'est qu'il est impossible pour quiconque de déclarer un langage "obsolète" (même lorsque le concepteur du langage tente de le faire - par exemple, Python 2 ou Python 3). De plus en plus de nouvelles langues chaque année et pas d’anciennes langues mises de côté signifie qu’il y aura plus de langues utilisées que les programmeurs pour les utiliser. ;-)
Brendan
-5

Nous devons faire appel à l’économie pour répondre à cette question. Si cela permettait d'économiser de l'argent des affaires grâce à l'utilisation d'une seule langue, nous l'aurions. Ils le normaliseraient et exigeraient que tout le monde l’utilise. Les autres langues languiraient dans des bâtiments académiques poussiéreux et dans les sous-sols d’amoureux des yeux. Cela n’a pas été le cas et il ne doit donc y avoir aucune incitation au profit dans un langage de programmation universel, sinon un langage aurait naturellement évolué.

George Campbell
la source
1
"L'argent économisé" est (malgré les efforts des comptables) un concept vague et nébuleux au cours du cycle de vie. Tout comme les mécaniciens n’ont pas réussi à normaliser même une seule taille de clé, peu importe l’ensemble de la trousse à outils, l’ingénierie logicielle n’a pas réussi à normaliser car il existe de nombreux critères pour la sélection d’un outil (langue) ou même du processeur / système d’exploitation / environnement
Andrew