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

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


Я учел твои замечания и написал раздел по примеру Disposable. Глянь, плиз.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: Маслаков Михаил Эстония www.ammyui.com
Дата: 07.09.11 15:01
Оценка:
Здравствуйте, VladD2, Вы писали:

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


Мне кажется, надо побольше реальных примеров привести. Можно, например, более или менее сложные макросы из стандартной библиотеки и пошагово объяснить как они работают.
Я прочитал несколько статей по макросам, но так и не понял как работает интеллисенс в linq <# #>. Ну и вообще, таких недопониманий у меня много, так как тема обширная.

Кстати, я тут подумал, может есть смысл сделать чат room на http://chat.stackoverflow.com/, новички могли бы там задавать простые вопросы, чтобы не заводить каждый раз тему. У этого подхода, есть, конечно, и минус — ответы не сохранятся как здесь, на форуме. Но зато будет какое-никакое живое общение, что на текущем этапе может помочь привлечению новых разработчиков.
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re[2]: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.09.11 15:14
Оценка: +1
Здравствуйте, Маслаков Михаил, Вы писали:

ММ>Мне кажется, надо побольше реальных примеров привести. Можно, например, более или менее сложные макросы из стандартной библиотеки и пошагово объяснить как они работают.

ММ>Я прочитал несколько статей по макросам, но так и не понял как работает интеллисенс в linq <# #>. Ну и вообще, таких недопониманий у меня много, так как тема обширная.

Я (вчера) добавил в статью раздел посвященный реальному примеру — макрос Disposable (автоматизация реализации паттерна IDisposable).

Погляди, плиз, насколько понятно и полезно.

ММ>Кстати, я тут подумал, может есть смысл сделать чат room на http://chat.stackoverflow.com/, новички могли бы там задавать простые вопросы, чтобы не заводить каждый раз тему. У этого подхода, есть, конечно, и минус — ответы не сохранятся как здесь, на форуме. Но зато будет какое-никакое живое общение, что на текущем этапе может помочь привлечению новых разработчиков.


Боюсь, что чат мы не потянем. Слишком много времени нужно на него. Плюс информация будет теряться. Лучше уж просто отвечать на том же stackoverflow и здесь.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: Rival Таиланд
Дата: 07.09.11 18:03
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Боюсь, что чат мы не потянем. Слишком много времени нужно на него. Плюс информация будет теряться. Лучше уж просто отвечать на том же stackoverflow и здесь.


А ещё там для того, чтобы войти в чат нужен рейтинг.
Сразу уменьшит выборку вопрощающих.
«История жизни – это, по существу, развитие сознания, которое завуалировано морфологией.» Пьер Тейяр де Шарден
Re[3]: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: Маслаков Михаил Эстония www.ammyui.com
Дата: 08.09.11 11:34
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Я (вчера) добавил в статью раздел посвященный реальному примеру — макрос Disposable (автоматизация реализации паттерна IDisposable).


Отличная статья, многое расставилось, наконец, по полочкам. Спасибо!
Понимаю, что написание статей, это не самое интересное занятие, но хотелось бы ещё парочку так-же подробно расписанных примеров. Меня, в частности, сейчас интересует написание более или менее сложных DSL с поддержкой IntelliSense с помощью PEG. А то я начал было писать один макрос, и быстро понял, что слишком много пробелов в знаниях, чтобы довести дело до конца.

VD>Боюсь, что чат мы не потянем. Слишком много времени нужно на него. Плюс информация будет теряться. Лучше уж просто отвечать на том же stackoverflow и здесь.


Ну чат, он не для того, чтобы 24часовой суппорт предоставлять. Понятное дело, что нет возможности сидеть и ждать вопросов от начинающих. Но если там наберётся некоторая критическая масса пользователей, то новички смогут помогать новичкам без вмешательства старожилов. А интересные вопросы можно "насильно" вытаскивать в StackOverflow, чтобы это дело индексировалось.
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re[4]: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.09.11 13:52
Оценка:
Здравствуйте, Маслаков Михаил, Вы писали:

