我与 OCaml 的第一次经历

主要观点:作者近期受激励学习函数式编程,接触到 OCaml 后决定尝试,完成一个小项目后分享初体验,同时提及对 OCaml 资源、安装、语言特性、并发等方面的感受及遇到的问题。
关键信息:

  • 资源方面:官方文档可了解语言及安装工具,其他资源如 Real World OCaml 等可补充信息,存在资源结构需优化的需求。
  • 项目:构建一个接收 Yaml 配置并监控网站的守护进程,存储结果到 SQLite 数据库,代码可在这里查看。
  • 安装:需安装 opam 包管理器及相关工具,如 dune、utop 等,过程中遇到多种问题,如默认开关未安装等。
  • 语言特性:是类型安全的静态类型语言,有类型推断,存在用户自定义类型,运算符较多需时间理解。
  • 预处理器与 PPXs:ppx_deriving_yaml 有助于将 Yaml 文件解码为自定义类型。
  • 并发与并行:有多种库可实现,选择 domainslib 库处理网站并发,曾因 crawl_website 函数导致段错误,难找到同步 HTTP 调用库。
  • 测试:以简单手动方式在 let()中运行测试,通过 dune runtest 执行。
  • 容器化:ocaml/opam Docker 镜像可用,快速将应用放入容器。
  • 结论:暂不自信将程序部署到生产环境,希望文档更易获取和结构化,享受学习过程并可能继续使用和发布库。
    重要细节:
  • 安装命令在 macos 下为brew install opamopam initeval $(opam env),安装 dune 和 utop 为opam install dune utop
  • dune 项目结构有 3 个dune文件、1 个dune-project文件和 1 个websites_monitoring.opam文件。
  • 语言中函数get_config_filename可省略类型说明,存在websitewebsites自定义类型。
  • 测试函数test_get_websites_from_file用于测试获取网站配置文件的功能。
  • 容器化的 Dockerfile 以 ocaml/opam:alpine 为基础,进行相关安装和复制操作。
阅读 21
0 条评论