clojure-italy 2021-02-23

Pensiero del mattino… sempre un po’ disturbato da qualunque babashka or altri scripting che sono quasi-clojure ma non 100%. Effettivamente ti portano sulla strada di strutturare scripting in maniera imperativa, singolo-file con poca struttura. E visto che molte cose sono implicite, non posso cambiare “bb” con “clj” e tutto funziona come prima

ah no, scusa

lo usiamo come script, fa partire clj command line che espone REPL 😄

niente di particolare, prima era uno script bash che abbiamo riscritto in bb

ok ha senso, come replacement di bash++ lo capisco

A lavoro usiamo molto bb e da una parte ti do ragione

Avevamo uno script bb che effettivamente era singolo file, top-to-bottom, con def etc. etc.

L'abbiamo riscritto in maniera piu' "funzionale" o se non altro con una sorta di pipeline patterns (simile agli interceptor). C'e' un context che parte {} e tutte le esecuzioni vengono chiamate in una threading macro

Il nostro start script per development e' fatto cosi':

(-> {:cli-options cli-options
     :env (into {} (System/getenv))
     :clj-extra []}
              assign-envs
              check-secrets-file
              copy-settings-xml
              detect-os
              detect-clojure
              detect-graalvm
              detect-rebl
              validate-clojure-version
              validate-graalvm-version
              read-secrets-file
              create-docker-runtime-network
              cider-version
              wait-for-nrepl-port
              yarn-install
              generate-assets
              validate-vault-token
              set-clojure-development-image
              configure-shared-mounts
              clj-extra-args
              start-journal)
(che palle indentazione)

questo stile aiuta molto nei drawbacks che descrivi, non potremmo comunque sostituire bb a clj direi

generalmente cerchiamo di rendere tutto una funzione che viene chiamata in un ctx con altri arguments, se necessario

Interessante. Quindi questo script bb che cosa inizializza? Alla fine ti ritrovi un repl standard o qualcos’altro?

Si fa partire tutto quello che e' necessario per avere la versione in dev up and running e un REPL standard col quale puoi fare jack in o connetterti normalmente (porta e' fissa)

ok. Pensavo the bb non fosse in grado di runnare un intera Clojure app, ma che ci fossero restrizioni (perche’ e’ una reimplementazione Clojure). Ci sono vari tickets in bb aperti per “compatilita’” con varie libs.