LINUX.ORG.RU

Слышал или читал в древних манускриптах?

Пример низзя, ибо как схема позволяет обойти гигиену, так и CL легко обходит «негигиеничность»

А в некоторых схемах вообще есть «негигиеничные» defmacro (помимо define-syntax)

yyk ★★★★★
()

Мол, дают больше возможностей.


Скорей имеют больше опастностей.

Если вам нравится использовать нетривиальное метапрограммирование, то рекомендую избегать такого примитивного в этом отношении языка, как Common Lisp, и использовать современный язык с многостадийной компиляцией и четко определенной семантикой (например, язык модулей PLT Scheme, camlp4 для OCaml, и другие системы, обрабатывающие файлы детерминированным образом).

Полный текст здесь.

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

> Без макросов полный лисп невозможен

Без сомнения. Но мысль была в том, что макросистема в Common Lisp довольно архаична, я вряд ли это можно рассматривать как плюс.

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

> Без сомнения. Но мысль была в том, что макросистема в Common Lisp довольно архаична, я вряд ли это можно рассматривать как плюс.

Скорее не архаична, а низкоуровнева. Что не является ни плюсом, ни минусом (т. к. с одной стороны позволяет при необходимости делать нетривиальные вещи (и «негигиеничность» здесь вполне может использоваться во благо при необходимости), а с другой - при неумелом использовании можно огрести много проблем). Тот же define-syntax на CL вполне реализуем (единственная сложность - гигиеничность, чтобы её обеспечить необходимо прибегнуть к использованию code-walker-а, интерфейс к которому не стандартизован (и, следовательно, реализацие-зависим)).

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

> Тот же define-syntax на CL вполне реализуем

Но не реализован? Не нужен? Или просто это возможность чисто теоретическая?

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

>Не нужен?

Сдается мне, что не нужен - как простые, так и сложные макросы довольно легко пишутся на defmacro.

макросистема в Common Lisp довольно архаична

Можете раскрыть свою мысль? Я не до конца понимаю, что значит «архаична» в данном контексте, чем это плохо и какие есть варианты устраниения этой архаичности.

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

> Скорей имеют больше опастностей.

Только для тех криволапых, кто не умеет ими пользоваться.

Но таких вообще к Лиспу подпускать нельзя, им нужен bondage&discipline язык, вроде того же Хаскелля.

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

> Но не реализован? Не нужен? Или просто это возможность чисто теоретическая?

Реализован. На cliki.net есть несколько вариантов.

anonymous
()

.oO( надолго ли хватит интралисп-срача? )

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

> Реализован. На cliki.net есть несколько вариантов.

Забыли ссылку указать. Ещё бы не плохо указать, где используется.

archimag ★★★
()

> Но не реализован? Не нужен? Или просто это возможность чисто теоретическая?

Самый простейший и очевиднейший пример: макру, которая компилировала бы константное регулярное выражение, на CL сделать можно, а на чистом R5RS нельзя.

Я уж не говорю про всякие офигенно полезные на практике вещи, такие как ORM, во время компиляции вытягивающие из базы данных структуру и генерящие соответствующий код для доступа к ней. В CL делается тривиально (и не слушайте, что говорит архимаг, он личность мутная и зело упертая в своих нелепых убеждениях), на R5RS придется как с Жабой делать, с внешними программами и прочим бредом.

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

http://www.ccs.neu.edu/home/dorai/mbe/mbe-lsp.html

Ещё бы не плохо указать, где используется.

Используется для портирования приложений со Схемы, исключительно. Писать то сразу такие макры сложнее, чем нормальные коммонлисповые.

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

> Можете раскрыть свою мысль? Я не до конца понимаю,

что значит «архаична» в данном контексте


Архаичная это значит устаревшая, не модная ;) Макросистема в CL очень проста, фактически она просто даёт возможность выполнить произвольный код во время раскрытия макросов.

чем это плохо


Например, повышается сложность отладки макросов. Система предоставляет весьма ограниченный набор инструментов для упрощения этой задачи.

какие есть варианты устраниения этой архаичности.


В контексте CL, я их особо не вижу. Но, вопрос о том, надо ли её устранять тоже является открытым. Пока я не видел аргументов в пользу того или иного подхода потверждённых реальным убедительным кодом.

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

