Здравствуйте, Vermicious Knid, Вы писали:
VK>На самом деле ты опередил меня ровно на один шаг, я сам хотел предложить такой вариант. Правда я хотел засунуть весь этот код в оберточный класс.
Это, катати, не только не поздно сделать, но и очень даже нужно. Так как выт тут у нас самые продвинутые и ваши знания позволяют другим не биться лбом о все подводные грабли (с).
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[30]: Снова о Nemerle или профанация не пройдет :)
Здравствуйте, Vermicious Knid, Вы писали:
VK>У Nemerle лицензия BSD. С кодом можно делать что угодно, хоть коммерческий компилятор на его базе создавать. Главное чтобы хоть где-то была ссылка и на первоначальных авторов.
Ладно. Надо разгрестись и попробовать. Как миниуму изучение их компилятора точно пойдет на пользу.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[30]: Снова о Nemerle или профанация не пройдет :)
Здравствуйте, Сергей Туленцев, Вы писали:
VD>>Поделись, плиз, как это делается (баг-репорты отправляются). А то я тоже тут уже на парочку багов наткнулся. Незначительных, но все же...
СТ>Тебе .сюды.
А. Это я уже видил. Только так и не понял, что там делать то надо.
Как туда что-то добавить?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Снова о Nemerle или профанация не пройдет :)
Здравствуйте, Vermicious Knid, Вы писали:
VK>Ты в состоянии читать внимательно? Я просил не приводить советов по улучшению кода, мне это даром не нужно.
Видишь ли — если ты написал кучу дисклеймеров, что код на C# неправильный, это еще не значит что он от этого станет правильнее. Использовать switch для pattern-matching глупо, а сравнивать тем более. Switch вобще в ручном коде оправдан крайне редко, а уж за тот, что ты привел надо надавать по шапке. Решаются такие задачи совсем не так. А как нибудь так:
private static readonly Dictionary<CurrencyPair, decimal> _exchangeRate = new Dictionary<CurrencyPair, decimal>();
...
public Price ConvertTo(Currency otherCurrency)
{
if (!_exchangeRate.ContainsKey(otherCurrency))
throw new Exception(string.Format("Convertion from {0} to {1} not supported!", currency, otherCurrency);
return new Price(amount * _exchangeRate[new CurrencyPair(currency, otherCurrency)], otherCurrency);
}
Так что смысл твоего примера я так и не понял. Если ты хотел показать pattern matching, то пример на редкость неудачный.
... << RSDN@Home 1.2.0 alpha rev. 642 on Windows XP 5.1.2600.131072>>
Здравствуйте, eao197, Вы писали:
E>Еще одна мысль по поводу compile-time генерации vs precompile-time. В случае precompile-time можно нагенерировать обычный класс с комментариями. Он может быть обработан инструментом типа javadoc и программисту будет предоставлена документация о том, что в TestClass кроме prop1 и prop2 будут еще геттеры-сеттеры. А вот такой DSL как документировать?
Документация не самое страшное. А вот если понадобится сгенерить SQL или какой нибудь WSDL, то тут уже придется задуматься.
... << RSDN@Home 1.2.0 alpha rev. 642 on Windows XP 5.1.2600.131072>>
Здравствуйте, Vermicious Knid, Вы писали:
VK>Так оно и есть. Посмотри комментарии к баг-репорту на bugs.nemerle.org, который я отправил.
Я пока что не могу поянть как совладать с их багтрекилокой. Потом как там отличить твой багрепрот? На него ссылку как-то можно дать?
VK>Можно. Самый простой способ наверное это Nemerle.Compiler.Macros.IsTypeName. VK>
Надо попробовать в ваши варианты вставить его. Может перестанет про partial орать...
VK>Это несложно добавить. Посмотри Parsing/Parsetree.n. Всего-то нужно реализовать ToString для каждого из вариантов.
Дык это хорошо бы в сами классы добавить. А то ведь хрен найдешь где эти функции.
В любом, случае мой опыт работы над R#-ом показывает, что это очень нужно. Упрощает работу офигительно.
Идеально вообще следать графическую утилиту которая будет показывать АСТ в виде дерева (как в Эксплорере) в разных стадиях преобразования. Ну, и чтобы она естественно код для выделенной ячейки генерировала.
В общем, если интересно можешь поглядеть CodeAnalizer из R#-а. Вот что-то вроде того.
VD>>Ну, и хотелось бы иметь возможность распечатать весь сгенерированный код или выборочные его куски (например, класс по имени).
VK>А вот это можно. Во-первых есть ключ -dt правда работает он на мой взгляд неважно.
Дык это ведь ключь. А это неудобно. Тут важна интерактивность. Вискивать в тонне сгенерированного текста нужный участок еще та задачка. А вот если можно прмямо по месту, в максрое... это резко снизило бы сложность.
VK> Еще теоретически можно написать макрос который будет проходиться по всем типам и дампить их код(например в файлах). Единственная проблема заставить этот макрос сработать после выполнения всех остальных макросов. Функцию для итерации по типам я где-то видел.
Дык не нужно по всем. И не нужно в конце. Нужно контексно, и в нужной точке. Это же как отладка. Думаю ты не раз использовал printf или нечто вроде него для отладки. Вот в макросах должно быть нечто вроде того. Без этго я бы в R#-е зашился бы.
VK>Во-вторых есть интересный макрос Nemerle.Macros.pretty_print_expr.
Я его сморел. Это не то. Он печатает то что ему дали. А нужно печатать сдержимое переменной содержащей АСТ.
VK> Вот пример использования: VK>
Здорово, но не то. Нужно, чтобы он примерно то же вывел бы в следующем случае:
def a = <[ foreach(n in nums) printf("%d\n", n) ]>;
pretty_print_expr(, true);
VK>Конечно безобразие, но макросы очень непростые и их здесь аж два.
Понятно. Это хорошо. Но нужно еще и дампить само АСТ, а не только макросы раскрывать. Хотя это тоже приятно.
Ведь для сгенерированного класса ты это сделать не сможешь.
Вообще, для подобных вещей конечно нужна поддержка в IDE. Прикинь как было бы здорово, если бы можно было увидит все тоже самое наведя курсор на foreach?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[32]: Снова о Nemerle или профанация не пройдет :)
работает, а у остальных конструктор не генерится. Странно...
Хм. "Этот" код не простой. Мы ведь не использовали TopDeclaration.Class(). Может так и прокатит. Сейчас попробую...
Попробовал. Твой код работат. Но он совсем дургой.
Ты бы, кстати, объяснил его смысл. Почему ты пришел к такому решению?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: Снова о Nemerle или профанация не пройдет :)
Здравствуйте, Oyster, Вы писали:
O>Макрос генерит класс в compile-time в соответствии с постановкой задачи. Конструктор вот только пока что не создаётся (уже домой бежать надо — завтра, надеюсь...). Используется макрос вот так:
O>
Никоим образом не хочу преуменьшать важность и значимость подхода, который ты привел, но в реальном приложении, из которого взят пример, такой подход не годится. Во-первых там нужна метаинформация в рантайме, для чего xml подцепляется в скомпилированную сборку в виде ресурса. Причем рефлекшен по сгенеренному классу здесь не прокатит, потому что далеко не все, что содержится в метаинформации, используется при генерации исходников. Во-вторых, что еще печальнее, часть кодогенерации выполняется не на этапе компиляции, а на этапе деплоймента, и перенести ее на этап компиляции нельзя, потому что в этом случае используется специфика платформы, в которой производится процедура, на этапе компиляции неизвестная принципиально.
... << RSDN@Home 1.2.0 alpha rev. 642 on Windows XP 5.1.2600.131072>>
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Здравствуйте, VladD2, Вы писали:
ВВ>>>И чем он неполноценный? VD>>Ну, попробуй, например, на нем создать хэш-табличку.
ВВ>Т.е. SQL тоже неполноценный язык программирования?
Да. SQL — это классический пример DSL-я. Это язык запросво к реляционным БД.
Вот T-SQL или PL-SQL как раз полноценные языки, так как это обычные императивные ЯП с встроенным SQL.
ВВ> Если я пойду и скажу это нашим базовикам, ты мне припарки делать будешь?
Нет. Не буду, так как они люди грамотные и культурные. Посмеются и забудут.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Снова о Nemerle или профанация не пройдет :)
Здравствуйте, WinniePoh, Вы писали:
WP> А почему Haskell с его великолепным синтаксисом не стал популярным? Почем не стал популярным ML? Почему стал популярным Perl, не смотря на ужасный синтаксис? Почему стал популярным кривой и страшный PHP? Почему не стал популярным Лисп с синтаксисом Паскаля (R-Lisp)?
По-моему очевидно... у популярных языков блоки выделяются фигурными скобками.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Снова о Nemerle или профанация не пройдет :)
Здравствуйте, AndrewVK, Вы писали:
AVK>Документация не самое страшное. А вот если понадобится сгенерить SQL или какой нибудь WSDL, то тут уже придется задуматься.
Дык эта... макросы могут делать что угодно... и к базе приконектиться и в фаил писать...
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[15]: Снова о Nemerle или профанация не пройдет :)
Здравствуйте, Воронков Василий, Вы писали:
VD>>Кстати, интересно каков объем исходников Емакса? Он ведь на Лиспе написан вроде.
ВВ>Вообще-то ядро написано на С.
Я слышал, что весь на Лиспе. Может речь о диалекте была...
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Снова о Nemerle или профанация не пройдет :)
Здравствуйте, IT, Вы писали:
IT>В данном случае я согласен с vdimas. Макро для объявления пропертей хотя выглядит и логично, но довольно громоздко и коряво.
Авторы тяготеют к функциональщике. Функциональщика к неизменяемым объектам. Так что не судренно, что по умолчанию самая простая запись для неизменяемых свойств. Для них она проста и логична:
[Accessor] mutable _somePropery : int;
Короче уже особо некуда.
Уж с полным объявлением свойства не сравнить. Были бы такие макросы разве стал бы я каждое свойстко регионом окутывать, чтобы схлопнуть его?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[28]: Снова о Nemerle или профанация не пройдет :)
Здравствуйте, WolfHound, Вы писали:
AVK>>Документация не самое страшное. А вот если понадобится сгенерить SQL или какой нибудь WSDL, то тут уже придется задуматься. WH>Дык эта... макросы могут делать что угодно... и к базе приконектиться и в фаил писать...
В момент компиляции? А нафига?
... << RSDN@Home 1.2.0 alpha rev. 642 on Windows XP 5.1.2600.131072>>
Здравствуйте, Воронков Василий, Вы писали:
WP>> Я не понимаю вообще как оно должно выглядеть. Если вы такое видели — приведите пример. Ну, допустим, автокомплит в каком либо UML-редакторе.
ВВ>Ты вместо пива водки с него потребуй, тогда сразу поймешь
Не вопрос
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.