(time (reduce (fn [^long a ^long b] (+ a b)) (range 1 100000000)))
"Elapsed time: 2661.196246 msecs”
4999999950000000
to ^long
einai type hint
TYPES! 😄
vasika me to type hint glytwneis boxing/unboxing
επισης νομιζω πληρωνεις και το lazyness που δε χρησιμοποιεις εδω
ισως θελει reducer;
για να μην τα φερνει σε chunks;
user=> (time (r/reduce + (range 100000000)))
"Elapsed time: 3991.068929 msecs
ego pantos den eida treli diafora trexontas kai ta 3 😛
(require '[clojure.core.reducers :as r])
(time (reduce + (range 1 100000000)))
;; "Elapsed time: 2917.175936 msecs"
;;=> 4999999950000000
(time (reduce (fn [^long a ^long b] (+ a b)) (range 1 100000000)))
;; "Elapsed time: 2484.394161 msecs"
;;=> 4999999950000000
(time (r/reduce + (range 1 100000000)))
;; "Elapsed time: 2772.405715 msecs"
;;=> 4999999950000000
απο την αλλη δεν μπορω να κανω reproduce το speedup με τα primitives (`^long`) για καποιο λογο
χαχα
εγω με το r/reduce
ειδα μεγαλη
wtf ομως, παραξενο
kai me fold
(time (r/fold + (range 1 100000000)))
;; "Elapsed time: 2746.380503 msecs"
;;=> 4999999950000000
user=> (time (r/fold + (range 1 100000000)))
"Elapsed time: 3887.494446 msecs”
4999999950000000
αλλα ενταξει, και μονο για να τα χωρισει σε threads και να τα μαζεψει μαλλον εχει overhead
τα primitives μου κανουν εντυπωση που δεν μπορω να τα κανω να δουλεψουν
(με καψατε πρωινιατικο παω να κανω καμια δουλεια)
Ίσως να κάνει κάποια διαφορά και το unchecked-math
ναι, true
(require '[clojure.core.reducers :as r])
(time (reduce + (range 1 100000000)))
;; "Elapsed time: 2917.175936 msecs"
;;=> 4999999950000000
(time (reduce (fn [^long a ^long b] (+ a b)) (range 1 100000000)))
;; "Elapsed time: 2484.394161 msecs"
;;=> 4999999950000000
(time (r/reduce + (range 1 100000000)))
;; "Elapsed time: 2772.405715 msecs"
;;=> 4999999950000000
(time (r/fold + (range 1 100000000)))
;; "Elapsed time: 2848.879237 msecs"
;;=> 4999999950000000
(set! *unchecked-math* true)
(time (reduce + (range 1 100000000)))
;; "Elapsed time: 2818.041012 msecs"
;;=> 4999999950000000
(time (reduce (fn [^long a ^long b] (+ a b)) (range 1 100000000)))
;; "Elapsed time: 1913.499944 msecs"
;;=> 4999999950000000
(time (r/reduce + (range 1 100000000)))
;; "Elapsed time: 3067.241996 msecs"
;;=> 4999999950000000
(time (r/fold + (range 1 100000000)))
;; "Elapsed time: 2736.543693 msecs"
;;=> 4999999950000000
Ontos me ta type hints den eida megali diafora
akoma kai xoris arithmetic to aplo range scan einai poli argo
(time (reduce (fn [^long a ^long b] 42) (range 1 100000000)))
42 answer to everything ?
cool constant
(def v (vec (range 1 100000000)))
(time (reduce (fn [^long a ^long b] 42) v)) "Elapsed time: 7419.295403 msecs" 42
αυτο γλυτωνει τα chunks λογικα
παιζει και το παλιομοδιτικο:
(defn total [^long num]
(loop [t 0 n num]
(if (> n 0)
(recur (+ t n) (dec n))
t)))
user=> (time (total 100000000))
"Elapsed time: 5553.698279 msecs”
χωρις το ^long
κανει πανω απ’ το διπλασιο χρονο
@greenonion: malista
akoma kai etsi
xoris lambdas ktlp
pali mou fenete tromera poli
γενικα για raw speed απ’ οτι καταλαβαινω αρκετοι γραφουν Java απευθειας
nai sure ...
gia mena to megalo erotima panta einai "abstraction but at what cost"
http://peticol.as/writes-about/fast-clojure/ αυτο εχει ενδιαφερον btw
true, καλο ειναι να ειναι συνειδητα τα trade-offs
i akoma kai to "scalability but at what cost?"
px parallelism me poli kaka constant factors
opote meta skeftese ok
petao extra cores sto problima
alla ean ta constants einai poli megala
tote apla petao resources se mia tripa
@palladin: h clojure den diafhmizei zero cost abstractions opws h rust 🙂
@stathissideris: kala i rust einai thirio... "Abstraction without regret"
kai epeidi exei tromera constants ... exei tromero scalability sto parallelism
exo minei ligo malakas me tin rust (parolo pou exo dei kai pragmatakia se C++, Haskell, MLton ktp)
pantos istorika oi lisp eixan kanei douleia gia na sivinoun to perf costos ton abstractions
δεν ξερω αν θελω να ασχοληθω με rust
μου θυμιζει scala, ο,τι ιδεα μας φανηκε καλη τη βαλαμε
πρωτη αναγνωση αυτο τωρα
στην πραξη μπορει να ειναι γαμω βεβαια
αλλα τελειως διαφορετικο use case απο clojure
@greenonion: Sigoura i rust einai poio system oriented
alla ean to skefteis ligo parapano
nomizo oti i clojure exei os megalo use case
to stream processing
kai pipelines tou tipou map, filter, fold
me megalo parallelism ktlp
theoro oti i rust exei (tha mporei na exei) poli poio dinato parallel stream processing story apo alles glosses
akrivos epeidi einai zero cost abstraction
απλως η clojure ειναι ηδη στο jvm
dld palia ekrives to costos tou abstraction piso apo to argo IO
alla simera exoume poli poio grigoro IO kai in memory sistimata
kai to CPU einai to bottleneck
παντως σε διαφορα talks που παρακολουθησα τις προαλλες
ακομα ελεγαν οτι το μεγαλυτερο bottleneck ελεγαν οτι ηταν το network
στο να μεταφερεις πχ data απ’ το kafka
στο processing framework
και γι’ αυτο εξερευνουν λυσεις τυπου kafka streams
ή apache flink
που σου λεει οτι αφου τα εχεις ηδη τα data εκει
γιατι να τα μεταφερεις
δεν εχω αποψη, εχει πολυ ζουμι ομως η ιστορια
sigoura px
px ean deis auto to video https://www.youtube.com/watch?v=RUTeY4E2MoQ&list=PLLMLOC3WM2r5gdnpoZSTuM9Fh2QN_mABA&index=1
sto 38:04
tha deis oti einai peripou auto pou sou elega
dld to spark kai to flink to killer feature tous
einai to in-memory part
opote ekei thes to poio compact representation
opote ean ta lambdas sou pou tha doseis sto map, filter, fold
den pezoun kala px me locality kai cache friendly data structures tote
exeis poli megalo scalability alla me xalia performance
χμ οκ βγαζει νοημα αυτο που λες φανταζομαι
αλλα δεν εχω συγκεκριμενη αποψη για την clojure
στο talk που εστειλα πιο πανω ηταν χαρουμενοι
και θιγει το perf
πραγμα
αρκετα
nai sigoura... alla epeidi tin eida tin omilia itan to perf
relative clojure me clojure
yparxei panta kai to good enough
ναι αυτο εννοω
τεσπα δεν ξερω ειναι πολυ αφηρημενα αυτα για μενα
εννοω το πιο «ζορικο» τασκ που κανω με data σε clj κανει 1 sec
χωρις perf
οποτε 🙂
poio poli einai gia na deis ta oria tis glossas/libs/sistimatos
gia mas einai poio poli
kai oxi gia tin CPU 🙂
na exoume mia eikona se multiple levels of abstraction
pantos ean kapoios einai poli dinatos se clj macros
kai psinete gia ena dinato hacking project
as me kanei contact 😛
@palladin: giaaaa pes
ti project?
@stathissideris: Prin apo kapoi kero eixame grapsei auto to paper
pou meletagame to performance diaforon streaming libs se diafores glosses
dwse mou 2 lepta na to katanohsw :troll:
ena apo ta optimization frameworks pou testarame
itan kai ena pou eixa grapsei ego
stin Scala eixame testarei to ScalaBlitz https://scala-blitz.github.io/
auto pou einai ftiaksei ego douleue at runtime
kaigame codika to kaname load at runtime
to scalablitz
apo tin alli douleue at compile time
me macros
to current project mou
einai to looper
pou tha einai ena refactoring tool gia roslyn
dld oti ekane o LinqOptimizer alla os refactoring tool mesa sto IDE
opote i skepsi mou
gia kapoia genea psixi einai i eksis
na exoume ena clj macro
as to poume looper
(looper (reduce + (range 1 1000000)))
pou tha to analiei kai tha paragei efficient imperative loop codika
me mutation kai ola ta kala
edo https://github.com/looperdotnet/looper/blob/master/src/Looper.Core/Core/QueryExpr.fs exoume to geniko ast pou kanoume capture
kai edo https://github.com/looperdotnet/looper/blob/master/src/Looper.Core/Compilation/Compiler.fs einai o vasikos compiler
einai stin arxi tou... kai exoume poli douleia akomi
apla to deixno gia na exete mia idea gia to ti tipou transformation milame
opote opoios psinete gia ena tetoio clojure macro (btw ekana mia mikri ereuna agoras kai den vrika kati antistixo)
as mou pei
gia na tou doso tin kentriki idea kai tips & tricks
@palladin: vasika exw dyo erwthseis (1) to motivation poio einai? exete kapoio use case h einai apla research? (2) giati na einai to target clojure kai oxi jvm bytecode gia na kanoume squeeze out olo to performance?
@palladin: kati pou einai isws relevant einai oti ayton ton kairo kanw investigate tou pws ginetai na kaneis represent to clojure AST wste na mporeis na to kaneis query me datalog, pou isws na prosferetai gia static analysis
gia to 2) den exo kapoio idietero target
apla prepei na ginei tranform
se kati pou den exei lambdas
ola ta endiamesa vimate exoun svistei (loop fusion)
kai gia tin clojure xriazete episis na apofigeis boxing sta primitives
kai tetoia optimizations
tora gia to 1)
to motivation einai to idio pou exei to Spark
in-memory performance gia stream processing
dld exeis ena map/reduce pipeline
pou einai argo
?
kanto wrap
ston looper
nai, apla anarwtiemai giati theleis na to kaneis kai se clojure 🙂
kai elpizoume gia to kalitero 🙂
vasika einai proskilisi sto clj community os hacking project
giati ego kano idi antistixa projects
se C#/F#/Scala/MetaOcaml ktlp
opote ean psinete kapoios gia ena tetoio project
ego mporo na ton voithiso me idees kai pos prepei na to doulepsei
ok, good to know 🙂 egw gia thn wra exw perisseia open source projects, alla mou akougetai endiaferon opote tha to exw sto myalo mou
eidika an proxwrhsw ayto to code analysis tool pou sou lew
sigoura xriazete arketo analysis
kai epeidi ta clj macros einai to poio advanced feature tis glossas
einai endiaferon gia opoion psinete na kanei ena oraio macro
nomizw tha htan efikto, alla tha eprepe o kwdikas na exei toulaxiston type hints
alliws den mporeis na apofygeis to (un)boxing
genika to pattern matching me datalog akougete poli orea idea
@stathissideris: tin datalog pou aneferes einai kapoio clojure dsl
i milame gia eksoteriko datalog compiler?
@palladin: sygekrimena paizw me to implementation ths datascript
@palladin: exw hdh peiramatistei ligo me html trees: https://juxt.pro/blog/posts/datascript-dom.html
ωπ
add to pocket
🙂
@greenonion: einai perisotero experiment to sygekrimeno giati profanws yparxoun pio kaloi tropoi na kaneis extract information apo HTML
ok cool einai clojure dsl
btw h clojure.set
εχει διαφορα utility functions για relational πραγματα
πχ
διαβαζα χθες παλι το joy of clojure
τελειωνω!
χαχα
@palladin: h datascript einai in-memory "clone" tou datomic
nai
loipon
nomizo oti eisai stin sosti kateuthinsi
giati sta ereunitika mou endiaferonta
exo mia epafi me ton Kathigiti Smaragdaki
apo to DI
DI=?
palladin: ησουν di;
kai autos kanei dynamikes kai statikes analysis me Datalog
department of informatics and telecommunications stathissideris
aka πληροφορικη στο πανεπιστημιο της αθηνας
@greenonion: thanks
DI για τους φιλους 😛
nai sry gia to DI
einai auto pou egrapse o Nikos
@palladin: nai, afou arxisa na kanw dokimes me datalog, anakalypsa oti einai poly common practice gia code analysis kai provenance klp
@greenonion: oxi den eimai apo DI alla ksereis pos pame auta ta pragmata 🙂
nai ean deis ta papers tou https://yanniss.github.io/
einai ola code anaysis me datalog
ναι φανταζομαι! απλα ακουσα και το ονομα του ροντογιαννη τις προαλλες στο μηταπ
einai world class expert se datalog
και ειπα μηπως
ελα ρε οντως;
yep
α το ’10 πηγε, δεν τον προλαβα
austin, GIT βλεπω
nice
genika o Smargdakis einai terastia morfi
kai opoios psinete gia na meletisi parapano
sas exo fovera lectures
doste mou 1-2 lepta na ta vro
edo https://www.youtube.com/playlist?list=PLRUJ115QHa0WMyGyP2j_1KRFJjaT0kFOu
psithite
pw tha kaoume
xaxaxaxaxa
ω θεε μου
χαχα
@palladin: to diko mou project exei na kanei pio poly me tools pou se voithane na kaneis debug kai na katanohseis to codebase
@stathissideris: nai einai sxetika
apo pou proerxetai h tade timh kai pws katalhksame se ayth. “provenance” to lene
nai me auta asxoleite o Smaragdakis
pointer analysis
ktlp
ασχετο
αλλα επειδη συζητηθηκε το SICP τις προαλλες
οταν το ειχα ξεκινησει κοιτουσα αυτα
για reference
καλο resource
τον διαβαζω αυτον γενικα
@greenonion: poli kalo
exei kratisei kalo reference gia tis askiseis
mpravo
ntaksi http://eli.thegreenplace.net/2008/06/06/signed-copy-of-sicp
respect
ναι ρε τελειο
ειναι core python αυτος αν θυμαμαι καλα
αλλα γραφει γενικα
και για clojure 🙂
αρκετα για C++
fisika kai ta lectures http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures/
einai must watch
ναι ολο μαζι παει
πακετο
και μετα το PAIP
also known as “the best way to write a stack overflow in clojure” 😄
χαχααχχα
xaxaxaxaxaxa
so true
https://leanpub.com/readevalprintlove001 μου θυμισε αυτο ο τιτλος!
το τσεκαρες σταθη;
to Read-Eval-Print-λove einai poli oraio, auto itan to teleutaio https://leanpub.com/readevalprintlove003
yep
αλλα θελει το χρονο του
@greenonion: einai kainourgio, den exei vgalei kapoio issue akoma!
ωραια, γραφτηκα
αναρωτιεμαι βεβαια ποσα newsletters χωραει το clj community 😛
αυτο διαβαζα
https://github.com/rack/rack/blob/master/lib/rack/head.rb μοιαζει οντως
απ’ οτι καταλαβαινω ιδια λογικη
κανει τη δουλεια και μετα σβηνει το body
Eida pou kanate post ena article gia tin Forth...
kai thimithika oti i Forth einai i klassiki glossa pou opos kai me tin lisp kaneis gamatous meta-circular interpreters 🙂
Genika ean eisai pesmenos kai den exeis ti na kaneis... grapse enan forth interpreter kai tha aisthantheis kalitera 🙂
mias kai leme gia forth http://dev.solita.fi/2014/11/20/deconstructing-a-tweet-sized-language.html
poli kalo
gtsiftsis: http://www.curry-on.org/2016/#program
εκει επρεπε να παμε
θα παει κανεις;
http://clojutre.org/2016/ kai auto ginete septemvri, pliroforiaka
πω ρε εχω ξενερωσει
οταν ψαχναμε συνεδρια
δεν το ειχα βρει το curry on
μου φαινεται φανταστικο
industry & academia
πολυ fp
και data πραγματα
ακομα κι ο Larry Wall μιλαει, τελειο
νικ το είχα δει
ναι είναι γαμάτο
είναι υβρίδιο
παίζει πολύ fp και clojure
δυστυχώς δεν μπορούσα να το δικαιολογήσω για την δουλειά
αλλά ναι φαίνεται πολύ ενδιαφέρον
milaei kai o Matthias Felleisen
genika exei poli prama
pantos vgenoun kai videakia apo curry on, https://www.youtube.com/channel/UC-WICcSW1k3HsScuXxDrp0w
to Curry on einai co-located me to ECOOP
wx kai larry wall!
perisi eixe perasei ena paper mas sto ECOOP
kai eixe paei o Aggelos na to parousiasei
kai mou eipe oti itan poli kalo to Curry on
exei pollous academics kai practitioners
gtsiftsis: πρακτικα περισσοτερη ουσια θα ειχε νομιζω απ’ το buzzwords
εννοωντας οτι computer science κλπ
και το κλασσικο talk της Elm απο curry-on ειναι
κλεινω απο τωρα curry on 2017
χεχε
http://www.curry-on.org/2016/sessions/a-type-is-worth-a-thousand-tests.html den mporo na min to toniso 🙂
χαχα
μιλαει κι ο Felleisen
nai oreo kai auto http://www.curry-on.org/2016/sessions/the-racket-manifesto.html
Btw prosfata eida auto to panel
eixes kapoies orees apopseis
eidika gia ta types
btw ποσταρα το κειμενο του malcolm στο r/clojure και εγραψε ο Reeves απαντηση https://www.reddit.com/r/Clojure/comments/4pb0la/concerns_with_ring/
nice νικ