>http://www.ccs.neu.edu/home/dorai/mbe/mbe-lsp.html

Как бы: «implementation does not provide hygiene.» Нафиг-нафиг такую «реализацию».

Гигиеническое автооборачивание свободных переменных довольно просто приделать, а вот захват лексического контекста определения макроса - посложнее.

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

Я видел аргументы (в виде кода, использующего макросы) в пользу того, что существующая модель макросов очень полезна.

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

> Например, повышается сложность отладки макросов. Система предоставляет весьма ограниченный набор инструментов для упрощения этой задачи.

Сложноотлаживаемый код легко можно написать и без всяких макросов. Просто не нужно этого делать.

Лисп сам по себе требует от программиста определенной дисциплины, это естественно для динамически типизированного языка.

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

> макру, которая компилировала бы константное регулярное выражение,

на CL сделать можно


Но не нужно? Или в каком пакете такое реализовано? Какой смысл говорить о вещах, не имеющих практической ценности?

Я уж не говорю про всякие офигенно полезные на практике вещи,

такие как ORM



Расскажите пожалуйста, а лучше дайте ссылку на такой замечательный ORM, буду всем советовать.

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

> Как бы: «implementation does not provide hygiene.» Нафиг-нафиг такую «реализацию».

А на кой она, эта гигиена? Сложная и бесполезная. Генерацию локальных имен приделать можно, захват контекста - в CL в принципе нельзя, да и вредно, это только усложняет применение макр.

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

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

Без сомнения, макросы очень полезны, только ведь был задан вопрос не о полезности, а о том, какая система лучше. Я нахожу макросистему CL полезной и эффективной, и пользуюсь ей, но признаю, что вряд ли её можно назвать очень продвинутой. А какая система лучше (с какой точки зрения?) я не знаю, наверное зависит от типа выполняемой работы.

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

>Или в каком пакете такое реализовано?

cl-ppcre. Если одно и то же регвыражение применяется в цикле, то польза будет заметная.

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

> Но не нужно? Или в каком пакете такое реализовано? Какой смысл говорить о вещах, не имеющих практической ценности?

Лично твоё, арчимаг, мнение о «практической ценности» ценность имеет вообще отрицательную.

А любому не упёртому очень даже понятно, что возможность скопипастить регвыр из ОРылевой книги - это очень полезно.

Расскажите пожалуйста, а лучше дайте ссылку на такой замечательный ORM, буду всем советовать.

Я видел несколько штук самопальных в разных проектах. Никому не приходило в голову такую примитивщину делать открытым проектом, они все специфичны для задач.

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

> вряд ли её можно назвать очень продвинутой

В том и дело, что она не продвинутая, а низкоуровневая.

А поверх нее можно реализовывать и продвинутые макросистемы.

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

> Лично твоё, арчимаг, мнение о «практической ценности» ценность

имеет вообще отрицательную.


Забыли привести какое-либо обоснование.

Никому не приходило в голову такую примитивщину делать

открытым проектом



Ну да, а делать открытым проектом говно всякое, типа CLSQL, людям в голову приходит, эх, что за народ... Очень жаль, что «истинная суть» вещей скрыта в проприетарных проектах, а в open-source этого не увидишь. Ну да какой смысл говорить о том, что не пощупать ни увидеть нельзя? Жаль, что авторитет ваш тоже, особого доверия не вызывает - не могу просто так словам поверить..

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

