[wg-camlp4] Editor support for syntax extensions

Hongbo Zhang bobzhang1988 at gmail.com
Wed Jan 30 19:40:03 GMT 2013


On 1/30/13 2:27 PM, Gerd Stolpmann wrote:
Hi Gerd,
    I think delegating ocamlfind for (ppx/camlp4/fan) is a mistake. IMO 
the right way is that
the file itself tells the preprocessor which syntax or plugin it 
wants(with the good default option),
that's how Fan adopted.
> Am 30.01.2013 15:21:20 schrieb(en) Alain Frisch:
>> On 01/30/2013 12:19 PM, Török Edwin wrote:
>>> I still get syntax highlighting and matching parens in both vim and 
>>> emacs for the above (although maybe antiquotations would confuse it):
>>
>> Highlighting gets completely wrong as soon as you start e.g. using 
>> double quotes. And indentation is just impossible if the editor isn't 
>> aware of the grammar implemented by the extensions.  One could 
>> certainly try to fix this and introduce more tools, complexity and 
>> border cases. But I still fail to see the real benefits of allowing 
>> very customized syntax which would justify such efforts.  The whole 
>> point of -ppx versus camlp4 is precisely to stop messing up with the 
>> concrete syntax: define some generic enough extension points, and 
>> just work with a fixed concrete syntax.  I'd prefer to see dead 
>> simple solutions adopted for -ppx, and more advanced stuff (based on 
>> concrete syntax) left to camlp4/fan.
>>
>>> 4. What syntax extensions to use => define in the source code
>>>
>>> This has already been mentioned that the source file could define 
>>> what syntax extensions it uses, so it works for all build systems 
>>> (ocamlbuild, makefiles, omake), etc.
>>> It may not even need special support from the compiler: there could 
>>> be a -ppx that finds these pragmas and loads those other -ppx on its 
>>> own!
>>
>> I've started something along these lines:
>>
>> https://github.com/alainfrisch/ppx_drivers
>>
>> Exactly how this works with ocamlfind needs to be discussed.  I know 
>> Gerd has some ideas!
>
> Well, I had some private discussions with Alain before this list started.
>
> A central point is that the ppx driver and ocamlfind remain separate 
> software projects. You need the ability to use ppx preprocessors 
> without ocamlfind, and the role of ocamlfind is "only" to make it more 
> user-friendly. This should be similar to normal library lookup - where 
> ocamlfind finally generates only a command where many details are 
> filled in.
>
> Alain had the idea to include the names of the preprocessors directly 
> in the source text. He chose the syntax
>
> include PPX(First_ppx_processor)(Second_ppx_processor)
>
> Well, we probably can now select something better, not reusing the 
> "include" notation for something that is not "include". Maybe let's 
> prefer now
>
> (:PPX "first_ppx_preprocessor" "second_ppx_preprocessor")
>
> just to pick the current discussion up. The task of the ppx driver is 
> to interpret these directives, and to run the preprocessors in the 
> right order as subcommands (or, if the platform supports it, as plugins).
>
> Ocamlfind integration: The problem here is that such a directive needs 
> to be forwarded to ocamlfind in order to figure the details out. This 
> would need a relatively tight coupling between the ppx driver and 
> ocamlfind. In order to avoid that the ppx driver calls ocamlfind for 
> every activated preprocessor, the idea is to make the ppx driver a 
> library, maybe with a single function
>
> preprocess : (string -> string) -> in_channel -> out_channel
>
> The string->string function is the lookup function. It takes a string 
> like "first_ppx_preprocessor" and returns the command to run.
>
> So, that enables us to provide two utilities:
>
>  - ocamlppx: This would be part of the OCaml distribution, and would be
>    limited in functionality. In particular, it interprets the ppx strings
>    directly as commands (identity as lookup function):
>
>    (:PPX "/path/to/my/ppx/executable maybe arguments")
>
>  - ocamlfind ppx: This version provides extended lookup features.
>    You would just use
>
>    (:PPX "package-name")
>
>    and it is ocamlfind's task to look the executable up (or, optionally,
>    load a plugin, but the details of the mechanism are hidden from the
>    simple user).
>
> Gerd
>
>
>>
>> Alain
>> _______________________________________________
>> wg-camlp4 mailing list
>> wg-camlp4 at lists.ocaml.org
>> http://lists.ocaml.org/listinfo/wg-camlp4
>>
>
>



More information about the wg-camlp4 mailing list