Fork me on GitHub
#clojure-italy
<
2015-08-27
>
bronsa17:08:15

@reborg: re: la entry su ^:const nel clojure weekly -- un altro vantaggio e` che permette l'uso non boxato di numeri

reborg19:08:01

@bronsa ok fammi capire. (def ^:const pi 3.14) evita a 3.14 di diventare un Double?

bronsa19:08:56

@reborg: no, 3.14 viene boxato, ma al punto d'uso di pi, viene unboxato a compile-time invece che a runtime

reborg20:08:30

bronsa mi aspettavo di vedere qualcosa nel LispReader a riguardo ma probabilmente viene letto da ListReader. Compiler.DefExpr non sembra trattare il caso di :^const, quindi dove sara’?

bronsa20:08:20

@reborg: ne` il reader ne` def fanno niente di particolare per ^:const, l'inlining e` lessicale (funziona praticamente come un symbol-macrolet globale) e fatto durante il lookup del simbolo nella symbol table (il namespace)

bronsa20:08:34

@reborg: dev'essere dalle parti di analyzeSymbol

reborg20:08:45

Ho seguito il giro e mi sembra che arrivi qui https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Compiler.java#L5138 ad emettere una variabile statica “3.14” nel bytecode, che mi sembra quadrare con quello che mi dici e che ho letto. Grazie delle dritte. molto educativo

bronsa20:08:00

@reborg: quella variabile statica in realta` non e` mai usata, Compiler.java ha la brutta tendenza di compilare bytecode inusato

bronsa20:08:39

numeri primitivi e stringhe vengono direttamente inlineati nel bytecode