Fork me on GitHub
#clojure-norway
<
2024-03-08
>
leifericf08:03:41

En kollega spurte meg forleden om hva som er Clojure sin største svakhet. Det måtte jeg gruble på en stund og jeg vet ikke om jeg har et godt svar. Det jeg kom frem til som kandidater var: A) Syntaksen og paradigmet fremstår ofte som fremmed og derfor kan virke avskrekkende for mange utviklere, særlig de med erfaring fra andre C-stil språk og objekt-orientert programmering. Fight or flight! B) Utviklere som har brent seg på Java kan ha forutinntatte meninger og avskrive Clojure fordi de ikke intuitivt klarer å differensiere mellom Java (språket) og JVM (runtime). Alt som er forbundet med Java blir ofte prematurt stemplet som negativt og avfeid uten forståelse. C) Fraværet av store rammeverk, som de fleste utviklere er vane ved fra andre språk og deres økosystemer, gjør at Clojure for mange kan fremstå som umodent og tungvindt å bruke. Dette i kombinasjon med at det er et stort antall små og fokuserte biblioteker hvor utvikleren må ta flere valg, og at mange av bibliotekene er stabile og ferdige, hvilket gjør at de fremstår som pensjonerte på GitHub. Tanker?

2food08:03:38

Synes det var godt beskrevet 👍 Selv om jeg ikke ser noen av disse punktene som svakheter ved Clojure i seg selv. Men heller måter det skiller seg fra andre språk som kan være utfordrende for nye.

👍 1
slipset08:03:05

Jeg tror også at mangelen på en stor oppside er viktig. Lissom, hvorfor skal jeg gidde å lære meg disse nye greiene?

2food08:03:07

Funksjonellt, immutable data, og REPL er store oppsider for meg. Men disse fordelene "selger" liksom ikke så bra føler jeg.

pez08:03:54

Jag känner inte till sammanhanget som frågan ställdes i, men utan det ser svaret ut att missa målet. Du svarar på vad som kan göra att någon väljer att inte ge Clojure en chans. Vilket väl kan ses som svagheter, men jag skulle tolka frågan som vad som är språkets svagheter.

slipset08:03:56

Jeg tror dette er fordeler du oppdager etterhvert. Men det er ikke sånn at «wow, nå er jeg 10x» to dager etter at du begynte med Clojure. Man spiller liksom The long game.

👍 2
leifericf08:03:40

Ja, Clojure mangler ikke oppsider, men jeg tror det ofte kan være vanskelig å beskrive dem og selge dem inn. Det er med grunnleggende/lavnivå oppsider av en annen karakter sammenlignet med andre språk.

pez08:03:44

Jag har själv svårt att svara på den frågan. Det beror på vad man ska använda det till. Feks, Embedded? Svaghet: Clojure ryms inte.

pez08:03:28

Spel? Om det är grafikintensivt kommer inte Clojure att hänga med.

leifericf08:03:59

Hver gang jeg har prøvd å beskrive/selge inn "REPL-driven development" har de fleste respondert med: "REPL har mange språk. Det er ikke noe nytt eller revolusjonerende." Jeg har begynt å si "interaktiv utvikling" og "connected editor" istedenfor, og da hører jeg: "Men det er en særs dårlig ide å endre på kode som kjører, etc." Når jeg viser det i VS Code med Calva derimot, da blir folk ofte sjokkert hvor smooth det er. "Seeing is believing."

pez08:03:12

Ditt svar B är intressant. Clojure fixar felen i Java. Det borde kanske säljas in hårdare på den punkten. 😃

pez08:03:45

Jag har svårt för termen REPL-driven utveckling. Det är ju jag som driver, inte REPLen. Dessutom leder det tanken snett. Jag kallar det konsekvent för interaktiv utveckling.

leifericf08:03:09

Punkt B var min største "gut reaction" da @U5E9UP66T fortalte meg om Clojure første gangen. "Æsj! Java. Nei, takk."

