Existe-t-il des langages de programmation qui suivent une approche de développement minimaliste?

26

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.

Joan Venge
la source
7
Un domaine de travail de la plupart des développeurs est de résoudre les problèmes de manière efficace. L'efficacité nécessite d'apprendre constamment de nouvelles choses. De nouvelles fonctionnalités de langage, de nouveaux cadres, de nouveaux outils sont développés pour être plus efficaces. En les apprenant, vous vous concentrez réellement sur votre travail.
Arseni Mourzenko
4
Eh bien, tout le monde qui programme n'est pas nécessairement un programmeur à temps plein. C'est juste un autre outil pour de nombreuses autres professions.
Joan Venge
4
Ensuite, encore une fois, personne ne vous oblige à apprendre quoi que ce soit. Si C # 1.0 résout vos besoins, ne perdez pas votre temps à apprendre quelque chose dont vous n'avez pas besoin.
Arseni Mourzenko
11
Je pense que la question est légitime: pourquoi appliquer les principes KISS et YAGNI aux artefacts logiciels mais pas aux langages de programmation? Lorsqu'un langage a suffisamment de fonctionnalités de base, le développement ultérieur est (à mon humble avis) principalement dû au marketing (la concurrence avec d'autres langages oblige les entreprises à bourrer les langues de fonctionnalités pour garder leurs clients).
Giorgio
2
@MainMa: "L'efficacité nécessite d'apprendre constamment de nouvelles choses.": Un langage de programmation complexe, doté de trop de fonctionnalités, peut diminuer l'efficacité au lieu de l'augmenter. Par exemple, dans une équipe, cela peut conduire différents développeurs à utiliser différents sous-ensembles du langage, ce qui rend les révisions de code, la correction de bogues et la maintenance moins efficaces.
Giorgio

Réponses:

32

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: condfonction dans lisp; ifTrue:/ ifFalse:famille de messages dans Smalltalk implémentent tous deux un conditionnel, où d'autres langues ont un ifmot - 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).

herby
la source
4
De bonnes implémentations Lisp peuvent rivaliser avec C, de bonnes implémentations Smalltalk peuvent rivaliser avec C ++. Heck, la machine virtuelle Java HotSopt d'Oracle, la machine virtuelle la plus rapide de la planète, est une machine virtuelle Smalltalk, elle n'utilise même pas d'informations de type statique pour ses optimisations.
Jörg W Mittag
9
Cette réponse est trop petite pour être constructive. Manque de détails ou de preuves à l'appui.
Jimmy Hoffa
2
-1 Lisp? LISP ? Sérieusement? Après les guerres LISP des années 1970, les tentatives répétées d'une LISP Unity, et enfin Common Lisp? Non, même LISP n'a pas réussi à "faire" à 1.0.
Ross Patterson
1
Je pense que vous avez souligné une idée très importante: qu'un langage devrait être construit autour d'une (ou de quelques) métaphore (s) unificatrice (s) forte (s), c'est-à-dire qu'un langage de programmation devrait vous offrir un moyen d'organiser vos pensées. Je pense que la complexité de certaines langues est en partie due à l'absence d'une telle métaphore: ces langues continuent de croître en incorporant de nouvelles fonctionnalités car elles n'ont pas de vue unificatrice sous-jacente.
Giorgio
6

TeX , le système de composition, est très stable depuis la version 3.

Depuis la version 3, TeX utilise un système de numérotation des versions idiosyncrasique, où les mises à jour ont été indiquées en ajoutant un chiffre supplémentaire à la fin de la décimale, de sorte que le numéro de version approche asymptotiquement π. Cela reflète le fait que TeX est maintenant très stable et que seules des mises à jour mineures sont prévues. La version actuelle de TeX est 3.1415926; il a été mis à jour pour la dernière fois en mars 2008. La conception a été gelée après la version 3.0, et aucune nouvelle fonctionnalité ou modification fondamentale ne sera ajoutée, donc toutes les versions plus récentes ne contiendront que des corrections de bogues. Même si Donald Knuth lui-même a suggéré quelques domaines dans lesquels TeX aurait pu être amélioré, il a indiqué qu'il croyait fermement qu'avoir un système inchangé qui produirait la même sortie maintenant et à l'avenir est plus important que l'introduction de nouvelles fonctionnalités. Pour cette raison, il a déclaré que "

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.

Steven Schlansker
la source
6

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é.

