История изменений
Исправление monk, (текущая версия) :
(begin-for-syntax (set! n (add1 n)) - это именно действия при компиляции
Делаем проверку. Запишем в testmod.rkt
#lang racket
(define-for-syntax n 0)
(define-syntax (yoba stx)
#'(begin-for-syntax (displayln "Compiling") (set! n (add1 n))))
(yoba)
(yoba)
Если ты прав, то Compiling будет только при компиляции. Теперь делаем модуль с одной строкой (require «testmod.rkt»).
Внезапно
Compiling
Compiling
Compiling
Compiling
Compiling
Compiling
>
Причём, если эта картина не меняется, даже если testmod.rkt не перекомпилируется (смотрю по .zo). Кстати, а с чего он трижды выполняется?
Исходная версия monk, :
(begin-for-syntax (set! n (add1 n)) - это именно действия при компиляции
Делаем проверку. Запишем в testmod.rkt
#lang racket
(define-for-syntax n 0)
(define-syntax (yoba stx)
#'(begin-for-syntax (displayln "Compiling") (set! n (add1 n))))
(yoba)
(yoba)
Если ты прав, то Compiling будет только при компиляции. Теперь делаем модуль с одной строкой (require "testmod.rkt").
Внезапно
Compiling
Compiling
Compiling
Compiling
Compiling
Compiling
>
Причём, если эта картина не меняется, даже если testmod.rkt не перекомпилируется (смотрю по .zo). Кстати, а с чего он трижды выполняется?