slipset08:03:10

Jeg mener at sammensausingen av jvm, Java og javas std lib er veldig uheldig.

pez08:03:22

Vad betyder uheldig? 😃

leifericf08:03:35

Jepp! Nå i dag forstår jeg at Clojure er runtime agnostic i den forstand at det finnes varianter for mange ulike runtimes, og at JVM Clojure ikke har en direkte kobling til Java språket å gjøre, men tilbyr interop-fasiliteter for å bruke biblioteker skrevet i Java.

leifericf08:03:40

Uhendig = Unfortunate

🙏 1
pez09:03:03

> JVM Clojure ikke har noe med Java språket å gjøre Jag skulle hävda att det har enormt mycket med Java-språket att göra.

leifericf09:03:26

Ja, hehe. Det kom ut litt feil. Det jeg mente å si er at jeg trenger ikke å lese eller skrive Java 🙂 (Foruten exceptions og sånt.)

pez09:03:34

Jag noterar att Primeagen reagerar liknande på när Java och JVM nämns i sammanhanget Clojure. Han ser det som avtändande.

pez09:03:56

För mig är Clojure’s styrka att det gör programmering roligt för mig.

leifericf09:03:26

Noen ganger har jeg tenkt at Clojure fortjener sin egen runtime/VM skrevet fra scratch i f.eks. C, Rust, eller Zig, hehe. Bare for å frikoble seg helt fra den emosjonelle koblingen folk har til Java og JVM. Men objektivt sett er det antagelig ikke verdt den enorme innsatsen.

pez09:03:24

Det är som sagt lätt att svara på den frågan. Men största svaghet? Nah! Jag tror jag hör till kategorin folk som @UASETR481 varnar för, som bara ser ett rosa skimmer med Clojure.

leifericf09:03:22

Det eneste JVM-en mangler (så vidt jeg vet) er tail-call optimization. Derav behov for loop + recur i Clojure istedenfor at en funksjon bare kan kalle seg selv.

augustl09:03:57

Clojure er på .net og 🙂

pez09:03:03

Ja, det sänker ergonomin lite. Men någon stor svaghet är det inte eftersom Clojure bidrar med så galet mycket ergonomi i övrigt?

leifericf09:03:41

Ja, men har du prøvd å installere og bruke ClojureCLR? Det er ikke en spesielt hyggelig eller smidig opplevelse 😅

pez09:03:42

Att Clojure är ett gästspråk är en enorm styrka. Den enskilt största styrkan tillsammans med att det är en Lisp, som gjorde att Rich Hickey ens orkade skapa språket, uppfattar jag det som.

👍 1
pez09:03:54

Clojure-CLR är bara en minut bort från din editor, @U01PE7630AC: https://github.com/PEZ/clojure-clr-starter

😮 2
leifericf09:03:10

Babashka var en stor øyeåpner for meg. Det er mye enklere (men fortsatt ikke enkelt) å selge inn Babashka enn JVM Clojure er min opplevelse. Det er bare å finne et stort Bash script eller en stygg Makefile og erstatten det, så er folk solgt.

leifericf09:03:19

Nice, den hadde jeg ikke sett før, @U0ETXRFEW! Takk for info.

pez09:03:06

YAMLScript kan man se som ytterligare ett Babashka. En skillnad är att folk inte kommer behöva ändra speciellt mycket vanor. Bara skriva lite kod i sin YAML-fil och plötsligt är de Clojure-kodare.

cjohansen09:03:33

Største ulempe? Jeg vil si at gode feilmeldinger fortsatt er mangelvare. Litt mer generelt kan man si at den største svakheten til Clojure kanskje er at det er for komfortabelt med å være til for de som allerede har skjønt greia. Altså: i liten grad tilrettelagt for nye folk.

cjohansen09:03:37

Et eksempel er de nevnte feilmeldingene: Jeg er kjent nok med dem til at de ikke er til hinder for meg lenger - jeg reagerer ikke engang på dem. Men jeg legger merke til dem når jeg viser frem ting til folk som ikke kan Clojure godt enda. Da kjenner jeg skammen melde seg. "Joda, så, denne rælete skjermen med tekst betyr egentlig at du glemte et kolon her"

💡 1
👆 1
cjohansen09:03:10

Den største svakheten med Clojure på JVM for meg personlig er kanskje at det er en litt tung platform - lang oppstartstid, relativt høye nedre krav til maskinkraft for å kjøre. Blir alltid litt misunnelig når jeg ser folk komme trekkende med sine bittesmå standalone Go binaries som starter opp på null komma svisj. Her er det dog håp i ting som Babashka på sikt kanskje.

cjohansen09:03:17

En Clojure for Go hadde vært kult.

💯 2
augustl10:03:18

men hva skulle man kalt en Clojure for go?

cjohansen10:03:27

Gojure

1
💥 1
1
🚀 1
🎯 2
👌 2
leifericf10:03:30

Enig! Det hadde vært awesome. Babashka/GraamVM løser en del av lang oppstartstidsgreiene da.

pez10:03:36

Cloggo

😂 4
leifericf10:03:47

Med en tresko som logo.

😂 4
cjohansen10:03:03

Cloggo er den tilbakestående broren til muskelbunten Gojure

😂 2
😯 1
leifericf10:03:43

Eller bare Clog

cjohansen10:03:47

Clog er litt koselig, men har litt uheldige konnotasjoner kanskje?

pez10:03:49

Go++

😂 2
cjohansen10:03:59

Det største problemet med nye prosjekter er å navngi dem

cjohansen10:03:12

Vet ikke hvor mange prosjekter jeg har mistet interessen for etter mkdir ...

💯 2
pez10:03:21

Oheldig igen!

augustl10:03:33

that blank stare into space mens man venter på inspirasjon…

pez10:03:53

Jag brukar tappa intresset efter att jag köpt domänen.

💯 1
cjohansen10:03:05

"I kveld skal jeg stunte ut denne idéen!" mkdir ... 2 timer senere: "Fuck it, er det noe bra på tv?"

😂 1
pez10:03:36

“Det vore kul med något som gör det här!” Testa tjugo olika varianter på http://nameisp.com “Fuck it, någon (antagligen @U01PE7630AC) sa något i Slacken.”

😂 2
leifericf10:03:04

Jeg eier domenet http://parens.no som skulle bli mitt AS-selskap av og for utviklere, delvis for å skape min egen Clojure-jobb 😅

leifericf10:03:45

Drømmen lever så lenge jeg betaler for domenet, haha

pez10:03:07

I så fall lever många av mina drömmar. 😃

leifericf12:03:30

En annen "killer feature" av Clojure: > "Clojure will help you scale your product without scaling your headcount." Source: https://flexiana.com/2023/01/heres-why-startups-should-develop-in-clojure-in-2023

oddsor12:03:50

Fravær av rammeverk er en slags blessing/curse tenker jeg. Jeg har jo sittet litt i fritiden og sysslet med et slags “template” for en web-server som inneholder en kombinasjon av biblioteker jeg liker å bruke for webutvikling. Men Clojure-miljøet har liksom ikke forenet seg rundt rammeverk på lik linje som Java-miljøet har samlet seg rundt Spring, og det er mye fleksibilitet i hvordan man vil løse problemer. Så da er man kanskje mindre samlet om en arkitekturstil da. Jeg syns det er litt digg, men kan nok tenke meg at det er utfordrende mtp stor omslutning rundt språket og miljøet. Jeg beskrev vel egentlig “Curse of Lisp” nå 🙈 Angående at folk er forutinntatt mot JVM så syns jeg det er interessant. JVMen har jo egenskaper som Clojure utnytter for å endre kjørende applikasjoner og lignende, men verden rundt oss virker nå å være mer rigget rundt at man skal rekompilere og redeploye hyppig (actions, kubernetes, flere podder, etc). Så på en side er oppstartstid og slikt sett på som et problem, men et kompilert program som ikke kan endres dynamisk er liksom ikke en styrke. Husker fortsatt at @U04V5VAUN måtte redde systemet fra en feil jeg hadde gjort hvor han koblet på REPL i tre podder(?) og reevaluerte en funksjon i produksjon mens kodefiksen lå og kvernet i deploy-pipelinen. Det er en veldig kul ting å kunne gjøre, men det er ikke en egenskap mange andre språk har, så kanskje det er derfor det føles litt som at alt av deployment og slikt virker designet for å gå i beina på akkurat den egenskapen?