ММ>Понимаю, что написание статей, это не самое интересное занятие, но хотелось бы ещё парочку так-же подробно расписанных примеров. Меня, в частности, сейчас интересует написание более или менее сложных DSL с поддержкой IntelliSense с помощью PEG. А то я начал было писать один макрос, и быстро понял, что слишком много пробелов в знаниях, чтобы довести дело до конца.


Дык а форумы то на что? Все случаев все равно рассмотреть нельзя. Опыт тоже не приходит сразу. Нужно браться за нетривиальные вещи и задавать вопросы, если что-то не понятно.

Так же нужно читать форум, чтобы на чужих вопросах изучать различен тонкости.

Еще можно пытаться отвечать на чужие вопросы.

Только так можно получить то что называется опытом. Иначе можно за многое браться, но ничего толком так и не освоить.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 08.09.11 14:41
Оценка:
Здравствуйте, VladD2, Вы писали:

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

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

Как это открыть в ворде или эксплорере что бы прочесть ?

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


VD>Желательно чтобы критики:

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

А почему не то что в релизном инсталере ? Читателям тоже надо будет собирать исходники ?

VD>3. Умели программировать на Nemerle.

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

Я бы прочёл, но см выше
Re[2]: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: _nn_ www.nemerleweb.com
Дата: 08.09.11 14:57
Оценка:
Здравствуйте, Ikemefula, Вы писали:

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


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

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

I>Как это открыть в ворде или эксплорере что бы прочесть ?


http://rsdn.ru/forum/nemerle/4406992.1.aspx
Автор: VladD2
Дата: 04.09.11


Просто открыть файл XML Word-ом.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: YF Германия  
Дата: 08.09.11 14:58
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>А почему не то что в релизном инсталере ? Читателям тоже надо будет собирать исходники ?

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

I>Как это открыть в ворде или эксплорере что бы прочесть ?

I>Я бы прочёл, но см выше

Если бы ты прочел ветку, то увидел бы второе сообщение alvas и ответ на него.
Word-oм 2003 и старше это читается. Кстати, рекомендую, эта статья читабельнее всех предыдущих по макросам.
Re[2]: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.09.11 17:23
Оценка:
Здравствуйте, Ikemefula, Вы писали:

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

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

I>Как это открыть в ворде или эксплорере что бы прочесть ?


1. Скачать локально. Это можно сделать через гит (если есть гитхабовский эканут) или скачать в виде зипа (огромная кнопка Download по приведенной ссылке).
2. Найти файл Nemerle-macros-intro\Nemerle-macros-intro.xml
3. Нажать Enter

I>А почему не то что в релизном инсталере ?


Потому что описываются и используются новые возможности.

I>Читателям тоже надо будет собирать исходники ?


Можно взять инсталлятор отсюда
Автор: kochetkov.vladimir
Дата: 01.09.11
. Но лучше с исходников.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 09.09.11 08:49
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>1. Скачать локально. Это можно сделать через гит (если есть гитхабовский эканут) или скачать в виде зипа (огромная кнопка Download по приведенной ссылке).

VD>2. Найти файл Nemerle-macros-intro\Nemerle-macros-intro.xml
VD>3. Нажать Enter

Я на форум написал _после_ того как проделал всё это

Всем спасибо, вопрос решился.
Re[3]: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: YF Германия  
Дата: 09.09.11 15:19
Оценка:
Здравствуйте, VladD2, Вы писали:
VD>Я учел твои замечания и написал раздел по примеру Disposable. Глянь, плиз.

Да, я видел, еще до того, как ты мне отписал. Было приятно быть услышанным.
Я там еще наделал комментариев.
Может быть, хотя бы некоторые из них окажутся полезными:
здесь
Re[4]: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.09.11 15:24
Оценка:
Здравствуйте, YF, Вы писали:

