Fork me on GitHub
#clojure-italy
<
2017-07-23
>
mdallastella07:07:20

All'epoca ho finanziato Light Table (su Kickstarter, se ricordo bene) ma devo confessare che non l'ho praticamente mai usato...

bronsa10:07:55

@nilrecurring @richiardiandrea per quanto riguarda i vettori, first ha l'overhead di dover creare una seq mentre nth ha accesso diretto al vettore, per le liste, nth e` altamente polimorfico e ottimzzato per strutture indexed, le sequenze non lo sono e quindi pagano overhead per lo slow branch

bronsa10:07:23

nello specifico, devono effettuare tutti i seguenti instance check prima di arrivare al loro branch https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/RT.java#L873-L891 che poi esegue essenzialmente lo stesso codice di first

bronsa10:07:44

e lo svantaggio aggiuntivo di esser effettuato da un metodo non inlineabile

richiardiandrea11:07:46

Grazie @bronsa chiarissimo. Si per le sequenze ha senso (non sono indicizzate come dicevi)..ottimo a sapersi che first wrappa tutto in una seq

bronsa11:07:17

first/rest/next operano tutti su sequenze

bronsa11:07:59

e` esplicito nella docstring

richiardiandrea11:07:13

Vero vero mi e' tornato in mente la parte di Joy Of Clojure, dovrei darci una ri-occhiata every now and then

richiardiandrea11:07:53

Joy of Clojure è ottimo e seppur datato lo consiglierei a tutti

richiardiandrea11:07:02

La cosa da notare sopra è anche legata alla reflection: nth è sempre il più veloce a seguito da .get con type hint

bronsa11:07:44

eh beh, reflection e` lentissima

bronsa11:07:28

sarei a favore di una flag per rendere reflection una compilation failure

richiardiandrea11:07:31

Volevo solo sottolinearlo che magari sfugge, ma si, ovviamente

richiardiandrea11:07:35

E voterei per vederla, non che uno non debba fare profiling, ma nove su dieci la reflection va evitata come la peste 😀

richiardiandrea11:07:50

Quanto è strano scrivere ste cose in Italiano comunque 😁 con @nilrecurring abbiamo faticato ah ah

nilrecurring21:07:44

Concordo sulla difficoltà nello scrivere di queste cose in italiano, alcuni termini non ce li abbiamo proprio 😄

nilrecurring21:07:32

E una flag per la reflection compilation failure sarebbe una cosa magnifica

nilrecurring21:07:58

@richiardiandrea grazie per il link su LightTable! Un sacco di buoni propositi e guidelines, ma a sei mesi dal post non c’è neanche un nuovo commit e le PR sono ancora unmerged, quindi sono un po’ scettico

nilrecurring21:07:42

@mdallastella LightTable è stato il mio primo editor clojure, e devo dire che l’onboarding è stato fantastico perchè ti costringe a fare repl-driven-development fin dall’inizio, quindi sono diventato produttivo molto in fretta. Poi ha cominciato a rompersi a caso e ho smesso di usarlo. Ho riprovato a installarlo da poco, ed fa cose un po’ buffe e in generale non funziona benissimo

nilrecurring21:07:03

Tutto sommato è una codebase vecchia, che i dev originali non sviluppano più, con zero documentazione per i dev, e un sacco di bug. Insomma il tipico blob legacy che uno si trova sempre a dover ereditare, con la differenza che non ha sponsor che ne finanziano lo sviluppo

nilrecurring21:07:08

Penso che una riscrittura possa avere senso, possibilmente integrando/convertendo in qualche modo i plugins di atom per i linguaggi, per non aver da mantere anche tutti quelli