From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by yquem.inria.fr (Postfix) with ESMTP id 75874BBAF for ; Tue, 27 Jul 2010 15:22:45 +0200 (CEST) From: Thomas.Gazagnaire@sophia.inria.fr X-IronPort-AV: E=Sophos;i="4.55,267,1278280800"; d="scan'208";a="54800340" Received: from imap1-sop.inria.fr ([138.96.0.111]) by mail3-relais-sop.national.inria.fr with ESMTP/TLS/ADH-AES256-SHA; 27 Jul 2010 15:22:45 +0200 Received: by imap1-sop.inria.fr (Postfix, from userid 48) id 4929939981CB; Tue, 27 Jul 2010 15:22:45 +0200 (CEST) Received: from 88.170.165.56 (SquirrelMail authenticated user tgazagna) by imap-sop.inria.fr with HTTP; Tue, 27 Jul 2010 15:22:45 +0200 (CEST) Message-ID: <54129.88.170.165.56.1280236965.squirrel@imap-sop.inria.fr> Date: Tue, 27 Jul 2010 15:22:45 +0200 (CEST) Subject: Re: [Caml-list] [Camlp4] Quotation expander with OCaml syntax To: "Raphael Proust" Cc: caml-list@yquem.inria.fr User-Agent: SquirrelMail/1.4.8-5.el5_4.10 MIME-Version: 1.0 Content-Type: text/plain;charset=utf-8 Content-Transfer-Encoding: 8bit X-Priority: 3 (Normal) Importance: Normal References: In-Reply-To: X-Spam: no; 0.00; camlp:01 expander:01 ocaml:01 syntax:01 branching:01 runtime:01 compiler:01 runtime:01 bigloo:01 compiler:01 www-sop:01 syntax:01 abstracted:01 node:01 node:01 Are you trying to the same thing as HOP [1] ? 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 ... [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 >