Peter Smith
la source
1
Je suis d'accord avec le design minimaliste de C. Même si le langage a été mis à jour au cours des années, le modèle de conception et de programmation de base du langage est toujours reconnaissable (d'autres langages subissent une révolution tous les 5 à 10 ans). Bien sûr, C n'est pas un langage à usage général comme il l'était auparavant, car il a été remplacé par d'autres langages dans des domaines d'application spécifiques (applications de bureau, applications Web, etc.).
Giorgio
@Giorgio: Pas tous. Les minimes (comme ceux que j'ai mentionnés) ne le font pas. Il n'y a eu aucun changement dans la syntaxe Smalltalk depuis sa création, sauf un, apporté par Squeak: les tableaux calculés à accolades. La bibliothèque est également très stable au cœur ( Behavioret les Collectionhiérarchies). Il me semble que C est beaucoup moins stable avec tous ces C89, C99 et ainsi de suite.
herby
1
@herby: Vous avez probablement raison de dire que d'autres langages comme Smalltalk sont plus stables que C. Pourtant, le modèle de programmation de base de C est le même qu'il était, disons, il y a 20 ans. D'autres langues ont subi de profonds changements. Donc, encore une fois, je ne prétends pas que C est le langage le plus stable qui soit, pourtant, IMO il est beaucoup plus stable que beaucoup d'autres langages traditionnels.
Giorgio
6

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:

\ 8.8 fixed point sine table lookup
-2 var n F9F2 , E9DD , CEBD , AA95 , 7F67 , 4E34 , 1A c,
: s abs 3C mod dup 1D > if 3C swap - then dup E > if
  -1 1E rot - else 1 swap then n + c@ 1+ * ;

0 var x 0 var y 0 var a
0 var q 0 var w 
: c 9380 C80 0 fill ; \ clear screen
: k >r 50 + 8 << r> ! ;
: m dup q @ * x +! w @ * y +! ; \ move n-pixels (without drawing)
: g y k x k ; \ go to x,y coord
: h dup a ! dup s w ! 2D + s q ! ; \ heading
: f >r q @ x @ y @ w @ r 0 do >r r + >r over + \ forward n-pixels
  dup 8 >> r 8 >> plot r> r> loop o y ! x ! o r> o ;
: e key 0 vmode cls ; \ end
: b 1 vmode 1 pen c 0 0 g 0 h ; \ begin
: t a @ + h ; \ turn n-degrees

L'exécuter ensuite avec : squiral -50 50 g 20 0 do 100 f 21 t loop ;vous donne:

spirale

Merci au blog de cet employé de Microsoft .

Austin Henley
la source
1
Comment cela a-t-il été à nouveau voté? Forth pourrait être un bon candidat, mais l'exemple donné n'est pas beaucoup mieux que le bruit de ligne exécutable; un excellent exemple de la raison pour laquelle l'obsession du PLT pour la gravité est contraire à ce dont les professionnels ont réellement besoin.
Telastyn
4
@Telastyn Ce n'était pas sa question.
Austin Henley
4

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.

Ramzi Kahil
la source
2

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.

Egryan
la source
3
Cela me semble exact, mais les réponses sur une seule ligne sans informations ou détails de support sont de qualité trop faible pour être utiles à quiconque. Veuillez ajouter quelques bons détails (et pas seulement un lien sans résumé) et vous obtiendrez un vote positif de ma part
Jimmy Hoffa
ok, fera l'affaire en raison de la fermeture de la question, je ne sais pas combien d'efforts cela vaut
Egryan
1
Avec de la chance, il sera rouvert des votes. C'est une bonne question. Je pourrais poster sur Meta pour essayer de le rouvrir s'il n'est pas rouvert bientôt par la communauté.
Jimmy Hoffa
Je suis d'accord et je prévois d'ajouter plus au message une fois que je serai sorti du travail, je n'ai pas de chance rapide de trouver les liens pertinents
Egryan
Recherchez dans Google une "étude de cas sur le langage TCL", "Tcl: un langage de commande intégrable " et tcl.tk/about/history.html - ils donnent quelques points clés. Cependant, je ne suis pas sûr qu'ils soutiennent le désir du PO - il semble que TCL ait été étendu à partir de sa version originale 1.0 (voir wiki.tcl.tk/1721 )
2

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
2

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.)

Paul D. Waite
la source
La date de réponse de décembre 2012 vous donne un laissez-passer gratuit, car depuis lors, nous avons la monstruosité connue sous le nom de Python 3, qui rivalise avec C ++ en voulant ajouter une pile de déchets de cruft, tout en supprimant la simplicité. C'est maintenant l'un des langages les plus infestés d'addons dans l'informatique.
Thomas Browne
-1

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.

user132043
la source
cela ne fait que répéter l'argument avancé et expliqué dans une réponse postée il y a deux ans
moucher
En me référant au post original, je suppose que je ne peux que dire orthogonalité = histoire (la famille des langages C) et assimilation croisée récente; J'ai vu à travers les langages du système d'exploitation une approche parmi toutes les langues pour les cadres Web MVC généralisés, les coroutines, etc. En dehors de cette tendance, je peux noter l'ajout remarquable de fermetures à C11 et le prochain lambda Java (qui reflètent tous deux le développement dans les langages de "scripting" du système d'exploitation).
user132043