On 5/30/12 8:41 AM, Alain Frisch wrote:
Hi Alain,
Thanks for your message.
I am building a framework on top of camlp4, which provides those
features you mentioned in the post in a flexible way. It needs to be
polished. So far, writing generic plugins is really easy. (generic
printing, comparison, lift filter, etc , each about 20 lines).
The conclusion below is based on my observation and experiences.
Feel free to correct me if I am wrong.
1. Why camlp4 is buggy?
The main buggy part is its parsing technology. So is its parsing
technology a bad idea? No, it's really convenient for rapid ad-hoc
prototyping, suppose you don't need write a lexer, and its parser
simply works in the toplevel, the parser itself it really shorter
even compared with menhir, if you refactor your parser part.
The main buggy part lies in camlp4of, which is not tested at all.
it's easy to test camlp4o, camlp4rf. There's large code base written
both in camlp4o and camlp4rf. So in my opinion, we should just *drop
camlp4of*, unless it's really heavily tested. *camlp4rf* is a good
syntax, in my experience, it just took me one day to get used to,
and I wrote my daily caml code in revised syntax. It's not hard to
learn. It's much easier compared with the complexity of camlp4ast or
ocamlast. So, IMHO, we should just advise camlp4 developers to use
revised syntax. It would be nice if Daniel would write some articles
how internal parser mechanism works. Revised syntax just catch up
with the trunk, it should not be exactly the same, this gives the
caml develop team enough freedom to introducing new constructs(monad
support, etc)
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.
The other piece about introducing attribute grammar, whcich
is orthogonal to camlp4, IMHO.
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 would contribute if
there was some funding support.
3. Extending the syntax.
It is really nice to extend your syntax for ad-hoc hacking.
Your nice software ulex, and bitstring is a good example. It
could be even better to just introduce a new quotation for
robustness.
But I am against mutating syntax for personal taste. (try
finally, monad syntax), those improvement should be in the
trunk.
Many Thanks
On
05/27/2012 06:53 PM, Hongbo Zhang wrote:
Well, I don't think it's good to downplay
camlp4. The problem is we need
more documentation and more tests.
(The new) Camlp4 has been here for several years. Documentation
and tests are still lagging behind. Nevertheless, it burns a
non-negligible fraction of the total resource spent by maintainers
on OCaml (fixing bugs, struggling with camlp4 to take new language
features into account).
In addition, there is a growing consensus that the most common
uses of camlp4 (such as code generation driven by type
declaration) might be based on a much simpler approach, and this
would actually have advantages for the end-users (like not
changing the concrete syntax)
and for developers (much less information to grasp in order to
write such an extension).
Coq is one of the few examples of a big project that relies on
other aspects of camlp4 (e.g. its parsing framework with
extensible grammars). As far as I know, it also still works with
camlp5, which is actively maintained, and I don't believe the Coq
guys enjoy so much maintaining support for both camlp4 and campl5.
All that considered, and this is only a personal opinion: I don't
see compelling arguments to continue investing efforts in camlp4
itself (at least, for the core OCaml team) and I believe it is a
good time to start considering a (medium-term) future of OCaml
without camlp4. Of course, alternative solutions need to be
developed and streamlined before killing camlp4 is even
considered.
Alain