Хорошо, попробую найти время. Мне самому уже давно хотелось увидеть, как этот DSL на Ruby будет выглядеть. Только не могу обещать, что это будет сегодня или завтра.
O>Вообще в исходной задаче надо сгенерить класс на C#, но пусть лучше на Ruby — интересно посмотреть, как у Ruby именно с метапрограммированием.
Здравствуйте, IT, Вы писали:
IT>Хинт. Объявляешь к классу интерфейс с одним методом, который возвращает BLToolkit.Reflection.TypeAccessor. Дальше надо сгенерировать геттеры и сеттеры, набить их в возвращаемый TypeAccessor и готово. В BLToolkit добавляется проверка на наличие такого интерфейса и готово Nemerle в действии, одна run-time генерация устранена.
Попробовать можно. Но только ты ж понимаешь, что сам класс должен быть написан на Nemerle в таком случае.
Другой вариант — генерить наследник TypeAccessor-а по типу (брать инфу о классе прямо из рефлекшна), а в классе (который уже на C#) искать его по имени (ну или по атрибуту, на него нацепленному, — что-то вроде того). Правда, тогда получится гораздо менее удобно.
Это я так... вдруг начал размышлять о том, как логику оставить в C# (чтобы пользователи твоей тулзы особо не переживали ), а кодогенерацию вынести отдельно в Nemerle. Насколько я тебя понял, ты хочешь поиметь первый вариант.
Re[33]: Снова о Nemerle или профанация не пройдет :)
Здравствуйте, Oyster, Вы писали:
O>Это я так... вдруг начал размышлять о том, как логику оставить в C# (чтобы пользователи твоей тулзы особо не переживали ), а кодогенерацию вынести отдельно в Nemerle. Насколько я тебя понял, ты хочешь поиметь первый вариант.
Нет, это не сильно отличается от того, что есть сейчас. К тому же можно сгенерировать сборку с аксессорами на пост-билд степе. Я имею ввиду код исключительно на Nemerle.
Если нам не помогут, то мы тоже никого не пощадим.
Re[34]: Снова о Nemerle или профанация не пройдет :)
Здравствуйте, IT, Вы писали:
IT>Нет, это не сильно отличается от того, что есть сейчас. К тому же можно сгенерировать сборку с аксессорами на пост-билд степе. Я имею ввиду код исключительно на Nemerle.
Ок. В общем, постараюсь — самому интересно (иначе бы и не брался). Времени, времени только маловасто
Re[30]: Снова о Nemerle или профанация не пройдет :)
Здравствуйте, Sinclair, Вы писали:
S>Из заменяемого — мало. ВинАПИ имеет то "преимущество", что его невозможно выкинуть и заменить. В общем, мне кажется, что ты будешь выбирать ту библиотеку, которая хорошая.
Я то конечно буду выбирать ту которая хорошая, вот только не всегда же мы сами библиотеки выбираем да и далеко не всегда по таким критериям.
S>Плохая — нафиг не нужна по очевидным причинам, а хорошую вряд ли напишут люди, которые просто хотели другой формы записи. Тем более вряд ли в проект попадут прямо десятки таких уродцев. "Я вчера случайно в шестой раз перечитал вашу книгу и опять плевался".
Так ты еще читаешь мои книги?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[31]: Снова о Nemerle или профанация не пройдет :)
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, WolfHound, Вы писали:
WH>>Нет это не вопрос вобще...
VD>До тех пор пока ДжетБрэйнс не доделает РеШарпер для 2005-ой студии еще вопрос. Так как я предочту на сегодня менее навороченный, но стабильный варинт от МС.
вышла версия 2.19 — вполне стабильна
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[17]: Снова о Nemerle или профанация не пройдет :)
Здравствуйте, Oyster, Вы писали:
O>Он простой. Просто надо было докопаться до того, как всунуть список полей в объявление класса — всего и делов Это можно вынести во внешнюю функцию один раз и юзать всегда (если лучшего решения нет).
Мне кажется это просто баг компилятора. Нужно поговорить с его разработчиками.
VD>>Ты бы, кстати, объяснил его смысл. Почему ты пришел к такому решению?
O>Re[30]: Новая версия макроса
Ну, и что в этом коде хорошего? По логике языка к подобным приемам (т.е. прямому заданию АСТ) прибегать не нужно. Стало быть если такая необходимость появляется, то это баг.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Oyster, Вы писали:
O>А сделано всё это так "императивненько" потому, что другого, более красивого способа, я не нашёл. Ну а код активации с их форума ещё не пришёл почему-то
Как я понимаю авторы Нэемерла ответили тебе здесь, что исходный синтаксис интуитивен и потому скорее всего будет поддерживатья в следующих версиях. А твой же код — это обход проблемы.
Здравствуйте, vdimas, Вы писали:
V>Можешь начинать снимать. Есть такая либа VCF. Там смесь шаблонов и макросов используется для того, что ты сейчас сказал и еще для кучи вещей.
Пример в студию. И в общем, то сама библиотека не интересна. Интересен компилируемый код.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, vdimas, Вы писали:
V>(в принципе, может зайти далеко, в MS есть открытый проект оптимизирующего бэк-энда компиляторов для дотнета, насколько я понял Nemerle пока его не юзает, но теоретически ничего не мешает)
Ты все перепутал. Есть Феникс. Феникс — это бэкэнд, но не оптимизирующий или для дотнета, а общий бэкэнд для всех компиляторов МС. Его можно использовать и для генерации MSIL-а, и для пре- или джит-компиляции готовых дотнетных сборок. Кроме того его можно применять для модификации МСИЛ-а готовых сборок и для генерации кода компиляторами. В частности планируется перевести VС++ на Феникс.
Пока что Феникс находится в стадии альфы, но уже доступен для скачивания. Ошибок там море. Rsdn.Editor он поднять не смог (вылетел с ошибкой).
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Снова о Nemerle или профанация не пройдет :)
Здравствуйте, vdimas, Вы писали:
V>Ядро его Лиспа написано на С. Все остальное, включая львиную долю самого диалекта этого Лиспа, ядра EMacs-a и всего остального — на Лиспе.
Ну, то что Лисп написан на С, а не на самом себе (все же VM у него нету) конечно прискорбно, но к делу не относится.
А спросил я это так как интересно какой объем исходников у базовой части редактора. Ну, за вычетом разных колореров и интелисенсов. То есть самой основной функциональности. Ведь размер кода Сцинтилы и Rsdn.Editor извесны, так что есть с чем сравнивать. Если Лисп действительно так крут на любых задачах, то код редактора должен быть в разы меньше.
Для сравнения код Сцинтила имеет ~680 кил кода, а Rsdn.Editor ~390.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[32]: Снова о Nemerle или профанация не пройдет :)
Здравствуйте, VladD2, Вы писали:
VD>Ну, то что Лисп написан на С, а не на самом себе (все же VM у него нету) конечно прискорбно, но к делу не относится. VD>А спросил я это так как интересно какой объем исходников у базовой части редактора.
Боюсь чтобы это узнать нужно прежде всего выучить Лисп и выкинуть из нескольких десятков метров сурсов все лишнее
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[11]: Снова о Nemerle или профанация не пройдет :)
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Боюсь чтобы это узнать нужно прежде всего выучить Лисп и выкинуть из нескольких десятков метров сурсов все лишнее
Дык из Сцинтилы и RE я викинул все лишнее минут за 5.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Снова о Nemerle или профанация не пройдет :)
Здравствуйте, Sinclair, Вы писали:
VD>>Хм. И даже если я пишу утилиту командной строки для собственных целей? S>Влад, твои утилиты командной строки никому не интересны. Кроме тебя же самого. Меня интересует разработка для заказчика, а не для меня.
Синклиер, ты меня извини, но многим, и в том числе мне, не интересны твои заказчики. У меня, например, ни разу в жизни не было не русскоязычных заказчико.
Так что не нужно уж так категорично. ОК?
Но давай представим, что всем в этом мире срочно понадобилось делать многоязычные программы. Что при этом отпала необходимость писать не многоязычные? Даже в маленьких тестов и то нужно выводить данные в текст. И почему при этом не пользоваться более удобными средствами?
VD>>И что мне помешает сделать такой макрос? S>Я не знаю. Я пока вообще немерле не смотрел — у меня linq то проверить времени нету.
Тогда поверь, что макросами можно реализовать генерацию нужных структур для многоязычной поддержки. Причем в программе особо и менять ничего не прийдется. В рей будет все тот же инлайн-текст, который будет преобразовываться в строки ресурсов или внешний файл. Потом можно будет взять сгенерированный файл и создать аналогичный, но для другого языка.
Одна из сильнейших фич макросов — это возможность исполнять код во время компиляции. Вот этот код может во истину творить чудеса.
VD>>Ну, а зачем номер? S>Чтобы в другом порядке можно было аргументы поставить.
Порядок, и т.п. — это детали реализации.
VD>>И чем, раскажи на милость, это отличается от: VD>>
Спасибо за позновательный рассказ. Теперь задумайся, что не дает тебе статически проверить правильность данного кода?
Ответ — в языке нет средств для расширения контроля во время компиляции.
Твои решения навязаны условностями и ограничниями используемого инструмента.
Теперь предстваь, что вместо string.Format ты можешь вызвать некий кусок кода который вполнится во время компиляции и сделает все что угодно, от преобразования кода, до создания нового файла.
Что бы ты мог сделать в таких условиях?
S>Еще раз: придумай, как решить проблему локализации. Это было бы очень круто.
См. выше. Вообще вариантов может быть море. Ведь наши возможности расширились. Так что все зависит только от нашей фантазии и от умения мыслить нестандартно.
S> А возможность слеплять строчки малоинтересна, т.к. она не дает ничего нового по сравнению с: S>
S>"Имя: "+name+"Фамилия: "+lastname;
S>
S>Особенно заметно это станет, если ты попробуешь при помощи своего макроса вывести что-то без пробелов. Что-то мне подсказывает, что парсер споткнется на этом: S>
S>$"Имя:$nameФамилия:$lastname"
S>
Пробелы не проблема, и тебе это показали рядом. А вот читается твой код с плюсами очень не красиво. Согласись.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.