主要观点:作者在开发第一个非平凡的 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。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。