Je trouve que lorsque les langues sont considérées comme les logiciels commerciaux, il y a toujours un besoin constant d'ajouter de nouvelles fonctionnalités pour justifier de nouvelles versions.
Peut-il y avoir ou existe-t-il des langues où la version 1.0 est la version finale? Bien sûr, les corrections de bogues en sont exemptées, mais l'ensemble de fonctionnalités reste toujours le même?
De cette façon, chaque fonctionnalité du langage s'intègre parfaitement et ne semble pas être verrouillée après coup avec des fonctionnalités obsolètes toujours en raison de la compatibilité descendante.
Je suppose que certaines langues académiques sont comme ça? Mais y a-t-il des langues commercialement réussies qui suivent cette idée? La bibliothèque qui l'accompagne est également gratuite pour obtenir de nouvelles fonctionnalités, mais le langage reste toujours constant.
Un exemple que je peux donner est, l'un de mes langages préférés C #, que j'utilise assez souvent, de plus en plus de fonctionnalités sont ajoutées à chaque version. Pour en profiter, je dois abandonner des tâches réelles et passer beaucoup de temps à les apprendre au lieu de pouvoir reprendre des concepts triviaux et les combiner moi-même pour résoudre facilement des problèmes plus complexes.
Je suppose donc que je suis à la recherche d'une approche minimaliste où tout est cohérent, logique et aussi orthogonal que possible.
Réponses:
Lisp, Smalltalk. Par coïncidence, ce sont également les meilleures langues de l'ensemble.
Lisp et Smalltalk sont des langages construits autour d'une métaphore unificatrice forte. La métaphore de Lisp est "tout est une liste; cette liste représente à la fois les données et le code (en tant que fonctions)". La métaphore de Smalltalk est "tout est un objet; la seule façon d'invoquer un comportement est de passer un message à un objet". Ces métaphores permettent aux langues d'être stables, minimales et puissantes. Le reste est dans la bibliothèque.
Les choses qui sont appelées "structures de contrôle" dans toutes les langues non minimales (je voulais écrire "gonflées") font partie de la bibliothèque ici (à titre d'exemple:
cond
fonction dans lisp;ifTrue:
/ifFalse:
famille de messages dans Smalltalk implémentent tous deux un conditionnel, où d'autres langues ont unif
mot - clé).On peut voir que Lisp / Smalltalk sont des modes de réalisation presque minimes de leur paradigme et rien de plus (Lisp: programmation fonctionnelle; Smalltalk: programmation orientée objet).
la source
TeX , le système de composition, est très stable depuis la version 3.
Je ne prétendrai pas que cela répond à votre "Donc je suppose que je recherche une approche minimaliste où tout est cohérent, logique et aussi orthogonal que possible." mais elle répond à la plupart de vos autres critères.
la source
C et Fortran sont des langues qui me viennent à l'esprit. Ils sont très stables et leur syntaxe est facilement contenue dans l'esprit. Outre l'écriture de mauvais code vous-même, il y a très peu de surprises lors de l'utilisation de ces langages. Mais je ne les considérerais pas comme d'excellents langages pour le développement rapide d'applications.
Je préfère l'avancement rapide des langages avec des fonctionnalités qui une fois que j'y passe un peu de temps, rendent mon travail considérablement plus facile et le code moins complexe tout en conservant l'expressivité.
la source
Behavior
et lesCollection
hiérarchies). Il me semble que C est beaucoup moins stable avec tous ces C89, C99 et ainsi de suite.D'autres ont déjà dit Lisp donc je dois parler Forth . Il est très facile à mettre en œuvre et les règles du langage sont simples à suivre.
C'est une langue basée sur la pile avec un dictionnaire de «mots». Vous pouvez facilement étendre la langue en utilisant certaines fonctionnalités héritées.
Un exemple TRÈS concis de graphiques de tortues:
L'exécuter ensuite avec
: squiral -50 50 g 20 0 do 100 f 21 t loop ;
vous donne:Merci au blog de cet employé de Microsoft .
la source
Bien que Lisp ait été mentionné, le langage le plus minimaliste que je connaisse est le schéma . J'ai eu du mal à le comprendre dans les cours universitaires où je devais. Mais cela a changé ma façon de penser la programmation, et c'est très minime. Les parenthèses
()
et les espaces sont aussi minimes que toute sa syntaxe .Le seul changement dans la langue a été la décision de convertir les primitives comme
+
,define
(et quelques autres) à built-ins. Cela signifie qu'ils sont disponibles au lancement, mais peuvent être redéfinis pendant l'exécution.la source
Tcl, qui a été conçu pour être minimaliste en premier lieu
À partir de là, sur la page http://www.tcl.tk/about/features.html , l'une des fonctionnalités est qu'il est très facile à apprendre et où les programmeurs occasionnels ou même non programmeurs peuvent l'utiliser.
la source
Il y a peu de langues qui sont restées relativement inchangées depuis leur création en dehors des langues ésotériques qui ne sont probablement pas ce que l'on souhaite (je détesterais essayer d'écrire quelque chose de significatif en Befunge (bien qu'il ait également été modifié depuis sa version originale 1.0). Libération)).
Les langues les plus susceptibles de combler le désir de ne pas avoir à apprendre quoi que ce soit de nouveau sont des langues qui se spécialisent dans la «colle» entre les autres programmes. Langues telles que jcl , bash et similaires. Les langages de script simples peuvent également tomber dans ce domaine - awk étant l'un des leaders.
Une fois que l'on quitte ce domaine, le développement se produit. Soit le langage, soit les frameworks. Dans certaines situations, il est «difficile» de coder pour le langage sans obtenir une partie du cadre qui évolue rapidement.
De nombreuses langues ont un certain degré de compatibilité descendante. On peut toujours écrire Java 1.4 aujourd'hui, bien que ce ne soit probablement pas recommandé - les frameworks que les gens écrivent pour lui changent plus vite que le langage. On peut toujours trouver des compilateurs f77 et f90 pour une spécification de langue qui n'a pas changé depuis 20 ou 40 ans. C, Objective C, C ++ peuvent toujours être codés selon des spécifications plus anciennes du langage - il n'est pas nécessaire de continuer à mettre à jour son code car une nouvelle spécification a été publiée ou un nouveau cadre est disponible.
Certaines langues ont une histoire assez longue, car la langue elle-même est suffisamment puissante pour faire ce que l'on veut. Lisp est le premier candidat dans ce domaine. Forth tombe également dans le domaine "ça n'a pas beaucoup changé".
En passant à des langages de script plus traditionnels, regardez TCL, Perl et Python. Évitez les choses qui sont actuellement dans le domaine de la «mode» qui connaissent une explosion de popularité pour une raison ou une autre (rubis et javascript, je vous regarde). TCL a changé au fil des ans , mais l'un de ses objectifs est d'essayer de maintenir une cohérence de conception. Perl et Python modernes ont tous deux une certaine cohérence de conception, bien que, certes, de nouvelles fonctionnalités puissent se sentir boulonnées (bien qu'il ne soit pas nécessaire de les utiliser).
la source
Je pense que Python est un candidat raisonnable pour un langage avec le minimalisme comme l'un de ses objectifs de conception. Il est basé sur un nombre relativement restreint de concepts de base, et la version 3 a tenté, entre autres, de simplifier un peu le langage en supprimant certaines fonctionnalités.
(Certes, ce n'est pas la même chose qu'un ensemble de fonctionnalités qui est resté le même depuis la version 1, mais je pense que c'est une façon assez arbitraire d'évaluer les langues, étant donné que les auteurs de langues peuvent l'appeler version 1 quand ils le souhaitent.)
la source
Je pense que l'approche de conception "minimaliste" serait illustrée par Tcl. Par exemple, vous pouvez utiliser la commande {catch} avec les valeurs {return -code n} pour implémenter n'importe quelle structure de contrôle que votre imagination peut concevoir, Perl a dû attendre une décennie pour obtenir (officiellement) {switch} - (pas que Perl jamais eu besoin). Vous verrez également que Dodekalogue http://wiki.tcl.tk/10259 couvre complètement la grammaire de Tcl - le reste, quel que soit le paradigme de programmation avec lequel vous souhaitez travailler, peut être exprimé dans cette grammaire.
la source