Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Camlp4] Quotation expander with OCaml syntax
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Vincent Balat <vincent.balat@p...>
Subject: Re: [Caml-list] [Camlp4] Quotation expander with OCaml syntax
> Are you trying to the same thing as HOP [1] ?

No. Our precise goal and solutions are very different from Hop. Obviously we 
share the main general idea (from the beginning 7 years ago -- and also with 
many other projects) which is to write both sides of Web applications with the 
same high level language. But that is not new (we have been doing this for 
years). Raphaël's work is to make easier to mix client and server code in the 
same file and simplify the interaction between the client and server. We 
already have a syntax for this but it is not exactly the one we want (but this 
is only a problem with camlp4).

> What kind of restrictions do you impose on the expressions you can
> transfer from the server to the client (only non-functional values) ? How
> do you ensure them in your program ?
> 
> Are you sure splitting the code into two parts is sufficient ? How will
> you handle branching than you can decide only at runtime, as example ? HOP
> is using a javascrip compiler embedded in a library to compile efficiently
> the right client code at runtime.
> 
> Btw, would be glad to have more details on what you have done and plan to
> do as I am working on similar things (not very actively currently) : I've
> been trying  to make camloo, a caml-light to bigloo compiler, working
> again (current version[2] is quite working - still few things to finish).
> At one point, the goal would be to extand the source language with similar
> constructs than yours  and to compile to HOP ...

You can find Eliom's documentation on http://ocsigen.org . The documentation 
for the development version is not yet written (we will put it online probably 
in september, and release version 2 of Eliom a few months later). If you are 
working on this with Manuel, we will probably meet soon during the next 
meeting of the PWD project and I will explain you our solution in details.

Vincent Balat

> [1] http://hop.inria.fr
> [2] http://www-sop.inria.fr/members/Thomas.Gazagnaire/
> --
> Thomas
> 
> > Hi all,
> > 
> > I'm working on a syntax extension as part of an internship in the
> 
> Ocsigen team. The aim of the syntax extension is to split the code of a
> web
> 
> > application in two separate files: one for the client and one for the
> 
> server. A
> 
> > few transformations are to take place in the process.
> > 
> > Quotations are to be transformed into client code while antiquotations
> 
> can
> 
> > refer
> > to server side values transmitted to the client at runtime.
> > 
> > 
> > In order to avoid any XY problems, here is an abstracted and simplified
> 
> example
> 
> > of the expected behavior:
> > 
> > (* Pre-parsed code: *)
> > let start = <:on< f $y$ >> in
> > let html_node =
> > 
> >  span ~a:[onclick start] "some text" (* a is used for (html) attributes
> 
> *)
> 
> > (* Server side post-parsed code: *)
> > let start _arg1 =
> > 
> >  "call_closure(some_unique_name," ^ mymarshall _arg1 ")"
> > 
> > in
> > let html_node = span ~a:[onclick (start y)] "some text"
> > 
> > (* Client side post-parsed code: *)
> > let _ = register_closure some_unique_name (fun _arg1 -> f _arg1)
> > 
> > 
> > 
> > If the example isn't clear enough I can detail it a little bit more.
> > 
> > 
> > I'm unsure of what is the standard way of doing such a thing in Camlp4.
> 
> What
> 
> > I
> > have in mind is to use the original Ocaml syntax for the quotation
> 
> expander.
> 
> > This would (IIUC) allow me to filter the AST to transform every
> > antiquotation
> > found inside the quotation itself.
> > 
> > I'm not sure this is the ideal way of doing such a thing because of the
> 
> size
> 
> > of
> > the pattern matching in the AST filter. On the other hand, because the
> 
> quotation
> 
> > is supposed to contain valid OCaml code, it seems normal to reuse the
> 
> original
> 
> > parser.
> > 
> > I considered an alternative solution: treating quotations as raw text
> > (with a
> > custom quotation expander) but that would destroy any _loc information
> 
> and
> 
> > make
> > compile time warnings and errors quite difficult to locate.
> > 
> > 
> > Is there a simpler/fitter way of doing that? (Is the Y correct wrt the
> 
> X?)
> 
> > How can one embed the original parser in a quotation expander? (I
> 
> couldn't
> 
> > find
> > a function of type string -> Ast.expr in the Camlp4 doc/mlis, but I'd be
> 
> happy
> 
> > to be pointed to one if it exists. I think it would at least require
> 
> some
> 
> > functor application.)
> > 
> > Does anyone know of any example that resemble what I'm trying to
> 
> achieve?
> 
> > --
> > _______
> > Raphael
> > _______________________________________________
> > Caml-list mailing list. Subscription management:
> > http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
> > Archives: http://caml.inria.fr
> > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> > Bug reports: http://caml.inria.fr/bin/caml-bugs
> 
> _______________________________________________
> Caml-list mailing list. Subscription management:
> http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
> Archives: http://caml.inria.fr
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs