Mrn
God morgen!
Morn!
God morgen! đ
Morn!
Morn!
@leif.eric.fredheim har du planer om Ä lage clojure-bindings for eido nÄr du fÄr implementert i lavnivÄ-sprÄk? (lager ny trÄd siden det var sÄ mange interessante svar i trÄden i gÄr)
Har gjort nĂžyaktig det allerede.
Deler snart.
GĂžy! Gleder meg.
PrÞver to forskjellige tilnÊrminger. For Eido er det et frittstÄende Zig bibliotek som Clojure prater med.
Den andre er Zig i Clojure/REPL.
Begge bruker Project Panama.
Det jeg fortsatt ikke har funnet ut av helt er hvordan man kan pakke et Zig bibliotek i/sammen med et Clojure bibliotek, slik at det blir helt selvstendig. Enn sÄ lenge mÄ man installere Zig separat og manuelt slik at det er pÄ path. à rsaken er et Zig med in-line C og Assembly mÄ kompileres for hver enkelt plattform. Det er OK for Eido, hvor Zig-komponenten er ekstern, men er litt lame for det andre eksperimentet hvor Zig «er en del av» Clojure biblioteket pÄ en mÄte. Tror lÞsningen er at Clojure biblioteket da mÄ bruke Project Panama for Ä finne ut hvilken arkitektur brukeren kjÞrer pÄ, for deretter Ä laste ned en pre-compiled binary for den plattformen. Men det fÞles ikke spesielt pent heller. Det er den biten jeg prÞver Ä finne ut av nÄ. Men selve developer experience i REPL er mer eller mindre pÄ plass allerede.
jeg skjÞnte ikke helt forskjellen pÄ de to; er 2 at du kan kompilere Zig-kode fra Clojure-prosessen?
Ja, du trenger forskjellige binaries for hver plattform i Jar-en
Jeg begynte Ä lese pÄ det for lenge siden, men kom ikke i mÄl med noe fornuftig pÄ den tiden jeg satte av.
Ja, jeg er inne pÄ samme spor.
Det eneste som er litt kjipt er at biblioteket blir ganske stort fordi det bundler Zig for alle plattformer. Et alternativ er smart logikk som laster ned korrekt binary nÄr en henter/installerer Clojure biblioteket. Men da har man brÄtt en avhengighet pÄ nettverk som suger litt.
Et annet alternativ er Ä ha en JAR per plattform som bundler korrekt Zig binary. Men det er ogsÄ litt stygt synes jeg.
jeg skjÞnte ikke helt forskjellen pÄ de to; er 2 at du kan kompilere Zig-kode fra Clojure-prosessen?Per nÄ sheller den ut til zig
Men, ja, tanken er Ă„ gjĂžre den in-process etter hvert. Har ikke funnet ut av det enda.
Den nye utgaven av "motoren" til Eido er helt frakoblet Clojure. MEN! Den "prater" EDN. SÄ det er pÄ en mÄte et EDN-basert sprÄk for Ä generere grafikk. SÄ har den en custom 2D/3D grafikkmotor skrevet i ren Zig, som er lynrask og mer fleksibel enn Java2D uten avhengigheter til f.eks. OpenGL, WebGPU, Vulkan, etc.
Clojure er jo den beste mÄten Ä generere EDN pÄ. SÄ "Clojure bindings for Eido" er bare EDN/alminnelige Clojure datastrukturer.
Det betyr at den ogsÄ funker med Babashka, ClojureScript, etc.
> Et annet alternativ er Ä ha en JAR per plattform som bundler korrekt Zig binary. Men det er ogsÄ litt stygt synes jeg. (edited) Jaaa, det tror jeg er riktig tilnÊrming. En plattform-uavhengig Eido-jar som trenger noe plattformavhengig.
Japp! Pluss at det allerede finnes mange EDN libs for andre sprÄk.
Clojure er jo den beste mÄten Ä generere EDN pÄ. SÄ "Clojure bindings for Eido" er bare EDN/alminnelige Clojure datastrukturer. (edited)Hvis du skal shelle ut eller sende meldinger pÄ en socket eller noe, mÄ du serialisere EDN til tekst. Hvis det er en stor EDN, blir det en kostnad.
SĂ„ Clojure er "bare" Ă©n (den beste đ) "front-enden."
Per nÄ gjÞr den re-render av hele datastrukturen hver gang. Litt som Replicant.
Men tanken er Ă„ kunne gjĂžre smartere delta greier hvis det blir nĂždvendig.
Jeg har ogsÄ laget en native GUI app prototype pÄ toppen.
SĂ„ man har noe lignende Adobe Illustrator.
uavhengig avveining â pĂ„ clojure-siden kan du oppdatere datastrukturen raskere (speedupen fra persistent data structures over copy on write). Hovedpoenget i ting som tech.ml.dataset er at den raske implementasjonen under panseret ikke kopierer. Chris Nuernberger omtaler det som zero copy. SĂ„ det er liksom en stige, 1. GĂ„ via tekst-serialisering 2. Sikre byte-likhet, sĂ„ du kan gjĂžre en batch byte/copy uten EDN 3. zero copy
Men veldig kult! Ikke meningen Ă„ komme Ă„ vĂŠre kverulant. Jeg vil gjerne ha bedre tools for GUI i Clojure, og noe Zig-basert er kjempespennende. Masse jeg har lyst til Ă„ sette meg inn i selv her!
Alle innspill tar jeg med stor takk og glede! Det er disse chattene med deg som har inspirert/fĂ„tt meg til Ă„ tenkte pĂ„ (eller ikke klare Ă„ slutte Ă„ tenkte pĂ„ đ) disse tingene i utgangspunktet.
Jeg blir inspirert av Ă„ se hva du fĂ„r til selv! Du har faktisk gjort det ekte đ
Vel, det er mye AI i bildet her altsÄ. Jeg har skrevet svÊrt lite kode for hÄnd.
Jeg har brukt mye tid pÄ Ä tenke pÄ og skrive ned brukeropplevelsen og hvordan det kunne sett ut rent konseptuelt.
OgsÄ har jeg brukt mye tid pÄ Ä lÊre meg hvordan jeg kan bruke AI noenlunde effektivt, lage "skill systemer," etc.
Har ogsÄ brukt ganske mye tid pÄ Ä sette meg inn i Zig-Þkosystemet for Ä forstÄ mulighetsrommet og begrensningene, og sammenligne med Hare, C3, og Odin.
Jeg skammer meg for min AI-bruk hver gang jeg ser @christian767 og andre flinke folk sine reaksjoner og posts pĂ„ LinkedIn nĂ„r jeg spiser frokost, hehe. Men heldigvis har jeg mye trening i Ă„ hĂ„ndtere indre konflikt og skam fra min tid som aspirerende pastor i pinsemenigheten, samt fra reisen ut av det miljĂžet đ
Men heldigvis har jeg mye trening i Ă„ hĂ„ndtere indre konflikt og skam fra min tid som aspirerende pastor i pinsemenigheten đ
Jeg synes det er helt Älreit Ä bruke AI til sÄnt. Hvis jeg skulle lÊrt meg C i dag, hadde jeg brukt en masse AI. rant fra i gÄr om akkurat det: https://2.teod.eu/d/16/neophiliacs-withered-technology-literature-study NÄr vi argumenterer synes jeg vi kan snakke om hva vi konkret liker eller misliker. Et konkret argument som har vÊrt pÄ banen er at teorien i koden svinner hen. Teorien i koden kan svinne hen med menneskeskrevet kode, og den kan bevares etter AI-involvering, men det krever innsats. For deg er jo alt dette avveining og valg. Du lÊrer deg en haug med ting over tid, og etter hvert som du fÄr brukt greiene dine, vet du tydeligere hva du vil ha ut av lavnivÄkoden.
Jeg har gjort https://github.com/leifericf/clj-zig, hvis du vil sjekke det ut. @teodorlu đ
Eido engine er ikke public enda.
Jeg klarte Ă„ fucke' opp Clojars releasen min da. Helt selv, uten AI đ PrĂžver Ă„ fikse det nĂ„.
FĂžrste gang jeg tester Clojars.
Spennende!
ForstÄr jeg det rett i at Ä evaluere (defnz f [,,,] ,,,) da gjÞr hele zig-kompileringen, og gir deg tilbake en vanlig clojure-var du kan kalle?
Jepp, basically.
StĂžtter disse (ref. https://github.com/leifericf/clj-zig/blob/main/docs/02-interface-design.md):
defn -> defnz
def -> defz
defrecord -> defrecordz
deftype -> deftypez
defenum -> defenumzHolder pÄ med "moduler" nÄ. Det er ikke stÞttet enda. Men du kan allerede bruke vanlige .zig filer, og de funker med Clojure namespaces. PrÞver Ä finne en lÞsning pÄ "moduler" som ikke leder til cache misses, slik at det fortsatt gÄr raskt i REPL.
Kult, det er grensesnittet jeg ville Ăžnsket Ă„ bruke!
Er "modul" det zig omtaler som innholdet i en fil? Tenker du at et Clojure-namespace skal bli en modul? Eller skal man sette sammen moduler selv?
Hvis du vil se pÄ Clojure-navnerom som moduler, kan det vÊre nyttig Ä prÞvekjÞre Clerk og Clay, de gjÞr litt det.
Kommer tilbake etter leggetid med guttungen og tur med hunden hvis jeg fortsatt er vĂ„ken đ
Men kort fortalt er det én fil = ett navnerom.
En modul er noe man kan importere ved navn.
Moduler har vanligvis en rotfil. Den rotfila kan importere flere andre filer/navnerom (som er mer eller mindre synonymer i denne konteksten).
Og en fil er egentlig bare en struct hvor de ytre klammene er implisitte.
NĂ„ funker Eido med den nye motoren da đ
Den nye Zig-motoren er nÄ 2,6x raskere enn den forrige Clojure/Java 2D-motoren, og det kun med én CPU-kjerne. Java 2D er ikke multi-threaded, men det er neste mÄl for Zig-motoren, som har working title "Clojo."
NÄr jeg (kanskje) introduserer GPU-en senere, vil den kunne bli enda raskere. Per nÄ er Clojo kun CPU. Det er egentlig litt nice, fordi da er den 100% deterministisk og koden er betydelig enklere Ä forholde seg til. Jeg er ikke helt sikker pÄ om jeg vil introdusere GPU-akselerasjon hvis den blir "rask nok" pÄ CPU. Men det er betydelig enklere i Zig. Tanken var Ä gÄ veien via MLIR/LLVM, pÄ samme mÄte som https://mojolang.org gjÞr (derav tilnavnet Clojo). Hele greia var inspirert av Mojo/MLIR opprinnelig, men med Zig kan det hende man kan side-steppe hele den pipen der og gjÞre alt fra bunnen av selv.
Det fÞrste eksperimentet jeg gjorde, fÞr jeg kikket pÄ Zig, var Ä kompilere Clojure direkte til https://mlir.llvm.org, pÄ samme mÄte som Mojo (jeg har mailet litt frem og tilbake med Chris Lattner om dette). Men det fÞltes ikke helt riktig, og det ble en voldsomt komplisert greie. Derav Zig.
For Ăžvrig bruker Eido nĂ„ ogsĂ„ clj-zig đ
SÄ vurderer jeg Ä embedde mino i Clojo (hvilket er veldig enkelt fordi Zig kan bruke C-biblioteker direkte), slik at en kan sende Clojure-kode som data inn i selve motoren for dynamiske sanntidsgreier. Men jeg er usikker pÄ om jeg vil gÄ den veien, fordi da blir Clojo mindre dataorientert, mindre generisk og mindre tilgjengelig for andre konsumenter som ikke kan Clojure.
SĂ„ alle prosjektene mine ser ut til Ă„ mĂžtes.
Holder ogsĂ„ pĂ„ med et kommersielt produkt ved siden av. Men det holder jeg litt hemmelig enn sĂ„ lenge đ Det er noe helt annet, men som ogsĂ„ bruker Clojure, Zig og clj-zig.
Multi-threaded hjalp litt iaf. Tallene er millisekunder.
Men har ikke nÄdd gulvet enda. Det er fortsatt mange gains Ä hente.
Morn!
Morn
morn
"lÊre og lÊre": tja. Eg har lyst til Ä fÄ til call hierarchy med LSP i IntelliJ for dei sprÄka eg nyttar (python, clojure, rust) og sÄ ein fin GUI for Ä kunne navigera.
Morn!