主要观点:作者近期受激励学习函数式编程,接触到 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 opam
、opam init
、eval $(opam env)
,安装 dune 和 utop 为opam install dune utop
。 - dune 项目结构有 3 个
dune
文件、1 个dune-project
文件和 1 个websites_monitoring.opam
文件。 - 语言中函数
get_config_filename
可省略类型说明,存在website
和websites
自定义类型。 - 测试函数
test_get_websites_from_file
用于测试获取网站配置文件的功能。 - 容器化的 Dockerfile 以 ocaml/opam:alpine 为基础,进行相关安装和复制操作。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。