【问题标题】:Which .cma file corresponds with which module in OCaml?哪个 .cma 文件对应于 OCaml 中的哪个模块?
【发布时间】:2012-03-20 03:42:23
【问题描述】:

如果我在 OCaml 顶部循环中编程,并且我想使用来自 OCaml standard librarysome other library 的包,我如何找出要加载的 .cma 文件?例如,在标准库中,Stringstr.cma 中,Big_intnums.cma 中,因此文件名无法从模块名称或描述中辨别出来。

有没有一种简单的方法可以为模块查找正确的文件?

【问题讨论】:

    标签: ocaml


    【解决方案1】:

    通常,给定一个 Ocaml 库 .cma,您可以使用 objinfo(又名 ocamlobjinfo,特别是在 Debian、Ubuntu 等上)获取它定义的模块。因此,给定库路径(/usr/lib/ocaml 等)和所花费的时间,应该可以在模块和 Ocaml 库之间构建映射。

    【讨论】:

      【解决方案2】:

      首先,您并不是真的想知道要加载哪个 cma,而是想知道要通过 ocamlfind 加载哪个包。接下来要注意的是,ocaml 编译器需要执行相同的操作来编译项目 - 即通过源代码中引用的模块的名称找到该模块的编译接口。所以让我们模仿这种行为。编译器从命令行获取包含路径,但我们必须搜索所有可能的包含路径。所以我们开始吧:

      for i in $(ocamlfind list | cut -d ' ' -f 1) ; do
        if [ -r $(ocamlfind query $i)/XXX.cmi ] ; then
          echo $i; break;
        fi ;
      done
      

      ocamlfind printconf path | xargs -n1 -I/ find / -name XXX.cmi
      

      NB 从模块名称到文件名的映射不是唯一的 - 例如SomeModule 可以用someModule.cmiSomeModule.cmi 表示(不太常见)。

      【讨论】:

        【解决方案3】:

        Stringstring 数据类型上的常用函数)不在 str.cma 中,它是 Str(用于操作正则表达式的函数)。

        nums.cma 的名称也有类似的理由:它主要封装了模块 Num,这是不同“大数字”库(NatBig_intRatio)之上的一层。请注意,现在您可能想改用Zarith

        【讨论】:

          【解决方案4】:

          我从来没有注意到这个问题,但你是对的,你不能从模块的名称中看出任何东西。因为我通常必须先阅读文档,所以我总是从docs 获得信息(标准模块在每个部分的开头列出)。

          一个更温和的解决方案是使用 GODI 及其关联的findlib 机制,看起来它解决了这个问题和许多其他问题。特别是,它不仅可以扩展 OCaml 发行版附带的模块。

          【讨论】:

            【解决方案5】:

            正如 Po' Lazarus 所建议的,我使用ocamlobjinfo 来构建.cma 文件和定义的模块之间的映射,以便于参考。

            • bigarray.cma:
              • 大数组
            • dbm.cma:
              • 数据库
            • dynlink.cma:
              • 丁林科克斯
              • 动态链接
            • graphics.cma:
              • 图形
              • GraphicsX11
            • nums.cma:
              • Int_misc
              • 纳特
              • 大整数
              • Arith_flags
              • 比率
              • 数量
              • Arith_status
            • stdlib.cma
              • 无处不在
              • 数组
              • 列表
              • 字符
              • 字符串
              • 系统
              • 哈希表
              • 排序
              • 元帅
              • 对象
              • Int32
              • Int64
              • Nativeint
              • 乐行
              • 解析
              • 设置
              • 地图
              • 堆栈
              • 队列
              • CamlinternalLazy
              • 懒惰
              • 缓冲区
              • 打印
              • 格式
              • Scanf
              • 精氨酸
              • Printexc
              • GC
              • 摘要
              • 随机
              • 回调
              • CamlinternalOO
              • CamlinternalMod
              • Genlex
              • 文件名
              • 复杂
              • 数组标签
              • 列表标签
              • 字符串标签
              • 更多标签
              • 标准标签
            • str.cma:
              • 力量
            • toplevellib.cma:
              • 杂项
              • 待续
              • 配置
              • 旗标
              • 术语信息
              • Ccomp
              • 警告
              • 一致
              • 线数
              • 位置
              • 长记
              • 语法分析器
              • 解析器
              • 词法分析器
              • 解析
              • Printast
              • Unused_var
              • 标识
              • 路径
              • 原语
              • 类型
              • B型
              • Oprint
              • 替换
              • 预定义
              • Datarepr
              • 环境
              • 类型树
              • Ctype
              • 打印类型
              • 包含类
              • Mtype
              • 包含核心
              • 包含模组
              • Parmatch
              • 类型文本
              • 类型
              • Typecore
              • 类型声明
              • 类型类
              • Typemod
              • 拉姆达
              • 打印lambda
              • 类型选择
              • 开关
              • 匹配
              • Translobj
              • 翻译核心
              • 翻译类
              • Translmod
              • 简单
              • 运行时定义
              • 指示
              • 字节生成
              • Printinstr
              • 操作码
              • 发射代码
              • 字节节
              • DLL
              • 符号表
              • 字节链接
              • 字节图书馆员
              • 字节打包器
              • 解析
              • 错误
              • 编译
              • Main_args
              • Genprintval
              • 顶环
              • 追踪
              • 顶级目录
              • Topmain
            • unix.cma:
              • Unix
              • Unix标签

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2019-09-11
              • 1970-01-01
              • 2011-02-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多