💯 1
oddsor12:03:04

Men så skjønner jeg jo at et system som kan endres mens det kjører over tid vil føre til at man mister oversikt over hva som “ligger ute”. Men det føles som noe man kanskje kunne løst i stedet for å gå i motsatt retning (kompiler, rullerende redeploy…)

leifericf13:03:59

> Husker fortsatt at @U04V5VAUN måtte redde systemet fra en feil jeg hadde gjort hvor han koblet på REPL i tre podder(?) og reevaluerte en funksjon i produksjon mens kodefiksen lå og kvernet i deploy-pipelinen. Det er en veldig kul ting å kunne gjøre, men det er ikke en egenskap mange andre språk har [...] Erlang er et av de få språkene (kanskje det eneste?) som har enda bedre hot code reloading/monky patching enn Clojure. Men kulturen er "ikke bruk dette med mindre du absolutt må eller ikke har råd til noe nedetid."

leifericf13:03:42

https://stackoverflow.com/a/6244328 kommer jeg tilbake til nå og i blant. Erlang og Clojure har ganske mye til felles, men har på en måte tatt to nesten motsatte tilnærminger til concurrency. Begger er dynamiske funksjonelle språk, og kanskje de eneste i sin kategori som fortsatt blir brukt i produksjon i noen særlig skala.

leifericf13:03:32

Erlang er på en måte råbra på distribusjon og concurrency over nettverket/distribuert til hundrevis eller tusenvis av fysiske maskiner, den biten core.async ikke har (enda).

oddsor13:03:31

Jeg syns det blir spennende å se hva som lander mtp virtual threads. Har testet virtuoso og tapestry, og begge føles ganske gode å bruke. Erlang/BEAM har en mer granulert garbare collector som ikke stopper hele verden, men JVMen har kanskje så bra ytelse at det ikke spiller så stor rolle thinking-face

👍 3
leifericf13:03:56

Ja, og måten BEAM gjør "rasjonert compute" på via "ticks" på er nokså unikt. Alle Erlang prosesser (det kan være flere millioner av dem) får like mye tid til å gjøre jobben sin, nesten som time share. Det gjør at latency blir spredt ut i systemet, og ikke lokalisert til en del av systemet.

leifericf13:03:03

Jeg kan anbefale alle å lese https://pragprog.com/titles/jaerlang2/programming-erlang-2nd-edition/. Det er en råbra bok og en øyeåpner selv om man ikke har planer om å bruke Erlang. Folk som liker Clojure vil finne mye interessant der.

👀 1
magnars14:03:39

Jeg eier domenet http://meettheparens.com, tenkt til intromateriale for Clojure, men vel, ja, altså, da så.

2
😁 2
leifericf14:03:44

Den doble t-en da 😅

magnars15:03:47

Skal det ikke være det? :thinking_face:

leifericf15:03:17

Jo! Det må jo det. Det er bare jeg som sliter med tanken av å ha et domene med ett ord som slutter med samme bokstav som neste ord begynner med 😅 Den irrasjonelle OCD-en kicker inn.

leifericf20:03:49

@christian767 Det er visst noen som er inne på tanken om å gifte Clojure med Go allerede: https://joker-lang.org #joker

