LINUX.ORG.RU

История изменений

Исправление quasimoto, (текущая версия) :

Компилятор, естественно, не будет

SBCL:

(lambda (b) (+ 1 b))
; #<FUNCTION (LAMBDA (B)) {100490C6CB}>

(let ((a 1)) (lambda (b) (+ a b)))
; #<FUNCTION (LAMBDA (B)) {10048C808B}>

(let ((a (f))) (lambda (b) (+ a b)))
; #<CLOSURE (LAMBDA (B)) {10048F2C8B}>

(declaim (inline f))

(let ((a (f))) (lambda (b) (+ a b)))
; #<FUNCTION (LAMBDA (B)) {100499C4FB}>

CCL:

(lambda (b) (+ 1 b))
; #<Anonymous Function #x3020006E87EF>

(let ((a 1)) (lambda (b) (+ a b)))
; #<COMPILED-LEXICAL-CLOSURE #x3020006E15EF>

(let ((a (f))) (lambda (b) (+ a b)))
; #<COMPILED-LEXICAL-CLOSURE #x30200071696F>

(declaim (inline f))

(let ((a (f))) (lambda (b) (+ a b)))
; #<COMPILED-LEXICAL-CLOSURE #x30200070ABEF>

(всё с максимальными оптимизациями).

Исходная версия quasimoto, :

Компилятор, естественно, не будет

SBCL:

(lambda (b) (+ 1 b))
; #<FUNCTION (LAMBDA (B)) {100490C6CB}>

(let ((a 1)) (lambda (b) (+ a b)))
; #<FUNCTION (LAMBDA (B)) {10048C808B}>

(let ((a (f))) (lambda (b) (+ a b)))
; #<CLOSURE (LAMBDA (B)) {10048F2C8B}>

(declaim (inline f))

(let ((a (f))) (lambda (b) (+ a b)))
; #<FUNCTION (LAMBDA (B)) {100499C4FB}>

CCL:

(lambda (b) (+ 1 b))
; #<Anonymous Function #x3020006E87EF>

(let ((a 1)) (lambda (b) (+ a b)))
; #<COMPILED-LEXICAL-CLOSURE #x3020006E15EF>

; (let ((a (f))) (lambda (b) (+ a b)))
#<COMPILED-LEXICAL-CLOSURE #x30200071696F>

(declaim (inline f))

(let ((a (f))) (lambda (b) (+ a b)))
; #<COMPILED-LEXICAL-CLOSURE #x30200070ABEF>

(всё с максимальными оптимизациями).