5 points par GN⁺ 2024-05-23 | 1 commentaires | Partager sur WhatsApp
  • Try Clojure est une page d’initiation de 5 minutes qui permet d’évaluer directement des expressions Clojure dans le navigateur
  • Le contenu saisi dans le REPL à droite de l’écran s’exécute via une boucle read-eval-print loop
  • On peut saisir directement des expressions d’exemple comme (+ 1 2) ou cliquer sur des fragments de code pour les insérer automatiquement
  • Utilisez (help) pour voir les commandes, puis, quand vous êtes prêt, saisissez (start) pour commencer l’initiation
  • Cette page a été créée en ClojureScript, et les informations de réalisation mentionnent Elia Scotto, Michiel Borkent et la communauté Clojure

Exécuter Clojure directement dans le navigateur

  • Try Clojure est conçu comme une courte initiation à Clojure, avec l’invitation « Got 5 minutes? »
  • Dans le REPL à droite, les expressions symboliques Clojure saisies par l’utilisateur sont évaluées
  • Le déroulement de l’initiation est simple
    • saisir directement une expression comme (+ 1 2)
    • cliquer sur un fragment de code pour l’insérer automatiquement
    • utiliser (help) pour voir les commandes
    • démarrer avec (start)

Informations de réalisation

  • La page inclut une citation de Rich Hickey : « If you want everything to be familiar, you'll never learn anything new. »
  • Try Clojure a été créé en ClojureScript, et Elia Scotto y est indiqué comme créateur
  • Des remerciements sont aussi adressés à Michiel Borkent et à la community de Clojure

