在开发合成器库时与 OCaml 生态系统的令人沮丧的交互

主要观点:作者在开发第一个非平凡的 OCaml 项目(音频合成器库)时遇到了许多令人沮丧的经历,尽管喜欢 OCaml 编程但对其开发工具的用户体验和行为感到不满,期望过高导致失望,希望通过列举这些经历来传达对 OCaml 开发工具的更新期望。
关键信息

  • 工具方面:Dune 链接 OS 特定原生库困难,忽略以点开头的目录影响 Rust 互操作性,读取.wav 文件的包崩溃,从 Rust 向 OCaml 传输浮点数数组出错,添加内联测试需添加大量运行时依赖,生成.opam 文件需 workaround,部分依赖包未发布时 Opam 无法解决项目依赖等。
  • 对比方面:作者最初对 OCaml 工具的高期望与个人常用的 Rust 语言在管理依赖和构建项目方面的便利性形成对比。
  • 建议方面:提出应降低 OCaml 测试的摩擦,正常化对工具问题的抱怨,让新用户正确设置期望,若工具使用困难不要自责,OCaml 的包管理功能正在快速成熟。
    重要细节
  • 在链接 Rust 库时,Dune 对静态库和动态库的处理方式不同,需设置no_dynlink字段,且在不同操作系统上传递链接器参数复杂,需使用pkg-config或外部库dune-configurator
  • source_tree默认忽略以点开头的目录,导致 Rust 依赖项无法被复制,需添加配置。
  • ocaml-mm读取.wav 文件时出现断言失败,作者最终在 Rust 中解决。
  • ocaml-rs在处理从 Rust 到 OCaml 的单精度浮点数数组时存在 bug,已修复。
  • 添加内联测试时,ppx_inline_test不能标记为with-test,需暴露测试内部逻辑到单独的包。
  • Dune 生成.opam 文件时不支持available字段,需使用“Opam Template”。
  • 部分依赖包未发布时,Opam 在安装本地项目的依赖时会出现版本冲突问题。

总结来说,作者在 OCaml 开发过程中遇到了诸多工具相关的问题,虽认同工具在遵循“Happy Path”时表现较好,但这些经历让作者对继续在 OCaml 中开发项目产生了疑虑,最终将合成器库重写为 Rust。

阅读 8
0 条评论