首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在运行时确定OCaml或Jane Street库的版本

如何在运行时确定OCaml或Jane Street库的版本
EN

Stack Overflow用户
提问于 2022-02-07 00:55:25
回答 3查看 128关注 0票数 1

我正在迁移到最新版本的OCaml (以及Jane Street的核心模块),但希望我的代码继续使用旧版本进行编译。为此,我想创建一个模块,该模块具有可移植的函数,根据版本的不同映射到旧的或新的接口。查询OCaml版本和Jane Street版本都是可行的。

我们如何在运行时查找编译器或Jane Street的版本?我知道我可以通过构建系统传递ocamlopt --version的输出,但理想情况下,我不应该以一种特殊的方式调用我的程序。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-02-07 01:55:48

您可以使用OCaml检索Sys.ocaml_version版本号。

代码语言:javascript
复制
utop # Sys.ocaml_version;;
- : string = "4.13.1"

我担心在浏览了简街基座核心 API文档之后,我没有办法在运行时查询版本号。

票数 1
EN

Stack Overflow用户

发布于 2022-02-07 09:12:02

抱歉,回答一个稍微不同的问题,但这可能是XY问题:如果您想构建一个兼容性包,那么在运行时确定包的版本并不会有帮助,因为如下所示

代码语言:javascript
复制
let f = if Sys.ocaml_version > ... then new_function else compat_function 

要求new_function独立于Sys.ocaml_version的运行时值存在。

兼容性包的一个常见解决方案是在构建时早期使用cppo检测版本,例如使用一些代码生成,例如https://github.com/janestreet/resulthttps://github.com/ocaml/stdlib-shims

票数 4
EN

Stack Overflow用户

发布于 2022-02-07 07:07:03

您可以使用来自Compiler_libsCompiler_libs,如这里所记录的https://ocaml.org/api/compilerlibref/Config.html

注意事项来自Compiler_libs的警告:

这个库是内部OCaml编译器API的一部分,不是语言标准库。版本之间没有兼容性保证,因此针对这些模块编写的代码必须愿意依赖于特定的OCaml编译器版本。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71012423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档