Язык Nemerle. Часть 5 - Макросы Nemerle (preview)
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.09.11 02:35
Оценка: 27 (3)
Я сейчас работаю над четвертой частью "Язык Nemerle".

Решил выложить драфт для публичного просмотра с цель собрать отзывы и пожелания.

Статья размещена на гитхабе (в личном репозитории):
https://github.com/VladD2/Nemerle-Articles

Особо интересует мнение тех кто в макросах Nemerle еще не очень силен или вообще с ними незнаком, но может более-менее сносно писать гражданский код на Nemerle.

Желательно чтобы критики:
1. Прочли предыдущие части "Язык Nemerle".
2. Имели собранную с исходников интеграцию для VS 2010, так как примеры основаны на последней версии компилятора и Интеграции.
3. Умели программировать на Nemerle.
4. Не имели глубоких знаний в области макросостроения.

Замечания можно кидать как в ответ на это сообщение, так и в github.com, в виде Issues или комента к комитам.

23.09.11 23:56: Перенесено из 'Nemerle'
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: alvas  
Дата: 04.09.11 09:41
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Я сейчас работаю над четвертой частью "Язык Nemerle".


VD>Решил выложить драфт для публичного просмотра с цель собрать отзывы и пожелания.


VD>Статья размещена на гитхабе (в личном репозитории):

VD>https://github.com/VladD2/Nemerle-Articles

Скачал. Там xml + папка с картинками. Не понятно чем его читать?
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[2]: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 04.09.11 10:13
Оценка: +1
Здравствуйте, alvas, Вы писали:

A>Скачал. Там xml + папка с картинками. Не понятно чем его читать?


MS Word'ом.

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[2]: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.09.11 12:03
Оценка:
Здравствуйте, alvas, Вы писали:

A>Скачал. Там xml + папка с картинками. Не понятно чем его читать?


Это вордовский файл, просто в ХМЛ записан для лучшего хранения в системе контрол версий.

Нужен ворд 2003 или старше. Так же можно использовать ОпенОфис. Но он не очень качественно открывает вордовские документы.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: alvas  
Дата: 04.09.11 12:42
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, alvas, Вы писали:


A>>Скачал. Там xml + папка с картинками. Не понятно чем его читать?


VD>Это вордовский файл, просто в ХМЛ записан для лучшего хранения в системе контрол версий.


VD>Нужен ворд 2003 или старше. Так же можно использовать ОпенОфис. Но он не очень качественно открывает вордовские документы.


Спасибо. Разобрался.
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: matumba  
Дата: 04.09.11 19:25
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Решил выложить драфт для публичного просмотра с цель собрать отзывы и пожелания.


В тексте есть куча рассогласований по падежу и проблемы с запятыми.
В целом написано нормально и если эта статья планируется как вводная, то я бы ещё добавил побольше разнообразных примеров того, что могут вытворять макросы. Причём примеры по всем видам макросов — уровня выражений, сборки, типа... т.е. читатель должен не просто вдохновиться потрошением АСТ, а увидеть на примерах, какие в каждом случае могут быть интересные изменения программы.
Re: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: YF Германия  
Дата: 04.09.11 20:22
Оценка: 6 (1)
Здравствуйте, VladD2, Вы писали:

VD>4. Не имели глубоких знаний в области макросостроения.

Главная предпосылка выполнена, — глубокие знания отсутствуют

Мои комментарии я оставил в виде Word-овских комментариев прямо в тексте: здесь
Хотелось бы увидеть какой-нибудь более-менее полезный пример.(Кроме IDisposable, который еще не описан, но будет )
Я бы предложил доморощенный профайлер. Макроатрибут для сборки или класса, который изменяет все методы класса(ов) так, чтобы замерялось время выполнения метода,
считалось, сколько раз метод был вызван и суммировалoсь время по методам во внешнем HashTable, добавлялся бы из макроса.
Штука была бы полезная, — что-то проект тормозит. Добавили макроатрибут на сборку (или на несколько классов, по желанию) и выяснили в чем заключается проблема.
Потом по завершении программы можно было бы сохранять результат например во внешнем файле. Если конечно, это возможно.
Re: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: Аноним  
Дата: 04.09.11 21:51
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Статья размещена на гитхабе (в личном репозитории):