cjohansen20:03:32

Underlig kombo, for å si det mildt

😅 1
pez21:03:36

Jag glömde helt bort Joker av någon anledning. Vad är underligt med kombon?

leifericf07:03:07

Joker ser ut til å være en "konkurrent" av SCI og deler av clj-kondo, skrevet i Go?

slipset07:03:11

Jeg vil påstå at med babashka, så er joker, lumo og planck døde.

leifericf07:03:34

Joker kompilerer vel direkte til maskinkode og eksekveres ikke i en VM? Det gjør Go i alle fall, så vidt jeg forstår. Og noen andre Clojure dialekter, som f.eks. jank, kompilerer (snart) direkte til LLVM IR, og derifra til maskinkode. Så de kan vel teoretisk sett være raskere enda enn Babashka, som kjører på GraalVM. :man-shrugging:

slipset08:03:18

Jo, men who cares lissom :) lumo/planck/joker ble jo alle brukt til scripts, ikke til å implementere spillmotorer eller HFT.

pez08:03:53

Den stora prestandaskillnaden kommer nog inte från native vs vm. Det är snarare compiled vs interpreted.

👍 1
1
pez08:03:38

Dvs jag förväntar mig större skillnad i prestanda mellan Clojure och Babashka än mellan Joker och Clojure.

pez09:03:19

God morgon! Det här kan vara den Killer Application som Clojure väntat på. Jag är enormt glad att jag klev upp halvtre i morse för att vara med på presentationen!

👀 1
augustl10:03:32

god morgen!

leifericf12:03:17

Jeg oppdaget at Clojerl har en ganske kul http://try.clojerl.online/, som også har en Clojure tutorial 🙂 Utrolig nok har vi noe gammel Erlang kode (ifm. RabbitMQ) som ingen vil/kan røre, og jeg har brukt Erlang før 😅 Så kanskje jeg får bruk for Clojerl, haha

👀 1
👍 1
leifericf19:03:15

Dagens observasjon i dypdykk på Lisp Flavored Erlang, som for øvrig er veldig interessant!

leifericf08:03:09

Nå har jeg brukt noen flere timer på LFE, og må si det er utrolig kult for en som virkelig digget Erlang og Elixir, og nå digger Clojure! LFE er faktisk utrolig modent og veldokumentert, mye mer enn jeg fikk inntrykk av i starten. Og de har et ganske aktivt community på Discord. LFE har også noe Clojure interop greier, men det har jeg ikke satt meg ordentlig inn i enda. Kanskje det får bli et meetup tema etter hvert.

leifericf08:03:02

Det som er litt kult med BEAM (VM-en til Erlang/OTP) er at dens styrker utfyller/komplementerer JVM-en på en måte. BEAM er designet for ekstrem distribusjon, concurrency og fault-tolerance på tvers av hundrevis eller tusenvis av maskiner, uten at utvikleren må tenke på det. Hvis man kan targete JVM og BEAM, så kan man bygge praktisk talt hva som helst, bortsett fra kanskje low-level 3D grafikkgreier og sånt.

Zeniten21:03:28

Jeg overdynget Ambrose fra Typed Clojure med spørsmål om statisk typing vs. ting som Malli og Clojure spec, og han svarte grundig, om noen er interesserte. :)

👀 3
👍 3
pez09:03:30

Det skulle vara intressant att se vad man kan göra med Guardrails+clj-kondo i kombo.

leifericf08:03:09

Nå har jeg brukt noen flere timer på LFE, og må si det er utrolig kult for en som virkelig digget Erlang og Elixir, og nå digger Clojure! LFE er faktisk utrolig modent og veldokumentert, mye mer enn jeg fikk inntrykk av i starten. Og de har et ganske aktivt community på Discord. LFE har også noe Clojure interop greier, men det har jeg ikke satt meg ordentlig inn i enda. Kanskje det får bli et meetup tema etter hvert.