?

Log in

No account? Create an account

Метапрограммирование в Агде и немного философии - Excelsior

Aug. 27th, 2013

09:49 am - Метапрограммирование в Агде и немного философии

Previous Entry Share Next Entry

Comments:

[User Picture]
From:xeno_by
Date:September 3rd, 2013 07:48 am (UTC)
(Link)
0. По умолчанию макрос не трогает позиции деревьев, которые приходят ему на вход. Синтетические деревья, которым позиция не сопоставлена, получают позицию макро вызова, который сейчас раскрывается.

1. Пока что нет, но есть планы. Не знаю, как это делается в Схеме, но я планирую это сделать через интерпретацию деревьев. Раньше меня останавливало то, что такая интерпретация неизбежно будет довольно убогой, но опыт D меня вдохновил. CTFE вначале действительно был совсем слабенький, но потом они наворачивали все больше и больше и сейчас там уже поддерживается здоровенный кусок языка.

2. В основном, да. Макро аннотации, которые могут добавлять/удалять мемберы, раскрываются до тайпчека.

3. Разделения фаз нету потому, что раскрытие макросов и исполнение кода, получившегося в результате раскрытия, сейчас не могут происходить в одном и том же джава рантайме. Когда я начну делать интерпретацию, ситуация сразу изменится и придется думать, что делать.

4. Да, способ есть. c.macroApplication.

Вообще, наше обсуждение это часть большого редизайна нашей макросистемы, которым я сейчас занимаюсь. Если вам будет интересно, я расшарю первую версию дизайн-документа, когда она будет готова для прочтения кем-нибудь кроме меня (сейчас там еще во многих местах полнейший хаос).
(Reply) (Parent) (Thread)
From:Valentin Budaev
Date:September 3rd, 2013 08:59 am (UTC)
(Link)
> Синтетические деревья, которым позиция не сопоставлена, получают позицию макро вызова, который сейчас раскрывается.

Ага, это хорошо.

> Не знаю, как это делается в Схеме

В схеме оно just works. Экспандер раскрывает форму -> смотрит не является ли оно define-syntax, если является - вычисляет в +1 фазе тело и добавляет в лексический контекст информацию о том, что с соответствующим идентификатором связан макространсформер. И дальше при раскрытии если этот сгенеренный макрос встретится, то он уже будет раскрываться, т.к. добавлен в контекст.

> я планирую это сделать через интерпретацию деревьев.

Это как? В смысле, что вообще под этим подразумевается?

> Вообще, наше обсуждение это часть большого редизайна нашей макросистемы, которым я сейчас занимаюсь. Если вам будет интересно, я расшарю первую версию дизайн-документа, когда она будет готова для прочтения кем-нибудь кроме меня (сейчас там еще во многих местах полнейший хаос).

О, мне очень интересно будет :)
(Reply) (Parent) (Thread)
[User Picture]
From:xeno_by
Date:September 3rd, 2013 11:52 am (UTC)
(Link)
> "вычисляет в +1 фазе тело"
Ага, именно это я и хочу реализовать через интерпретацию.
(Reply) (Parent) (Thread)