Здравствуйте, metaprogrammer, Вы писали: M>(Infix "a+a").
Емнип, если ты откажешься от закавычивания — получишь возможность ссылаться на внешние биндинги:
(infix a + a)
Но такие вещи, кочнечно, проще делать без гигиены (хотя надо-таки будет попробовать сделать гигиенический инфиксный).
M> Честно говоря, я вообще не понимаю, на фига нужна гигиена.
Мой философский (т.е. в отрыве от практических задач) взгляд лежит здесь: http://rsdn.ru/forum/message/3285913.1.aspx
На практике же 100% гигиена, бывает, мешает реализации тех или иных вещей. Но для тех, имхо, не очень многочисленных случаев придумана отключаемая гигиена.
Здравствуйте, metaprogrammer, Вы писали: M> А вообще — поглядываю на Iron Scheme
Там вроде была проблема с call/cc (когда leppie включал полноценные континуации — начинались тормоза) — не знаю, исправлено уже или нет.
Здравствуйте, metaprogrammer, Вы писали: M> Честно говоря, я вообще не понимаю, на фига нужна гигиена.
И да, гигиена хорошо сочетается с другими проявлениями концепции областей видимости. Например, с модулями.
Re[11]: Scheme to be split into two language
От:
Аноним
Дата:
31.08.09 02:43
Оценка:
Здравствуйте, metaprogrammer, Вы писали:
Общелиспер великолепен в своей незамутненной тупости.
M> А не пойти ка ли тебе погулять мимо, а? И гулять до тех пор, пока все основные реализации не будут поддерживать R6RS?
Дай угадаю. Те, что не поддерживают — не основные?
M> И ещё — я не коммонлиспер. Я лет десять на CL не писал. Мой основной инструмент — Схема.
Коммонлиспер.
А>>Так как насчет syntax-case (можешь начать с добавления гигиены в свой MBE)? M> Это тривиальное расширение. Мой вариант показывать не буду — явно не в коня корм.
Ну ясен пень. Ленивое программирование освобождает столько времени для троллинга.
А>>Конечно "не нужны". Кто ж сомневается. Даже в твоем примере — полторы сотни строк только для разбора темплейта. M> Ну, это же CL, там всё перанально делается. Важен лишь тот факт, что достаточно сделать это ровно один раз, средствами тупых макр, и больше не париться.
Ну вот оно ровно один раз сделано в схеме. Я разве утверждаю, что чего то нельзя сделать в тьюринг-полном языке?
А>>Машина тьюринга (ок, можешь взять чистое лямбда-исчисление) — твой выбор. Зачем тебе лишний сахар? К чему это я? Ах да, "туп до невозможности" не означает "проще ничего нет". M> Ты чушь несёшь. Феерическую.
Да нет. Если тебе нравится тупость и незамутненность — пиши на брейнфаке. Так будет проще.
А>>А почему syntax-rules? M> Потому что именно к нему претензии, и вообще к гигиеническим макрам.
Перечитай еще раз. Я ИЗНАЧАЛЬНО говорил о syntax-case. Ты начал задвигать про их ограниченность и тривиальность реализации. Примеров конечно же привести не смог.
А>> На syntax-case оно ТОЧНО не будет сложнее defmacro (в худшем случае больше на тот самый десяток строк, необходимый для реализации defmacro на syntax-case), M> defmacro на syntax-case — это одна строка, умник ты недоделанный. Если это полноценная реализация syntax-case, а не как обычно.
Удавка затягивается. Жду однострочник (ты всегда сможешь выкрутиться объединив десять SLoC в одну).
А>> а скорее всего будет значительно проще (ибо деструктуризация входной формы производится автоматически, да и gensym-ами обмазываться не нужно) M> Да на хрен не нужна ТАКАЯ деструктуризация. Ты реши, реши мои задачки. Я поржу.
Я тебе сразу говорю, что задачи сильно объемные, чтоб решать их только для того, чтобы ПОПЫТАТЬСЯ чего то доказать тупому общелисповому троллю (хотя весь опыт, накопленный человечеством, говорит, что троллю ничего доказать нельзя — его можно только контртроллить). Ты же сказал, что реализация syntax-case тривиальна — за язык я тебя не тянул — но все еще не можешь разродиться хотя бы полноценной деструктуризацией, не говоря уже о гигиене (хотя бы уровня syntax-rules)
А>>Да уж. Когда тебе прямым текстом пишут в коде примеры синтаксиса это, конечно же, очень нечитаемо (паттерн-матчинг не нужен). Все эти car, cadar, caddaar читаются гораздо легче. M> Криволапость отдельных лиспокодеров никакого отношения к фундаментальности defmacro не имеет.
Я ждал этого момента. Лучший конпелятор коммонлиспа написан криволапыми лиспокодерами. Фишка в том, что лучше не бывает.
M> Как смешно бредит. Даже я так не умею. Тебе уже показали, что этот тупой и убогий вариант pattern matching, который есть в syntax-rules, реализуется тривиально. Так же тривиально реализуются и другие — в том числе и, например, PEG, или любой другой способ описания синтаксиса. Посмеши публику, сделай это на syntax-rules и прочих чисто схемских фичах.
Сливай сливай, зелененький. Я от тебя только и прошу, что тривиальную реализацию syntax-case.
M>>> Да, совершенно невозможно. Для чего либо серьёзного. Для очередного тупенького синтаксического сахара — запросто, а для компиляции сложного DSL — фигушки. А>>О. Начал вводить граничные условия. Чувствуешь что облажался? M> Облажался ты и только ты.
Ути-пути. Какие мы серьезные. Главное громогласно заявить о своей победе в споре. Все остальные просто вынуждены будут с тобой согласиться.
А>> Напомнить, чего ты там говорил? Таки давай уже расскажи людям, какие именно макросы нельзя использовать в том же модуле (или TLP), в котором они определены. M> Берём, например, свежий SISC или ещё какую практически применимую Схему. Определяем в модуле функцию f, и (define-macro mf (x) (f x)). В том же модуле пытаемся использовать (mf ...). Обламываемся и горько плачем.
Вот, пример TLP (семантически очень близок к модулям):
Каким то магическим образом таки выводит 1.
А>>Идиоты атакуют. M> Я вижу, ты самокритичен. Это хорошо. А что такое метапрограммирование ты не знаешь.
Говоришь на меня — переводишь на себя. Тупость общелисперов не знает границ.
M> Попробуй, если не согласен с моим вердиктом и не считаешь себя шибко неумным, реши мои задачки. Инфиксный синтаксис, pattern matching (с ellipsis, конечно же, и с banana brackets в стиле F#). Да ещё обязательно с гигиеной, ведь без гигиены — это же defmacro получится. А, да, чуть не забыл — ещё и list comprehensions сделай. Порадуй почтенную публику.
Обязательно так и сделаю, как только получу "тривиальную" реализацию syntax-case.
Re[15]: Scheme to be split into two language
От:
Аноним
Дата:
31.08.09 03:09
Оценка:
Здравствуйте, metaprogrammer, Вы писали:
MC>>А чем, если не секрет, там мешает гигиена? M> Хотя бы тем, что нельзя определить, откуда имена пришли — сгенерены или подставленны извне. В ситуации, например, с (let ((a 2)) (Infix "a+a")).
И каким образом в этом случае может помешать гигиена? Она мешает захватывать идентификаторы из внешних контекстов?
Не хочешь ли ты сказать, что вот это (infix не более упрощенный, чем твой "syntax-case") не запустится? И все из-за этой б$%кой топологии... тьфу гигиены.
(define-syntax infix
(syntax-rules (+ -)
((_ a) a)
((_ a + rest ...) (+ a (infix rest ...)))
((_ a - rest ...) (- a (infix rest ...)))))
(let ([a 1])
(infix a + a - 1))
M> Честно говоря, я вообще не понимаю, на фига нужна гигиена.
Не так. Ты не понимаешь, ЧТО ТАКОЕ гигиена.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, metaprogrammer, Вы писали:
А>Общелиспер великолепен в своей незамутненной тупости.
А ты однако хамло. Думаешь, с хамлом кто либо станет говорить как с человеком? Заблуждаешься.
M>> А не пойти ка ли тебе погулять мимо, а? И гулять до тех пор, пока все основные реализации не будут поддерживать R6RS? А>Дай угадаю. Те, что не поддерживают — не основные?
Дай угадаю. У тебя серьёзные проблемы с психикой, да?
А>>>Так как насчет syntax-case (можешь начать с добавления гигиены в свой MBE)? M>> Это тривиальное расширение. Мой вариант показывать не буду — явно не в коня корм. А>Ну ясен пень. Ленивое программирование освобождает столько времени для троллинга.
Троллишь тут только ты.
А>>>Конечно "не нужны". Кто ж сомневается. Даже в твоем примере — полторы сотни строк только для разбора темплейта. M>> Ну, это же CL, там всё перанально делается. Важен лишь тот факт, что достаточно сделать это ровно один раз, средствами тупых макр, и больше не париться. А>Ну вот оно ровно один раз сделано в схеме.
Более того — оно сделано средствами более простой макросистемы, как правило.
А> Я разве утверждаю, что чего то нельзя сделать в тьюринг-полном языке?
Ты утверждаешь, что более сложная макросистема является более фундаментальной, тогда как она реализуется на более простой.
А>>>Машина тьюринга (ок, можешь взять чистое лямбда-исчисление) — твой выбор. Зачем тебе лишний сахар? К чему это я? Ах да, "туп до невозможности" не означает "проще ничего нет". M>> Ты чушь несёшь. Феерическую. А>Да нет. Если тебе нравится тупость и незамутненность — пиши на брейнфаке. Так будет проще.
Хамло ты. Очень неумное хамло.
А>>>А почему syntax-rules? M>> Потому что именно к нему претензии, и вообще к гигиеническим макрам. А> Перечитай еще раз. Я ИЗНАЧАЛЬНО говорил о syntax-case.
Ты глуп. syntax-case — это макросистема с гигиеной и с обобщёнными трансформерами, то есть, с аналогом defmacro. Ты утверждаешь, что эта система проще и фундаментальнее, чем только defmacro. Так что обсуждению подлежит только syntax-rules, тем более что именно на них твои смешные примеры сделаны.
А> Ты начал задвигать про их ограниченность и тривиальность реализации. Примеров конечно же привести не смог.
Примеры для людей. Не для тупых отморозков.
А>Я тебе сразу говорю, что задачи сильно объемные,
Слил, лошара.
А> Ты же сказал, что реализация syntax-case тривиальна — за язык я тебя не тянул — но все еще не можешь разродиться хотя бы полноценной деструктуризацией, не говоря уже о гигиене (хотя бы уровня syntax-rules)
У меня такая реализация есть. Но ты рыльцем не вышел, чтоб её обсуждать. В конце концов, реализации Схемы я писал, в отличии от тебя, тупого теоретика.
А> Я ждал этого момента. Лучший конпелятор коммонлиспа написан криволапыми лиспокодерами.
А тебя, дурака, это удивляет?
А> Фишка в том, что лучше не бывает.
Фишка в том, что половина Схем написана поверх таких макросистем.
А>Сливай сливай, зелененький. Я от тебя только и прошу, что тривиальную реализацию syntax-case.
Рыльцем ты не вышел, чтоб что либо просить. Ты хамло. Пусть кто либо другой попросит.
А>(mf 1)
А>Каким то магическим образом таки выводит 1.
f в рантайме вызывается.
А>Обязательно так и сделаю, как только получу "тривиальную" реализацию syntax-case.
Здравствуйте, Аноним, Вы писали:
А>И каким образом в этом случае может помешать гигиена? Она мешает захватывать идентификаторы из внешних контекстов?
Она мешает различать, какие идентификаторы новые, а какие введены преднамеренно.
А>Не хочешь ли ты сказать, что вот это (infix не более упрощенный, чем твой "syntax-case") не запустится? И все из-за этой б$%кой топологии... тьфу гигиены.
У него на входе не строка, гигиену им не обманешь.
M>> Честно говоря, я вообще не понимаю, на фига нужна гигиена. А>Не так. Ты не понимаешь, ЧТО ТАКОЕ гигиена.
Смешной буратинка ты. Я понимаю, что такое гигиена, я её реализовывал десятки раз в разных макросистемах. Я не понимаю, на хрена она нужна, и почему некоторые несознательные граждане из несознательных комитетов ей так озабочены. Практической пользы от гигиены нет.
Здравствуйте, Mr.Cat, Вы писали:
MC>Здравствуйте, metaprogrammer, Вы писали: M>> А вообще — поглядываю на Iron Scheme MC>Там вроде была проблема с call/cc (когда leppie включал полноценные континуации — начинались тормоза) — не знаю, исправлено уже или нет.
Это .net, там continuations без тормозов принципиально реализовать нельзя. Только через CPS с трамплинами, или ещё как по тормозному.
Re[13]: Scheme to be split into two language
От:
Аноним
Дата:
31.08.09 05:12
Оценка:
Собственно все ясно. На прямые вопросы не отвечаешь, допускаешь грубейшие ошибки, демонстративно "обижаешься", бравируешь собственной "крутостью", которую, однако, не можешь продемонстрировать (да и по остальным твоим комментариям видно, что ничего, представляющего из себя хоть какую то ценность там и не валялось). Удачи в дописывании "тривиального" syntax-case и освоении ОСНОВ схемы.
Здравствуйте, metaprogrammer, Вы писали:
M> Смешной буратинка ты. Я понимаю, что такое гигиена, я её реализовывал десятки раз в разных макросистемах. Я не понимаю, на хрена она нужна, и почему некоторые несознательные граждане из несознательных комитетов ей так озабочены. Практической пользы от гигиены нет.
Я не тот злой аноним, но все же вмешаюсь. Польза для меня есть одна и очень существенная, она защищает от глупых ошибок.
Lisp is not dead. It’s just the URL that has changed: http://clojure.org
Здравствуйте, metaprogrammer, Вы писали: M>по тормозному M>CPS M>с трамплинами
CPS по идее не должен особо тормозить, тем более в дотнете, где вроде есть нормальная поддержка хвостовых вызовов.
Чувак писал, что юзает dlr и что проблема с хвостовыми вызовами где-то в нем.
Здравствуйте, Аноним, Вы писали:
А>Собственно все ясно. На прямые вопросы не отвечаешь, допускаешь грубейшие ошибки, демонстративно "обижаешься", бравируешь собственной "крутостью", которую, однако, не можешь продемонстрировать (да и по остальным твоим комментариям видно, что ничего, представляющего из себя хоть какую то ценность там и не валялось). Удачи в дописывании "тривиального" syntax-case и освоении ОСНОВ схемы.
Пшел вон, быдло. Я не обижаюсь — на дураков и хамов не обижаются. Просто не опускаюсь до обсуждения интересных и важных тем с такими ничтожествами, как ты. И ты бы хотя бы аналогичную моей реализацию инфиксного синтаксиса выродил — тогда был бы разговор.
P.S. для всех прочих, не для хамоватого ничтожества: занятно, что находятся глупцы, не считающие syntax-case тривиальным. Это одна из самых примитивных форм pattern matching.
P.P.S. и я таки конкретно облажался, да, когда говорил о том, что syntax-case равномощен define-macro. Это не так. Стандарт позволяет ограничивать окружение трансформеров.
Здравствуйте, Mr.Cat, Вы писали:
MC>CPS по идее не должен особо тормозить, тем более в дотнете, где вроде есть нормальная поддержка хвостовых вызовов. MC>Чувак писал, что юзает dlr и что проблема с хвостовыми вызовами где-то в нем.
Дык, ведь нормальной поддержки хвостовых вызовов до сих пор нет, даже в Моно насколько мне известно было с этим получше.
Lisp is not dead. It’s just the URL that has changed: http://clojure.org
Здравствуйте, yumi, Вы писали:
Y>Я не тот злой аноним, но все же вмешаюсь.
Оно не злое. Оно малолетнее и безмозглое.
Y> Польза для меня есть одна и очень существенная, она защищает от глупых ошибок.
Я использую метапрограммирование гораздо в больших масштабах, чем это обычно делается всеми другими в коде на Лиспе или Схеме. И ни разу за всю мою практику я не сталкивался с ошибками, которые должна предотвращать гигиена. Вообще ни разу. А вот ограничения гигиены мне бы мешали на каждом шагу.
Здравствуйте, yumi, Вы писали:
MC>>CPS по идее не должен особо тормозить, тем более в дотнете, где вроде есть нормальная поддержка хвостовых вызовов. MC>>Чувак писал, что юзает dlr и что проблема с хвостовыми вызовами где-то в нем.
Y>Дык, ведь нормальной поддержки хвостовых вызовов до сих пор нет,
Нормальная она, медленнее обычных вызовов процентов на 20 в самом худшем случае. Проблема не в этом, а в оверхеде на реализации замыканий, которые плодятся при CPS.
Y> даже в Моно насколько мне известно было с этим получше.
В моно, кстати, не на всех платформах .tail работает.
Здравствуйте, metaprogrammer, Вы писали: А>>Сливай сливай, зелененький. Я от тебя только и прошу, что тривиальную реализацию syntax-case. M> Рыльцем ты не вышел, чтоб что либо просить. Ты хамло. Пусть кто либо другой попросит.
А что ее просить-то? Вон она, psyntax называется (точнее — это имплементация большого куска r6rs). Что-то около 4000 строк кода, кажется.
M> f в рантайме вызывается.
Я давал ссылку на пример, работающий в chicken scheme и где трансформер юзает функции из того же файла. Принципиальных препятствий этому нет — только искусственное ограничение.
Здравствуйте, yumi, Вы писали: Y>Дык, ведь нормальной поддержки хвостовых вызовов до сих пор нет, даже в Моно насколько мне известно было с этим получше.
Честно говоря, я не в курсе. Просто передаю, что слышал.
Здравствуйте, Mr.Cat, Вы писали:
MC>CPS по идее не должен особо тормозить, тем более в дотнете, где вроде есть нормальная поддержка хвостовых вызовов.
Тормоза при CPS берутся от расходов на замыкания, от черзмерного количества вызовов и от мелкого размера каждой функции, что отрубает все возможности для оптимизации. Чтоб CPS-ный код не тормозил — это уж очень специализированная VM нужна.
MC>Чувак писал, что юзает dlr и что проблема с хвостовыми вызовами где-то в нем.
Здравствуйте, metaprogrammer, Вы писали: M> Нормальная она, медленнее обычных вызовов процентов на 20 в самом худшем случае. Проблема не в этом, а в оверхеде на реализации замыканий, которые плодятся при CPS.
Даже если используются более-менее умные cps-трансформеры? Наивное преобразование — да, плодит замыкания, но про борьбу с этим чуть ли не докторские пишут.