cppo icon indicating copy to clipboard operation
cppo copied to clipboard

Introduce a common syntactic subset between cppo and bucklescript

Open bobzhang opened this issue 6 years ago • 3 comments

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

bobzhang avatar Sep 26 '19 01:09 bobzhang

@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.

pmetzger avatar Sep 26 '19 16:09 pmetzger

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

type t = 
  | ... (* 100 branches*)
#if HAS_XX 
  | HAS_XX
#end  

bobzhang avatar Sep 27 '19 23:09 bobzhang

Generally, though, such usage inhibits automatic refactoring tools.

pmetzger avatar Sep 29 '19 18:09 pmetzger