Fork me on GitHub
#clojure-italy
<
2018-03-29
>
gabriele06: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 🙂

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

gabriele08:03:11

@skuro @reborg grazie per le risposte e i links

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

gabriele08:03:10

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

Luis08:03:40

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

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.

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

Luis08:03:02

ma io parlo di questioni "pratiche"

Luis08: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

Luis08:03:49

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

Luis08:03:25

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

Luis08:03:12

Impaziente per il libro e per il "giocattolo"

Luis08:03:45

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

Luis08:03:58

la carta stampata in questo caso è la cosa migliore

skuro08:03:00

la Carta™ non si batte

Luis08:03:06

ASSOLUTAMENTE

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

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

Luis09:03:10

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

Luis09: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

gabriele10: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 :)

gabriele18:03:10

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

bronsa18:03:14

cambiare lavoro? :)

gabriele18:03:12

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

gabriele19: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

gabriele20:03:22

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

gabriele20:03:41

usando una lib che ho trovato che permette di scrivere codice clojure e convertirlo in codice q

bronsa20:03:22

kdb e` quel database in ~apl?

gabriele20:03:51

mi è piaciuto talmente tanto il linguaggio q che sono arrivato a comprarmi un libro e scrivermi una versione mia

bronsa20:03:58

mi ha sempre interessato quella famiglia di linguaggi ma non ho ancora avuto modo di studiarlo

nilrecurring20:03:01

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

bronsa20:03:19

chiaro che non e` possibile in modo generico :) halting problem & all that

nilrecurring20:03:40

Comunque complimenti tutti, bella roba 👏

bronsa20:03:07

ma si`, l'idea e` di spingerlo il piu` possibile ai limiti e poi usare euristiche

gabriele20:03:17

@manuel in haskell cosa stai sviluppando?

gabriele20:03:58

@bronsa scopo finale del progetto?

bronsa20:03:23

usarlo per tools.decompiler

manuel20:03:25

@gabriele.carrettoni ah nulla, sto ancora studiando. Sto al capitolo 9 di "Haskell Programming From First Principles".

bronsa20:03:57

al posto del set hard-coded di pattern matching e euristiche

bronsa20:03:22

poi ho idee per usare la stessa tecnologia base per una interfaccia spec-like

bronsa20:03:29

per scrivere macro e/o code validation

gabriele20:03:44

molto interessante, mi guardo il progetto

bronsa20:03:13

occhio che il codice e` stato scritto di getto in un paio di settimane, non e` minimamente ottimizzato per la leggibilita`

gabriele20:03:53

parli con un fan di q/apl, me la caverò

gabriele20:03:45

@manuel di che parla quel capitolo? applicative/functor/monad già visti?

nilrecurring20:03:34

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

manuel20:03:35

no. Sono alla Liste. Il libro va piano piano, e io pure 😉

nilrecurring20:03:31

Btw ricordo che ho dovuto pinnare una versione super specifica di clojure per farlo andare. Tipo la 1.9-alpha2

gabriele20:03:39

@manuel se ti incarti o hai dubbi chiedi pure, ho fatto un po' di progetti in haskell

nilrecurring20:03:03

Volevo spedire una PR, ma ero di fretta, sorry 😄

bronsa20:03:18

@nilrecurring in teoria garantisco funzioni con >=1.9

bronsa20:03:27

ho zero ricordi di quale sia la versione "base" che supporto

manuel20:03:33

@gabriele.carrettoni grazie! Per ora gli esercizi scorrono, ma non c'è nulla di particolarmente ostico al momento. Attendo Monad e Functor al varco. 😄

bronsa20:03:59

pero` se mi dici che con 1.9.0 c'eran problemi sarei interessato a sapere quali

gabriele20:03:17

@manuel non so come siano spiegati in quel libro ma non sono niente di complesso, vai tranquillo

bronsa20:03:22

se invece mi dici che hai provato 1.8.0 allora puo` essere

manuel20:03:42

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

nilrecurring20:03:06

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 👍

bronsa20:03:55

una delle sfide per usare tools.decompiler e` capire come si usa 😂 l'usability non e` il massimo

nilrecurring20:03:33

Direi di non preoccuparti, l'assunzione sulla roba open source è che è alpha quality software e non ci sono garanzie, quindi va bene

nilrecurring20:03:47

Ricordo di aver trovato anche un altro bug, visto che ci sono documento pure quello

bronsa20:03:45

e niente, appena comprato biglietti per i king crimson a novembre

bronsa20:03:52

non vedo l'ora di rivederli

nilrecurring20:03:09

Adesso siamo a quota 4 batteristi

nilrecurring20:03:22

Stanno aumentando esponenzialmente

bronsa20:03:27

mi son perso l'ultima lineup

bronsa20:03:37

avevo sentito parlassero di reintrodurre belew

bronsa20:03:20

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

bronsa20:03:22

ah, niente

bronsa21:03:01

la lineup precedente l'hai sentita live?

bronsa21:03:08

una cosa mostruosa

bronsa21:03:23

mai avuto pelle d'oca continua per 3 ore in vita mia

nilrecurring21:03:48

Non li ho mai sentiti live, dovrei rimediare in effetti

nilrecurring21:03:11

Mo controllo se per sto tour passano nelle vicinanze

bronsa21:03:33

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 :(

bronsa21:03:39

@nilrecurring dovrebbero passare per l'olanda

bronsa21:03:47

ah no spe` te stai in sberbegia

bronsa21:03:04

>>>visiting Poland, Germany, Austria, Czech Republic, Sweden, Norway, the Netherlands, Italy, the UK and France

nilrecurring21:03:25

Svezia va benone 🎉

nilrecurring21:03:18

Ho sempre un'ammirazione enorme per le band che riescono a tirare un concerto per 3 ore di fila senza pause

bronsa21:03:31

e senza dire una parola 😂

bronsa21:03:56

zero interruzioni, zero filler

nilrecurring21:03:01

Stare sul palco è terribilmente stancante, c'è caldissimo, e se fai una cazzata ci sono 40k persone che ti guardano

nilrecurring21:03:23

Inoltre, sta gente comincia ad avere una certa età

nilrecurring21:03:35

E niente, vanno avanti come dei treni

bronsa21:03:48

fripp e` un metronomo comunque, 4 batteristi ma e` lui a dare il tempo al resto della band

bronsa21:03:18

veramente peccato per belew che mi sarebbe piaciuto vederlo incluso

bronsa21:03:59

per quanto mi riguarda e` stato tanto fondamenale ai kc quanto fripp negli ultimi 40 anni

nilrecurring21:03:22

Mi sembra di riconoscere il pattern (Rogers/Gilmour, etc)