YF>Я там еще наделал комментариев.

YF>Может быть, хотя бы некоторые из них окажутся полезными:
YF>здесь

Спасибо. Сейчас гляну.

ЗЫ

Есть замечательный сайт — http://www.translit.ru. Там можно писать транслитом и моментально конвертить текст в русский.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.09.11 19:54
Оценка:
Здравствуйте, YF, Вы писали:

YF>Может быть, хотя бы некоторые из них окажутся полезными:

YF>здесь

Внес и это. Только тут слишком много было замечаний вызванных тем, что ты немного недочитал до места где было объяснение. В статье стиль такой. Сначала предмет обсуждение, а затем уже само обсуждение.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: YF Германия  
Дата: 12.09.11 14:29
Оценка:
Здравствуйте, VladD2, Вы писали:

Попытался изменить в файле Disposable_BeforeTypedMembers.n генерацию disposeImple, чтобы избежать дублирования.

      def methodHeader = match (needOverride) 
      {
          | true => <[ decl: protected override Dispose(disposing : bool) : void ]>;
          | _    => <[ decl: protected virtual Dispose(disposing : bool) : void ]>;
      }
      def baseMethodCall = if (needOverride) <[base.Dispose(disposing);]> else <[ () ]>;
      def disposeImple = 
      <[ decl:
            $methodHeader
            {
              unless (_disposed)
              {
                when (disposing)
                {
                  // Генерируем вызовы Dispose для IDisposable-полей.
                  $(disposeIDisposableFields : name)();
                  // Вставояем код очистки управляемых ресурсов предосталяемый пользователем.
                  $disposeManaged;
                }
                // Вставляем код очистки неуправляемых ресурсов предосталяемый пользователем.
                $disposeUnmanaged;
                // TODO: Обнуляем все изменяемые поля.
                  $baseMethodCall;
                _disposed = true;
              }
            } ]>;


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

YF>Попытался изменить в файле Disposable_BeforeTypedMembers.n генерацию disposeImple, чтобы избежать дублирования.


