LINUX.ORG.RU

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

Исправление 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). Кстати, а с чего он трижды выполняется?