Eio 1.0 版本:为 OCaml 引入一个新的基于效果的 I/O 库

OCaml 5 更新带来了备受期待的多核心编程支持,还通过效果处理程序引入了并发支持,是首批这样做的主流语言之一。此重要更新对性能和用户体验有深远影响,推动 OCaml 进入软件开发的新领域。

核心是打造与最新内核 I/O 进步(如 io_uring)无缝对接的现代直接式 I/O 栈,Eio 由此而来。在构建 I/O 栈时需从头开始,用户将大型应用移植到 Eio 过程中收获很多,反馈加速了生态系统的进化,如“使用效果处理程序组合调度程序”等研究和社区见解,以及 Picos 等实验。如今 Eio 已成熟为首个“功能完整”的直接式效果库,版本 1.0 已发布。

为什么是 Eio?

  • 提供基于效果的直接式 I/O 栈,可同时进行多种操作,如读写文件、网络连接等。1.0 版本注重性能和安全。

    • 性能:利用新内核 I/O 接口提升并行效率,有多种平台兼容的后端,如 Linux 的 io_uring 后端和 JavaScript 平台的 Eio_js 调度器等。
    • 安全:部分代码经过形式验证,有针对不同系统的低级别和高级别接口,高级别接口提供安全可控环境,部分系统支持运行时强制使用功能。
  • 编译器对用户选择调度策略持中立态度,使用 Eio 不必与 OCaml 5 绑定。

Eio 1.0 的改进

  • 与 OCaml 5.1 的跟踪工具兼容,可通过 Eio-trace 和 olly 等工具可视化代码执行过程。
  • 利用 OCaml 5 的多核心支持,提供 Eio.Executor_pool 可在多个域中分配任务,提高处理效率。
  • 与其他 I/O 库兼容,如可与 Async 和 Lwt 一起使用,通过多种方式与 Unix 模块等交互,给用户更多选择。

Eio 的历史

  • 最初 OCaml 5 不支持效果,Eio 由 Tarides 的团队作为原型开发,通过移植到大型库和应用发现并修复了 OCaml 5 运行时的多个 bug,创建并上游了许多测试和监控工具,使 Eio 成为高效、便携、灵活的栈。
  • 发展过程中也面临一些问题,如 API 设计受到批评,接口过于复杂,API 表面过大影响与其他调度器的组合等,目前正在探索解决方案,如 Picos。

保持联系

  • 未来几个月重点收集 I/O 栈的性能信息等,欢迎在 repo 或 OCaml Discuss 分享经验,参加定期开发者会议和论坛讨论,还可通过 Bluesky 和 LinkedIn 了解项目和事件。
  • 感谢 Eio 的所有贡献者和 Tarides 团队的支持,初始开发部分由 Jane Street 和 Tezos 基金会赞助。
阅读 13
0 条评论