From: Hongbo Zhang <bobzhang1988@gmail.com>
To: Gerd Stolpmann <info@gerd-stolpmann.de>, Caml List <caml-list@inria.fr>
Subject: Re: [Caml-list] Re: Syntax extensions without Camlp4
Date: Thu, 31 May 2012 14:32:03 -0400 [thread overview]
Message-ID: <4FC7B923.3030206@gmail.com> (raw)
In-Reply-To: <1338485339.17140.120.camel@thinkpad>
On 5/31/12 1:28 PM, Gerd Stolpmann wrote:
> Am Donnerstag, den 31.05.2012, 12:01 -0400 schrieb bob zhang:
>>
>> On Thu, May 31, 2012 at 8:59 AM, Alain Frisch<alain@frisch.fr> wrote:
>> On 05/30/2012 04:14 PM, Hongbo Zhang wrote:
>> 1. Why camlp4 is buggy?
>> The main buggy part is its parsing technology.
>>
>>
>> I don't consider that the main problem with Camlp4 is that it
>> is buggy, but rather that (i) it is overly complex for the
>> benefits it delivers,
>> and (ii) it is actually not such a great idea to change the
>> concrete syntax.
>>
>> Hi,Alain,
>> Thanks for your message.
>> Some opinions below: (Feel free to correct if I am wrong)
>> Why do you think it's overly complex? The other part is not complex
>> IMO except the internal mechanism of parsing. There are other benefits
>> of revised syntax. One point is that write an error
>> recover parser is straitforward for revised syntax. And it's more
>> friendly to IDE.
> IMHO, there is no point in discussing "revised" (actually, alternate)
> syntax. It might be easier to parse, but most programmers are used to
> the standard syntax. The problem here is that it is difficult for a
> human to switch between two syntaxes.
>
> That said, I'm for dropping the alternate syntax entirely.
It depends. I wrote camlp4 related programs in revised syntax, and
normal caml code in original syntax, it may seem awful at first,
but once you get used to it, it's really a minor issue compared with
waiting for patches for camlp4of. If you look at mantis, most camlp4
related bugs are about camlp4of. Dropping camlp4of will help alleviate
the burden a lot
>>
>> Some example of useless complexity:
>>
>> - A custom notion of AST. Why not simply use the OCaml one?
>> (Extended with nodes for a new nodes, like quotations.)
>>
>> The simple answer is you can not. (or it's at least not an easy way
>> once you want to support quotation and *antiquotation* *everywhere*.
>> Just take a look at how ugly the Template Haskell program is)
> What's the problem with antiquotations? I imagine that you can simply
> call the parser, and it is only a matter of selecting the right entry
> point, and passing the tokens down.
Campl4 Ast is *quite loose*, and designed this way to tolerate parital
Ast, and way more better support for quosiquotation than
Template Haskell (etc).
This is the last post I commented on this thread.
IMHO, we should do some work to improve camlp4, a community to build
libraries
on top of it to avoid reinventing the wheels instead of dropping
existing powerful
tools.
Many Thanks
>
>> - The use of concrete syntax for manipulating the AST. The
>> developer needs to understand not only the new AST, but also
>> how it is reflected exactly by the concrete syntax quotations
>> (and this is non trivial), and where anti-quotations are
>> allowed, etc. What's wrong with normal pattern matching and
>> expression building with the standard AST? It might be a
>> little bit more verbose, but it's so much simpler to
>> understand.
>>
>> The answer is also you can not. There are some ambiguities that you
>> can not support quotations
>> and antiquotations. Currenty Camlp4 support quotations and
>> antiquotations for revised syntax in
>> all branches except Ast.TyDcl.
> I guess you are missing Alain's point here. He suggests to use normal
> pattern matching directly on parsetrees, as in
>
> match expr with
> | Pexp_ident id -> Pexp_ident (tranform id)
> | Pexp_contant c -> Pexp_constant c
> | ...
>
> instead of using camlp4 syntax quotations (no<<...>> stuff for syntax
> manipulation anymore).
>
> Gerd
>
>> I agree it would be useful to write a simple quoation expander for
>> Parsetree.structure_item, (with limited antiquotation support) in
>> Camlp4 and add another hook for Parsetree.
>> - A different syntax (the revised one). I understand the
>> benefits of this new syntax, but it seems kind of crazy to
>> have a "low-level" tool implemented in (and encouraging) a
>> syntax different from the core system.
>>
>> - A complicated bootstrapping cycle (partly a consequence of
>> the fact that Camlp4 is itself written in a custom syntax).
>> That's mostly for OCaml maintainers, but in the past, it has
>> slowed down development in a non-negligible way.
>>
>>
>> 2. About the proposal.
>> There are mainly 2 pieces. About the hook
>>
>> Parsetree.structure->Parsetree. structure, given that
>> camlp4 already
>>
>> imports Parsetree, it's really trivial to
>> add another hook after camlp4astdump2ocamlast.
>>
>>
>> I've absolutely no doubt that Camlp4 can be extended to be at
>> least as powerful as this "Parsetree rewriting" proposal.
>> What's important is that this proposal is so simple that it
>> can be implemented in a few dozens line of code in the core
>> compiler. We should not create a dependency on a complex tool
>> for problems which can be solved with something so simple.
>>
>>
>> It's still nontrivial to write a robust
>> Parsetree.structure ->
>> Parsetree.structure, it would be nice if we could
>> provide a quotation
>> syntax for Parsetree.types.
>>
>>
>> I believe the opposite: it's simpler to write a robust
>> AST->AST rewriting function if you work directly on the "real"
>> AST definition, rather than a slighlty different one and with
>> a custom syntax. Just for an example, consider a left-hand
>> side like:
>>
>> |<:pat< $p1$ | $p2$ | $p3$>> -> ...
>>
>> Will it capture both (p1|p2)|p3 and p1|(p2|p3)? Or only one
>> of them?
>> Another example: controlling precisely locations introduced in
>> the AST fragments created with quotations is quite tricky.
>>
>>
>>
>> Alain
>>
>>
>>
>>
>> --
>> -- Bob
prev parent reply other threads:[~2012-05-31 18:32 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-27 15:06 [Caml-list] " Alexandre Pilkiewicz
2012-05-27 16:53 ` [Caml-list] " Hongbo Zhang
2012-05-27 18:04 ` Daniel Bünzli
2012-05-27 18:18 ` Hongbo Zhang
2012-05-27 19:01 ` Daniel Bünzli
2012-05-27 22:43 ` Wojciech Meyer
2012-05-28 9:35 ` Daniel Bünzli
2012-05-28 9:59 ` Gabriel Scherer
2012-05-30 14:45 ` Hongbo Zhang
2012-05-28 11:17 ` Wojciech Meyer
2012-05-28 15:52 ` Jeffrey Scofield
2012-05-27 18:19 ` Hongbo Zhang
2012-05-28 8:17 ` Paolo Donadeo
2012-05-30 12:41 ` Alain Frisch
2012-05-30 13:18 ` Markus Mottl
2012-05-30 13:37 ` Dan Bensen
2012-05-30 14:16 ` Hongbo Zhang
2012-05-30 14:23 ` Paolo Donadeo
[not found] ` <20120531081913.GA26742@securactive.lan>
2012-05-31 12:26 ` Paolo Donadeo
2012-05-31 12:38 ` Anil Madhavapeddy
2012-05-31 12:40 ` Anil Madhavapeddy
2012-05-31 12:46 ` Yaron Minsky
2012-05-31 12:47 ` Gabriel Scherer
2012-05-31 22:08 ` Paolo Donadeo
2012-05-30 14:14 ` Hongbo Zhang
2012-05-31 12:59 ` Alain Frisch
2012-05-31 13:21 ` Dmitry Grebeniuk
2012-05-31 14:30 ` Daniel Bünzli
2012-05-31 16:01 ` bob zhang
2012-05-31 17:28 ` Gerd Stolpmann
2012-05-31 18:03 ` Wojciech Meyer
2012-05-31 18:32 ` Gerd Stolpmann
2012-05-31 18:32 ` Hongbo Zhang [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4FC7B923.3030206@gmail.com \
--to=bobzhang1988@gmail.com \
--cc=caml-list@inria.fr \
--cc=info@gerd-stolpmann.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox