Здравствуйте, nikov, Вы писали:
N>А overload resolution и вывод типов в лямбдах/generic методах по правилам C# или Nemerle происходит?
Да... Только одна поправка! Сам парсер тупо генерирует АСТ. Никаких выводов типов или разрешения перегрузки он не делает (это же парсер!). Так что когда мы говорим о семантике, то речь идет уже об созданном на базе этого парсера конверторе. Но парсер можно использовать и отдельно.
Судя по вот этому замечанию, наша реализация оказалась примерно в 10 раз быстрее АНТЛР-овской. И это не смотря на то, что у нас тупой PEG, а в АНТЛР-е конечные автоматы!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, hardcase, Вы писали:
H>Парсер C#4.0, генерирующий AST, вроде как принял законченную форму
А существует конвертер С#->Nemerle? Натыкался на упоминание об утилитке cs2n, но бинарника в дистре не нашёл. Вот на этом парсере кто-то делает что-нибудь подобное?
Здравствуйте, matumba, Вы писали:
M>А существует конвертер С#->Nemerle? Натыкался на упоминание об утилитке cs2n, но бинарника в дистре не нашёл. Вот на этом парсере кто-то делает что-нибудь подобное?
Было такое дело в старых версиях (9.3). Но оно давно устарело. Шарп там чуть ли не 1.0 поддерживался. Так что на сегодня оно интереса не предсавляет.
В принципе, на базе современного парсера сделать такую утилиту будет не сложно. Вот только рук не хватает.
Вот можешь помочь проекту, смастерить такую утилиту. Что делать подскажем.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
M>>А существует конвертер С#->Nemerle? VD>В принципе, на базе современного парсера сделать такую утилиту будет не сложно. Вот только рук не хватает. VD>Вот можешь помочь проекту, смастерить такую утилиту. Что делать подскажем.
Написать скорее всего могу, но я же цэшарповод, Немерле знаю на уровне "Хелл о, ворлд!" Писать лучше на Немерле, я правильно понимаю?
Последний билд у меня поставлен, но стоит только студия 2010. Если я ПОСЛЕ Немерли поставлю студию 2008 (isolated shell), она его подхватит?
(и кстати про шелл — он встанет без оригинальной студии 2008?)
Времени особо много нет, но вечерами могу ваять.
Здравствуйте, matumba, Вы писали:
M>Здравствуйте, VladD2, Вы писали:
M>>>А существует конвертер С#->Nemerle? VD>>В принципе, на базе современного парсера сделать такую утилиту будет не сложно. Вот только рук не хватает. VD>>Вот можешь помочь проекту, смастерить такую утилиту. Что делать подскажем.
M>Писать лучше на Немерле, я правильно понимаю?
Правильно.
M>Если я ПОСЛЕ Немерли поставлю студию 2008 (isolated shell), она его подхватит?
Насколько мне известно нет.
M>(и кстати про шелл — он встанет без оригинальной студии 2008?)
На то он и шелл — установится без проблем.
M>Времени особо много нет, но вечерами могу ваять.
Там дел не слишком много — вручную придется юзинги и пространства имен писать, остальное (декларации и выражения) Немерл сам умеет писать.
Здравствуйте, matumba, Вы писали:
M>Здравствуйте, VladD2, Вы писали:
M>>>А существует конвертер С#->Nemerle? VD>>В принципе, на базе современного парсера сделать такую утилиту будет не сложно. Вот только рук не хватает. VD>>Вот можешь помочь проекту, смастерить такую утилиту. Что делать подскажем.
M>Написать скорее всего могу, но я же цэшарповод, Немерле знаю на уровне "Хелл о, ворлд!"
Ну, вот за одно и подучишь. Тем более, что задача не сложная совсем, если не брать в расчет необходимость причесывания PrettyPrint-а для немерлового АСТ (сейчас он не очень качественно работает).
M> Писать лучше на Немерле, я правильно понимаю?
Естественно.
M>Последний билд у меня поставлен, но стоит только студия 2010. Если я ПОСЛЕ Немерли поставлю студию 2008 (isolated shell), она его подхватит?
Подхватит. Хотя, конечно, лучше было бы иметь полноценную VS 2008 SP1 + VS SDK 1.1 и немрел собранный с исходников.
M>(и кстати про шелл — он встанет без оригинальной студии 2008?)
Да.
M>Времени особо много нет, но вечерами могу ваять.
Там не так много работы.
Все что нужно находится в солюшене: http://code.google.com/p/nemerle/source/browse/nemerle/trunk/snippets/peg-parser/CSharp/CSharpParser.sln
По сути все что нужно сделать:
1. Получить шарповский код. Тут есть варианты. По уму входом может быть фалы или клипборд. Клипбордную версию можно вставить прямо в Интеграцию.
2. С помощью парсера шарпа распарсить шарповский код.
3. С помощью конвертера преобразуем АСТ шарпа в АСТ немерла.
4. Вызываем PrettyPrint (или даже просто ToString()) для генерации кода по немерловому АСТ.
5. Записываем результат в файл или клипборд.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Там не так много работы.
Еще добавлю, что для работы AstConverter'а (штуки которая преобразует C#-овый AST в Немерловый) необходим ManagerClass — это собственно сам компилятор.
Вот его придется в новом cs2n хостить.
Здравствуйте, matumba, Вы писали:
M>Последний билд у меня поставлен, но стоит только студия 2010. Если я ПОСЛЕ Немерли поставлю студию 2008 (isolated shell), она его подхватит?
Тут я гоню. Если поставить "isolated shell", то немерл надо будет переставить.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
ВВ>матч+tail call, соответственно, goto будет просто вызовом ф-ции, который будет компилятором Немерле "обратно" превращаться в тот же goto? ВВ>Вернее, сделать так — если внутри матча есть goto компилировать так, если нет, то обычный матч.
А реверс инжиниринг? Т.е. компилятор немерла генерит код, который не сможет при реверсе стать немерлом?
VD>С unsafe сложнее. Да и не нужно оно на практике. Долболомов что пишут unsafe-код очень мало. Тех кто использует unsafe по делу вообще почти нет (разве что ли создатели Сингулярити).
На практике встречал в работе с железом. Там сплошь и рядом этажерки указателей на помойки со структурами и указателями в которых указатели на массивы. Новейшее китайское железо с ихним же апи (железо в смысле промышленное которое на шине RS485). Хорошо когда массив с получаемыми данными можно сразу fixed и GC просто понервирничает, а бывает где все совсем плохо, что умножается на в принципе сложную тему invoke/interop... ну вы поняли. Кто умнее пишут в неуправляемых плюсах либу-прокладку, но большинство не парится — unsafe.
Так вот сама тема указателей и unsafe выливается в сложные fixed, MarshallAs, invoke/interop. Надо ли оно по настоящему высокому языку? Я думаю не стоит заморачиваться. Кому надо тот все-таки в плюсах прокладку сделает. А кто не умеет, тому лучше сначала плюсы учить, и рано ему высоким языком пользоваться, "тут вам не web".
Здравствуйте, enCobalt, Вы писали:
VD>>С unsafe сложнее. Да и не нужно оно на практике. Долболомов что пишут unsafe-код очень мало. Тех кто использует unsafe по делу вообще почти нет (разве что ли создатели Сингулярити).
C>На практике встречал в работе с железом. Там сплошь и рядом этажерки указателей на помойки со структурами и указателями в которых указатели на массивы. Новейшее китайское железо с ихним же апи (железо в смысле промышленное которое на шине RS485). Хорошо когда массив с получаемыми данными можно сразу fixed и GC просто понервирничает, а бывает где все совсем плохо, что умножается на в принципе сложную тему invoke/interop... ну вы поняли. Кто умнее пишут в неуправляемых плюсах либу-прокладку, но большинство не парится — unsafe.
А что людей работающих с никоуровневыми АПИ на дотнете много?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Судя по вот этому замечанию, наша реализация оказалась примерно в 10 раз быстрее АНТЛР-овской. И это не смотря на то, что у нас тупой PEG, а в АНТЛР-е конечные автоматы!
АНТЛР вообще как-то не быстр. Пытался я его использовать, но в итоге отказался. Если хочется бенчей, то имеет смысл с Кокором сравнить.
Здравствуйте, VladD2, Вы писали:
ВВ>>Если хочется бенчей, то имеет смысл с Кокором сравнить. VD>Хочу. Коку я сам использовал и у меня сложилось хорошее впечатление о его производительности. Так что сравнение с ним было бы очень интересно.
Тест сделать в принципе несложно. В качестве основы со стороны Кокора можно взять грамматику C# 3.0 — от 4-й версии отличий очень мало. Она у них тут: http://www.ssw.uni-linz.ac.at/Research/Projects/Coco/CS/CSharp3.atg. У ПЕГа в свою очередь надо будет отключить семантические действия, чтобы сравнивать чисто парсинг.
Я могу собрать небольшой проектик для Кокора, переслать тебе, а ты уже запустишь тесты. Могу сделать консольку, которая в качестве первого параметра принимает путь к файле, а по завершении парсинга выводит потраченное время в мс.
Здравствуйте, enCobalt, Вы писали:
H>>Там дел не слишком много — вручную придется юзинги и пространства имен писать, остальное (декларации и выражения) Немерл сам умеет писать.
C>Это по хорощему счету разбирать сорец по честному, например есди вдруг там уже есть юзинги?
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Я могу собрать небольшой проектик для Кокора, переслать тебе, а ты уже запустишь тесты. Могу сделать консольку, которая в качестве первого параметра принимает путь к файле, а по завершении парсинга выводит потраченное время в мс.
Давай. Можешь и нашу реализацию подключить.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.