<br><br><div class="gmail_quote">On Thu, Feb 7, 2013 at 11:37 AM, Alain Frisch <span dir="ltr"><<a href="mailto:alain.frisch@lexifi.com" target="_blank">alain.frisch@lexifi.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">On 2/7/2013 3:56 PM, Hongbo Zhang wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br></blockquote></div>
I don't follow. We are talking, basically, about adding simple constructions to the AST, like:<br>
<br>
  Pexp_annotation of expression * expression<br>
  Pexp_extension of string * expression<br>
<br>
and you were suggesting that this would almost kill Camlp4/Fan. Why?<div class="im"><br></div></blockquote><div>The problem is that I am a bit unclear how to encode them in the meta-level, since the introduced constructs will not be consumed by the type checker, they are provided for the convenience of ppx, but does not exist in real world.  I think camlp5 and Coq maintainers will also appreciate that we are a bit conservative in the compiler part.</div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im"><br></div>
E is defined in Ast_mapper:<br>
<br>
<a href="http://caml.inria.fr/cgi-bin/viewvc.cgi/ocaml/trunk/parsing/ast_mapper.mli?view=markup" target="_blank">http://caml.inria.fr/cgi-bin/<u></u>viewvc.cgi/ocaml/trunk/<u></u>parsing/ast_mapper.mli?view=<u></u>markup</a><br>

<br>
For instance, let_ is defined very cleverly as:<br>
<br>
let mk ?(loc = Location.none) x = {pexp_desc = x; pexp_loc = loc}<br>
...<br>
let let_ ?loc a b c = mk ?loc (Pexp_let (a, b, c))<br>
<br>
There is absolutely no magic.<div class="im"><br></div></blockquote><div>First, I guess most people will seldom write ppx, and they have to remember all those function names for once use a year. Quosi-quotation is so intuitive that you don't need remember anything.</div>
<div><br></div><div>Second, as I said, quosi-quotation works so nice with IDE or Emacs, since you can expand code any time you want, just one key binding, the expanded code just show up in my emacs buffer, the experience is exactly the same as slime in lisp, it's impossible to expand the code using arbitrary functions.</div>
<div><br></div><div>Third, this way to construct code is very limited, think about how you encode the ast, "{:expr| {:expr| a + b|} |}"</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im"><br></div>
This is a valid point, and I believe there would not be any strong opposition to move some desugaring logic from parser.mly into the typechecker, i.e. make Parsetree look more like a parse tree than an AST.<br>
<br>
That said, I've no idea what<br>
<br>
 `Bigarray (a,b,c)<br>
<br>
means.</blockquote><div>In Fan, the transformation between concrete syntax and abstract syntax is bijective(at least the design goal), so there is no ambiguity here, but for parsetree, it's hard to draw a line here, if you prevent all the syntax desguaring, that might introduces too much unnecessary complexity for the type checker</div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im"><br>
<br><br></div>
Will you introduce in Fan the notion of attributes attached to every possible category and represented explicitly in the (Fan) AST?  I thought you only had the intention to extend the syntax of OCaml with a single construct {:xxx| ... |}  with  .... being left unparsed.  I don't see how you can simulate "ignorable attributes" with that. Can you elaborate?<div class="im">
<br></div></blockquote><div>I am pretty open-minded here, actually I thought it for a while, I am more inclined to do this in the parsing stage by providing some plugins without cluttering the ast too much. </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class="HOEnZb"><font color="#888888">
<br>
<br>
Alain<br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br>-- Regards, Hongbo