VD>https://github.com/VladD2/Nemerle-Articles

Что-то вордовский документ, да и еще с расширением .xml, порвал мне шаблон.

Нельзя такие вещи с помощью виков делать? А в формат ворда всегда можно сконвертировать.

И вообще, ворд — это как-то не по канонам СПО, не православно.
Re[2]: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.09.11 22:32
Оценка:
Здравствуйте, matumba, Вы писали:

M>В тексте есть куча рассогласований по падежу и проблемы с запятыми.


На орфографию и пунктуацию обращать внимание не надо. Там куча редактирований, может еще и не то быть.

Важно общее восприятие.

M>В целом написано нормально и если эта статья планируется как вводная, то я бы ещё добавил побольше разнообразных примеров того, что могут вытворять макросы.


Ну, это как раз и планируется. Там в конце даже кое какие заготовки разделов есть (не упорядоченные пока, правда).

Сейчас важно что вызывает вопросы, что не понятно, чего не хватает.

M>Причём примеры по всем видам макросов — уровня выражений, сборки, типа... т.е. читатель должен не просто вдохновиться потрошением АСТ, а увидеть на примерах, какие в каждом случае могут быть интересные изменения программы.


К сожалению, привести примеры всех макросов просто не выйдет. Это займет нереально много места. Статья и сейчас уже на 10 страниц тянет. А я в ней еще хочу осветить две важных темы:
1. Работу с типами.
2. Квази-цитата.
Последних банально много типов.

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

Еще раз повторюсь, что мне важно получить фитбэк по написанному. Важны:
1. Насколько понятно написано?
2. Возникают ли вопросы? Если, да, то просьба описать конкретные места вызывающие вопросы. Пусть даже я их не касался, но читающему это интересно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.09.11 23:06
Оценка:
Здравствуйте, Аноним, Вы писали:

А>И вообще, ворд — это как-то не по канонам СПО, не православно.


Ну, и хрен с ним, с православием.

Работаю как удобнее. Писать в вики — это последнее дело. Не удобно, медленно и нужно подключение к Интернету (которое не всегда имеется).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.09.11 23:45
Оценка:
Здравствуйте, YF, Вы писали:

YF>Мои комментарии я оставил в виде Word-овских комментариев прямо в тексте: здесь


Спасибо. Погляжу.

YF>Хотелось бы увидеть какой-нибудь более-менее полезный пример.(Кроме IDisposable, который еще не описан, но будет )


IDisposable. Собственно, сам пример я тут кому-то в ответ на вопрос (написал вчерне). Ценность его (на мой взгляд) не велика, но он позволяет показать ряд приемов, что ценно.

YF>Я бы предложил доморощенный профайлер. Макроатрибут для сборки или класса, который изменяет все методы класса(ов) так, чтобы замерялось время выполнения метода, считалось, сколько раз метод был вызван и суммировалoсь время по методам во внешнем HashTable, добавлялся бы из макроса.

YF>Штука была бы полезная, — что-то проект тормозит. Добавили макроатрибут на сборку (или на несколько классов, по желанию) и выяснили в чем заключается проблема.

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

YF>Потом по завершении программы можно было бы сохранять результат например во внешнем файле. Если конечно, это возможно.


Это, конечно, возможно. Но не уверен, что именно этот пример будет хорош в целях обучения.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: matumba  
Дата: 05.09.11 08:21
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, matumba, Вы писали:


VD>Сейчас важно что вызывает вопросы, что не понятно, чего не хватает.


К сожалению, прочитал только в виде текста, в студии не упражнялся. Кстати, а есть ли готовый бинарник интеграции, чтобы самому не пересобирать? В тексте упоминается про какие-то нововведения...

M>>Причём примеры по всем видам макросов — уровня выражений, сборки, типа... т.е. читатель должен не просто вдохновиться потрошением АСТ, а увидеть на примерах, какие в каждом случае могут быть интересные изменения программы.


VD>К сожалению, привести примеры всех макросов просто не выйдет. Это займет нереально много места.


Влад, я не про подробный код и пояснения, а чисто вкратце, типа: "На стадии А можно написать макрос, вводящий новый класс Б на основе существующего класса Ц" (и буквально пара строк кода, "мясо" алгоритма).
Лучше подробнее остановиться на подобных "очевидностях", чем расписывать один мозгозакипательный макрос.

