[wg-camlp4] A new branch to experiment with extension points
Markus Mottl
markus.mottl at gmail.com
Fri Mar 1 13:47:48 GMT 2013
It would be great to have one uniform syntax for syntax extensions. I
don't think we absolutely should keep type_conv like extensions if a
new approach can replace them. I can understand that industrial users
that have thousands of legacy annotations will not be happy having to
change their sources. But I think updating sources could be safely
automated to a large extent, and any remaining fixes could be applied
with a little elbow grease.
Regards,
Markus
On Fri, Mar 1, 2013 at 8:40 AM, Gabriel Scherer
<gabriel.scherer at gmail.com> wrote:
> I'm not fond of having "with" as a special case. If you don't support
> the type-conv or deriving syntax as is, could we take this as an
> opportunity to go back to an uniform syntax? Type declaration could be
> handled like any structure item.
>
> Don't we want to have attributes on signature items as well?
>
> Finally, I bet the non-terminal ".." will get little love, but I'm
> sure you considered other option (for example just ;;(:foo), but that
> doesn't work in the toplevel and we really want ";;" to help *avoid*
> precedence issues) and trust that this is one of the less ugly ones.
>
> Is that proposal sufficient to do ocamldoc with structured attributes
> rather than comments? It looks like it is. Can an annotation node, by
> itself, stand as a structure item (I'm thinking section comments)?
>
> On Fri, Mar 1, 2013 at 2:05 PM, Alain Frisch <alain.frisch at lexifi.com> wrote:
>> On 03/01/2013 09:08 AM, Mark Shinwell wrote:
>>>
>>> 1. If possible, I'd rather see one new syntactic form, rather than
>>> three.
>>
>>
>> I've made the syntax more uniform, dropped prefix attributes, and added
>> attributes on type declarations.
>>
>> The current syntax is:
>>
>> Attributes:
>>
>> On expressions: expr (:foo expr)
>> On type expressions: type (:foo expr)
>> On structure items: str_item ..(:foo expr)
>> On type declarations: type t = ... with (:foo1 expr1) (:foo2 expr2)
>>
>> Extension nodes:
>>
>> On expressions: (&foo expr)
>> On type expressions: (&foo expr)
>> On structure items: ..(&foo expr)
>>
>>
>> A type-conv like example (attributes on type expressions and type
>> declarations):
>>
>>
>> =================================================
>> type t = {
>> x : int (:default 42);
>> y : int (:default 3) (:sexp_drop_default);
>> z : int (:default 3) (:sexp_drop_if z_test);
>> } with (:sexp)
>> =================================================
>>
>>
>> A Bisect-like example (attributes on expressions and structure items):
>>
>> =================================================
>> let f x =
>> match List.map foo [x; a x; b x] with
>> | [y1; y2; y3] -> tata
>> | _ -> (assert false) (:bisect visit)
>>
>>
>> let unused = ()
>> ..(:bisect ignore)
>> =================================================
>>
>>
>> A Bolt-like example (extension nodes on expressions):
>>
>> =================================================
>> let funct n =
>> (&log) "funct(%d)" n LEVEL DEBUG;
>> for i = 1 to n do
>> print_endline "..."
>> done
>> =================================================
>>
>> or:
>>
>> =================================================
>> let funct n =
>> (&log "funct(%d)" n LEVEL DEBUG);
>> for i = 1 to n do
>> print_endline "..."
>> done
>> =================================================
>>
>>
>> A map/fold generator (extension nodes on structure item):
>>
>> =================================================
>> type variable = string
>> and term =
>> | Var of variable
>> | Lam of variable * term
>> | App of term * term
>>
>>
>> ..(&generate_map map term)
>> =================================================
>>
>> or, if we also add extension nodes on class expressions:
>>
>> =================================================
>> type variable = string
>> and term =
>> | Var of variable
>> | Lam of variable * term
>> | App of term * term
>>
>>
>> class map = (&generate_map term)
>> =================================================
>>
>>
>>
>> -- Alain
>>
>> _______________________________________________
>> wg-camlp4 mailing list
>> wg-camlp4 at lists.ocaml.org
>> http://lists.ocaml.org/listinfo/wg-camlp4
> _______________________________________________
> wg-camlp4 mailing list
> wg-camlp4 at lists.ocaml.org
> http://lists.ocaml.org/listinfo/wg-camlp4
--
Markus Mottl http://www.ocaml.info markus.mottl at gmail.com
More information about the wg-camlp4
mailing list