Ho letto recentemente lo SBCL User Manual e ho iniziato a pensare alla domanda del titolo. Ovviamente alcune lisps, ad esempio il clojure, vietano tutti gli effetti collaterali in modo che possano facilmente parallelizzare il codice. Common Lisp consente effetti collaterali e quindi mi chiedevo se il fatto che una determinata funzione sia 'dirty' o 'clean' influisce sulla sua compilazione.Sccl considera se una funzione ha effetti collaterali durante l'ottimizzazione?
Ad esempio in the CMUCL compiler manual lasciare che le ottimizzazioni mostrino come, in molti casi, l'uso di "let" per associare una nuova variabile sia più efficiente della modifica con "setq". Suppongo che sto chiedendo se qualcosa di simile è fatto per le chiamate di funzione.
Ho letto le sezioni pertinenti del manuale di sbcl e ho riversato la domanda sullo stackoverflow ma non sono riuscito a trovare una risposta a questo.
Clojure non (non può) vietare tutti gli effetti collaterali. Ad esempio '(println" Hello World ")' è un effetto collaterale. Per bandirli del tutto, o hanno bisogno di 1. Non essere nella lingua. 2. Essere separati da un sistema di tipi molto forte. Qualsiasi altra cosa significherebbe il problema di interruzione – jozefg
Grazie, avrei dovuto renderlo più chiaro. – Baggers
Scrivi nella mailing list di sbcl-devel con la tua domanda. Sono sicuro che ti daranno una buona risposta se gli fai una domanda buona e chiara. –