VD>Статья и сейчас уже на 10 страниц тянет. А я в ней еще хочу осветить две важных темы:

VD>1. Работу с типами.
VD>2. Квази-цитата.

Я бы не смешивал всё в одну кучу. Попробуй точно определиться с целевой аудиторией — легче будет представить уровень изложения.
Я бы сделал так: одна статья пробегается по верхушкам макросов/квазицитат и даёт в лёгкой форме небольшое howto по разработке простейшего макроса (и представление о макросах вообще). Другие статьи будут специально предназначены для каждой из тем, освещая их наиболее глубоко и точно — это уже статьи для продвинутых макрописак.

VD>Еще раз повторюсь, что мне важно получить фитбэк по написанному. Важны:

VD>1. Насколько понятно написано?
VD>2. Возникают ли вопросы? Если, да, то просьба описать конкретные места вызывающие вопросы. Пусть даже я их не касался, но читающему это интересно.

Написано-то понятно, но у тебя статья получилась как пошаговый рецепт торта для тех, кто не представляет, для чего нужна мука вообще. Т.е. дай читателю сначала увидеть картину в целом — чего можно с макросами, чего нельзя, какие вещи сложны, как вообще макросы работают в студийной экосистеме. Я бы даже эту твою статью разделил на две: общая вводная (со всеми мыслимыми _краткими_ примерами всех типов) и отдельная статья "А теперь попробуем со всей этой х*** взлететь!". (у тебя статья фактически и есть из двух половин)
Re[3]: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: YF Германия  
Дата: 05.09.11 09:56
Оценка:
Здравствуйте, VladD2, Вы писали:
VD>Это, конечно, возможно. Но не уверен, что именно этот пример будет хорош в целях обучения.
Вообще, статей о макросах ты уже написал немало. Эта статья по сравнению с "Расширенным курсом макросов" не содержит новой информации. Если не брать в расчет новые плюшки, в виде Визарда для макросов и того, что она более компактна. Еще будет про UserData, — в расширенном курсе я этого не видел.
Что не освещено практически нигде или мало освещено — паттернматчинг. Есть некоторые примеры, как распознать голову и хвост списка. А вот живых примеров, как в этой статье — один пример матчинга метода, с последующим анализом атрибутов, параметров и возвращаемого значения, практически нет. Между тем, писать макросы, не овладев паттерн-матчингом нереально. Макросы полезны там, где требуется некая кодогенерация, опирающаяся на анализ компилируемого кода пользователя.
Т.е. нужно уметь:
1) разбирать код
2) создадавать/изменять код

По поводу 1)
Разбирать — Это тема Паттерн-матчинга. Живые примеры можно увидеть лишь в самом компиляторе, в каталоге macros. Или Snipptets. Освещено мало. Квазицитаты, которые можно использовать как для генерации, так и для анализа кода. Wolfhound как-то ответил на этом форуме: "Задай <[ в поиске и получишь тыщу примеров квазицитат."
Только это дикая природа — исходники, в которых есть все. Но ты же не для тех пишешь статью, кто сам может со всем по одним исходникам разобраться?
Ты сказал, что профайлер уже есть. Сам же ты, по твоим же собственным словам(искать цитату — лень), предпочитаешь писать свои макры. Но это ты. А остальные так не могут.
Как пользоваться этим профайлером непонятно. Естъ там несколько макросов, которые работают на разных стадиях. Даже как этим пользоваться — неясно. Какой уж там понимать исходники.
Аналогично АОP — есть макросы, но ими никто не пользуется. Т.е. бери исходники — и вперед... Хоть бы в начале файла написали кратко, как этим всем пользоваться. Хотя для аоп есть хотя бы тесты(они же примеры), но их еще сначала надо найти и вообще знать, что они есть.

По поводу 2)
Необходимо уметь искать существующие или создавать новые:
— классы,
— методы,
— поля,
— свойства,
-анализировать типы и в зависимости от этого генерировать тот или иной код