Это просто некорректный код:
YF>      <[ decl:
YF>            $methodHeader


Задавать через цитату нужно только атрибуты и модификаторы. Покажу как это делать в статье (это не самая простая тема).
Сам же метод (его заголовок) надо описывать как обычно.

А это правильный:
YF>      def baseMethodCall = if (needOverride) <[base.Dispose(disposing);]> else <[ () ]>;
YF>...
YF>                // Вставляем код очистки неуправляемых ресурсов предосталяемый пользователем.
YF>                $disposeUnmanaged;
YF>                // TODO: Обнуляем все изменяемые поля.
YF>                  $baseMethodCall;
YF>                _disposed = true;


YF>Не получается.

YF>Просто хочется увидеть, как можно собрать метод "по кусочкам", из нескольких PExpr, если это возможно.

Это я покажу. Я как раз над этим разделом работаю. Просто отвлекса. Во первых устал. Во-вторых, нашел баги в квази-цитировании и сел за них испрвление. Вчера весь вече их фиксил. Но пофиксил уже.
Так что для прочтения статьи новый компилятор иметь обязательно!

YF>Что я не так делаю?


Первая цитата в корне не верна. Там нельзя. Надо как-то так:
...
def attrs = Modifiers(NemerleAttributs.Protected 
              | if (needOverride) NemerleAttributs.Override
                else              NemerleAttributs.Virtual, []);
                 
def disposeImple =
  <[ decl:
    protected ..$attrs Dispose(disposing : bool) : void
    ...
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.09.11 22:10
Оценка:
Здравствуйте, VladD2, Вы писали:

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


Закончил черновой вариант. Просьба всех кто может поглядеть.

Отдельное замечание на счет примеров. Примеры в конченой версии проектов не соответствуют примерам описываемым в середине статьи. Чтобы получать их в виде соответствующем описанию нужно брать более старые версии. Позже я сделаю список ссылок на нужные версии и добавлю их в текст статьи, чтобы можно было экспериментировать с проектами в исходном виде.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: artelk  
Дата: 23.09.11 10:43
Оценка:
Здравствуйте, VladD2, Вы писали:

[Record]
[Disposable]
class Derived : Base
{
  private FileStream : FileStream;
  private Str        : string;
  public Reader      : TextReader { get; private set; }
}

...Обратите внимание, что к полю _disposed добавлен атрибут RecordIgnore. Это макроатрибут из стандартной библиотеки. Он подавляет генерацию параметра для поля, при использовании макроатрибута Record (автоматически формирующего конструктор для всех полей типа)...


1. Гарантируется ли у макроатрибутов порядок их применения? Т.е. если убрать [RecordIgnore] у _disposed и поменять местами [Record] и [Disposable], параметр конструктора генерироваться не будет, так?
2. Имхо, такие неявные зависимости нужно как-то разрулить — декларировать их явно.

Мысли на этот счет:
1. Можно сделать, чтобы из маркоса можно было бы выяснить, кто поле\метод\свойство создал.
2. Можно скрывать от макроса поля\методы\свойства, сгенерированные другими макросами, если их видимость явно не задекларирована. Например, [A][B] — независимое применение макроатрибутов; [A,B] последовательное применение, причем B видит результаты A.
3. Можно при определении макроса перечислить ему все макросы, о которых он "знает", чтобы иметь доступ к сгенерированному ими коду.
Re[2]: Язык Nemerle. Часть 4 - Макросы Nemerle (preview)
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.09.11 14:48
Оценка:
Здравствуйте, artelk, Вы писали:

A>1. Гарантируется ли у макроатрибутов порядок их применения? Т.е. если убрать [RecordIgnore] у _disposed и поменять местами [Record] и [Disposable], параметр конструктора генерироваться не будет, так?


Нет, не гарантируется. По жизни макросы обрабатываются в том порядке в котором они переменены. Однако если макросы применены к разным типам (членам и т.п.), то порядок их выполнения может быть любой.

Но есть три стадии макросов. RecordIgnore отрабатывает на самой ранней стадии — BeforeInheritance. Если макрос более ранней стадии добавляется макросом более поздней стадии, то при вызове typeBuilder.Define() такие макросы будут незамедлительно вызваны.

Таким образом, если Record идет до макроса Disposable, то поля добавляемые в Disposable не будут видны в Record, просто потому что к моменту вызова Record их еще нет. Но если Disposable вызовется раньше, то наличие RecordIgnore у поля предотвратит использование такого поля в макросе Record.

A>2. Имхо, такие неявные зависимости нужно как-то разрулить — декларировать их явно.


Да. Было бы не плохо. Но в Nemerle 1.x это не сделано. В 2.х сделаем.

A>Мысли на этот счет:

A>1. Можно сделать, чтобы из маркоса можно было бы выяснить, кто поле\метод\свойство создал.

Зачем?
Понять что поле добавлено с помощью квази-цитаты в принципе можно. У них в свойстве Location выставлен флаг IsGenerated.
Вот только иногда удобно чтобы макросы видели поля созданные другими макросами.
Для передачи информации лучше использовать атрибуты и макро-атрибуты (как показано в примере).

A>2. Можно скрывать от макроса поля\методы\свойства, сгенерированные другими макросами, если их видимость явно не задекларирована. Например, [A][B] — независимое применение макроатрибутов; [A,B] последовательное применение, причем B видит результаты A.


Это как-то очень сложно.

A>3. Можно при определении макроса перечислить ему все макросы, о которых он "знает", чтобы иметь доступ к сгенерированному ими коду.


Тема зависимости между макросами — это довольно сложная тема. Мы думали на эту тему, но решили нечего не менять в Nemerle 1.x. В 2.х мы постараемся проработать эту тему по серьезнее.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.