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

Aug 27, 2013 09:49

На днях просмотрел паперу Dependent Type Providers [1] и магистерскую диссертацию Reflection in Agda [2], которые используют средства рефлекшена, предоставляемые Агдой, для метапрограммирования ( Read more... )

macros, scala

Leave a comment

ex_juan_gan August 27 2013, 20:57:54 UTC
Хм, концептуально это логично звучит; но это как бы выходит за пределы математики, и непонятно, как это формализовать-то.

Reply

xeno_by August 27 2013, 21:00:45 UTC
На это мне пока что ответить нечего, к сожалению. Я предполагаю, что именно из-за этого никто особо из академиков не парится на эту тему.

Reply

ex_juan_gan August 27 2013, 21:06:08 UTC
Но проблема-то от этого не исчезает, конечно. Метапроблема.

Reply

ext_1178598 August 27 2013, 21:32:13 UTC
> и непонятно, как это формализовать-то.

А это действительно плохо?

Reply

xeno_by August 27 2013, 21:34:37 UTC
С научной точки зрения, думаю, да.

Reply

ext_1178598 August 27 2013, 21:40:32 UTC
Вопрос не такой праздный, как кажется. Нельзя понять, _как_ формализовать, если мы не знаем, _зачем_. И ответ: "плохо с научной точки зрения", очевидно, плохой ответ на вопрос: "зачем?". В плане - неконструктивный.

Гвозди молотком вот мы тоже безо всякой формализации забиваем - и ничего :)

Reply

xeno_by August 27 2013, 21:52:09 UTC
Мне кажется, метапрограммирование достаточно нетривиально для того, чтобы его реализовывать в стиле "тяп-ляп и в продакшен". Примеры Скалы и Агды это неплохо доказывают. Поэтому, на мой взгляд, здесь нужна какая-то научная база ( ... )

Reply

ext_1178598 August 27 2013, 22:09:39 UTC
> Мне кажется, метапрограммирование достаточно нетривиально для того, чтобы его реализовывать в стиле "тяп-ляп и в продакшен". Примеры Скалы и Агды это неплохо доказывают. Поэтому, на мой взгляд, здесь нужна какая-то научная база ( ... )

Reply

xeno_by August 27 2013, 22:13:25 UTC
В Немерле особо и формализации-то нет, т.к. народ не заморачивался насчет работ на серьезных конференциях. А у нас вообще нет ничего работающего кроме низкоуровневой макросистемы на ручной тяге, поэтому Скала вообще не считается :)

Reply

ext_1178598 August 27 2013, 22:31:20 UTC
Ну вот. Откуда возьмется формализация, когда нечего формализовывать? :)

А немерлисты со своим немерле 2 вообще ушли не в те степи. Изначальная идея (объединить экспанд с тайпчеком) вроде и годна, но в результате у них получается какой-то ОБЧР с пиу-пиу лазерами из глаз и торчащим во лбу тентаклем, а не макросистема.

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

А на текущем уровне не ясно, в какую сторону идти. Никто никуда и не идет :)

Reply

xeno_by August 27 2013, 22:41:34 UTC
Будем стараться! Вот буквально сейчас думаем над тем, как именно прикрутить гигиену. Есть несколько вариантов - как минимум пути Схемы, Немерле и Темплейт Хаскелла. Плюс, еще есть вариант на ручной тяге, но его не считаем. У всех есть свои трейд-оффы и свои сложности в реализации, поэтому поступало даже предложение забить на гигиену, но сейчас не время для малодушия :)

Reply

ext_1178598 August 27 2013, 23:29:30 UTC
> Вот буквально сейчас думаем над тем, как именно прикрутить гигиену ( ... )

Reply

xeno_by August 28 2013, 06:05:15 UTC
Про формализацию гигиены слышал, но пока что не добрался. Сейчас надо будет, конечно. Спасибо!

Reply

ext_1178598 August 28 2013, 11:29:46 UTC
Обратите внимание, что проблема важнее, чем кажется. Если мы научимся коректно трекать биндинги - то мы сразу научимся корректно распространять статическую информацию довольно произвольного вида, тем же путем. А это уже _намного_ интереснее.

Reply

xeno_by August 29 2013, 05:45:17 UTC
А на эту тему есть какие-нибудь паперы? (Я имею ввиду про распространение произвольной статической информации)

Reply

ext_1178598 August 29 2013, 09:43:50 UTC
Была одна годная, но не могу сейчас найти, если найду, то дам ссылку.

Например, это используется в Racket в паттерн-матчинге по структурам - форма (struct struct-name ...) связывает со struct-name статическую информацию о свойствах структуры (гетеры, ацессоры, базовая структура и т.п.), потом когда мы делаем (match x [(struct-name ...) ...]), то match проверяет (статически, во время экспанда) - действительно ли struct-name структура, и, если да, то разбирает ее с помощью указанных в полученной информации геттеров.

Но тут все делается на ручном приводе, ага :)

А если сумеем трекать биндинги - то сможем автоматически туда-сюда гонять.

Reply


Leave a comment

Up