Здравствуйте, adontz, Вы писали:
A>Здравствуйте, Tom, Вы писали:
Tom>>1. Что значит Compiler As Service? Означает ли это что все елементы компилятора будет возможно реюзить. Скажем просто парсер C# можно ли будет использовать?
A>Я этого жду
Здравствуйте, adontz, Вы писали:
H>>И библиотеку эту можно легко использовать из программ на C# и VB.NET.
A>То есть оно оформлено как библиотека?
Естественно оно оформлено как отдельная библиотека.
При том сейчас она входит в наш инсталлятор, но всегда можно собирать свежую версию из исходников (сейчас активно допиливается генератор парсера).
По сути сейчас единственное ограничение парсера — отсутствие процессинга директив (они просто игнорируются), но этот недостаток скоро устраним.
Здравствуйте, hardcase, Вы писали:
H>Естественно оно оформлено как отдельная библиотека. H>При том сейчас она входит в наш инсталлятор, но всегда можно собирать свежую версию из исходников (сейчас активно допиливается генератор парсера). H>По сути сейчас единственное ограничение парсера — отсутствие процессинга директив (они просто игнорируются), но этот недостаток скоро устраним.
Здравствуйте, hardcase, Вы писали:
H>И библиотеку эту можно легко использовать из программ на C# и VB.NET.
А это совсем не факт. Немерле имеет особенность, особенно при активном использовании МП, делать использование его кода из других языков довольно сложным, особенно если об этом специально не позаботились.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476 on Windows 7 6.1.7600.0>>
Здравствуйте, AndrewVK, Вы писали:
AVK>А это совсем не факт. Немерле имеет особенность, особенно при активном использовании МП, делать использование его кода из других языков довольно сложным, особенно если об этом специально не позаботились.
МП использутся там в двух местах:
1) генератор парсера,
2) обход дерева с целью поиска синтаксических ошибок
На выходе синтаксическое дерево CompilationUnit-а, которое можно анализировать.
Скажи, а чем будет отличаться библиотека написанная МС-ом? Они ведь тебе исходники точно не дадут. Радуйся если они их обфускации не подвергнут.
A>на языке, который я не знаю.
Ой, дело только в этом? Ну, так зачем дело встало. Головастые люди изучивают немерле за месяц.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, AndrewVK, Вы писали:
H>>И библиотеку эту можно легко использовать из программ на C# и VB.NET.
AVK>А это совсем не факт. Немерле имеет особенность, особенно при активном использовании МП, делать использование его кода из других языков довольно сложным, особенно если об этом специально не позаботились.
А причем тут ПМ? ПМ вам — мэйнстримовцам — недоступен. Ты наверно говоришь об описании AST в вдие вариантов?
Ага. AST там именно в таком виде. Но варианты реализованы на базе классов. Вот как выглядит AST в Рефлекторе:
public abstract class Expr : Located
{
// Methodsprotected Expr();
protected Expr(Location location);
public override string ToString();
[VariantOption]
public sealed class Alias : Expr
{
// Fieldspublic readonly Identifier id;
// Methodspublic Alias(Identifier id);
public Alias(Location location, Identifier id);
public override int _N_GetVariantCode();
}
[VariantOption]
public sealed class Assign : Expr
{
// Fieldspublic readonly Identifier op;
public readonly Expr to;
public readonly Expr value;
// Methodspublic Assign(Expr to, Expr value, Identifier op);
public Assign(Location location, Expr to, Expr value, Identifier op);
public override int _N_GetVariantCode();
}
[VariantOption]
public sealed class Base : Expr
{
// Methodspublic Base();
public Base(Location location);
public override int _N_GetVariantCode();
}
[VariantOption]
public sealed class BinaryOperator : Expr
{
// Fieldspublic readonly Expr left;
public readonly Identifier op;
public readonly Expr right;
// Methodspublic BinaryOperator(Expr left, Expr right, Identifier op);
public BinaryOperator(Location location, Expr left, Expr right, Identifier op);
public override int _N_GetVariantCode();
}
[VariantOption]
public sealed class Call : Expr
{
// Fieldspublic readonly list<FunctionArgument> arguments;
public readonly Expr expr;
// Methodspublic Call(Expr expr, list<FunctionArgument> arguments);
public Call(Location location, Expr expr, list<FunctionArgument> arguments);
public override int _N_GetVariantCode();
}
Любой представитель мэйнстрима может написать Визетер для этого дела и использовать в свое удовольствие на подчеркнуто мэйнстрим-яызке. Для генерации Визетера можно даже воспользоваться ульта-современными технологиями вроде T4.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Ага. AST там именно в таком виде. Но варианты реализованы на базе классов. Вот как выглядит AST в Рефлекторе:
VD> [VariantOption]
VD> public sealed class Alias : Expr
VD> {
VD> // Fields
VD> public readonly Identifier id;
А можно что-либо сделать (на сколько это принципиально и как крепко прибито), что бы имена полей получались бы в UpperCase или в виде private readonly-полей и public-свойств? За это отвечает описание граматики (то есть достаточно переписать граматику парсера C#) или компилятор Немерле?
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, _FRED_, Вы писали:
_FR>А можно что-либо сделать (на сколько это принципиально и как крепко прибито), что бы имена полей получались бы в UpperCase или в виде private readonly-полей и public-свойств? За это отвечает описание граматики (то есть достаточно переписать граматику парсера C#) или компилятор Немерле?
За генерацию вариантов отвечает компилятор. А парсер скорее всего очень жестко завязан на варианты.
Здравствуйте, samius, Вы писали:
_FR>>А можно что-либо сделать (на сколько это принципиально и как крепко прибито), что бы имена полей получались бы в UpperCase или в виде private readonly-полей и public-свойств? За это отвечает описание граматики (то есть достаточно переписать граматику парсера C#) или компилятор Немерле?
S>За генерацию вариантов отвечает компилятор. А парсер скорее всего очень жестко завязан на варианты.
Но имена, в частности, "id" из моего примера, не компилятор же выдумывает — это имя же где-то человек указал. Так вот, если указать "Id", "то есть … переписать граматику парсера C#", значит в результате, в классе, будет поле "Id"? Или там всё сложнее?
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, _FRED_, Вы писали:
_FR>Здравствуйте, samius, Вы писали:
_FR>>>А можно что-либо сделать (на сколько это принципиально и как крепко прибито), что бы имена полей получались бы в UpperCase или в виде private readonly-полей и public-свойств? За это отвечает описание граматики (то есть достаточно переписать граматику парсера C#) или компилятор Немерле?
S>>За генерацию вариантов отвечает компилятор. А парсер скорее всего очень жестко завязан на варианты.
_FR>Но имена, в частности, "id" из моего примера, не компилятор же выдумывает — это имя же где-то человек указал. Так вот, если указать "Id", "то есть … переписать граматику парсера C#", значит в результате, в классе, будет поле "Id"? Или там всё сложнее?
Имя пишет человек. А вот за генерацию поля (а не свойства) отвечает компилятор.
Здравствуйте, _FRED_, Вы писали:
S>>За генерацию вариантов отвечает компилятор. А парсер скорее всего очень жестко завязан на варианты.
_FR>Но имена, в частности, "id" из моего примера, не компилятор же выдумывает — это имя же где-то человек указал. Так вот, если указать "Id", "то есть … переписать граматику парсера C#", значит в результате, в классе, будет поле "Id"? Или там всё сложнее?
Expr.n
Обойдется рефакторингом. Но думаю, что авторы будут против такого коммита.
Здравствуйте, samius, Вы писали:
S>>>За генерацию вариантов отвечает компилятор. А парсер скорее всего очень жестко завязан на варианты.
_FR>>Но имена, в частности, "id" из моего примера, не компилятор же выдумывает — это имя же где-то человек указал. Так вот, если указать "Id", "то есть … переписать граматику парсера C#", значит в результате, в классе, будет поле "Id"? Или там всё сложнее?
S>Expr.n S>Обойдется рефакторингом. Но думаю, что авторы будут против такого коммита.
Ну, если не удастся договориться с авторами, то коммитить, конечно, не стоит.
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, VladD2, Вы писали:
A>>На Немерле. Мне нужна библиотека с понятным интерфейсом, а не куча исходникков VD>Я так и знал. Главная проблема найдена. VD>Скажи, а чем будет отличаться библиотека написанная МС-ом? Они ведь тебе исходники точно не дадут. Радуйся если они их обфускации не подвергнут.
На момент написания этого сообщения, я не знал, что парсер оформлен как самостоятельная библиотека.
Здравствуйте, _FRED_, Вы писали:
_FR>А можно что-либо сделать (на сколько это принципиально и как крепко прибито), что бы имена полей получались бы в UpperCase или в виде private readonly-полей и public-свойств? За это отвечает описание граматики (то есть достаточно переписать граматику парсера C#) или компилятор Немерле?
Я пока не вижу пракического смысла в таком переписывании. Объекты всеравно иммутабельные.