Re[9]: Scheme to be split into two language
От: Аноним  
Дата: 30.08.09 17:50
Оценка:
Здравствуйте, metaprogrammer, Вы писали:

M> Хе хе. Посмешил. R6RS это не стандарт, а фигня. А в R5RS только syntax-rules с гигиеной.

Ясно, очередной упоротый коммон-лиспер, не читавший Пастернака.

А>>Ну раз "ничего сложного", думаю pastebin выдержит — давайте-ка реализацию syntax-case на defmacro.

M> Вот для CL, например, реализация syntax-rules:
M>http://www.ccs.neu.edu/home/dorai/mbe/mbe-lsp.html
Так как насчет syntax-case (можешь начать с добавления гигиены в свой MBE)?

M> Другие варианты трансформеров там не нужны, и так defmacro есть.

Конечно "не нужны". Кто ж сомневается. Даже в твоем примере — полторы сотни строк только для разбора темплейта. Примерный размер велосипеда, который нужно добавлять в defmacro КАЖДЫЙ РАЗ в более менее нетривиальном случае (причем в MBE реализованы далеко не все возможности схемовской деструктуризации). И, кстати, изобретение своих терминов (MBE) при наличии устоявшихся говорит о том, что чувак, писавший это понятия не имеет о терминологии (и соответственно о области знаний, в которой она используется).

А>>Более простая как раз syntax-case (и, что парадоксально, при этом более мощная).

M> Да нет, не более мощная. Проще чем defmacro нет ничего, он туп до невозможности. syntax-rules же весьма сложен, и, что характерно, абсолютно не
Машина тьюринга (ок, можешь взять чистое лямбда-исчисление) — твой выбор. Зачем тебе лишний сахар? К чему это я? Ах да, "туп до невозможности" не означает "проще ничего нет".

>нужен. В качестве весёлого упражнения предлагаю попробовать реализовать на syntax-rules инфиксный синтаксис с биндингами и лямбдами, а так же pattern matching и list comprehensions.

А почему syntax-rules? На syntax-case оно ТОЧНО не будет сложнее defmacro (в худшем случае больше на тот самый десяток строк, необходимый для реализации defmacro на syntax-case), а скорее всего будет значительно проще (ибо деструктуризация входной формы производится автоматически, да и gensym-ами обмазываться не нужно)

А>> Она проще и при написании и при понимании уже написанного.

M> Да ни фига оно не проще. Или ты из тех извращенцев, кто и про темплейты в C++ скажет, что оно "проще"? Тьюринг-полнота языка syntax-rules ещё ничего не значит. Внутри defmacro можно воспользоваться всем, что уже опделелено (включаяя и syntax-rules, между прочим).
Да уж. Когда тебе прямым текстом пишут в коде примеры синтаксиса это, конечно же, очень нечитаемо (паттерн-матчинг не нужен). Все эти car, cadar, caddaar читаются гораздо легче.

А>> Выше же приведен пример.

M> Где?!?
Выше

А>> Вы конечно можете сказать, что нечитаемость это только плюс

M> Нечитаемость — это как раз про syntax-rules. Надо постараться очень, чтоб на них написать читаемо, если только не реализуешь очередную примитивную чушь вроде очередного for или там враппера для let и if. А вот с defmacro надо постараться, чтоб написать нечитаемо.
А чего стараться-то. С defmacro ВСЕГДА выходит нечитаемая каша. Старайся, не старайся — этого не избежать.

А>> (+15 к илитарности, ага), но вряд ли с Вами согласится кто-нибудь кроме таких же коммонлисперов, как Вы.

M> А кто сказал, что я коммонлиспер? Я очень не люблю CL, меня бесит #' и funcall.
Да по степени упорости видно.

А>>Чьорт. Кривая.

M> Именно так.
Ога.

А>> Нельзя воспользоваться.

M> Да, совершенно невозможно. Для чего либо серьёзного. Для очередного тупенького синтаксического сахара — запросто, а для компиляции сложного DSL — фигушки.
О. Начал вводить граничные условия. Чувствуешь что облажался? Напомнить, чего ты там говорил? Таки давай уже расскажи людям, какие именно макросы нельзя использовать в том же модуле (или TLP), в котором они определены.

А>> Вы таки открыли мне глаза. То, что делается едва ли не в каждом проекте на схеме "на самом деле" делать нельзя. Понабирают, блин, по объявлениям.

M> В практически каждом проекте на Схеме метапрограммирование практически не используется.
Идиоты атакуют.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.