This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2016-04-20
Channels
- # beginners (35)
- # boot (81)
- # braveandtrue (7)
- # cider (74)
- # cljs-dev (52)
- # cljsrn (5)
- # clojure (114)
- # clojure-austin (1)
- # clojure-belgium (3)
- # clojure-brasil (8)
- # clojure-czech (7)
- # clojure-greece (18)
- # clojure-ireland (1)
- # clojure-russia (67)
- # clojure-uk (11)
- # clojurescript (52)
- # core-async (5)
- # core-matrix (3)
- # cursive (13)
- # data-science (3)
- # datomic (8)
- # emacs (80)
- # events (2)
- # hoplon (8)
- # immutant (7)
- # jobs-discuss (3)
- # juxt (25)
- # ldnproclodo (21)
- # leiningen (27)
- # mount (24)
- # off-topic (6)
- # om (23)
- # onyx (48)
- # parinfer (1)
- # proton (4)
- # re-frame (41)
- # reagent (9)
- # spacemacs (8)
- # untangled (122)
Neni pouziti stdout/in/err nepriznana zavislost? Ja bych to resil HOF a partial aplikaci, ale nevim, jak moc je tohle v Clojure bezny pristup
Resp. jak by se pak stdout a spol. presmerovaly, pokud je to "polymorfni abstrakce", kterou ale nikde nepredavam, a ne globalni resource?
@maio: a to je zase o tom jaky typ kodu pises, pokud delam matematickou knihovnu, tak logovat moc nepotrebuju, napisu baterii testu a jsem hotov, pokud stavim produkcni aplikaci, ktera dlouhodobe bezi na serveru a reaguje na “nezname vstupy/eventy z okoli” a produkuje “nezname vystupy” tak zkratka potrebuju logovat jeji chovani (to jsou dva extremni priklady uplne rozdilnych typu kodu)
@rarous: nevim co myslis "polymorfni abstrakci", to bys mi mohl vysvetlit ja slovo resource dal do uvozovek. ve skutecnosti je *out*
a *err*
jen dynamicky vary (sice implementovany v javove casti Clojure implementace clojure.core ale to je asi jedno). A jako kazdy var ho muzes dynamicky prebindovat pomoci bindings
a podobnych (predpokladm, ze tohle je ta technika “o uroven vejs” co jsi popisoval). To samozrejme resi spoustu use-cases, kdyz je potreba vystupy presmerovat, ale neni to kompletni reseni. Clojure navrhari mysleli na thready, takze tam to jeste funguje, bindingy jsou thread-local. Ale porad to neni 100% doreseny. Jak jsem rikal, jakmile zabrousis do asynchronniho programovani a zacnes pouzivat callbacky nebo core.async (`go` bloky) tak toto dynamicke bindovani nefunguje spravne. Toto mozna neni takovy problem pri sani java kodu, ale je to dost oser v javascriptu, kde zadne thready nejsou a callbackum se nevyhnes.
A navic nevim jestli si to uvedomujete, ale ja se tady bavim hlavne o psani knihoven. Kdyz clovek pise aplikaci, tak ma vetsinou jasny obrazek v jakem kontextu ten kod bude pouzity a jestli bude potreba ho “kontextualizovat” (vetsinou nebude). Ale predstav si, ze nekdo pise knihovnu A a potrebuje logovat. Zvoli nejake reseni, treba log4j. Nekdo jiny pise knihovnu B a potrebuje logovat. Zvoli nejake jine reseni, treba jeho custom logovaci knihovnu. A pak je nekdo kdo chce pouzit knihovnu A i B ve sve aplikaci. Ten nekdo ma problem. Ten nekdo by idealne potreboval knihovnu A i B “kontextualizovat” a nahradit vsechna tvrda volani do log4j a custom knihovny necim co muze predat “zvenku” jako logovaci kontext. A pak se rozhodnout co tim kontextem bude, jestli log4j, custom knihovna, nebo neco jineho.