Если поискать на этом форуме, то можно обнаружить, что на очень многие вопросы ты ответил по многу раз. Например, если поискать usesite, то можно увидеть несколько твоих похожих ответов.
Часто отсылают к исходникам макроса DesignPatterns. Может его откоментировать прямо в коде? Это я к чему — твои ответы на форуме найти сложно. А вот в каталоге исходников — они как на ладони. Хорошо бы если бы была статья или раздел статьи, по принципу "how to?" Хорошо, если бы со ссылками на исходники, где это уже применяется.
— как создать новый класс?
— как выбрать все классы, в сборке?
— как получить все методы класса?
— как получить все <х> удовлетворяющие критерию у
— как добавить базовый класс и реализовать его методы
Я понимаю, что это требует много времени и сил, которых у тебя нет.
Примеры уже написаны — они в исходниках компилятора, в каталоге macros, snippets. Осталось бы научиться в них ориентироваться.
Вот я и предложил в другой теме, записывать короткие репортажи из серии: "шо делает вот эта квазицитата".
Включил запись на 3 минуты, рассказал водя мышкой в студии, выложил на youtube, на канал Nemerle.
Не надо снимать фильмы на 4 часа.
Re[4]: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 05.09.11 10:01
Оценка:
Здравствуйте, matumba, Вы писали:

M>Кстати, а есть ли готовый бинарник интеграции, чтобы самому не пересобирать?


[VS2010] Инсталлер. Просьба потестить сборку и установку
Автор: kochetkov.vladimir
Дата: 01.09.11

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: YF Германия  
Дата: 05.09.11 11:37
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Я сейчас работаю над четвертой частью "Язык Nemerle".

VD>Решил выложить драфт для публичного просмотра с цель собрать отзывы и пожелания.

Еще было бы здорово, если бы были домашние задания. Или, назовем это "задания для самопроверки".
Это дает возможность проверить, что ты на самом деле понял. А то так вроде все понятно, а как начнешь делать — полная ж...
Например:
"Напишите макрос, rotate, принимающий на входе x, y, angle, и возвращающий точку, повернутую на заданное количество градусов. Если х и у константы, то макрос должен генерировать только константное значение. "
Это из англоязычного туториала по макросам. Только там дано явно недостаточно информации, для решения этого задания.

А что если макрос принимает переменное количество параметров.
А что если приходит только струкутра/класс с полями x и у?
Если интерфейс? и т.д.

Задача казалось бы простая, — сколько человек сможет ее здесь решить?
Re[4]: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.09.11 14:23
Оценка:
Здравствуйте, matumba, Вы писали:

M>К сожалению, прочитал только в виде текста, в студии не упражнялся. Кстати, а есть ли готовый бинарник интеграции, чтобы самому не пересобирать? В тексте упоминается про какие-то нововведения...


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

M>Влад, я не про подробный код и пояснения, а чисто вкратце, типа: "На стадии А можно написать макрос, вводящий новый класс Б на основе существующего класса Ц" (и буквально пара строк кода, "мясо" алгоритма).

M>Лучше подробнее остановиться на подобных "очевидностях", чем расписывать один мозгозакипательный макрос.

У меня план такой. Я даю довольно сложный (в смысле насыщенный деталями) пример макроса Disposable. В нем я на практике показываю довольно много разных техник. При этом это будет, что называется, настоящий "жизненный" пример.

Далее я в режиме мануала прохожусь по разным видам квази-цитат и показываю как с их помощью распознавать и генерировать AST.

M>Я бы не смешивал всё в одну кучу. Попробуй точно определиться с целевой аудиторией — легче будет представить уровень изложения.


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

M>Я бы сделал так: одна статья пробегается по верхушкам макросов/квазицитат и даёт в лёгкой форме небольшое howto по разработке простейшего макроса (и представление о макросах вообще). Другие статьи будут специально предназначены для каждой из тем, освещая их наиболее глубоко и точно — это уже статьи для продвинутых макрописак.


Тут есть одна проблема. Макросы хорошо разбираются только на практике. Да материал для продвинутых уже есть. Только толку с него 0. В данной работе я пытался охватить те вещи которые меня за последнее время спрашивали. То есть, вещи вызывающие реальный интерес у тех кто осваивает макросы.

VD>>Еще раз повторюсь, что мне важно получить фитбэк по написанному. Важны:

VD>>1. Насколько понятно написано?
VD>>2. Возникают ли вопросы? Если, да, то просьба описать конкретные места вызывающие вопросы. Пусть даже я их не касался, но читающему это интересно.

