Niedawno czytałem numer SBCL User Manual i zacząłem zastanawiać się nad tytułem pytania. Oczywiście niektóre sepsy, na przykład clojure, zakazują wszystkich efektów ubocznych, aby mogły z łatwością łączyć kod. Common Lisp pozwala na efekty uboczne, więc zastanawiałem się, czy fakt, że dana funkcja jest "brudna" czy "czysta", wpływa na jej kompilację.Czy sbcl rozważyć, czy funkcja ma skutki uboczne podczas optymalizacji?
Na przykład w pozwalają optymalizacje pokazać, jak w wielu przypadkach użycie "niech" do wiązania nowej zmiennej będzie bardziej efektywne niż modyfikowanie za pomocą "setq". Chyba pytam, czy coś podobnego zrobiono dla wywołania funkcji.
Przeczytałem odpowiednie sekcje podręcznika sbcl i przelewałem przez pytanie na stackoverflow, ale nie mogłem znaleźć odpowiedzi na to.
Clojure nie może (nie może) zakazać wszystkich skutków ubocznych. Na przykład '(println" Hello World ")' jest efektem ubocznym. Aby całkowicie je zbanować, muszą albo 1. Nie być w tym języku. 2. Rozdziel się bardzo silnym systemem typów. Coś innego oznaczałoby problem z zatrzymaniem. – jozefg
Dzięki, powinienem był to wyjaśnić. – Baggers
Wpisz swoje pytanie na listę dyskusyjną sbcl-devel. Jestem pewien, że dadzą ci dobrą odpowiedź, jeśli zadasz im dobre i jasne pytanie. –