ocaml-community / cppo

C-style preprocessor for OCaml
BSD 3-Clause "New" or "Revised" License
107 stars 26 forks source link

Introduce a common syntactic subset between cppo and bucklescript #69

Open bobzhang opened 5 years ago

bobzhang commented 5 years ago

Related issue https://github.com/BuckleScript/bucklescript/issues/3820

BuckleScript added a primitive conditional compilation support in the ocaml compiler codebase. We can not use cppo there since it would make the patches to ocaml codebase more intrusive(including changes to the build script). Since it is a patch to the ocaml lexer, it is small and minimal so we don't have too much complexity budget as cppo.

I am wondering if we can work together to tweak the syntax to make a minimal common subset to achieve code reuse.

The syntax is documented here https://bucklescript.github.io/docs/en/conditional-compilation#docsNav

cc @ELLIOTTCABLE

pmetzger commented 5 years ago

@bobzhang I'll note that Rust has an interesting syntax for specifying conditional compilation that does not break parsing tools by pretending to be a preprocessor; it would be possible to implement something similar in OCaml pretty easily using attributes or extension nodes.

bobzhang commented 5 years ago

there are some cases cpp style is better than ast level, e.g,

type t = 
  | ... (* 100 branches*)
#if HAS_XX 
  | HAS_XX
#end  
pmetzger commented 5 years ago

Generally, though, such usage inhibits automatic refactoring tools.