«CL-PPCRE uses compiler macros to pre-compile scanners at load time if possible. This happens if the compiler can determine that the regular expression (no matter if it's a string or an S-expression) is constant at compile time and is intended to save the time for creating scanners at execution time (probably creating the same scanner over and over in a loop).»

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

> Забыли привести какое-либо обоснование.

Я уже давно понял, что нет ничего более глупого, чем доказывать дураку что он дурак. На то он и дурак, что не поймет.

Ну да, а делать открытым проектом говно всякое, типа CLSQL, людям в голову приходит, эх, что за народ...

CLSQL достаточно generic, чтобы быть полезным большому числу пользователей (в том числе и для реализации тех самых ORM-ов). А частные ORM-ы все под конкретные задачи заточены.

Я же говорю, что ты просто дурак. С тобой спорить вообще бесполезно, ты слишком в себе уверен.

Я могу предсказать, что ты уже очень скоро забудешь, как облажался с cl-ppcre. И будешь продолжать нести все тот же нелепый бред про макры.

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

> Я вообще всегда признаю, что я ошибался, если мне это показывают

Правда? До сих пор этого не случалось. Твое мнение еще не менялось, ты очень упрямый и упертый в своих заблуждениях.

Один только свинячий бред про «символьные вычисления» чего стоил.

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

> И будешь продолжать нести все тот же нелепый бред про макры.

Хм, в чём заключается «нелепость бреда», раскройте мысль пожалуйста.

CLSQL достаточно generic, чтобы быть полезным большому

числу пользователей



CLSQL достаточно убог, что бы им вообще никто не пользовался. Я просто хотел поинтересоваться у сведущего человека, нет ли какого-либо нормального открытого ORM?

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

> Правда? До сих пор этого не случалось

Ой, да я вас узнал, ваша манера общаться настолько характерна, что кажется нет никакого смысла скрываться под «anonymous», в чём смысл такого поведения?

Один только свинячий бред про «символьные вычисления» чего стоил.


Хотите вернуться к тему? (только на этот раз без АЛГЕБРЫ).

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

> Хм, в чём заключается «нелепость бреда», раскройте мысль пожалуйста.

В том, что мол «опасны» и вообще практически «не нужны».

нет ли какого-либо нормального открытого ORM?

Нет и не будет. На кой? Есть же макры, так что любой ORM пишется за час по пьяни.

А всякие супермегаобобщенные ORM-ы, сложные и тяжелые, в Лиспе просто не нужны. Это в Java без них никак, а у Лиспа другие методы.

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

арчимак считает, что символьные вычисления к алгебре не относятся. Так же он считает, что никакая модель вычислений сама по себе к алгебре не относится.

Еще этот идиот убежден, что образование программисту вообще не нужно, что математика отстой, и что чистаканкретные пацаны должны склады АСУчивать. Дурак же, что с него взять...

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

> В том, что мол «опасны»

Это общепризнанный факт.

вообще практически «не нужны»


Если бы нашли немного времени посмотреть мой код, то нашли бы там достаточно много макросов. Так что, дай те пожалуйста ссылку, где я такое говорил.

Есть же макры, так что любой ORM пишется за час по пьяни.


Хм, нельзя ли привести ссылку на хоть какой-нибудь проект, для которого доступен исходный код и где можно ознакомиться с подобным шедевром? Я понимаю, что ЛОРе все сплошь мастера, одни парсер за 10 минут делают, другие ORM з а полчаса, но где в конце концов код? Очень хочется посмотреть.

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

> ORM'ы нужны, почему вы считаете, что не нужны?

Нужны конечно же. Не нужны общие, тяжелые и сложные.

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

> одни парсер за 10 минут делают,

А что, парсер арифметических выражений из 20-30 строк на yacc более 10 минут потребует?!? Ну и тормоз...

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

.

> с одной стороны позволяет при необходимости делать нетривиальные вещи

Настоятельно требую кусок кода нетривиальных негигиенических макр, которые невозможно/сложно/неудобно сделать на схимовских макрах.

Ruga-Suneto
() автор топика
Ответ на: комментарий от archimag

К сожалению, все менее «архаичные» системы имеют меньше возможностей. На вопрос «Почему в Common Lisp лучшее метапрограммирование?» отвечает Doug Hoyte в Let Over Lambda.

Макросы CL относятся к макросам Scheme как сам CL к, например, Java. Второе проще освоить и использовать, а даже если где-то ошибёшься, ничего не взорвётся. Но на первом делается то, что невозможно сделать вторым.

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

> имеют меньше возможностей

Каких возможностей? Ответить развёрнуто.

Ruga-Suneto
() автор топика
Ответ на: . от Ruga-Suneto

>Настоятельно требую кусок кода нетривиальных негигиенических макр, которые невозможно/сложно/неудобно сделать на схимовских макрах.

OK, смотрим в CFFI. http://common-lisp.net/project/cffi/manual/html_node/Optimizing-Type-Translat...

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