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?
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?
Réponses:
Pour la même raison, vous n'utilisez pas de couteau suisse pour découper un poulet ...
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 ...
Parce que
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.
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.
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.
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.
"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.
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.
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.
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.
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 ...
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.
Oncle Bob Martin - Le dernier langage de programmation parle fort de ce sommet
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).
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. :-)
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.
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?
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.
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":
En bref, la conception de la langue est plus difficile et plus compliquée que cela. Bien que, vous pouvez regarder Scala .
Visual Batch est une tentative de langage de programmation personnalisable. Le lien ci-dessous montre comment cette interface de programmation peut être adaptée aux besoins d'un langage de programmation universel.
http://sourceforge.net/apps/phpbb/visualbatch/viewtopic.php?f=4&t=4
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.
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.
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é.
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é.