LINUX.ORG.RU

Вопрос по макросам

 


1

2

До меня не доходит до конца смысл макросов. Очевидно, что, все выражения, которые можно раскрыть в компилтайме, можно раскрыть и в рантайме. Если экспандер написан на лиспе, например, скорость макроэкспанда будет одинаковой. То есть, мы тут ничего не выигрываем в плане производительности. С другой стороны, необходимость раскрытия той или иной формы может быть продиктована в самом рантайме, таким образом, часть форм раскрывать, возможно, не придется, тогда мы экономим ресурсы. Ведь в компилтайме раскрываются все макросы, не так ли? Тогда какое преимущество мы получаем от раскрытия в компилтайме?



Последнее исправление: terminator-101 (всего исправлений: 2)
Ответ на: комментарий от monk

Был бы CL, то можно было бы просто переопределить stepper-text::show-step не трогая исходники

monk ★★★★★
()
Ответ на: комментарий от monk

Ещё можно открыть исходники stepper-text и заменить в них show-step на версию с browse-syntaxes. :-)

Ну макростеппер все равно еще термы подсвечивает, отдельно выности, отдельно показывает local-expand шаги и т.п., так что все равно в степпере удобнее :)

Тем более что основная проблема с show/hide - это каждый раз снимать две верхние галочки, ставить show #%app, hode #%datum и ставить обратно вторую галочку сверху, что, в общем, не так уж и долго.

anonymous
()
Ответ на: комментарий от x4DA

Да просто в eval.rkt исправить macroexpand:

(define (macroexpand form . all)
  (let ([all (and (not (null? all)) (car all))])
    (expand/step form)
    (with-output-to-string
      (lambda ()
        (pretty-print (syntax->datum ((if #t expand expand-once) form)))))))
и добавить там нужный (require macro-debugger/stepper)

И в самом гейзере (в елиспе) там есть костыль - когда запускается инстанс ракетки, то емакс ждет какое-то время и потом пытается этот инстанс подхватить, надо чтобы инстанс успел запуститься за это время

macro-debugger/stepper грузится долго - так что там возможно придется поставить задержку больше, иначе будет выдавать ошибку. Где исправить надо я не помню.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.