Re[30]: Новая версия макроса
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.02.06 19:54
Оценка:
Здравствуйте, Vermicious Knid, Вы писали:

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


Это, катати, не только не поздно сделать, но и очень даже нужно. Так как выт тут у нас самые продвинутые и ваши знания позволяют другим не биться лбом о все подводные грабли (с).
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[30]: Снова о Nemerle или профанация не пройдет :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.02.06 19:54
Оценка:
Здравствуйте, Vermicious Knid, Вы писали:

VK>У Nemerle лицензия BSD. С кодом можно делать что угодно, хоть коммерческий компилятор на его базе создавать. Главное чтобы хоть где-то была ссылка и на первоначальных авторов.


Ладно. Надо разгрестись и попробовать. Как миниуму изучение их компилятора точно пойдет на пользу.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[30]: Снова о Nemerle или профанация не пройдет :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.02.06 19:54
Оценка:
Здравствуйте, Сергей Туленцев, Вы писали:

VD>>Поделись, плиз, как это делается (баг-репорты отправляются). А то я тоже тут уже на парочку багов наткнулся. Незначительных, но все же...


СТ>Тебе .сюды.


А. Это я уже видил. Только так и не понял, что там делать то надо.

Как туда что-то добавить?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Снова о Nemerle или профанация не пройдет :)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 22.02.06 20:01
Оценка:
Здравствуйте, 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>>
AVK Blog
Re[26]: Снова о Nemerle или профанация не пройдет :)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 22.02.06 20:18
Оценка:
Здравствуйте, 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>>
AVK Blog
Re[30]: Снова о Nemerle или профанация не пройдет :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.02.06 20:18
Оценка:
Здравствуйте, Vermicious Knid, Вы писали:

VK>Так оно и есть. Посмотри комментарии к баг-репорту на bugs.nemerle.org, который я отправил.


Я пока что не могу поянть как совладать с их багтрекилокой. Потом как там отличить твой багрепрот? На него ссылку как-то можно дать?

VK>Можно. Самый простой способ наверное это Nemerle.Compiler.Macros.IsTypeName.

VK>
VK>using Nemerle.Compiler;
VK>macro test()
VK>{
VK>      // False True
VK>    System.Console.WriteLine($"$(Macros.IsTypeName(<[Test]>)) $(Macros.IsTypeName(<[System.String]>))");
VK>    <[ ]>
VK>}
VK>


Надо попробовать в ваши варианты вставить его. Может перестанет про partial орать...

VK>Это несложно добавить. Посмотри Parsing/Parsetree.n. Всего-то нужно реализовать ToString для каждого из вариантов.


Дык это хорошо бы в сами классы добавить. А то ведь хрен найдешь где эти функции.

В любом, случае мой опыт работы над R#-ом показывает, что это очень нужно. Упрощает работу офигительно.

Идеально вообще следать графическую утилиту которая будет показывать АСТ в виде дерева (как в Эксплорере) в разных стадиях преобразования. Ну, и чтобы она естественно код для выделенной ячейки генерировала.

В общем, если интересно можешь поглядеть CodeAnalizer из R#-а. Вот что-то вроде того.

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


VK>А вот это можно. Во-первых есть ключ -dt правда работает он на мой взгляд неважно.


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

VK> Еще теоретически можно написать макрос который будет проходиться по всем типам и дампить их код(например в файлах). Единственная проблема заставить этот макрос сработать после выполнения всех остальных макросов. Функцию для итерации по типам я где-то видел.


Дык не нужно по всем. И не нужно в конце. Нужно контексно, и в нужной точке. Это же как отладка. Думаю ты не раз использовал printf или нечто вроде него для отладки. Вот в макросах должно быть нечто вроде того. Без этго я бы в R#-е зашился бы.

VK>Во-вторых есть интересный макрос Nemerle.Macros.pretty_print_expr.


Я его сморел. Это не то. Он печатает то что ему дали. А нужно печатать сдержимое переменной содержащей АСТ.

VK> Вот пример использования:

VK>
VK>using Nemerle.IO;
VK>using Nemerle.Macros;
VK>def nums = array[1, 2, 3];
VK>pretty_print_expr({ foreach(n in nums) printf("%d\n", n) }, true);
VK>

VK>А вот что он выведет:
VK>
VK>def cached_collection = nums;
VK>def _N_994 = cached_collection.Length;
VK>def _N_993 = (0 :> int);
VK>block (_N_break) :  
VK>   def []_N_for_1135 () : void {
VK>    when (<.s (_N_993, _N_994)) {
VK>      (block (_N_continue) :        
VK>      match (cached_collection [_N_993]) {
VK>          | (_) as n =>
VK>            def _N_1146 = (n : int);
VK>            System.Console.Write (_N_1146);
VK>            System.Console.Write ("\n");
VK>            ()
VK>          | _ =>
VK>            ()
VK>        };
VK>      ();
VK>      _N_993 = ++.i4.s (_N_993);
VK>      _N_for_1135 () : void)
VK>    }
VK>  }
VK>  _N_for_1135 ()
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 или профанация не пройдет :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.02.06 20:18
Оценка:
Здравствуйте, Oyster, Вы писали:

O>Вообще непонятно, почему у меня этот код
Автор: Oyster
Дата: 22.02.06
работает, а у остальных конструктор не генерится. Странно...


Хм. "Этот" код не простой. Мы ведь не использовали TopDeclaration.Class(). Может так и прокатит. Сейчас попробую...
Попробовал. Твой код работат. Но он совсем дургой.

Ты бы, кстати, объяснил его смысл. Почему ты пришел к такому решению?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: Снова о Nemerle или профанация не пройдет :)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 22.02.06 20:42
Оценка:
Здравствуйте, Oyster, Вы писали:

O>Макрос генерит класс в compile-time в соответствии с постановкой задачи. Конструктор вот только пока что не создаётся (уже домой бежать надо — завтра, надеюсь...). Используется макрос вот так:


O>
O>using Oyster;

O>metaclass TestClass {
O>    prop1 : int;
O>    prop2 : string
O>}
O>


Никоим образом не хочу преуменьшать важность и значимость подхода, который ты привел, но в реальном приложении, из которого взят пример, такой подход не годится. Во-первых там нужна метаинформация в рантайме, для чего xml подцепляется в скомпилированную сборку в виде ресурса. Причем рефлекшен по сгенеренному классу здесь не прокатит, потому что далеко не все, что содержится в метаинформации, используется при генерации исходников. Во-вторых, что еще печальнее, часть кодогенерации выполняется не на этапе компиляции, а на этапе деплоймента, и перенести ее на этап компиляции нельзя, потому что в этом случае используется специфика платформы, в которой производится процедура, на этапе компиляции неизвестная принципиально.
... << RSDN@Home 1.2.0 alpha rev. 642 on Windows XP 5.1.2600.131072>>
AVK Blog
Re[31]: Снова о Nemerle или профанация не пройдет :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.02.06 21:16
Оценка:
Здравствуйте, Oyster, Вы писали:

O>Влад, вот этот макрос у меня работает на ура (билд 0.9.2): Re[28]: Новая версия макроса
Автор: Oyster
Дата: 22.02.06
. И конструктор создаётся. У тебя не работает?


Так работает. Колись в чем смысл.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[29]: Снова о Nemerle или профанация не пройдет :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.02.06 21:16
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

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


ВВ>>>И чем он неполноценный?

VD>>Ну, попробуй, например, на нем создать хэш-табличку.

ВВ>Т.е. SQL тоже неполноценный язык программирования?


Да. SQL — это классический пример DSL-я. Это язык запросво к реляционным БД.
Вот T-SQL или PL-SQL как раз полноценные языки, так как это обычные императивные ЯП с встроенным SQL.

ВВ> Если я пойду и скажу это нашим базовикам, ты мне припарки делать будешь?


Нет. Не буду, так как они люди грамотные и культурные. Посмеются и забудут.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Снова о Nemerle или профанация не пройдет :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.02.06 21:16
Оценка: +1
Здравствуйте, WinniePoh, Вы писали:

WP> А почему Haskell с его великолепным синтаксисом не стал популярным? Почем не стал популярным ML? Почему стал популярным Perl, не смотря на ужасный синтаксис? Почему стал популярным кривой и страшный PHP? Почему не стал популярным Лисп с синтаксисом Паскаля (R-Lisp)?


По-моему очевидно... у популярных языков блоки выделяются фигурными скобками.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Снова о Nemerle или профанация не пройдет :)
От: Воронков Василий Россия  
Дата: 22.02.06 21:23
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Кстати, интересно каков объем исходников Емакса? Он ведь на Лиспе написан вроде.


Вообще-то ядро написано на С.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[19]: Снова о Nemerle или профанация не пройдет :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.02.06 21:57
Оценка:
Здравствуйте, WinniePoh, Вы писали:

WP> Например, вот тута: http://www.cliki.net/TypeL


TypeL is a Common Lisp sublanguage with strong typing and type inference a la ML.


Не правда ли странно делать выводы для всего Лиспа на базе одного из его клонов?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[27]: Снова о Nemerle или профанация не пройдет :)
От: WolfHound  
Дата: 22.02.06 22:00
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Документация не самое страшное. А вот если понадобится сгенерить SQL или какой нибудь WSDL, то тут уже придется задуматься.

Дык эта... макросы могут делать что угодно... и к базе приконектиться и в фаил писать...
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[15]: Снова о Nemerle или профанация не пройдет :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.02.06 22:33
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

VD>>Кстати, интересно каков объем исходников Емакса? Он ведь на Лиспе написан вроде.


ВВ>Вообще-то ядро написано на С.


Я слышал, что весь на Лиспе. Может речь о диалекте была...
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Снова о Nemerle или профанация не пройдет :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.02.06 22:33
Оценка:
Здравствуйте, WinniePoh, Вы писали:

WP> Ок, сейчас почитаю. Хорошая идея — взять готовый проект и просчитать, как его сделать эффективнее.


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

ЗЫ

Тут еже Хоум на чем только не переписывали. Но переписать смогли только на языке. Точнее языком.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Снова о Nemerle или профанация не пройдет :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.02.06 22:33
Оценка: +1
Здравствуйте, IT, Вы писали:

IT>В данном случае я согласен с vdimas. Макро для объявления пропертей хотя выглядит и логично, но довольно громоздко и коряво.


Авторы тяготеют к функциональщике. Функциональщика к неизменяемым объектам. Так что не судренно, что по умолчанию самая простая запись для неизменяемых свойств. Для них она проста и логична:
[Accessor] mutable _somePropery : int;

Короче уже особо некуда.

Уж с полным объявлением свойства не сравнить. Были бы такие макросы разве стал бы я каждое свойстко регионом окутывать, чтобы схлопнуть его?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[28]: Снова о Nemerle или профанация не пройдет :)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 22.02.06 22:45
Оценка:
Здравствуйте, WolfHound, Вы писали:

AVK>>Документация не самое страшное. А вот если понадобится сгенерить SQL или какой нибудь WSDL, то тут уже придется задуматься.

WH>Дык эта... макросы могут делать что угодно... и к базе приконектиться и в фаил писать...

В момент компиляции? А нафига?
... << RSDN@Home 1.2.0 alpha rev. 642 on Windows XP 5.1.2600.131072>>
AVK Blog
Re[16]: Снова о Nemerle или профанация не пройдет :)
От: Воронков Василий Россия  
Дата: 22.02.06 23:03
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Я слышал, что весь на Лиспе. Может речь о диалекте была...


А ты ознакомься... Емакс — это все-таки в первую очередь настоящий ГНУтый проект, а чтобы в настоящем ГНУтом проекте не было С

Собственно, ядро емакса — это и есть диалект лиспа, Emacs Lisp, который как раз и написан на С.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[16]: Снова о Nemerle или профанация не пройдет :)
От: IT Россия linq2db.com
Дата: 23.02.06 00:48
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

WP>> Я не понимаю вообще как оно должно выглядеть. Если вы такое видели — приведите пример. Ну, допустим, автокомплит в каком либо UML-редакторе.


ВВ>Ты вместо пива водки с него потребуй, тогда сразу поймешь


Не вопрос
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.