M>Написано-то понятно, но у тебя статья получилась как пошаговый рецепт торта для тех, кто не представляет, для чего нужна мука вообще. Т.е. дай читателю сначала увидеть картину в целом — чего можно с макросами, чего нельзя,


Ну, примерно это я и пытаюсь сделать. Пример Disposable как раз будет демонстрировать что и как можно сделать с помощью макросов.

M>какие вещи сложны, как вообще макросы работают в студийной экосистеме.


Это только на практике можно понять. Но вводные я постараюсь дать.

M> Я бы даже эту твою статью разделил на две: общая вводная (со всеми мыслимыми _краткими_ примерами всех типов) и отдельная статья "А теперь попробуем со всей этой х*** взлететь!". (у тебя статья фактически и есть из двух половин)


Посмотрю, что в итоге выйдет. Сначала реализую задуманное. А там буду думать делить или не делить.

Сейчас важно чтобы то что я делаю не превратилось в "продвинутый курс", который несмотря на обилие информации, похоже не очень то полезен на практике. Думаю что моя ошибка была в том, что я в "продвинутом курсе" пытался дать максимум информации, а людям нужна была не полнота, а связанность изложения. Другими словами им нужно понимать что и как делать на практике, а не разные детали.

Плюс по макросам есть или очень поверхностные туториалы или продвинутый курс. А вот среднего звена нет. Вот его и хочется создать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.09.11 14:50
Оценка:
Здравствуйте, YF, Вы писали:

YF>Вообще, статей о макросах ты уже написал немало. Эта статья по сравнению с "Расширенным курсом макросов" не содержит новой информации.


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

YF>Если не брать в расчет новые плюшки, в виде Визарда для макросов и того, что она более компактна. Еще будет про UserData, — в расширенном курсе я этого не видел.


Моя задача не описать плюшки, а показать что надо делать чтобы создать полезный макрос. За одно стараюсь осветить нетривиальные вопросы которые поднимались на форумах за последнее вермя.

YF>Что не освещено практически нигде или мало освещено — паттернматчинг.


Он тоже будет. Только не сам ПМ (его нужно изучать по предыдущим частям). Речь пойдет о квази-цитатах в ПМ. Как и создании кода с помощью квази-цитат.

YF>Есть некоторые примеры, как распознать голову и хвост списка.


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

YF>А вот живых примеров, как в этой статье — один пример матчинга метода, с последующим анализом атрибутов, параметров и возвращаемого значения, практически нет.


Ну, вот эта статья и призвана устранить этот пробел. В ней будет как "пример из реального мира" (Disposable), так и отдельный раздел посвященный квази-цитированию, где будут освещены разные типы цитат.

YF> Между тем, писать макросы, не овладев паттерн-матчингом нереально. Макросы полезны там, где требуется некая кодогенерация, опирающаяся на анализ компилируемого кода пользователя.


Ну, дык. Прочтя предыдущие части человек должен будет понять что такое ПМ. А эта часть позволит как применять его совместно с квази-цитатами.

YF>Т.е. нужно уметь:

YF>1) разбирать код
YF>2) создадавать/изменять код

YF>По поводу 1)

YF>Разбирать — Это тема Паттерн-матчинга. Живые примеры можно увидеть лишь в самом компиляторе, в каталоге macros. Или Snipptets. Освещено мало. Квазицитаты, которые можно использовать как для генерации, так и для анализа кода. Wolfhound как-то ответил на этом форуме: "Задай <[ в поиске и получишь тыщу примеров квазицитат."
YF>Только это дикая природа — исходники, в которых есть все. Но ты же не для тех пишешь статью, кто сам может со всем по одним исходникам разобраться?

Я пишу эту часть для практиков, т.е. для человека не педанта который хочет максимально быстро начать писать реально полезные макросы.

YF>Ты сказал, что профайлер уже есть. Сам же ты, по твоим же собственным словам(искать цитату — лень), предпочитаешь писать свои макры. Но это ты. А остальные так не могут.


Профайлер есть: http://nemerle.org/wiki/Profiling_macros

Пример Disposable интереснее него, так как позволяет показать больше особенностей написания реальных макросов.

