5 Punkte von GN⁺ 2024-05-23 | 1 Kommentare | Auf WhatsApp teilen
  • Try Clojure ist eine 5-minütige Mitmach-Seite, auf der sich Clojure-Ausdrücke direkt im Browser auswerten lassen
  • Die Eingaben im REPL auf der rechten Seite werden als read-eval-print loop ausgeführt
  • Beispielausdrücke wie (+ 1 2) können direkt eingegeben oder per Klick auf Code-Snippets automatisch eingefügt werden
  • Mit (help) lassen sich die Befehle anzeigen, und wenn alles bereit ist, startet das Erlebnis mit (start)
  • Die Seite wurde mit ClojureScript erstellt; Elia Scotto, Michiel Borkent und die Clojure-Community sind in den Mitwirkendeninformationen genannt

Clojure direkt im Browser ausführen

  • Try Clojure ist als kurzes Clojure-Erlebnis mit dem Hinweis „Got 5 minutes?“ aufgebaut
  • Im REPL auf der rechten Seite werden die vom Nutzer eingegebenen Clojure symbolic expressions ausgewertet
  • Der Ablauf ist einfach
    • Ausdrücke wie (+ 1 2) direkt eingeben
    • Auf Code-Snippets klicken, um sie automatisch einzufügen
    • Mit (help) die Befehle anzeigen
    • Mit (start) beginnen

Informationen zur Erstellung

  • Die Seite enthält ein Zitat von Rich Hickey: „If you want everything to be familiar, you'll never learn anything new.“
  • Try Clojure wurde mit ClojureScript erstellt; als Ersteller ist Elia Scotto genannt
  • Außerdem wird Michiel Borkent sowie der Clojure-Community gedankt

