Clojurians
#clojure-italy
<
2018-03-29
>

This page is not created by, affiliated with, or supported by Slack Technologies, Inc.

gabriele.carrettoni06:03:25

Buongiorno, che strada suggerite di seguire per imparare jvm bytecode e la jvm in generale?

skuro07:03:12

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)

skuro07:03:08

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

skuro07:03:48

per la JVM in generale, e' un topic enorme, JIT e GC sono per esempio due topics abbastanza ortogonali e decisamente vasti

skuro07:03:48

o magari ti interessano topics meno teorici e piu' pratici, come per esempio come interfacciarti a JMX per il monitoring

skuro07:03:40

come dicono a Porto Torres, the JVM world is your oyster :slightly_smiling_face:

reborg08:03:07

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 cd jdk8 && sh get_source.sh 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

gabriele.carrettoni08:03:11

@skuro @reborg grazie per le risposte e i links

luigi.candita08:03:45

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...

gabriele.carrettoni08:03:10

@luigi.candita il fine pratico non so neanche se ci sia, mi interessa principalmente capire cosa "c'è sotto" e come funziona

luigi.candita08:03:40

Chiaro! Quindi è pura voglia di conoscenza.. mi sta benissimo :slightly_smiling_face:

skuro08:03:36

@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

skuro08:03:41

my 2c ovviamente

reborg08:03:58

@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.

luigi.candita08:03:46

@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.candita08:03:02

ma io parlo di questioni "pratiche"

luigi.candita08:03:12

sapere poi come funziona, quello interessa a tutti

skuro08:03:56

@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.candita08:03:49

ohi mamma.. Io sono ancora un newbie di clojure. Oggi se va bene mi arriva il libro. :smile:

luigi.candita08:03:25

una volta finito(entry level) passerò a qualcosa di più serio... dalla manning :wink:

luigi.candita08:03:12

Impaziente per il libro e per il "giocattolo"

luigi.candita08:03:45

Sò che il libro è free on line..ma sinceramente... io odio leggere i libri da un tablet

skuro08:03:46

:slightly_smiling_face:

luigi.candita08:03:58

la carta stampata in questo caso è la cosa migliore

skuro08:03:00

la Carta™ non si batte

reborg08:03:27

@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 :slightly_smiling_face: La lettura del decompilato mi e' servita fino ad ora per capire se stavo propagando i tipi correttamente o altri dettagli del genere.

manuel08:03:03

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

nilrecurring08:03:01

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

manuel08:03:27

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.

luigi.candita09:03:10

Ah ecco... Ho sempre tipizzato sulla JVM (uso groovy... mi permette di scegliere). Nel tuo caso comincia ad avere senso..

luigi.candita09:03:09

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.

bronsa10:03:16

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

bronsa10:03:00

e più che leggere manuali consiglio l'apprendimento 'esplorativo'

bronsa10:03:14

compilando un paio di classi java e decompilandole

bronsa10:03:32

e capendo quali costrutti mappano a quale bytecode

bronsa10:03:53

è molto semplice come linguaggio se hai un po' di familiarità con stack based languages

gabriele.carrettoni10:03:25

@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.

bronsa11:03:08

ah beh se hai esperienza con forth dovresti cavartela bene :)

gabriele.carrettoni18:03:10

suggerimenti per quando piuttosto che andare a lavoro il giorno dopo ti vorresti sparare?

bronsa18:03:14

cambiare lavoro? :)

gabriele.carrettoni18:03:12

sto attivamente cercando ma sai com'è la situazione in italia, già dove sono ora mi ritengo fortunato

gabriele.carrettoni19:03:06

a cosa state lavorando nel tempo libero?

nilrecurring20:03:01

Programming-related: compilatore Dhall to/from Clojure Non programming: compongo un nuovo disco

bronsa20:03:16

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

manuel20:03:17

Programming: Haskell + manutenzione piccolo progetto Clojure Non programming: tonnellate di cinema

bronsa20:03:36

e continuo a studiare shen/acl2/coq