This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2023-09-20
Channels
- # announcements (3)
- # babashka (7)
- # beginners (43)
- # biff (19)
- # calva (39)
- # cider (16)
- # clerk (2)
- # clj-yaml (32)
- # cljs-dev (37)
- # clojure (129)
- # clojure-australia (1)
- # clojure-china (1)
- # clojure-europe (46)
- # clojure-filipino (1)
- # clojure-gamedev (25)
- # clojure-hk (1)
- # clojure-indonesia (1)
- # clojure-japan (2)
- # clojure-korea (1)
- # clojure-my (1)
- # clojure-nl (5)
- # clojure-norway (8)
- # clojure-sg (1)
- # clojure-sweden (12)
- # clojure-taiwan (1)
- # clojure-uk (9)
- # clojurescript (14)
- # core-typed (136)
- # cursive (18)
- # duct (9)
- # emacs (12)
- # etaoin (7)
- # events (1)
- # graalvm (3)
- # gratitude (2)
- # humbleui (7)
- # hyperfiddle (99)
- # introduce-yourself (5)
- # jobs (2)
- # leiningen (1)
- # missionary (14)
- # nrepl (2)
- # off-topic (12)
- # polylith (21)
- # rdf (29)
- # re-frame (8)
- # releases (1)
- # shadow-cljs (264)
- # spacemacs (21)
- # sql (7)
- # vscode (1)
God morgon! Själv har har nästan glömt bort hur man skriver (jobbar idag med Python), men kämpar på att dela med mig av bra idéer härifrån till dit. Som till exempel ”just use maps”, men stöter på ganska stort motstånd ändå hahaha. Tur att man vet att man har rätt. 😄
Hej @UJX81UFUK! Så sent som igår hyllade jag vårat team och de bra grejerna vi gjorde 😀
Wow. Gomorron. Jag tycker det är jättekul att introducera Clojure ideer i andra miljöer. Gjorde persistent data structures till java en gång i tiden, och fick folk där att göra rekursion med en trampolin. Det funkar ju faktiskt riktigt bra, även om folk har bra svårt att förstå ibland. Att introducera persistent vektor till F# gjorde det till ett riktigt trevligt språk. Kör hårt @david043
God morgon. För en massa år sedan jobbade jag i Python och hade en kollega som argumenterade för att vi borde använda dictionaries istället för klasser mycket, mycket oftare. Jag tyckte han var ute och cyklade. Fast jag visste hur smart och duktigt kodare han var så lyssnade jag inte. Förhoppningsvis är inte alla lika arroganta som jag var (och hoppas att jag inte är längre), men det kan verkligen vara en uppförsbacke att introducera bra idéer.
I Python är det inte så dumt att använda @dataclass(frozen=True)
. Så kan man stoppa in den i set eller som nyckel i en dictionary, och man får value equality istället för reference equality.
Problemet här är väl att folk kanske inte förstår att frysa. "Vad sjutton menar den som har skrivit det här?" så stoppar man in föränderliga saker som nyckel, istället. Det här var ett jättevanligt problem under tiden jag jobbade som prestandakonsult. Efter samtidighets belastning av ett test objekt, gick CPU belastningen inte ner på förväntade nivåer. Några trådar fastnade, spinnande i en trasig hash-map. Trasig för att nyckens hash och trädets struktur inte längre stämde överens. De festa anrop gav såklart fel resultat, men det där spinnande trådarna gav en första indikation att något var fel. Tyvärr var problemet ofta ganska svårlöst. De som använder levande nycklar skriver vanligtvis också ganska komplex kod.
Jag hänger inte riktigt med. @dataclass(frozen=True)
är något man gör på egna objekt, och då kan man inte ändra dem, och dess hashcodes är konstanta. Det är därför de tillåts vara nycklar i dictionaries och element i set. (Om ett värde i "dataobjektet" är en referenstyp så kan innehållet i det såklart ändras, men själva objektet kommer vara det samma eftersom alla dess värden är frysta.)
Precis.. Jag försökte prata om att många inte förstår det där med att man måste ha oföränderligt data som nyckel.
Vad menar du att man måste ha oföränderlig data som nycklar? Kan du ge ett konkret exempel? Objektet som är nyckeln är oföränderlig (annars tillåts objektet inte som nyckel), men om nyckeln i sig innehåller muterbara objekt så kan de ”underobjekten” muteras. Men det här brukar inte leda till problem i sig med avseende på att objektet är nyckel i en dictionary. Menar du att om man försöker rekonstruera djupa objekt men där inte alla värden är frysta så kommer de inte anses vara samma objekt, och då hittas inte värdet i dictionarien?
Hur ser marknaden ut i Clojure-land i nuläget? Någon som har nys på möjligheter för en som är nyfiken på Clojure/Script men inte har någon erfarenhet mer än en gnutta hobbylabbande?