Il existe des cas d'utilisation extrêmement intéressants. J'ai pu le constater en développant une application graphique en temps réel, alors qu'elle s'exécutait à côté de mon Emacs : J'ai ajouté le code d'un nouveau bouton et j'ai tapé "C-c C-c" pour compiler cette seule fonction, et le bouton a juste est apparu dans la fenêtre ! Je n'ai pas eu à fermer et rouvrir l'application. J'ai ensuite commencé à modifier les widgets et à manipuler la mise en page, et la fenêtre ouverte se réorganisait instantanément - les boutons se déplaçaient, de nouveaux champs de texte apparaissaient, etc. dès que j'exécutais chaque petite modification que j'avais apportée.
Un autre exemple est un excellent screencast sur la bibliothèque Clojure OpenGL "Penumbra" où le programmeur crée un jeu de tétris en 3D en temps réel. Il commence avec une fenêtre OpenGL vide à côté de son emacs. Il définit un objet cube - C-M-x - et il est à l'écran. Il lance une commande pour le faire tourner, il commence immédiatement à tourner. Il exécute une boucle définissant 5 autres cubes à différents endroits, pop-pop-pop-pop-pop ils apparaissent. Tout est immédiatement réactif, avec toute la boîte à outils OpenGL à portée de main. Ajoutez une nouvelle texture de surface à votre cube et voyez-la apparaître immédiatement. Il devient un monde 3D malléable - le code modifie dynamiquement le monde existant au lieu de fermer et rouvrir le canevas 3D à chaque changement.
Screencast sur le Livecoding de Penumbra - Téléchargez la version HD pour une meilleure expérience.
Il y a également une excellente présentation/diffusion d'écran sur la bibliothèque audio "Overtone" pour Clojure. Cette bibliothèque est une boîte à outils de synthétiseur dans laquelle vous disposez d'un ensemble de fonctions de synthèse pour manipuler l'onde sonore. Pendant la présentation, le développeur écrit un bout de code qui lance la lecture d'un son. Il passe ensuite dix secondes à écrire une boucle qui joue ce son 10 fois mais en augmentant la fréquence à chaque fois, et encore C-M-x et vous l'entendez, des notes qui montent plus haut. En l'espace de 20 minutes en temps réel, il crée une chanson. On dirait que c'est très amusant.
Lien vers la présentation de l'Overtone
D'autres utilisations seraient, par exemple : Exploration du Web/exploitation des données - développez et affinez des algorithmes pour extraire des informations en temps réel, en voyant les données renvoyées à chaque étape ; Programmation robotique - envoyez des commandes à un robot pendant qu'il est en direct ; Reconnaissance faciale/image - avec une bibliothèque comme OpenCV, regardez vos modifications mettre instantanément à jour ce que la bibliothèque reconnaît dans une image/vidéo pendant que vous développez le code ; Travail mathématique (Clojure a " Incanter " pour les statistiques) ; et tout environnement où vous voulez voir immédiatement l'effet de vos modifications sur les données avec lesquelles vous travaillez.
C'est donc l'aspect le plus amusant d'avoir un REPL en face de soi. Des choses qui n'étaient pas tangibles, malléables, interactives, commencent à l'être. La conception d'interfaces graphiques, les graphiques 3D, la production programmatique de sons, l'extraction et la transformation de données, ces choses ont normalement été faites à distance. Mais avec Clojure (et dans une certaine mesure avec d'autres langages dynamiques aussi), c'est rendu vraiment tangible et immédiat ; vous voyez chaque changement dès que vous écrivez le code, et si quelque chose ne fonctionne pas ou si vous n'obtenez pas le résultat attendu, vous changez simplement ce qui vous a échappé et vous réexécutez immédiatement.
Clojure est très orienté dans ce sens. Le plus fou, c'est qu'il est possible d'utiliser les bibliothèques Java en temps réel de la même manière, bien que Java lui-même ne le puisse pas ! Ainsi, Overtone utilise une bibliothèque de synthétiseurs Java en temps réel alors que Java ne le permet pas, Penumbra utilise les liaisons OpenGL de Java, etc. C'est parce que Rich Hickey a conçu Clojure de manière à ce qu'il puisse compiler en bytecode JVM à la volée. C'est un langage étonnant - Clojure a apporté une énorme contribution à la manière dont la programmation peut être incroyablement amusante et productive.