1 commentaires

 
GN⁺ 2024-05-23
Avis sur Hacker News
  • Ravi de voir ça revenir. Une très ancienne version m’avait donné envie d’essayer Clojure, et ce choix a fini par être la décision la plus marquante de ma carrière
    J’utilise encore Clojure presque tous les jours, au travail comme à la maison, parfois du Clojure standard, parfois Babashka, excellent en remplacement d’un exécuteur de tâches comme Make ou de scripts Zsh
    Go reste aussi un excellent deuxième choix quand il faut compiler en binaire unique, mais Clojure reste de loin le plus confortable grâce à son flux de développement basé sur le REPL, qui donne plus l’impression de dialoguer avec le programme que de suivre la boucle classique écrire-compiler-exécuter
    En y ajoutant le fait que ça tourne sur la JVM, on obtient un ensemble d’outils avec lequel on peut faire son travail avec plaisir. Si vous avez le moindre intérêt pour Lisp ou la programmation fonctionnelle, je vous recommande vivement d’essayer, et si vous utilisez VSCode, le plugin Calva aide énormément

    • La raison de sa « disparition pendant un temps » est que son créateur Anthony Grimes(https://github.com/Raynes) est décédé il y a 7 ans : https://www.reddit.com/r/Clojure/comments/5gyyxw/clojure_ope...
    • Je trouve toujours étonnant le nombre de personnes qui passent facilement à Go après avoir utilisé des langages très expressifs comme Clojure, Rust ou TS
      Passer à un langage moins expressif m’a toujours semblé pénible et frustrant, et je me souviens qu’en passant de Python à Java 5, il fallait 3 à 5 fois plus de code pour exprimer la même chose
      J’imagine que l’idée est de n’écrire que de petites choses dans les langages moins expressifs, comme des scripts shell, de petites fonctions C pour les performances ou les interfaces avec des fonctions externes, ou de petits utilitaires en Go
    • Ce qui m’a toujours empêché d’apprendre Clojure, c’est le « j » dans son nom. J’ai eu bien trop de mauvaises expériences avec le JDK et la JVM, donc à moins que ça veuille dire JavaScript, tout ce qui contient un « J », j’ai envie d’en rester à mille kilomètres
  • Si vous découvrez Clojure et voulez immédiatement faire des essais utiles, je recommande très fortement le runtime Babashka pour le scripting : https://babashka.org
    C’est amusant, accessible, et c’est l’un des éléments les plus aboutis de l’écosystème Clojure
    Contrairement à Clojure JVM complet, le démarrage est très rapide, ce qui en fait un excellent point d’entrée, et un débutant peut travailler de façon quasi interactive avec des outils de surveillance/rechargement de fichiers qu’il connaît déjà, comme nodemon par exemple
    Plus tard, ça vaut le coup de passer à une configuration totalement interactive avec connexion REPL depuis l’éditeur, mais pour un débutant c’est un flux peu familier et la configuration peut être fastidieuse

    • Si vous êtes prêt à prolonger le plaisir sur le web, regardez Biff : https://biffweb.com
    • Le meilleur avec Babashka, c’est qu’aujourd’hui c’est vraiment batteries incluses
      J’ai dû créer une petite UI pour afficher des statistiques d’une application métier, et l’utiliser avec HTMX a été une excellente expérience
      Babashka intègre pratiquement tout ce qu’il faut pour une application web basique, et avec HTMX on peut faire du chargement dynamique dans la page sans avoir à gérer un frontend JavaScript
      On peut aussi lancer nREPL avec bb --nrepl-server, puis connecter un éditeur comme Calva pour développer les scripts de manière interactive, donc si vous avez besoin d’une petite UI web, ça vaut le coup d’y jeter un œil
  • Il existe aussi un site un peu dans le même esprit : https://www.maria.cloud/
    C’est davantage orienté vers l’enseignement de la programmation à des débutants complets, mais je trouve que ses manipulations de type paredit et son évaluation par formulaire se rapprochent bien plus du développement piloté par REPL tel qu’il est réellement pratiqué
    Saisir directement dans une fenêtre de terminal REPL est très mauvais du point de vue de l’ergonomie, et en pratique il est généralement plus réaliste d’envoyer le formulaire sous le curseur à un processus REPL quelque part via quelque chose comme Calva dans VSCode ou CIDER dans Emacs

  • La meilleure raison d’apprendre Clojure, c’est Reagent, et à mon avis c’est de loin la meilleure façon d’utiliser React : https://reagent-project.github.io/
    shadow-cljs facilite l’utilisation des bibliothèques npm : https://github.com/thheller/shadow-cljs
    Côté configuration de base, je me suis fixé sur un backend Go et un frontend Reagent : https://github.com/nathants/aws-gocljs

    • Reagent est bien et existe depuis une dizaine d’années, mais comme React est déjà complexe en soi, j’ai fini par trouver qu’on y ajoutait trop de complexité supplémentaire, donc je suis passé à un wrapper léger de React
      Je voulais voir plus clairement ce qui se passe en interne et interagir plus simplement avec les composants React natifs
      Reagent semble suivre le support expérimental de React 18, mais il a pris du retard sur les évolutions récentes de React et pourrait ne pas bénéficier de tous les gains d’optimisation de performance
      Il utilise encore des class components et pas de hooks, et il y a aussi des inquiétudes sur le fait que la transformation Hiccup à l’exécution puisse nuire aux performances
      Cela dit, dans la plupart des cas ce ne sera probablement pas perceptible, et si on ne fait rien de trop sophistiqué, ça ira très bien. Le modèle UI-as-data de Hiccup me manque, donc je reviendrai peut-être à Reagent un jour
      Pour la gestion d’état, je recommande vivement re-frame : https://day8.github.io/re-frame/
      Au début, ça peut sembler intimidant, mais la documentation est excellente et, une fois le modèle compris, il devient très clair
      Il existe aussi des alternatives comme Helix(https://github.com/lilactown/helix) ou UIx(https://github.com/pitch-io/uix), ainsi que refx(https://github.com/ferdinand-beyer/refx), qui élimine presque toute dépendance à Reagent
      On peut aussi ajouter du code d’interop à UIx/Helix pour y brancher re-frame : https://github.com/pitch-io/uix/blob/master/docs/interop-wit...
    • Un backend Elixir allait aussi très bien avec ça grâce à la puissance de la BEAM VM
    • Je me demande si cette configuration permet le code splitting ou la génération de sites statiques
      En 2024, on ne peut pas se permettre de livrer un fichier HTML vide, et comme ça ruine le référencement, j’aimerais essayer si ce n’est pas le cas
  • La période où j’ai utilisé Clojure a été vraiment excellente, et je le recommande vivement : https://eli.thegreenplace.net/2017/clojure-the-perfect-langu...

  • Le livre Clojure for the Brave and True de Daniel Higginbotham est une ressource vraiment remarquable pour apprendre Clojure, je le recommande fortement
    On peut le lire gratuitement en ligne : https://www.braveclojure.com/clojure-for-the-brave-and-true

    • Je trouve le style trop verbeux, même si je comprends que certaines personnes apprécient ce ton
      Le vrai problème du livre, ce n’est pas Clojure, c’est qu’il commence par enseigner Emacs
      Aujourd’hui, beaucoup de débutants viennent de VSCode, et pour eux c’est une grosse distraction
    • J’aime aussi beaucoup la série Clojure from the ground up d’Aphyr : https://aphyr.com/posts/301-clojure-from-the-ground-up-welco...
    • Si vous n’avez pas d’expérience avec Emacs, il vaut peut-être mieux utiliser le plugin Calva dans VSCode
  • Il y a quelques années, un collègue m’avait conseillé de lire au moins History of Clojure, même si je ne comptais pas essayer Clojure, mais j’ai repoussé : https://dl.acm.org/doi/pdf/10.1145/3386321
    Puis j’ai vu Rich Hickey - Greatest Hits https://changelog.com/posts/rich-hickeys-greatest-hits, j’ai lu History of Clojure et j’ai commencé à l’apprendre immédiatement
    Clojure est l’un des langages les plus amusants pour construire quelque chose, et aussi l’un des plus beaux
    Ce n’est pas tant sa syntaxe que sa façon de pousser à exprimer des idées par une bonne conception et la composition qui stimule agréablement l’esprit
    Si vous cherchez encore l’outil brillant qui vous convient et que rien ne vous a convaincu jusqu’ici, Clojure vaut la peine d’être essayé. C’est l’un des langages les plus concis et les plus puissants que j’aie vus jusqu’à présent

    • J’ai ressenti quelque chose de similaire il y a quelques mois en apprenant Common Lisp
      Je me demande si apprendre Clojure apporte quelque chose en plus, ou si au fond c’est assez similaire
  • Je me demande s’il existe une version de Clojure compilée avec quelque chose comme LLVM
    Ça donne une impression similaire à ce que Scala Native voulait être au départ, mais en pratique ça ne s’est pas vraiment imposé
    J’aime la programmation fonctionnelle, mais en 2024, l’écosystème Java paraît trop vieilli pour être supportable

    • Un travail est en cours pour implémenter le runtime de Clojure en Clang/LLVM, avec aussi des objectifs intéressants comme le hot reloading
      On peut voir ça sur https://jank-lang.org/
      Ce n’est pas encore arrivé à une parité complète avec Clojure sur JVM, mais je suis le développement de près
    • Le commentaire le mieux classé à l’heure actuelle pointe vers https://babashka.org/, mais c’est basé sur GraalVM, pas sur LLVM
      En réalité, ça ne devrait pas être un gros problème
    • Ça arrive bientôt : https://jank-lang.org
    • https://jank-lang.org/
  • Liens connexes :
    Try Clojure – Un tutoriel interactif dans le navigateur - https://news.ycombinator.com/item?id=30423856 - février 2022, 93 commentaires
    Try Clojure in your browser - https://news.ycombinator.com/item?id=3366526 - décembre 2011, 26 commentaires
    Try Clojure - https://news.ycombinator.com/item?id=1359682 - mai 2010, 60 commentaires

  • Clojure gagne en popularité au Mexique, et j’ai l’impression qu’il y a une dynamique similaire au Brésil à cause de Nubank
    C’est un endroit où les informaticiens veulent aller travailler, et il semble qu’on y travaille surtout en Clojure
    Il me semble qu’ils ont embauché certains membres clés du langage et qu’à un moment ils ont aussi racheté l’entreprise du créateur d’Elixir, José Valim
    Malgré cela, ça semble toujours être avant tout une entreprise qui utilise principalement Clojure

    • Nubank a racheté en 2020 Cognitect, la société de conseil derrière Clojure, et a aussi acquis Platformatec, l’employeur de José Valim
      Cette dernière acquisition visait à récupérer l’expertise de Platformatec en gestion de projet (https://building.nubank.com.br/tech-perspectives-behind-nuba...), et à ma connaissance il n’y a pas de code Elixir en production chez Nubank
      Il y a du Python de « l’autre côté » des pipelines ETL, mais côté user-facing, à ma connaissance, le backend est en Clojure et les apps Android et iOS sont en TypeScript
    • Je croise souvent des utilisateurs de Clojure dont le nom semble sinophone
      Je me demande si Clojure en Chine représente aussi une tendance significative