YF>Как пользоваться этим профайлером непонятно.


А описание почитать трудно?

YF>Аналогично АОP — есть макросы, но ими никто не пользуется. Т.е. бери исходники — и вперед... Хоть бы в начале файла написали кратко, как этим всем пользоваться. Хотя для аоп есть хотя бы тесты(они же примеры), но их еще сначала надо найти и вообще знать, что они есть.


Ну, с АОP отдельная история. Проблема в том, что сам АОP особо никому не нужен. Те кто им заболевают и приходят в итоге к Nemerle, очень быстро понимаю, что АОP очень ограничен в возможностях, а вот сами макросы, напротив, очень гибки и мощны. АОP не конечная задача — это средство. Макросы тоже средство. Так зачем использовать какое-то ограниченное промежуточное средство, когда есть более мощное?

YF>По поводу 2)

YF>Необходимо уметь искать существующие или создавать новые:
YF>- классы,

Поиск классов уже показан в примере макросов ProjectInfo и ProjectTypeInfo. Возможно покажу потом более умные методы поиска нежели тупой перебор.

YF>- методы,


Это будет в примере Disposable.

YF>- поля,

YF>- свойства,

Думаю, что их поиск мало чем отличается от поиска методов. Член он и в Африке член .

YF>-анализировать типы и в зависимости от этого генерировать тот или иной код


Это будет в примере Disposable.

Остается только генерация типов. Тут нужно подумать как быть.

YF>Если поискать на этом форуме, то можно обнаружить, что на очень многие вопросы ты ответил по многу раз. Например, если поискать usesite, то можно увидеть несколько твоих похожих ответов.


Ну, вот про usesite и вообще цвета нужно не забыть упомянуть.

YF>- как создать новый класс?


Мы повторяемся. Как я уже сказал, это надо осветить.

YF>- как выбрать все классы, в сборке?

YF>- как получить все методы класса?

Опять повторяемся. Освещено в макросах ProjectInfo и ProjectTypeInfo.

YF>- как получить все <х> удовлетворяющие критерию у


Вообще не ясно о чем речь. Слишком абстрактно.

YF>- как добавить базовый класс и реализовать его методы


Будет в примере Disposable. Не класс, а интерфейс, но не велика разница.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.09.11 18:39
Оценка:
Здравствуйте, VladD2, Вы писали:

Добавил в каталог статьи пример кода.
Nemerle-Articles\Nemerle-macros-intro\Projects\MacroIntro
В него поместил реализацию макроса Disposable и тест к нему.

Просьба, глянуть этот пример и:
1) сказать насколько такой пример интересен;
2) указать места данного примера, которые (по вашему мнению) требуют особо тщательного описания.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: para  
Дата: 05.09.11 19:28
Оценка:
Здравствуйте, VladD2, Вы писали:

disposable

строка 64
                  base.Dispose(disposing);
                _disposed = true;

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

строки 18б 23 &mdash; лишние запятые

по смыслу:
почему ImplementDisposeFields сделан отдельным макросом — так удобнее или для примера?
Re[3]: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.09.11 20:54
Оценка:
Здравствуйте, para, Вы писали:

P>строка 64

P>
P>                  base.Dispose(disposing);
P>                _disposed = true;
P>

P>_disposed объявлен как приватный, по этому будет достаточно вызова родительского

Ну, и что что приватный? После выполнения Dispose состояние объекта должно считаться некорректным и он не должен позволять вызывать свои метода.
Кстати, надо будет расширить макру, чтобы она добавляла ко всем методам:
when (_disposed)
  throw ObjectDisposedException("Resource was disposed.");


P>по смыслу:

P>почему ImplementDisposeFields сделан отдельным макросом — так удобнее или для примера?

И то, и другое. ImplementDisposeFields удобнее реализовать на фазе WithTypedMembers. Об этом будет сказано в объяснении.
Ну, и все это показывает ряд приемов. Тут тебе и передача управления в другой макрос путем генерации АСТ этого макроса. И демонстрация того, что макросы из одной сборке таки могут друг к другу обращаться, пусть и не явно. И то, что генерацию чего-то что требует информации о типах нужно выносить в макросы работающие на фазе WithTypedMembers.

В общем, хороший пример демонстрирующий сразу ряд концепций и приемов.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.