Автор | Сообщение |
misha![]()
1275 сообщений |
#2928 2010-09-19 20:29 GMT+3 часа(ов) |
>Код на CL вообще не грамотный.
Объясните какой и почему?)) >Так может писать человек не представляющий что значат в CL стадии обработки кода. Я думал, что у CL существуют навороченные макро-трансформеры, как у Racket, а оказалось, что нет. >ander-skirnir прав - у вас явно какое-то предубеждение. О каком предубеждении идет речь? Я привык к макросом не имеющим побочных эффектов, с удобной системой сопоставления с образцом. До R3RS Схема имела макросы имеющие различные побочные эффекты, но затем перешли на "гигиенические" макросы, т.е. макросы без побочных эффектов. И этот переход до сих пор считался прогрессом, а ander-skirnir спорит с этим. Или это не так? отредактировал(а) misha: 2010-09-19 20:39 GMT+3 часа(ов) |
|
ander-skirnir![]()
227 сообщений |
#2931 2010-09-19 21:19 GMT+3 часа(ов) |
> перешли на "гигиенические" макросы, т.е. макросы без побочных эффектов. И этот переход до сих пор считался прогрессом, а ander-skirnir спорит с этим.
Макросы, раскрытие которых навязывает let (flet, etc...), чаще предполагают отсутствие гигиены, потому что большинство иных случаев можно переписать, вынеся связывания за пределы целевого раскрытия. И второе - вводить гигиену гораздо легче, чем обходить. |
|
misha![]()
1275 сообщений |
#2932 2010-09-19 22:08 GMT+3 часа(ов) |
>И второе - вводить гигиену гораздо легче, чем обходить.
Эх, не читали Вы Пола Грэхема)) Как Вы будете реализовывать синтаксический захват определений (let ([/ list])Угадали результат? А ещё пространства имен синтаксического разбора (define-syntax ++iКакой Вы сделали вывод? Имхо, это у Вас предубеждение, либо недостаток знания) или и то и другое вместе) отредактировал(а) misha: 2010-09-19 22:18 GMT+3 часа(ов) |
|
antares0
185 сообщений |
#2933 2010-09-19 22:35 GMT+3 часа(ов) |
Первре работа с окружением, второе , по-моему не отличается от замыкания. И то и другое будет примерно так же с попрвкой на CL. Непонятно как это все относится к гигиене.
|
|
antares0
185 сообщений |
#2934 2010-09-19 22:37 GMT+3 часа(ов) |
Хотя, да отличается
|
|
misha![]()
1275 сообщений |
#2936 2010-09-19 23:18 GMT+3 часа(ов) |
Ответ на первое задание: '(6 3)
Напомню, ander-skirnir утверждал, что макросистема Рэкета - тупой копипаст. Ну, лично я так понял) |
|
ander-skirnir![]()
227 сообщений |
#2939 2010-09-19 23:46 GMT+3 часа(ов) |
> ander-skirnir утверждал, что макросистема Рэкета - тупой копипаст. Ну, лично я так понял)
Весьма нелогично поняли. Если бы я такое утверждал, отсюда сразу следовало бы, что она меня целиком устраивает, потому что меня устраивает коммон-лисповская. > Эх, не читали Вы Пола Грэхема)) Читали: и Грэмов, и Хойтов, и Сейбелей, и Лэмкинсов. > Как Вы будете реализовывать синтаксический захват определений А мы не будем реализовывать гигиенический трансформер. Вместо этого мы просто будем вводить гигиену где надо gensym'ом. И я так и не понял, что вы своим кодом хотели показать. Типа, что не так уж и сложно обходится, да? А вы поглядите, как она вводится gensym'ом и поймёте. |
|
misha![]()
1275 сообщений |
#2941 2010-09-19 23:50 GMT+3 часа(ов) |
>А вы поглядите, как она вводится gensym'ом и поймёте.
Получится, но не то) Создайте мне навороченную гигиеническую макросистему (желательно простым копипастом), а не поделку типа так смог студент) |
|
ander-skirnir![]()
227 сообщений |
#2943 2010-09-19 23:54 GMT+3 часа(ов) |
> Получится, но не то)
Разница аж в том, что ракетный трансформер сам переименовывает, а мы - ручками. Только суть в том, что не переименовывать нужно куда чаще. > Создайте мне навороченную гигиеническую макросистему В том то и дело, что ценность её отрицательна, учитывая вышесказанное. |
|
antares0
185 сообщений |
#2944 2010-09-19 23:56 GMT+3 часа(ов) |
Цитата Значит я не угадал. Цитата По моему он утверждал другое. Хотя лично я в равной мере не понимаю вас обоих. |
|
misha![]()
1275 сообщений |
#2945 2010-09-19 23:59 GMT+3 часа(ов) |
>Только суть в том, что не переименовывать нужно куда чаще.
Отнеситесь с юмором: Там, где пехота не пройдёт. И бронепоезд не промчится, Угрюмый танк не проползёт, Там ander-skirnir на пузе проползет) >В том то и дело, что ценность её отрицательна, учитывая вышесказанное. Докажите?!) P.S. Это все не то) отредактировал(а) misha: 2010-09-20 00:05 GMT+3 часа(ов) |
|
misha![]()
1275 сообщений |
#2946 2010-09-20 00:02 GMT+3 часа(ов) |
>По моему он утверждал другое.
ander-skirnir писал: "Не в обиду, но мне это напомнило "метапрограммирование шаблоны c++" Вообще, ограничение макросов пределами одной фазы кажется преступлением против лиспа." |
|
ander-skirnir![]()
227 сообщений |
#2947 2010-09-20 00:11 GMT+3 часа(ов) |
> Не в обиду, но мне это напомнило "метапрограммирование шаблоны c++"
Я имел ввиду, что так же статично всё. Если в cl нам по большому счёту всё-равно, напишем мы программу целиком, а потом откомпилим, либо будем писать её на-ходу, то подход ракеты с её фазами - сначала написать - потом откомпилить. А repl, как и eval - скорее фичи (тут можно вспомнить, что в стандарте схемы и eval'a то не было). > Докажите?!) > P.S. Это все не то) Как Вы могли заметить по графе `возраст', у меня сегодня День Рождения ![]() |
|
misha![]()
1275 сообщений |
#2952 2010-09-20 00:59 GMT+3 часа(ов) |
Поздравляю Вас с Днем Рождения!!!
![]() >Я имел ввиду, что так же статично всё. Надеюсь, Вы убедились что это не так? >подход ракеты с её фазами - сначала написать - потом откомпилить. И да и нет) При необходимости Вы можете не компилировать, а подгружать. К сожалению, у Рэкета плохо описаны некоторые дополнительные возможности (а мне лень копать), ибо судя по описанию он позволяет реализовать (и откомпилировать) практически любой язык программирования(включая CL). Если Вы не знали, то на Рэкете написаны R5RS, R6RS, и другие академические языки. >А repl, как и eval - скорее фичи (тут можно вспомнить, что в стандарте схемы и eval'a то не было). Но были макросы с сайд-эффектами) Как Вы любите) >Ну и раз такое дело, может Вы приведите пример, где, как Вам кажется, автоматическая гигиена даёт выигрыш, а я перепишу то же с gensym'ом на cl? Дело не в выигрыше) суть в том - полезно ли это для реальных программ. Довольно трудно проанализировать работу сложного макроса, еще сложнее убедится в адекватности его работы) Чем надежнее код тем лучше, а для оперирования сайд-эффектами есть Форт) |
|
misha![]()
1275 сообщений |
#2953 2010-09-20 01:05 GMT+3 часа(ов) |
И не забывайте, что первая реализация Схемы была реализована на MacLisp)
|
|
ander-skirnir![]()
227 сообщений |
#2954 2010-09-20 01:14 GMT+3 часа(ов) |
> Поздравляю Вас с Днем Рождения!!! Дай Бог Вам здоровья и удачи) а остальное возникнет само собой) И не забывайте писать побольше реальных программ на Лиспе, которыми Вы могли бы гордится)
Спасибо ! ![]() > Надеюсь, Вы убедились что это не так? Да, но не слишком. При желании некоторого, но далеко не того, что в cl, динамизма можно добиться, пошаманив с синтаксическими объектами, но при таких усилиях оно того не стоит. Разве что сделать #lang common-lisp. Но это будет достаточно сложно, потому что у нормальных компиляторов cl очень сложная, многопроходная логика компиляции с нетривиальными коммон-лисп ориентированными оптимизациями, а самописный на рэките он явно будет тормознее самого рэкита. > Дело не в выигрыше) суть в том - полезно ли это для реальных программ. Ну это я и подразумеваю под выигрышем. > Довольно трудно проанализировать работу сложного макроса, еще сложнее убедится в адекватности его работы) Еще как только я собираюсь начинать писать макрос, я уже знаю, что у меня будет переименовано, а что заанафорено. Как раз это очень легко продумывается на самом деле. > Чем надежнее код тем лучше, а для оперирования сайд-эффектами есть Форт) Тогда почему бы не писать на template haskell? А на форте я пытался летом писать, но меня не особо впечатлило. Очень низкоуровнево. Почти асм, но, конечно, удобнее. Вот фактор - тот приятен, но макросистема там куда слабее любых лиспов. Зато поинт-фри круче, чем в хаски. |
|
misha![]()
1275 сообщений |
#2957 2010-09-20 01:47 GMT+3 часа(ов) |
>Но это будет достаточно сложно, потому что у нормальных компиляторов cl очень сложная, многопроходная логика компиляции с нетривиальными коммон-лисп ориентированными оптимизациями, а самописный на рэките он явно будет тормознее самого рэкита.
Рэкит компилирует в x86, но ориентированный для собственной виртуальной машины (как и SBCL). Единственное его слабое место (или это его сильные места? ![]() >Как раз это очень легко продумывается на самом деле. Если Вы пишите код сами, а попробуйте разобраться с чьей-либо библиотекой. Когда я пытался использовать GTK, мне приходилось разбираться чужыми библиотеками. Длина некоторых содержащихся в них макросов превышало 35 строк. Я занимался тем, что разбивал их по частям, и оптимизировал их под свою реализацию. >А на форте я пытался летом писать, но меня не особо впечатлило. Макросистема Форта практически гигиенична) шаг влево, шаг вправо - расстрел на месте) Почти как у Рэкета) отредактировал(а) misha: 2010-09-20 01:53 GMT+3 часа(ов) |
|
ander-skirnir![]()
227 сообщений |
#2966 2010-09-20 03:14 GMT+3 часа(ов) |
> Если Вы пишите код сами, а попробуйте разобраться с чьей-либо библиотекой.
На любом языке можно писать запутанный код с плохой декомпозицией. > Макросистема Форта практически гигиенична) IMMEDIATE слова сложно назвать макросистемой ![]() |
|
LinkFly
152 сообщений |
#2975 2010-09-21 01:48 GMT+3 часа(ов) |
misha чтобы на с вами получить какой-нибудь профит от дискуссии, давайте так:
- сформулируйте конкретную задачу, в которой необходимо применить возможности макросистемы. - решите её на Racket - я её напишу на CL А пока я не вижу точки опоры, с помощью которой можно рассуждать о коде типа (let (...) (defmacro ...) ..) |
|
misha![]()
1275 сообщений |
#2980 2010-09-21 15:47 GMT+3 часа(ов) |
>misha чтобы на с вами получить какой-нибудь профит от дискуссии
Вы мне лучше представьте как раскрывается код типа (let (...) (defmacro ...) ..), а то я не пойму почему представленный мной ранее код некорректен. Т.е. мне нужны стадии макротрансформации с объяснениями. |
|
LinkFly
152 сообщений |
#2981 2010-09-21 16:21 GMT+3 часа(ов) |
А я не говорил, что он не корректен, я говорил что он не грамотен.
Вопрос корректности/не корректности я в данный момент не рассматриваю. И я говорил про стадии обработки кода, а не про стадии макротрансформации. Обработка кода, более общее понятие. Повторюсь, без привязки к задаче (хотя бы гипотетической) нет желания рассуждать о подобном коде. |
|
antares0
185 сообщений |
#2987 2010-09-21 16:43 GMT+3 часа(ов) |
Цитата Некорректен потому что defmacro должен вычисляться в нулевом лексическом окружении или использовать macrolet. Что такое стадии макротрансформации я в данном случае понимаю с трудом. |
|
ander-skirnir![]()
227 сообщений |
#2989 2010-09-21 16:46 GMT+3 часа(ов) |
> defmacro должен вычисляться в нулевом лексическом окружении
Нет, не должен. (let (...) (defmacro ...)) - это уже не nil-environment. Как-раз "вычисляется" он (то есть, его macro-function) в текущем lexenv'е, а связывание пропихивается в топлевел. |
|
antares0
185 сообщений |
#2990 2010-09-21 16:49 GMT+3 часа(ов) |
Я об этом и говорю, может не ясно выразился.
P.S. Не в nil а в null, если уж на ненашеском. |
|
ander-skirnir![]()
227 сообщений |
#2991 2010-09-21 16:54 GMT+3 часа(ов) |
Ага, значит я не так понял. Вообще, я заметил, это очень сложная задача - подбирать корректные слова для описания тонкостей cl.
|
|
ander-skirnir![]()
227 сообщений |
#2992 2010-09-21 16:57 GMT+3 часа(ов) |
> стадии макротрансформации
Это, например, что-то в таком стиле, только помощнее: (eval-when (:compile-toplevel :load-toplevel :execute) Просто в ракете макросы строго по фазам расписываются, поэтому любители ракеты оперируют такой терминологией. отредактировал(а) ander-skirnir: 2010-09-21 17:06 GMT+3 часа(ов) |
|
misha![]()
1275 сообщений |
#2995 2010-09-22 01:16 GMT+3 часа(ов) |
>Это, например, что-то в таком стиле, только помощнее
А как этим пользоваться? Уточню предыдущий вопрос, мне бы хотелось видеть как раскрываются let, defun и defmacro. |
|
misha![]()
1275 сообщений |
#2996 2010-09-22 01:28 GMT+3 часа(ов) |
Я написал динамическую надстройку для Racket, чтобы повторить работу гипотетического Лиспа.
(define-syntax (dynamic-syntax so) |
|
misha![]()
1275 сообщений |
#2997 2010-09-22 01:33 GMT+3 часа(ов) |
Тест надстройки:
> x |
|
misha![]()
1275 сообщений |
#3000 2010-09-22 02:02 GMT+3 часа(ов) |
Еще тест:
> (define (zz) '(+ x 1)) |
|