主要观点:作者尝试使用基于 Erlang 虚拟机的类型安全语言 Gleam 构建开源 feed 聚合器 news.olano.dev 并记录过程,探讨了对 Gleam 的兴趣、项目设计、环境设置、学习心得、语言特点、错误处理、Erlang 互操作性、OTP 以及部署等方面。
关键信息:
- 作者曾从事动态语言工作,后接触 Rust 印象深刻,Gleam 吸引他是因其类似 Rust 且有现代类型系统。
- 项目是将个人关注的 feeds 整理为链接列表,设计上借鉴 Erlang 的 gen_servers 等,最终用 persistent_term 替代 ETS 表。
- Emacs 用户体验提升,新语言在 LSP 等支持下开箱即用,Gleam 重视开发者体验,不断添加功能。
- 学习 Gleam 主要通过官方 tour,标准库和依赖看 hex docs,概念讨论在 discord 更有效。
- Gleam 语法像 Rust 子集,处理导入和命名空间恰当,无宏等但调试打印较繁琐。
- 错误处理用 use <- 表达式,函数调用常需用 result.try 等,定义特定错误类型便于处理。
- Gleam 与 Erlang 有距离,互操作性通过声明函数和 Erlang 对应部分实现,处理动态结构较复杂。
- OTP 在 Gleam 中较难理解,创建 actor 用 Subject 代替 Pid,监督树有新旧两种形式且不稳定。
- 部署可通过 gleam export erlang-shipment 命令生成 Erlang 模块,可修改脚本实现 shell 交互。
重要细节: - feed 排序按“反向频率”,计算频率桶的函数代码展示了具体实现。
- Gleam 1.0 版本稳定,语言规范、标准库等方面有特点和不足。
- erlsom 库使用时需注意类型转换和数据结构差异。
- 部署脚本中通过 -name 和 -remsh 实现与 Erlang 编译的 Gleam 模块交互。
- 讨论了 Gleam 与 Erlang 在错误处理等方面的差异和平衡。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。