J'ai souvent vu des gens se battre pour que leur langue préférée soit plus "puissante" que les autres. Quand il s'agit de décrire un langage de programmation, je peux comprendre ce qu'est un langage orienté objet ou ce qu'est un langage dynamique, mais je n'arrive toujours pas à comprendre ce qu'est exactement un langage "puissant". Quelles sont vos pensées?
programming-languages
artisan
la source
la source
Réponses:
Nous ne pouvons pas définir ce qu'est un langage "puissant" sans d'abord définir le mot "puissant".
La définition littérale du pouvoir serait «puissance», et je pense que nous pouvons tous convenir que la grande majorité des compilateurs - et même de nombreux interprètes qui ne sont pas complets de Turing - font tout aussi bien que le processeur exécute leurs instructions. . Donc, en ce qui concerne la définition littérale, la réponse à la question serait "presque n'importe quelle langue".
Pratiquement, nous devons vraiment nous arrêter là; définir un «langage puissant», c'est un peu comme définir une «bonne personne» ou un «produit de qualité». Il n'y a absolument aucune définition objective de ces mots sur laquelle tout le monde, ou même la majorité des experts, pourrait se mettre d'accord, et la plupart des définitions finissent par soulever la question . Selon la personne à qui vous parlez, le pouvoir peut être l'un des suivants:
Est-ce que tout le monde voit ce qui se passe ici? Pratiquement toutes les puces peuvent être interprétées comme un signe de "puissance", tout comme son contraire!
Quelqu'un, quelque part, pensait évidemment que les variables variables étaient une idée géniale qui rendrait le langage très puissant . Je ne jugerai pas; Je ne suis pas un gars PHP.
Je propose qu'au lieu de toutes ces bêtises de la guerre sainte, nous utilisons tous cette définition vraiment simple:
Le langage le plus puissant est celui qui vous permet d'expédier le produit de la plus haute qualité au moindre coût dans les plus brefs délais.
Vague? Vous betcha. C'est pourquoi toute personne qui veut s'appeler un professionnel doit comprendre à la fois les concepts de programmation et le domaine du projet. C'est la seule façon dont vous allez pouvoir décider de ce qui est "puissant" pour vous.
Sinon, vous pourriez simplement apporter un très gros couteau à une fusillade.
la source
J'ai peut-être un parti pris parce que je suis programmeur système. Je pense qu'un langage de programmation utilisé pour l'ensemble de la programmation du noyau, du système, du serveur et des applications, ou supportant plusieurs paradigmes de programmation, ou les deux, peut être appelé "puissant".
C, C ++, D sont puissants, mais évidemment ce n'est que mon humble avis.
la source
Il existe quelques définitions du pouvoir au-delà de l'exhaustivité de Turing. Mark a cité ce que j'ai tendance à considérer comme «la définition de Paul Graham». C'est une assez bonne définition, avec un sérieux défaut: c'est faux. C'est théoriquement une très bonne définition du pouvoir du langage, mais vous savez ce qu'ils disent de la différence entre la théorie et la pratique ...
Si tout le monde était capable d'écrire du code parfait, non seulement parfaitement sans bogue mais également parfaitement à l'épreuve du temps, de manière cohérente, alors la définition de Paul Graham serait correcte. Mais ce n'est évidemment pas le cas. Dans le monde réel, la majorité du temps et des efforts consacrés à l'ingénierie logicielle n'est pas absorbée par la création initiale du produit, mais par la maintenance par la suite. Selon les statistiques que vous écoutez (et cela varie probablement beaucoup d'un projet à l'autre), la maintenance peut représenter entre 60% et 90% de l'effort total consacré à un programme.
La maintenance est souvent effectuée par des personnes autres que la personne qui a écrit le code au départ, et souvent des mois, voire des années après l'écriture initiale du code, ce qui signifie que même pour le codeur d'origine, il peut tout aussi bien être "le code d'autres personnes". point. Si vous voulez être productif pendant la maintenance, vous devez être en mesure de vérifier rapidement l'intention d'origine du code en le lisant.
Par conséquent, un langage plus puissant est celui qui facilite la lecture rapide du code , et non celui qui facilite l' écriture rapide du code . Il y a généralement une grande quantité de chevauchement entre les deux, mais les concepts sont souvent à contre-courant également, car la syntaxe laconique omettra souvent les détails qu'un compilateur / interprète est en mesure d'inférer beaucoup plus facilement qu'un programmeur de maintenance.
EDIT: Il y a un autre point important dans la description de la puissance d'une langue: la gamme de concepts que vous êtes en mesure d'exprimer et la facilité avec laquelle vous pouvez en toucher les deux extrémités. Paul Graham aime évaluer celui-ci sur le niveau d'abstraction que vous pouvez atteindre, mais ce n'est que la moitié. Toute langue qui impose une limite d'abstraction inférieure, en dessous de laquelle vous ne pouvez pas aller si nécessaire, est paralysée parce que les détails qui sont abstraits sont là pour une raison. C'est la différence entre un langage jouet facilement lisible comme COBOL et un langage puissant facilement lisible: COBOL n'a pas de pointeurs et n'a pas accès à l'assemblage en ligne, où vous pouvez exprimer n'importe quel calcul, même ceux auxquels COBOL n'est pas bien adapté.
COBOL n'est pas non plus particulièrement bon pour atteindre l'extrémité supérieure du spectre d'abstraction. Selon Wikipedia, il n'a «aucun type défini par l'utilisateur et aucune fonction définie par l'utilisateur», ce qui rend très difficile la création d'algorithmes et de structures de données.
la source
Cela a été débattu à plusieurs reprises et longuement (par exemple, sur comp.lang.lisp, plusieurs fois). Je ne pense pas que quiconque ait jamais trouvé une «bonne» réponse, mais beaucoup de gens ont trouvé des réponses qui me semblent manifestement erronées.
Dans les réponses que je vois ici, permettez-moi de choisir la réponse de Mason Wheeler. D'une part, les questions qu'il couvre sont importantes - mais d'autre part, je ne peux pas vraiment imaginer les appeler liées au «pouvoir». C'est un peu comme s'il disait que sa mini-fourgonnette Honda est plus puissante qu'un dragster à haut niveau de carburant, car elle est plus sûre, plus silencieuse, a une meilleure maniabilité, plus de place pour les passagers et une conduite beaucoup plus confortable. Tout cela est absolument vrai et c'est très important. Ces facteurs (parmi tant d'autres) rendent la mini-fourgonnette beaucoup plus pratique et raisonnable pour la plupart des gens - mais ils ne changent pas le fait que le moteur de la mini-fourgonnette ne produit qu'environ 250 ch tandis que le dragster produit quelque part autour de 8 000 ch.
Le problème, bien sûr, c'est qu'avec les véhicules, il y a une définition claire de ce qui constitue la «puissance» et de ce qui ne l'est pas. Avec les langages de programmation, il me semble que la discussion finit par être à peu près équivalente à traiter la maniabilité, le confort, la vitesse, la capacité de chargement et la plage de croisière comme faisant tous partie de la "puissance". Le résultat a tendance à être des fils qui courent sans fin, générant beaucoup plus de chaleur que de lumière. La plupart des questions qui se posent se résument essentiellement au degré d'importance que vous accordez à des fonctionnalités totalement indépendantes et orthogonales - par exemple, la capacité de programmer la MMU en langage d'assemblage plus ou moins "puissante" que la capacité de créer des fonctions de niveau supérieur à Haskell? Au moins l'OMI, il n'y a aucun moyen significatif de comparer les deux, et aucune réponse significative à laquelle est "
En tant que tel, autant que je déteste, je dois dire que dans ce cas, la seule réponse significative est fondamentalement relativiste - un langage puissant est celui que vous trouvez vous aide à accomplir ce que vous voulez. Les différences d'objectifs des peuples rendent au mieux la plupart des mesures "absolues" du pouvoir dénuées de sens.
la source
Le juste équilibre entre brièveté et flexibilité.
Grande question. Étant donné que de nombreuses langues sont "Turing complete", nous pouvons les mettre toutes sur un pied d'égalité en ce qui concerne ce dont elles sont théoriquement capables. Mais nous ne le faisons pas parce que les langues diffèrent évidemment les unes des autres. Et quelle est la différence?
La différence est la capacité de dire beaucoup de choses différentes avec très peu . Si nous pouvions aller à l'extrême, je pourrais créer un langage qui soit le meilleur pour initialiser automatiquement un système de gestion de contenu en utilisant un seul caractère, «c». Mais à quoi cela servirait-il? Bien sûr, c'est puissant dans un sens d'être très bref, mais ce n'est pas flexible. Ce que vous voulez, c'est un langage qui vous permette de dire beaucoup de choses complexes sans être trop verbeux. Sans être comme un assemblage, capable de tout sous le soleil, infiniment flexible mais extrêmement verbeux.
Une langue puissante est une langue qui vous permet de dire beaucoup de choses différentes avec le moins de longueur possible.
la source
Une fois que vous appuyez sur Turing complete (et il est facile pour une langue de le faire), "pouvoir" ne signifie pas grand-chose, dans le sens où tout ce que vous pouvez dire dans une langue complète de Turing, vous pouvez le dire dans une autre. La réponse de Mark Canlas est claire : la brièveté et la flexibilité font la différence.
Cela dit, l'article de Matthias Felleisen sur le pouvoir expressif des langages de programmation offre une lecture intéressante. Il y tente de formaliser la notion d'expressivité dans les langues.
la source
Il semble y avoir beaucoup de désaccord sur ce qui constitue le pouvoir linguistique. S'agit-il de concision, de lisibilité, d'adaptabilité ou tout simplement d'exhaustivité de Turing? Je pense que tous ces facteurs entrent en jeu, alors peut-être que la meilleure façon de voir les choses est en termes de points statistiques. Oui, je parle de RPG stylo et papier, ici.
L'idée est que chaque langue a (à peu près) le même nombre de "points", qui peuvent être répartis arbitrairement dans un certain nombre de catégories. Aux fins de la discussion, disons que les seuls facteurs sont la brièveté, la lisibilité et la flexibilité. Une langue peut alors être extrêmement laconique et flexible, mais par conséquent très difficile à lire; ou très lisible et flexible, mais extrêmement verbeux.
(On peut dire que le nombre de points qu'un langage doit distribuer est défini par les compétences du concepteur et de l'implémenteur, mais supposons que tous les concepteurs de langage soient également bons dans ce qu'ils font.)
Lorsqu'un concepteur de langues décide d'augmenter la force d'une langue dans une catégorie, il enlève logiquement une fraction de cette force potentielle à toutes les autres catégories. C'est pourquoi on dit si souvent que la conception d'un langage de programmation est une question de compromis. De ce point de vue, la puissance globale d'une langue n'est toujours pas définissable, et nous devons revenir à la méthode éprouvée de catégorisation des langues en fonction de leurs forces relatives. Pas satisfaisant? Dommage.
Vous pouvez argumenter de deux manières: qu'un langage puissant est un langage avec une répartition relativement uniforme des points (jack of all trades, master of none), ou avec autant de points que possible dans un domaine sans en laisser d'autres sans surveillance (spécialiste). Il n'y a pas de langage "homme de la renaissance", avec une parfaite maîtrise dans de nombreux domaines. Et si c'est votre définition du langage le plus puissant possible, alors vous n'avez tout simplement pas de chance.
Pour plus de lecture, cet article (par coïncidence également de Paul Graham, qui semble avoir des opinions partagées) aborde l'idée que, même si cela peut être difficile de déterminer comment , les langages de programmation varient effectivement en puissance. Il fait valoir de façon assez convaincante qu'il est très facile de voir comment une langue est moins puissante que la vôtre - il manque la fonctionnalité X - mais il est très difficile de voir comment une langue véritablement plus puissante est en fait ainsi - elle est fondamentalement équivalente à la langue X, mais avec un tas d'autres trucs jetés. Je vous laisse avec une citation de ce document:
la source
Les langages de programmation sont des outils - rien de plus, rien de moins. Certains outils sont extrêmement spécialisés et bien adaptés à des fins particulières; d'autres sont généralisés et simplifiés au point d'être presque inutiles.
Je dirais que le langage le plus "puissant" est celui qui vous permet d'atteindre vos objectifs avec un investissement minimum de temps, d'énergie et d'autres ressources; c'est-à-dire la langue qui offre le meilleur retour sur investissement. Dans certaines situations, il peut s'agir de C; dans d'autres, Java; dans d'autres encore, Haskell.
La meilleure chose à faire serait de vous familiariser avec une grande variété de langues et à quoi elles sont utiles. Ensuite, lorsque vient le temps de commencer un nouveau projet, vous pouvez décider en toute connaissance de cause qui serait le plus approprié.
la source
Les discussions sur les langages de programmation sont - à mon humble avis - des discussions sur les clients de messagerie dans certains groupes de discussion Linux: elles ont tendance à être une guerre des flammes. Je me souviens des moments où le VB6 était populaire. Il y avait même des gens qui prétendaient que ce n'était pas du tout un langage de programmation, tandis que d'autres créaient de superbes applications avec.
Je pense que les langages de programmation diffèrent déjà dans le concept car les créateurs avaient différentes choses en tête lorsqu'ils ont créé / conçu le langage. Ainsi, un langage qui correspond à un objectif - et dans ce cas est puissant - pourrait ne pas convenir à un autre. Nommer le langage puissant ou non est alors purement subjectif. Cela dit, je ne pense pas qu'il existe une métrique qui puisse être appliquée.
la source
Ce sont tous des outils dans votre coffre à outils. Un marteau peut être puissant, mais pas si vous avez besoin d'une clé. C / C ++ est idéal si vous êtes un programmeur de systèmes, mais Adobe Flash est probablement mieux adapté au site Web de jeux que vous souhaitez créer.
la source
Le langage de programmation le plus puissant est celui qui résout le problème de programmation linéaire suivant :
Maximiser
Rapidité de développement
+ Facilité de lecture du code
+ Facilité de débogage
+ Succinct / brièveté d'expression
+ Facilité d'apprentissage / d'enseignement
- Utilisation du processeur
- Besoins en mémoire
Sujet à
(Et oui, je sais, j'ai déjà posté une réponse complètement contradictoire. C'est parce que je suis dialecticien.)
la source
Cela a été écrit en ce qui concerne les langages naturels, mais je pense que cela convient également aux langages de programmation:
Le «pouvoir» n'est tout simplement pas attribuable à une langue plutôt qu'à une autre. Il serait idiot de dire "le chinois est une langue plus puissante que le coréen". De même, il est idiot de dire "APL est un langage plus puissant que COBOL."
Il y a eu plusieurs tentatives pour assimiler le pouvoir linguistique à une mesure objective. Je crois que ces tentatives échouent:
Mon opinion est que les discussions sur «le pouvoir d'une langue sur une autre» sont des expressions voilées du sentiment de supériorité de l'orateur sur un autre groupe. Bref, ses préjugés et ses stéréotypes. Bien sûr, les gens qui ont des préjugés croient vraiment très fortement à leurs stéréotypes, et il est peu probable que vous puissiez les persuader de changer d'avis.
la source