Как `let` реализовано в Clojure и каковы его накладные расходы?

я вижу 2 способа реализации letпривязки. Первый, как известно из SICP, letможно реализовать как lambda functionЭто удобно и просто, но с учетом того, что каждая лямбда (fn) транслируется в отдельный класс в JVM и количество раз, когда letиспользуется в средней программе, это кажется очень и очень дорогим.

Во-вторых, привязки letмогут быть транслированы непосредственно в локальные переменные Java. Это дает очень мало накладных расходов, но хранение привязок в стеке нарушает семантику языка: в этом случае создание замыканий просто невозможно — сохраненные значения будут уничтожены сразу после раскручивания стека.

Так какая же реальная реализация используется в Clojure? Приветствуется указание на соответствующие строки в исходном коде Clojure.

14
задан Viktor Dahl 29 April 2013 в 17:29
поделиться