тут твой ответ потерялся, я не понял, о каком API идет речь. на 90% макры это квазицитаты, я как раз хотел уточнить, о них доки не хватает или об остальных возможностях использования компилятора?
Здравствуйте, Ziaw, Вы писали:
Z>тут твой ответ потерялся, я не понял, о каком API идет речь. на 90% макры это квазицитаты, я как раз хотел уточнить, о них доки не хватает или об остальных возможностях использования компилятора?
Да, квазицитаты преобразуются в PAST, а в нем черт ногу сломит. Нужна внятная документация. Да и на оставшиеся 10% не помешает.
Для начала нужен reference чтобы можно было в гугле по имени типа\метода найти описание.
Здравствуйте, gandjustas, Вы писали:
G>Да, квазицитаты преобразуются в PAST, а в нем черт ногу сломит.
На уровне начинающего просто не нужно лезть в такие дери. Для 90% задач квази-цитирования хватает. Если не хватает, то это скорее всего недоработка (или ты взялся за задачу которая пока тебе не по зубам).
Что касается "черт ногу сломит" — это явное преувеличение. Что в PExpr непонятного?
Давай конкретно. Вот его описание:
[Record]
public variant PExpr : Located
{
| Wildcard // `_' used mainly in patterns, but also in `_ = ignored'
| Void // `void' used only in types
| As { pat : PExpr; name : Splicable; }
| Is { pat : PExpr; ty : PExpr; }
| Where { name : PExpr; fields : PExpr; }
| Match { expr : PExpr; cases : list [MatchCase]; mutable expr_loc : Location;
this(loc : Location, expr : PExpr, cases : list [MatchCase]);
this(expr : PExpr, cases : list [MatchCase]);
}
| Ref {
mutable name : Name;
public new this(name : Name);
public new this(loc : Location, name : Name);
}
| Member
{
obj : PExpr; member : Splicable;
public new this(obj : PExpr, member : Splicable);
}
| Call { func : PExpr; parms : list [PExpr]; }
| GenericSpecifier{ func : PExpr; generic_parms : list [PExpr]; }
| ListLiteral { elements : list [PExpr]; }
| Assign { target : PExpr; source : PExpr; }
| DefMutable { name : PExpr; val : PExpr; }
| Define { pattern : PExpr; val : PExpr; }
| DefFunctions { funs : list [Function_decl]; }
| Lambda { decl : Function_decl; }
| Throw { exn : PExpr; }
| Try { body : PExpr; cases : list [TryCase]; }
| TryFinally { body : PExpr; handler : PExpr; }
| Literal { val : Nemerle.Compiler.Literal; }
| This
| Base { ty : option[PExpr];
public this();
public this(loc : Location);
public this(ty : PExpr);
public this(loc : Location, ty : PExpr);
}
| Typeof { ty : PExpr; }
| TypeConversion { expr : PExpr; ty : PExpr; }
| TypeEnforcement { expr : PExpr; ty : PExpr; }
| Sequence { body : list [PExpr]; }
| Tuple { args : list [PExpr];
[RecordIgnore] public mutable argsCount : int;
public static Create(loc : Location, args : list[PExpr]) : PExpr.Tuple;
public static Create(args : list[PExpr]) : PExpr.Tuple;
public this(args : list[PExpr], argsCount : int);
public this(loc : Location, args : list[PExpr], argsCount : int);
}
| Array { rank : PExpr; args : PExpr; }
| EmptyArray { sizes : list [PExpr]; }
| Indexer { obj : PExpr; args : list [PExpr]; }
| ParmByRef { parm : PExpr; }
| ParmOut { parm : PExpr; }
| Error // placeholder of missing tree (where some errors occured)
{
msg : object;
public this();
public this(location : Location);
}
// macros stuff
| MacroCall { name : Name; ns : NamespaceTree.Node;
parms : list [SyntaxElement]; }
| Quoted { body : SyntaxElement; }
| Spliced { body : PExpr; }
| ToComplete { body : Name; }
| Ellipsis { body : PExpr; }
| Typed { body : Typedtree.TExpr; }
| TypedPattern { body : Typedtree.Pattern; }
| TypedType { body : TypeVar; }
[RecordIgnore] public TypedObject : object { get; internal set; }
public override ToString () : string;
// transforms dot-separated identifier to the parse-tree expressionpublic static FromQualifiedIdentifier (manager : ManagerClass, qid : string) : PExpr;
}
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>На уровне начинающего просто не нужно лезть в такие дери. Для 90% задач квази-цитирования хватает. Если не хватает, то это скорее всего недоработка (или ты взялся за задачу которая пока тебе не по зубам).
В том то и дело, что нет доки по которой можно было лезть в дебри. Нужна статья в вики с перечислением всех элементов AST и примерами их конструирования/деконструирования. Не только PExpr, но и TopDeclaration, ClassMember.
Здравствуйте, Ziaw, Вы писали:
Z>В том то и дело, что нет доки по которой можно было лезть в дебри. Нужна статья в вики с перечислением всех элементов AST и примерами их конструирования/деконструирования. Не только PExpr, но и TopDeclaration, ClassMember.
На мой взгляд, как раз не нужно. В Н2 как раз именно АСТ будет изменено. Для работы с АСТ должно хватать квази-цитирования.
Когда закончу с поддержкой VS 2010, добью броузер документации. С его помощью можно будет и по вариантам документацию смотреть. А там напишем док-коментов и будет и описание АСТ, и все других классов.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, gandjustas, Вы писали:
G>>Да, квазицитаты преобразуются в PAST, а в нем черт ногу сломит.
VD>На уровне начинающего просто не нужно лезть в такие дери. Для 90% задач квази-цитирования хватает. Если не хватает, то это скорее всего недоработка (или ты взялся за задачу которая пока тебе не по зубам).
VD>Что касается "черт ногу сломит" — это явное преувеличение. Что в VD>PExpr непонятного? VD>Давай конкретно.
1)Зачем оно все
2)Как оно работает
3)Как отображается код цитат на эти классы
Достаточно парой предложений по каждому пункту описать и сделать индекс в сети чтобы легко находилось в гугле.
А вообще идеально если примеры будут.
Здравствуйте, VladD2, Вы писали:
VD>На мой взгляд, как раз не нужно. В Н2 как раз именно АСТ будет изменено. Для работы с АСТ должно хватать квази-цитирования.
Если ты считатешь, что для работы с квазицитированием можно не знать AST, ты заблуждаешься. Этого достаточно только в случае одной простой цитаты. Как только ее приходится конструировать из частей, надо начинать понимать какие части в ней есть. Н2 пока нет даже в проекте, а все больше людей пробуют язык прямо сейчас.
VD>Когда закончу с поддержкой VS 2010, добью броузер документации. С его помощью можно будет и по вариантам документацию смотреть. А там напишем док-коментов и будет и описание АСТ, и все других классов.
Это радует. Но основные моменты надо разжевать. У меня основные трудности возникали именно в генерации кусочков и их соединении.
Здравствуйте, Ziaw, Вы писали:
Z>Если ты считатешь, что для работы с квазицитированием можно не знать AST, ты заблуждаешься. Этого достаточно только в случае одной простой цитаты. Как только ее приходится конструировать из частей, надо начинать понимать какие части в ней есть. Н2 пока нет даже в проекте, а все больше людей пробуют язык прямо сейчас.
Дык, куски же тоже квази-цитатами создаются. Возня с типами — это уже следующий уровень и нужен он в основном для того, чтобы решить разные тонкие вопросы вроде задания местоположения для отдельных подветок и т.п. А это уже уровень выше среднего.
Z>Это радует. Но основные моменты надо разжевать. У меня основные трудности возникали именно в генерации кусочков и их соединении.
Ну, так вот таким как ты и нужно это разжевывать, так как ты уже многое понимаешь в деталях, но еще не привык к ним, так что видишь где что-то не ясно. Мой же глаз замылен. Так что мне тяжело что либо сказать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, gandjustas, Вы писали:
VD>>Что касается "черт ногу сломит" — это явное преувеличение. Что в VD>>PExpr непонятного? VD>>Давай конкретно.
G>1)Зачем оно все
А ты реально не понимаешь этого? ОК, поработаю Капитаном Очевидность.
Для описания AST. Если и этот термин не знаком, то можно представить себе AST как DOM для кода.
G>2)Как оно работает
Как любая другая объектная модель, только описанная не классами, а вариантами. Последнее нужно знать (и многократно описано).
G>3)Как отображается код цитат на эти классы
ОК. Это вопрос конкретный постараюсь в ближайшее время осветить его. Хотя для работы с квази-цитатами этого совершенно не нужно, так как они работают в обе стороны.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, gandjustas, Вы писали:
VD>>>Что касается "черт ногу сломит" — это явное преувеличение. Что в VD>>>PExpr непонятного? VD>>>Давай конкретно.
G>>1)Зачем оно все
VD>А ты реально не понимаешь этого? ОК, поработаю Капитаном Очевидность. VD>Для описания AST. Если и этот термин не знаком, то можно представить себе AST как DOM для кода.
Я вообще-то про справку говорю. По каждому варианту в AST нужно описание в одной-два предложения зачем оно нужно.
G>>2)Как оно работает
VD>Как любая другая объектная модель, только описанная не классами, а вариантами. Последнее нужно знать (и многократно описано).
Я вообще-то про справку говорю. По каждому варианту в AST нужно описание какие дочерние и родительские узлы могут быть. Какую операцию каждый узел представляет, как склеить их между собой.