Credo compilatore Inlines alcune funzioni fondamentali come inc
, soprattutto se applicata agli argomenti primitivi.
Quando si utilizza inc
come una funzione regolare (ad esempio passando a funzioni di ordine superiore, aliasing con let
ecc.), Le prestazioni potrebbero quindi essere peggiori perché perde la capacità di inline. Il sovraccarico extra deriva dal fare una chiamata di funzione in più, forse anche il costo di inscatolare uno o più argomenti.
Questa non è una limitazione di Clojure, riflette solo il fatto che il compilatore non è ancora molto sofisticato con le sue ottimizzazioni. Probabilmente puoi aspettarti che cose come questa migliorino molto nelle versioni future di Clojure.
Questo è esattamente giusto. 'inc' è in linea, e infatti dato che' i' è noto per essere un primitivo lungo, il compilatore può effettivamente emettere una singola operazione bytecode per aggiungere 1, scavalcando interamente i metodi in 'clojure.lang.Numbers'. – amalloy