1 Kommentare

 
GN⁺ 2024-05-23
Hacker-News-Kommentare
  • Schön, dass das wieder da ist. Eine sehr alte Version davon hat mich dazu gebracht, Clojure auszuprobieren, und diese Entscheidung wurde zur prägendsten meiner Karriere.
    Ich nutze Clojure immer noch fast täglich bei der Arbeit und zu Hause – manchmal Standard-Clojure, manchmal das großartige Babashka als Ersatz für Task-Runner wie Make oder Zsh-Skripte.
    Go ist ebenfalls eine starke zweite Wahl, wenn ich zu einem einzelnen Binary kompilieren muss, aber Clojure fühlt sich für mich am angenehmsten an, weil der REPL-basierte Entwicklungs-Workflow eher wie ein Dialog mit dem Programm wirkt als die übliche Schreiben-Kompilieren-Ausführen-Schleife.
    Zusammen mit der Tatsache, dass es auf der JVM läuft, ergibt das ein Toolset, mit dem man Dinge mit Freude erledigen kann. Wenn du auch nur ein wenig Interesse an Lisp und funktionaler Programmierung hast, empfehle ich dringend, es auszuprobieren; wenn du VSCode verwendest, ist das Calva-Plugin eine große Hilfe.

    • Der „Grund, warum es eine Zeit lang verschwunden war“, ist, dass sein Schöpfer Anthony Grimes (https://github.com/Raynes) vor sieben Jahren verstorben ist: https://www.reddit.com/r/Clojure/comments/5gyyxw/clojure_ope...
    • Ich finde es immer erstaunlich, dass Leute, die ausdrucksstarke Sprachen wie Clojure, Rust oder TS verwenden, so leicht zu Go wechseln können.
      Der Wechsel zu einer weniger ausdrucksstarken Sprache war für mich schmerzhaft und nervig; ich erinnere mich, dass beim Wechsel von Python zu Java 5 Code für denselben Inhalt drei- bis fünfmal länger wurde.
      Vermutlich liegt der Schlüssel darin, mit weniger ausdrucksstarken Sprachen nur kleine Dinge zu schreiben, etwa Shell-Skripte, kleine C-Funktionen für Performance oder Foreign-Function-Interfaces oder kleine Go-Utilities.
    • Was mich immer davon abgehalten hat, Clojure zu lernen, war das „j“ im Namen. Ich habe so viele schlechte Erfahrungen mit JDK und JVM gemacht, dass ich von allem mit „J“ – sofern es nicht JavaScript bedeutet – am liebsten etwa tausend Kilometer Abstand halten möchte.
  • Wenn du Clojure zum ersten Mal ausprobierst und sofort sinnvoll damit experimentieren willst, empfehle ich nachdrücklich die Babashka-Runtime fürs Scripting: https://babashka.org
    Sie macht Spaß, ist zugänglich und gehört zu den ausgereifteren Teilen des Clojure-Ökosystems.
    Im Unterschied zu vollständigem JVM-Clojure startet sie sehr schnell, ist daher ein guter Einstiegspunkt, und Anfänger können mit bereits vertrauten File-Watching-/Reloading-Tools wie etwa nodemon quasi interaktiv arbeiten.
    Später lohnt sich der Wechsel zu einem vollständig interaktiven Setup mit REPL-Verbindung im Editor, aber für Anfänger ist dieser Workflow ungewohnt und die Einrichtung kann umständlich sein.

    • Wenn du bereit bist, den Spaß aufs Web auszuweiten, schau dir Biff an: https://biffweb.com
    • Das Beste an Babashka ist, dass es heutzutage wirklich Batteries included ist.
      Ich musste eine kleine UI bauen, die Statistiken einer Arbeits-App anzeigt, und habe es zusammen mit HTMX verwendet – das war eine sehr gute Erfahrung.
      Babashka bringt fast alles mit, was man für eine einfache Web-App braucht, und mit HTMX kann man dynamisches Laden auf der Seite umsetzen, ohne sich mit einem JavaScript-Frontend beschäftigen zu müssen.
      Außerdem kann man mit bb --nrepl-server einen nREPL starten und dann einen Editor wie Calva verbinden, um Skripte interaktiv zu entwickeln; wenn du eine einfache Web-UI brauchst, lohnt sich ein Blick darauf.
  • Eine Website in ähnlicher Richtung ist auch https://www.maria.cloud/
    Sie ist eher darauf ausgerichtet, kompletten Anfängern Programmieren beizubringen, aber die grundlegenden paredit-artigen Bearbeitungen und die Auswertung auf Form-Ebene kommen der tatsächlich genutzten REPL-getriebenen Entwicklung meiner Meinung nach deutlich näher.
    Direkt in ein REPL-Terminalfenster zu tippen, hat eine sehr schlechte Ergonomie; in der Praxis ist es meist realistischer, mit etwas wie Calva in VSCode oder CIDER in Emacs die Form unter dem Cursor an einen irgendwo laufenden REPL-Prozess zu senden.

  • Der beste Grund, Clojure zu lernen, ist Reagent, und ich halte es mit Abstand für die beste Art, React zu verwenden: https://reagent-project.github.io/
    shadow-cljs erleichtert die Nutzung von npm-Libraries: https://github.com/thheller/shadow-cljs
    Als Grundkonfiguration habe ich mich auf ein Go-Backend und ein Reagent-Frontend festgelegt: https://github.com/nathants/aws-gocljs

    • Reagent ist gut und gibt es seit etwa 10 Jahren, aber React selbst ist schon komplex, und ich hatte das Gefühl, dass darauf zu viel zusätzliche Komplexität gelegt wird. Deshalb bin ich zu einem dünnen Wrapper um React gewechselt
      Ich wollte klarer sehen, was intern passiert, und einfacher mit nativen React-Komponenten interoperieren
      Es scheint zwar bei der experimentellen Unterstützung für React 18 aufzuholen, aber Reagent ist bei den aktuellen React-Entwicklungen zurückgefallen und profitiert möglicherweise nicht von allen Performance-Optimierungen
      Es verwendet noch class components und keine Hooks, und es gibt auch Bedenken, dass die Hiccup-Laufzeittransformation die Performance verschlechtern könnte
      In den meisten Fällen dürfte das aber kein spürbares Problem sein, und wenn man nichts Ausgefallenes macht, ist es wohl in Ordnung. Das UI-as-data-Modell von Hiccup vermisse ich, daher könnte ich irgendwann zu Reagent zurückkehren
      Für State Management empfehle ich re-frame nachdrücklich: https://day8.github.io/re-frame/
      Anfangs kann es abschreckend wirken, aber die Dokumentation ist hervorragend, und sobald man es verstanden hat, ist das Modell sehr klar
      Es gibt auch Alternativen wie Helix(https://github.com/lilactown/helix) oder UIx(https://github.com/pitch-io/uix) sowie refx(https://github.com/ferdinand-beyer/refx), das die Reagent-Abhängigkeit fast vollständig entfernt hat
      Oder man kann UIx/Helix Interop-Code hinzufügen und re-frame anbinden: https://github.com/pitch-io/uix/blob/master/docs/interop-wit...
    • Ein Elixir-Backend passte dank der Stärke der BEAM VM ebenfalls gut
    • Ich frage mich, ob diese Konfiguration Code Splitting oder statische Site-Generierung unterstützt
      Im Jahr 2024 kann man keine leere HTML-Datei ausliefern, weil das die Suchmaschinenoptimierung ruiniert; wenn das also nicht der Fall ist, würde ich es gern ausprobieren
  • Die Zeit, in der ich Clojure genutzt habe, war wirklich großartig, und ich empfehle es sehr: https://eli.thegreenplace.net/2017/clojure-the-perfect-langu...

  • Daniel Higginbothams Clojure for the Brave and True ist eine wirklich hervorragende Ressource, um Clojure zu lernen, und ich empfehle sie nachdrücklich
    Man kann es kostenlos online lesen: https://www.braveclojure.com/clojure-for-the-brave-and-true

    • Ich finde den Stil zu weitschweifig, verstehe aber, dass es Leute gibt, die genau diesen Stil mögen
      Das eigentliche Problem des Buchs ist nicht Clojure, sondern dass es zuerst Emacs zu lehren beginnt
      Heutzutage kommen wahrscheinlich viele Anfänger aus VSCode, und für sie wird das zu einer großen Ablenkung
    • Aphyrs Reihe Clojure from the ground up gefällt mir ebenfalls sehr gut: https://aphyr.com/posts/301-clojure-from-the-ground-up-welco...
    • Wenn man keine Emacs-Erfahrung hat, ist es möglicherweise besser, in VSCode das Calva-Plugin zu verwenden
  • Vor ein paar Jahren riet mir ein Kollege, History of Clojure zu lesen, selbst wenn ich Clojure nicht ausprobieren würde, aber ich habe es aufgeschoben: https://dl.acm.org/doi/pdf/10.1145/3386321
    Dann sah ich Rich Hickey - Greatest Hits https://changelog.com/posts/rich-hickeys-greatest-hits, las History of Clojure und begann direkt danach, es zu lernen
    Clojure ist eine der unterhaltsamsten Sprachen, um etwas zu bauen, und zugleich eine der schönsten
    Nicht so sehr wegen der Syntax selbst, sondern wegen der Art, wie sie einen durch gutes Design und Komposition Gedanken ausdrücken lässt – das stimuliert den Kopf auf angenehme Weise
    Wenn man noch nach genau dem passenden, glänzenden Werkzeug sucht und bisher nichts wirklich gezündet hat, lohnt es sich, Clojure auszuprobieren. Es gehört zu den knappsten und zugleich mächtigsten Sprachen, die ich bisher gesehen habe

    • Vor ein paar Monaten hatte ich beim Lernen von Common Lisp ein ähnliches Gefühl
      Ich frage mich, ob man durch das Lernen von Clojure darüber hinaus noch etwas gewinnt oder ob es im Großen und Ganzen ähnlich ist
  • Ich frage mich, ob es eine Clojure-Version gibt, die zu etwas wie LLVM kompiliert wird
    Das fühlt sich ein wenig danach an, was Scala Native ursprünglich sein wollte, hat sich in der Praxis aber nicht so etabliert
    Ich mag funktionale Programmierung, aber das Java-Ökosystem fühlt sich 2024 zu altbacken an, um es noch auszuhalten

    • Es gibt laufende Arbeiten daran, die Clojure-Runtime mit Clang/LLVM zu implementieren, und interessante Funktionen wie Hot Reloading sind ebenfalls als Ziel vorgesehen
      Zu sehen unter https://jank-lang.org/
      Noch ist keine vollständige Feature-Parität mit JVM Clojure erreicht, aber ich verfolge die Entwicklung aufmerksam
    • Der aktuell oberste Kommentar verweist auf https://babashka.org/, aber das basiert nicht auf LLVM, sondern auf GraalVM
      Eigentlich dürfte das kein großes Problem sein
    • Kommt bald: https://jank-lang.org
    • https://jank-lang.org/
  • Verwandte Links:
    Try Clojure – An interactive tutorial in the browser - https://news.ycombinator.com/item?id=30423856 - Februar 2022, 93 Kommentare
    Try Clojure in your browser - https://news.ycombinator.com/item?id=3366526 - Dezember 2011, 26 Kommentare
    Try Clojure - https://news.ycombinator.com/item?id=1359682 - Mai 2010, 60 Kommentare

  • In Mexiko gewinnt Clojure an Beliebtheit, und in Brasilien dürfte es wegen Nubank eine ähnliche Entwicklung geben
    Das ist ein Ort, an dem Informatiker gerne arbeiten wollen, und offenbar wird dort hauptsächlich mit Clojure gearbeitet
    Soweit ich weiß, haben sie einige Kernmitglieder der Sprache eingestellt, und ich meine mich zu erinnern, dass sie irgendwann auch die Firma von Elixir-Schöpfer José Valim übernommen haben
    Trotzdem wirkt es weiterhin wie ein Unternehmen, das hauptsächlich Clojure einsetzt

    • Nubank hat 2020 Cognitect, die Beratungsfirma hinter Clojure, übernommen, außerdem Platformatec, den damaligen Arbeitgeber von José Valim
      Letzteres geschah, um Platformatecs Expertise im Projektmanagement zu gewinnen (https://building.nubank.com.br/tech-perspectives-behind-nuba...); soweit ich weiß, läuft bei Nubank kein Elixir-Code
      Auf der „anderen Seite“ der ETL-Pipeline gibt es Python, aber im nutzerseitigen Bereich besteht das Backend meines Wissens aus Clojure, und die Android- und iOS-Apps sind in TypeScript geschrieben
    • Ich stoße häufig auf Clojure-Nutzer, deren Namen chinesischsprachig wirken
      Ich frage mich, ob Clojure auch in China eine nennenswerte Strömung ist