This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2018-03-29
Channels
- # aws (3)
- # beginners (160)
- # boot (2)
- # bristol-clojurians (3)
- # cider (62)
- # cljs-dev (77)
- # cljsrn (15)
- # clojure (147)
- # clojure-brasil (10)
- # clojure-dusseldorf (2)
- # clojure-gamedev (1)
- # clojure-italy (128)
- # clojure-russia (1)
- # clojure-spec (19)
- # clojure-uk (34)
- # clojurescript (408)
- # code-reviews (2)
- # component (1)
- # core-async (56)
- # cursive (1)
- # datascript (1)
- # datomic (81)
- # emacs (11)
- # fulcro (39)
- # java (16)
- # jobs (3)
- # lein-figwheel (2)
- # leiningen (6)
- # lumo (89)
- # off-topic (11)
- # om (2)
- # om-next (1)
- # onyx (17)
- # parinfer (4)
- # pedestal (3)
- # perun (1)
- # quil (3)
- # re-frame (19)
- # reagent (8)
- # reitit (5)
- # remote-jobs (5)
- # shadow-cljs (145)
- # spacemacs (1)
- # sql (7)
- # test-check (15)
- # uncomplicate (1)
- # unrepl (122)
- # vim (2)
- # yada (4)
Buongiorno, che strada suggerite di seguire per imparare jvm bytecode e la jvm in generale?
dipende da come preferisci imparare le cose, direi. Intanto familiarizzare con javap
e comparare il bytecode generato con il codice originale (meglio se Java, che e' piu' vicino come linguaggio alla JVM)
da la', o sperimentare con codice piu' complesso e vedere istruzione per istruzione cosa fa, o prendersi il manuale del bytecode e assicurarsi che la riserva di confezioni di caffe' sia adeguatamente dimensionata
per la JVM in generale, e' un topic enorme, JIT e GC sono per esempio due topics abbastanza ortogonali e decisamente vasti
o magari ti interessano topics meno teorici e piu' pratici, come per esempio come interfacciarti a JMX per il monitoring
Queste due guide ti danno un indicazione di massima della terminologia ed i vari moduli in gioco: 1. http://www.oracle.com/technetwork/java/whitepaper-135217.html 2. http://openjdk.java.net/groups/hotspot/docs/RuntimeOverview.html Il resto dell'open JDK Wiki 3. https://wiki.openjdk.java.net/display/HotSpot/Main e' anche interessante come lettura. Poi una bella domenica che avevo tempo mi sono letto la JVM spec: 4. https://docs.oracle.com/javase/specs/jls/se10/jls10.pdf E' ripetitiva ed alcune parti sono saltabili, ma ti rimane un'idea di massima che ho trovato utile in seguito. Ho una copia in locale di openJDK 6. hg clone
e di tanto in tanto, grep alla mano, entro nei sorgenti per vedere come funziona qualcosa. Molto molto utile. Ho anche Graal in locale (HotSpot next generation) e' molti concetti sono simili: 7. git clone
Buongiorno! Trovo molto interessante il quesito di @gabriele.carrettoni. Ma a questo punto vorrei capire... ai fini pratici che vantaggi ho nell'analisi del bytecode? (indiscussi i fini per capire come funziona la JVM) . Ottimizzazioni? Pensavo che la console jmx fosse già più che sufficente...
@luigi.candita il fine pratico non so neanche se ci sia, mi interessa principalmente capire cosa "c'è sotto" e come funziona
@luigi.candita in generale e' possibile ignorare il bytecode. I dettagli della JVM sono anche in larga parte ignorabili al netto di ottimizzazioni, ma hanno un impatto potenzialmente molto evidente (e.g. garbage collection / inlining) che capita abbastanza frequentemente di affrontare come topic di ottimizzazione
@luigi.candita Da utente normale Clojure, sono rari i casi in cui ti potrebbe capitare di scendere a quel dettaglio. L'unica che posso pensare e' ottimizzazione o se ti stai costruendo il tuo clojure in clojure.
@skuro @reborg Chiaro. Dal lato pratico, mi sembrava un non-sense analizzare il bytecode. Cioè... se hai la necessità di ottimizzare da un livello di astrazione così basso, forse hai scelto il linguaggio sbagliato per il tuo task.
@luigi.candita l'ultima volta che ho speso un tempo considerevole nell'analizzare bytecode dal punto di vista di clojure era per chiarirmi le idee sui diversi trade offs tra multimethods e protocols
@luigi.candita concordo, se sei costantemente li' a sbraitare sul perche' il bytecode generato non e' quello che ti aspetti forse stai usando il linguaggio sbagliato 🙂 La lettura del decompilato mi e' servita fino ad ora per capire se stavo propagando i tipi correttamente o altri dettagli del genere.
io però per i libri di IT preferisco il PDF: ho perso il conto dei ctrl+f dentro un documento, e affiancarli all'editor per gli esercizi mi è più comodo che alzare/abbassare la testa dal libro aperto sulla scrivania
Penso sia molto personale come cosa: quando cerco una cosa in un libro ho un’impressione di “com’è la pagina”, e col libro di carta so esattamente in che punto trovarla, mentre il PDF confonde questo “senso spaziale” e se la query è generica non trovo nulla col ctrl+f
sì, verissimo. E ho libri IT cartacei, anche. Però, per dire, SICP ce l'ho cartaceo ma gli esercizi li ho fatti "scartabellando" la copia digitale.
Ah ecco... Ho sempre tipizzato sulla JVM (uso groovy... mi permette di scegliere). Nel tuo caso comincia ad avere senso..
Esattamente. Trovo molto più comodo consultare un testo cartaceo proprio per questo motivo, perchè "mi ricordo" che all'inizio del testo, dopo l'argomento X c'è quello che mi serve. Queste regole mnemoniche mi aiutano anche a ricordare meglio la cronologia degli argomenti e in un manuale spesso è un crescendo.
io direi che comunque anche se magari nel pratico sapere come funziona il bytecode jvm non finisca a servire, è comunque molto utile capire come funziona la piattaforma su cui si sviluppa
è molto semplice come linguaggio se hai un po' di familiarità con stack based languages
@bronsa mi sa adotterò questa strategia, guardando un po' i tutorial sembra semplice come linguaggio, ho un po' di esperienza con forth per quello che vale.
suggerimenti per quando piuttosto che andare a lavoro il giorno dopo ti vorresti sparare?
sto attivamente cercando ma sai com'è la situazione in italia, già dove sono ora mi ritengo fortunato
Programming-related: compilatore Dhall to/from Clojure Non programming: compongo un nuovo disco
al momento ho un progetto che ho iniziato ~due mesi fa e che ho in pausa perche` sto facendo un po' di ricerca -- e` un "macro compactor inferrer", cioe` una libreria per inferire possibili form originali da una form macroexpanded + un database di macro definitions
Programming: Haskell + manutenzione piccolo progetto Clojure Non programming: tonnellate di cinema
io, dato il recente rilascio di kdb in versione 64 bit free, volevo provare a riscrivere una versione easy di datomic (per impararlo meglio) usando come db di persistenza kdb
usando una lib che ho trovato che permette di scrivere codice clojure e convertirlo in codice q
mi è piaciuto talmente tanto il linguaggio q che sono arrivato a comprarmi un libro e scrivermi una versione mia
mi ha sempre interessato quella famiglia di linguaggi ma non ho ancora avuto modo di studiarlo
@bronsa ho pensato al problema in questione per un bel po', e l'ultima conclusione è che non si può fare in modo generico, ma con un set di euristiche abbastanza grande riesci ad approssimare abbastanza tutto. Hai più insight a riguardo?
Esatto
Comunque complimenti tutti, bella roba 👏
@gabriele.carrettoni ah nulla, sto ancora studiando. Sto al capitolo 9 di "Haskell Programming From First Principles".
mentre in Clojure mantengo: https://github.com/manuel-uberti/boodle
occhio che il codice e` stato scritto di getto in un paio di settimane, non e` minimamente ottimizzato per la leggibilita`
@bronsa comunque props per tools.decompiler, è molto bello. L'ho usato per scrivere una challenge CTF (il decompiler serviva per risolverla nel modo "sano". Ovviamente la gente è andata a leggersi il bytecode invece..)
haha fico @nilrecurring
Btw ricordo che ho dovuto pinnare una versione super specifica di clojure per farlo andare. Tipo la 1.9-alpha2
@manuel se ti incarti o hai dubbi chiedi pure, ho fatto un po' di progetti in haskell
Volevo spedire una PR, ma ero di fretta, sorry 😄
@nilrecurring in teoria garantisco funzioni con >=1.9
@gabriele.carrettoni grazie! Per ora gli esercizi scorrono, ma non c'è nulla di particolarmente ostico al momento. Attendo Monad e Functor al varco. 😄
@manuel non so come siano spiegati in quel libro ma non sono niente di complesso, vai tranquillo
@gabriele.carrettoni per ora questo è tranquillamente uno dei migliori testi IT che mi sia capitato di studiare, non ho dubbi che spiegheranno bene anche le parti più "astruse".
Ricordo di aver provato la 1.9 stable e non andava. IIRC era la storia del bigdec?
. Penso di avere il progetto sul portatile che ho con me, domattina gli do un occhio e ti aggiorno 👍
una delle sfide per usare tools.decompiler
e` capire come si usa 😂 l'usability non e` il massimo
Direi di non preoccuparti, l'assunzione sulla roba open source è che è alpha quality software e non ci sono garanzie, quindi va bene
Ricordo di aver trovato anche un altro bug, visto che ci sono documento pure quello
Adesso siamo a quota 4 batteristi
Stanno aumentando esponenzialmente
>>>On September 3, 2017, Robert Fripp announced that his differences with Adrian Belew had been straightened out and Belew had accepted to become "King Crimson's Ninth Man", meaning he is not a band member, but the door is open for him to rejoin in the future.
Non li ho mai sentiti live, dovrei rimediare in effetti
Mo controllo se per sto tour passano nelle vicinanze
purtroppo son dovuto uscire a meta` dell'ultima canzone (21st century) perche` l'han tirata un bel po' piu` lunga del previsto e perdevo l'ultimo treno per londra :(
@nilrecurring dovrebbero passare per l'olanda
>>>visiting Poland, Germany, Austria, Czech Republic, Sweden, Norway, the Netherlands, Italy, the UK and France
Svezia va benone 🎉
Ho sempre un'ammirazione enorme per le band che riescono a tirare un concerto per 3 ore di fila senza pause
Stare sul palco è terribilmente stancante, c'è caldissimo, e se fai una cazzata ci sono 40k persone che ti guardano
Inoltre, sta gente comincia ad avere una certa età
E niente, vanno avanti come dei treni
fripp e` un metronomo comunque, 4 batteristi ma e` lui a dare il tempo al resto della band
per quanto mi riguarda e` stato tanto fondamenale ai kc quanto fripp negli ultimi 40 anni
Mi sembra di riconoscere il pattern (Rogers/Gilmour, etc)