【发布时间】:2022-09-27 20:21:54
【问题描述】:
我正在制作一个 ppx 扩展重写器作为代码库的一部分
理想情况下,该库可用于某些范围的 OCaml 版本
我注意到,在构建 AST 节点以从我的重写器输出时,不可避免地必须构建一些记录,其结构特定于特定的 OCaml AST 版本
例如,当building a variant type declaration 时,我们必须定义如下记录:
{
pcd_name = {txt = name; loc};
pcd_args = Pcstr_tuple [];
pcd_res = None;
pcd_loc = loc;
pcd_attributes = [];
}
这是constructor_declaration type
但是,此 AST 类型在 OCaml 4.13 和 OCaml 4.14 之间有所不同
我希望大多数 ppxlib Ast_builder 助手负责为我在编译我的库的任何 OCaml 版本生成正确的 AST 版本。
但是在我必须手动定义这些记录实例之一的地方,大概我需要检测当前的 OCaml 版本并以这种方式返回正确的记录格式?
我找到了这个:
utop # Sys.ocaml_version;;
- : string = \"4.12.1\"
所以大概我应该把这个字符串解析成int * int * int,这样我就可以对4.14.0之后的版本进行安全比较
有没有更好的方法,或者我应该做一些不同的事情?