2ganjustas
От: Ziaw Россия  
Дата: 22.07.11 19:42
Оценка:
тут твой ответ потерялся, я не понял, о каком API идет речь. на 90% макры это квазицитаты, я как раз хотел уточнить, о них доки не хватает или об остальных возможностях использования компилятора?
Re: 2ganjustas
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 22.07.11 22:31
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>тут твой ответ потерялся, я не понял, о каком API идет речь. на 90% макры это квазицитаты, я как раз хотел уточнить, о них доки не хватает или об остальных возможностях использования компилятора?


Да, квазицитаты преобразуются в PAST, а в нем черт ногу сломит. Нужна внятная документация. Да и на оставшиеся 10% не помешает.
Для начала нужен reference чтобы можно было в гугле по имени типа\метода найти описание.
Re[2]: 2ganjustas
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.07.11 09:40
Оценка:
Здравствуйте, 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 expression
    public static FromQualifiedIdentifier (manager : ManagerClass, qid : string) : PExpr;
  }
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: 2ganjustas
От: Ziaw Россия  
Дата: 24.07.11 14:29
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>На уровне начинающего просто не нужно лезть в такие дери. Для 90% задач квази-цитирования хватает. Если не хватает, то это скорее всего недоработка (или ты взялся за задачу которая пока тебе не по зубам).


В том то и дело, что нет доки по которой можно было лезть в дебри. Нужна статья в вики с перечислением всех элементов AST и примерами их конструирования/деконструирования. Не только PExpr, но и TopDeclaration, ClassMember.
Re[4]: 2ganjustas
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.07.11 14:41
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>В том то и дело, что нет доки по которой можно было лезть в дебри. Нужна статья в вики с перечислением всех элементов AST и примерами их конструирования/деконструирования. Не только PExpr, но и TopDeclaration, ClassMember.


На мой взгляд, как раз не нужно. В Н2 как раз именно АСТ будет изменено. Для работы с АСТ должно хватать квази-цитирования.

Когда закончу с поддержкой VS 2010, добью броузер документации. С его помощью можно будет и по вариантам документацию смотреть. А там напишем док-коментов и будет и описание АСТ, и все других классов.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: 2ganjustas
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.07.11 18:24
Оценка:
Здравствуйте, VladD2, Вы писали:

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


G>>Да, квазицитаты преобразуются в PAST, а в нем черт ногу сломит.


VD>На уровне начинающего просто не нужно лезть в такие дери. Для 90% задач квази-цитирования хватает. Если не хватает, то это скорее всего недоработка (или ты взялся за задачу которая пока тебе не по зубам).


VD>Что касается "черт ногу сломит" — это явное преувеличение. Что в

VD>PExpr непонятного?
VD>Давай конкретно.

1)Зачем оно все
2)Как оно работает
3)Как отображается код цитат на эти классы

Достаточно парой предложений по каждому пункту описать и сделать индекс в сети чтобы легко находилось в гугле.
А вообще идеально если примеры будут.
Re[5]: 2ganjustas
От: Ziaw Россия  
Дата: 25.07.11 03:13
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>На мой взгляд, как раз не нужно. В Н2 как раз именно АСТ будет изменено. Для работы с АСТ должно хватать квази-цитирования.


Если ты считатешь, что для работы с квазицитированием можно не знать AST, ты заблуждаешься. Этого достаточно только в случае одной простой цитаты. Как только ее приходится конструировать из частей, надо начинать понимать какие части в ней есть. Н2 пока нет даже в проекте, а все больше людей пробуют язык прямо сейчас.

VD>Когда закончу с поддержкой VS 2010, добью броузер документации. С его помощью можно будет и по вариантам документацию смотреть. А там напишем док-коментов и будет и описание АСТ, и все других классов.


Это радует. Но основные моменты надо разжевать. У меня основные трудности возникали именно в генерации кусочков и их соединении.
Re[6]: 2ganjustas
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.07.11 19:35
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Если ты считатешь, что для работы с квазицитированием можно не знать AST, ты заблуждаешься. Этого достаточно только в случае одной простой цитаты. Как только ее приходится конструировать из частей, надо начинать понимать какие части в ней есть. Н2 пока нет даже в проекте, а все больше людей пробуют язык прямо сейчас.


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

Z>Это радует. Но основные моменты надо разжевать. У меня основные трудности возникали именно в генерации кусочков и их соединении.


Ну, так вот таким как ты и нужно это разжевывать, так как ты уже многое понимаешь в деталях, но еще не привык к ним, так что видишь где что-то не ясно. Мой же глаз замылен. Так что мне тяжело что либо сказать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: 2ganjustas
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.07.11 19:43
Оценка:
Здравствуйте, gandjustas, Вы писали:

VD>>Что касается "черт ногу сломит" — это явное преувеличение. Что в

VD>>PExpr непонятного?
VD>>Давай конкретно.

G>1)Зачем оно все


А ты реально не понимаешь этого? ОК, поработаю Капитаном Очевидность.
Для описания AST. Если и этот термин не знаком, то можно представить себе AST как DOM для кода.

G>2)Как оно работает


Как любая другая объектная модель, только описанная не классами, а вариантами. Последнее нужно знать (и многократно описано).

G>3)Как отображается код цитат на эти классы


ОК. Это вопрос конкретный постараюсь в ближайшее время осветить его. Хотя для работы с квази-цитатами этого совершенно не нужно, так как они работают в обе стороны.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: 2ganjustas
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 26.07.11 06:32
Оценка: +1
Здравствуйте, VladD2, Вы писали:

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


VD>>>Что касается "черт ногу сломит" — это явное преувеличение. Что в

VD>>>PExpr непонятного?
VD>>>Давай конкретно.

G>>1)Зачем оно все


VD>А ты реально не понимаешь этого? ОК, поработаю Капитаном Очевидность.

VD>Для описания AST. Если и этот термин не знаком, то можно представить себе AST как DOM для кода.

Я вообще-то про справку говорю. По каждому варианту в AST нужно описание в одной-два предложения зачем оно нужно.

G>>2)Как оно работает


VD>Как любая другая объектная модель, только описанная не классами, а вариантами. Последнее нужно знать (и многократно описано).


Я вообще-то про справку говорю. По каждому варианту в AST нужно описание какие дочерние и родительские узлы могут быть. Какую операцию каждый узел представляет, как склеить их между собой.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.