Skip to content

很棒的 OCaml Build Status

> 你在掌握 OCaml 的道路上所需要的一切.

精选的 OCaml 工具、框架、库和文章的参考列表. 此外,还有一系列免费提供 books, paperspresentations.

如果您正在寻找有关 OCaml 的综合社区驱动内容,请访问OCamlverse!

有关现代 OCaml 开发工作流程的快速介绍,请参阅 Up and Running with OCaml 教程.

没有列出您喜欢的包? 叉和 create a Pull Request 添加它!


Community

Algorithms and Data Structures

Application Libraries

  • Batteries Included – 用于 OCaml 项目的社区维护基础库.
  • Cmdliner – OCaml 命令行界面的声明性定义.
  • Core – Jane Street Capital 成熟的标准库覆盖. Core 的可移植子集也可用: Core_kernel.
  • Base - Jane Street Capital 的无依赖、快速编译、完全可移植的跨越任何可以运行 OCaml 代码的环境的标准库.
  • React – React 是用于函数式反应式编程 (FRP) 的 OCaml 模块. 它为具有时变值的程序提供支持:声明性事件和信号.
  • Minicli - 用于命令行解析的极简库.
  • easy-format – OCaml 的漂亮打印库.
  • ocaml-rpc – 用于处理 OCaml 中的 RPC 的轻型库.
  • ocaml-containers – 一个轻量级的、模块化的标准库扩展、字符串库和各种库的接口(bigarrays、unix 等). BSD 许可证.

Benchmarking

Blogs

Books

Code Analysis and Linters

  • Mascot - Mascot 是 OCaml 源代码的样式检查器
  • pfff – pfff 是一组工具和 API,用于执行一些静态分析、动态分析、代码可视化、代码导航或保持样式的源到源转换,例如源代码重构.
  • Infer - Infer 是 Java、C 和 Objective-C 的静态分析器
  • Frama-C - Frama-C 是 C 和 C++ 的静态分析和形式证明框架
  • flow - flow 是 JavaScript 的静态类型检查器
  • SLAyer - SLAyer 是一种自动形式化验证工具,它使用分离逻辑来验证C 程序的内存安全性.
  • MemCAD - MemCAD 是用于形状分析的抽象解释器. MemCAD 可以验证处理复杂数据结构的 C 程序.
  • Camelot - Camelot 是一个模块化且完全可配置的 OCaml linter 和 stylechecker.
  • coq-of-ocaml - 从 OCaml 到 Coq 的翻译器,以正式验证 OCaml 代码.

Program analysis

  • BAP - BAP 是一个针对二进制程序的逆向工程和程序分析平台.
  • BinCat - BinCat 是一个二进制代码静态分析工具包.
  • cwe_checker - cwe_checker 在二进制可执行文件中发现易受攻击的模式.

Compilers and Compiler Tools

Concurrency

OCaml 中存在两个并发库:LwtAsync. 它们提供非常相似的功能,但在错误处理和内部实现细节方面做出截然不同的决定(有关更多详细信息,请参见下面的链接). Real World OCaml 使用 Async 但一个版本 code examples translated to Lwt 也可用.

还有一个正在进行的实验项目,使 OCaml 多处理器和多核感知在 OCaml multicore 叉.

Databases

Datetime

Developer Tools

  • Try OCaml – 在您的网络浏览器中试用 OCaml.
  • BetterOCaml – 一个高效、直观和跨平台的 Web IDE,您的 OCaml 代码可以在浏览器中解释和运行!
  • codingground – 在线编译和执行 OCaml 代码.
  • OCaml: Learn & Code iOS app - 从您的 iPhone/iPad/Mac 学习和执行 OCaml 代码.
  • Jupyter – 用于 Jupyter notebook 的 OCaml 内核.
  • utop – OCaml 的通用顶层,支持多行版本、历史、实时和上下文敏感的完成、颜色等.
  • ocamlformat - 用于格式化 OCaml 代码的命令行工具.
  • ocamlbrowser – 源代码和编译界面浏览器,使用 LablTk 编写. 包含在 ocaml <= 4.01 的标准发行版中,以及 ocaml >= 4.02 的 labltk 中.
  • ghim – 管理 Github Issues 的命令行工具.
  • OCaml Yeoman Generator – 用于构建 OCaml 模块的 Yeoman 生成器.

  • 外部函数接口

  • ctypes – 使用纯 OCaml 绑定到 C 库的库.
  • ocaml-main-program-in-c – 用于制作混合 C/Ocaml 二进制文件的示例构建系统,其中主程序在 C 中.
  • Modular foreign function bindings
  • Py.ml - Python 的 OCaml 绑定.
  • 编辑器集成
  • ocaml-lsp - 用于 OCaml 的 LSP 语言服务器,可与任何理解 LSP 的编辑器集成,例如 VSCode、Vim 和 Emacs.
  • merlin – Vim 和 Emacs 中 Ocaml 的上下文敏感完成.
  • tuareg - Emacs 的 OCaml 模式,可以在 Emacs 中运行顶层和调试器.
  • merlin-eldoc – Emacs 包通过 eldoc 提供 merlin 的功能.
  • vscode-ocaml – 提供 OCaml 语言支持的扩展 VSCode
  • OCaml Debugger – 提供 OCaml 调试器的扩展 VSCode
  • Sublime better ocaml – 用于 Sublime Text 的更好的 OCaml 模式.
  • ocp-index – 轻松访问已安装的 OCaml 库的接口信息. 提供诸如 ocp-browser 和 ocp-grep 之类的独立工具.
  • ocp-indent – OCaml 的缩进工具,可从 Emacs 和 Vim 等编辑器中使用.
  • 代码覆盖率
  • Bisect_ppx

Exercises and Short Examples

Formal Software Verification

  • Coq – Coq 是一个正式的证明管理系统. 它提供了一种形式化语言来编写数学定义、可执行算法和定理,以及用于机器检查证明的半交互式开发的环境.
  • Why3 – Why3 是一个用于演绎程序验证的平台. 它为规范和编程提供了丰富的语言,称为 WhyML,并依赖于自动化和交互式的外部定理证明器来满足验证条件.
  • Alt-Ergo – Alt-Ergo 是一个开源的 SMT 求解器,专门用于证明在程序验证的上下文中生成的数学公式.

General

Graphics

  • 2D
  • archimedes — 二维绘图库.
  • cairo2 — 绑定到开罗,一个二维矢量图形库. 与 lablgtk 很好地集成.
  • Vg – OCaml 的声明性二维矢量图形.
  • 3D
  • glMLite — OCaml 的 OpenGL 绑定. 提供一个(实验性的)功能 API. (homepage)
  • lablgl — OpenGL 接口. 与 lablgtk 很好地集成.
  • tgls — 精简绑定 OpenGL 3.{2,3},4.{0,1,2,3,4} 和 OpenGL ES {2,3}.

Internationalization

  • Camomile — OCaml 的 Unicode 库.
  • ocaml-m17n — OCaml 源代码的多语言化. 允许在 OCaml 源代码中使用 Unicode 标识符.
  • Uucd — OCaml 的 Unicode 字符数据库解码器.
  • Uucp — OCaml 的 Unicode 字符属性.
  • Uunf — OCaml 的 Unicode 文本规范化.
  • Uuseg — OCaml 的 Unicode 文本分割.
  • Uutf — OCaml 的非阻塞流式 Unicode 编解码器.

User Interface

  • lablgtk — OCaml 的 GTK2 和 GTK3 绑定以及用于定义 GUI 的各种高级工具.
  • lablqml – OCaml 的 QML Qt5 绑定.
  • labltk — Tcl/Tk GUI 框架的接口. 在 ocaml <= 4.01 的标准分布中.
  • TSDL – Tsdl 是一个 OCaml 模块,提供到跨平台 SDL 库的精简绑定.
  • Lambda-Term – Lambda-Term 是一个用于操作终端的跨平台库. 它为键、鼠标事件、颜色以及一组小部件提供了抽象,以编写类似 curses 的应用程序.
  • Notty - Notty 是 OCaml 的声明性终端库,围绕可组合图像的概念构建.
  • ocaml-linenoise - 独立的 OCaml 绑定到 linenoise,OCaml 中简单的高级 readline 功能.

Large Source Code Examples

  • Base - OCaml 的标准库
  • cil - C 中间语言
  • coq - 正式证明管理系统
  • Dark - 一种组合的语言、编辑器和基础架构,可以轻松构建后端
  • frama-c - 专门用于分析用 C 编写的源代码的平台
  • libguestfs - 用于访问和修改虚拟机磁盘映像的库和工具
  • Liquidsoap - 用于多媒体流媒体的瑞士军刀,尤其适用于 netradios 和 webtv
  • mirage - 为跨各种云计算和移动平台的安全、高性能网络应用构建 unikernel 的图书馆操作系统
  • MLDonkey - 跨平台多网络点对点守护进程
  • Oni2 - 本机、轻量级模态代码编辑器
  • pfff - 一个 OCaml API,用于编写静态分析、动态分析、代码可视化、代码导航或保持样式的源到源转换,例如源代码重构.
  • WHY3 - 演绎程序验证平台
  • xen-api - 配置和控制支持 Xen 的主机和资源池并协调池内资源的管理堆栈

Logging

  • dolog – 一个愚蠢的 OCaml 记录器.
  • Volt – Bolt OCaml 日志记录工具的变体.
  • Logs - Logs 为 OCaml 提供日志记录基础设施.

Machine Learning

Messaging

  • ocaml-zmq – 带有异步和 Lwt 包装器的 OCaml 的 ZeroMQ 绑定.
  • onanomsg – OCaml 的 nanomsg 绑定.
  • Kafka – Apache Kafka 的 OCaml 绑定.
  • AMQP – 用于 Async 和 Lwt 的 AMQP 客户端库.
  • MPI – OCaml 的消息传递接口绑定.
  • MQTT – MQTT pubsub 协议的 OCaml 实现.
  • capnp-ocaml – 用于 Cap'n Proto 序列化框架的 OCaml 代码生成器插件.

Metaprogramming

Metrics

  • prometheus – 用于 Prometheus 监控的 OCaml 客户端库.

Mobile Applications

Networking

  • HTTP 工具
  • ocaml-cohttp – 使用 Lwt 或 Async 的非常轻量级的 HTTP 服务器.
  • ocurl – OCaml bindings to libcurl.
  • httpaf – 用 OCaml 编写的高性能、内存高效且可扩展的 Web 服务器.
  • piaf - 完全用 OCaml 编写的 HTTP/1.X / HTTP/2 的客户端/服务器库.
  • ocaml-dns – DNS 协议的纯 OCaml 实现.
  • fluent-logger – OCaml 的 Fluentd 记录器.
  • charrua-unix - charrua-unix 是一个基于 Unix DHCP 守护进程 charrua-core.

Online Courses

Package Management

  • 分配
  • OPAM – 灵活的 Git 友好包管理器,支持多种编译器.
  • ocamlfind — 本地 OCaml 库管理器. 被大多数 OCaml 生态系统使用.
  • OCaml for Windows - 适用于 Windows 的 opam 存储库和实验版本(自 2021 年起弃用).
  • Diskuv OCaml - 适用于 Windows 的 Diskuv OCaml 发行版.
  • makorel – 轻松发布 OPAM 包.
  • esy - 使用 Reason/OCaml 进行本机开发的 package.json 工作流.

  • 构建工具

  • dune – 用于 OCaml(以前的 jbuilder)的可组合和自以为是的构建系统
  • Oasis - 在您的 OCaml 项目中集成配置、构建和安装系统的工具. 它有助于在您的构建系统中创建标准入口点,并允许外部工具轻松分析您的项目.
    • oasis2opam — 将 OASIS 元数据转换为 OPAM 包描述的工具.
  • obuild – Simple package build system for ocaml.
  • ocaml-makefile — 易于使用的 Makefile 用于中小型 OCaml 项目.
  • topkg — 使用 ocamlbuild 的 OPAM 感知打包系统.
  • Bazel - OCaml 规则 Bazel,谷歌的多语言和平台构建工具.

Parallelism

注:从易用到灵活排序.

  • 图书馆
  • Parmap — 提供易于使用的平行映射和折叠功能.
  • ForkWork — 一个简单的库,用于分叉子进程以在多个核心上执行工作.
  • Functory — 一个分布式计算库,它有助于以无缝方式分布式执行可并行计算.
  • Rpc.Parallel — 用于在机器集群上生成进程并在它们之间传递类型化消息的库.
  • Ocamlnet — 增强的系统平台库. 包含“netmulticore”库以根据需要在尽可能多的机器内核上计算任务.
  • Nproc – OCaml 的进程池实现.
  • Parany – 对独立项目进行并行计算,即使它们的数量是无限的.
  • Sklml – 用于 OCaml 程序的功能性并行骨架编译器和编程系统.
  • SPOC - 用于将密集计算卸载到并行加速器(多核 CPU、GPU 和其他与 GPGPU 框架兼容的加速器)的库和语法扩展.

  • 文章

  • What is the state of OCaml's parallelization abilities?

Printers helpers

Project Starter Templates

  • drom - drom 工具是 opam/dune 的包装器,旨在提供类似货物的用户体验.
  • spin - Reason 和 Ocaml 项目生成器
  • modern-ocaml - 使用现代工具的 ocaml 项目模板

Questions

Science and Technical Computing

  • biocaml – OCaml 生物信息学库http://biocaml.org .
  • bistro – 用于构建生物信息学管道的 OCaml 库.
  • lacaml - 用于 BLAS/LAPACK(高性能线性代数 Fortran 库)的 OCaml 绑定.
  • obandit - 用于多臂强盗的 OCaml 库.
  • onumerical – OCaml 的数字库.
  • oml - 用于一般数值工作的 OCaml 库.
  • ocephes - 绑定到常用的“C”特殊函数库.
  • slap - OCaml 中的线性代数库,具有针对矩阵运算的基于类型的静态大小检查.
  • tensorflow-ocaml – TensorFlow 的 OCaml 绑定.
  • owl - OCaml 数值库:密集和稀疏矩阵、线性代数、回归、数学和统计函数.

Regular Expressions

  • Re – 带有组合器的纯 OCaml 正则表达式库,支持多种格式(glob、posix、str ...)
  • ocaml-pcre – 绑定到 PCRE 库(perl 兼容的正则表达式)
  • Humane-re – Humane-re 试图为 90% 的正则表达式需求提供一个简单的界面,由 ocaml-re 提供
  • Tyre - Tire 是一组组合器,用于构建类型安全的正则表达式,允许自动提取和修改匹配组.

Security and Cryptography

  • ocaml-tls – 纯 OCaml 中的 TLS.
  • Digestif - OCaml 和 C 中的哈希算法(如 SHA 或 BLAKE2).
  • cryptokit – OCaml 的 Cryptokit 库提供了多种加密原语,可用于在安全敏感应用程序中实施加密协议.
  • nocoiner - 用于多方计算的承诺方案库,例如在线拍卖和赌博.
  • nocrypto – ocaml-tls 项目背后的小型加密库. 它被构建为易于使用,遵循函数式编程原则并能够在基于 Xen 的 unikernel 中运行.

> 注意:nocryptocryptokit 加密库之间的区别在以下博客文章中进行了描述: OCaml-TLS: building the nocrypto library core.

Semantic Technology

  • OCaml-RDF – OCaml 库,用于操作 RDF 图和执行 Sparql 查询.

Serialization

  • bencode — Bencode(.torrent 文件格式)读取器/写入器.
  • biniou – 可扩展的二进制数据格式,如 JSON 但速度更快.
  • cbor — OCaml 本机 CBOR 解码器/编码器.
  • jsonm — OCaml 的非阻塞流式 JSON 编解码器.
  • xmlm — 用于解码和编码 XML 数据格式的流式编解码器.
  • yojson — 针对 JSON 格式优化的解析和打印库.
  • sexplib – S 表达式解析器和打印机

System Programming

  • Mirage OS – Mirage 是一种编程框架,用于跨各种云计算和移动平台构建安全、高性能的网络应用程序.
  • ocaml-fat – 从 OCaml 读取和写入 FAT 格式的文件系统.
  • ocaml-git – 纯 OCaml 低级 git 绑定.
  • ocaml-vchan – “vchan”共享内存通信协议的纯 OCaml 实现.

  • 嵌入式系统

  • OMicroB - 设计用于在 AVR(例如 Arduino)微控制器上运行 OCaml 字节码的虚拟机.
  • OCaPIC - 用于 PIC18 微控制器的 OCaml 虚拟机.
  • ocaml-esp32 - ESP32 SoC 的编译器.

Testing

  • Alcotest - 一个轻量级和丰富多彩的测试框架.
  • OUnit – OUnit 是 OCaml 的单元测试框架. 它允许人们轻松地为 OCaml 代码创建单元测试. 它基于 HUnit,Haskell 的单元测试框架.
  • QCheck — QCheck 是一个属性测试库,灵感来自 Haskell 的 QuickCheck
  • iTeML (原名 qtest) — 支持内联编译指示以生成测试.
  • Kaputt — 全面的测试框架.
  • Pa_test — 通用内联测试宏.
  • TestSimple - 兼容的轻量级单元测试框架 Test Anything Protocol.
  • expect-test — 在 OCaml 中编写测试的框架,类似于 Cram, 由开发 JaneStreet.

Utilities

  • ocaml-cuid - 用于服务器可扩展性和数据库性能的抗冲突 ID.
  • Uuidm - Uuidm 是一个 OCaml 模块,根据 RFC 4122 实现 128 位通用唯一标识符版本 3、5(基于 MD5、SHA-1 哈希的名称)和 4(基于随机).

Web Development

  • 构架
  • Opium – 类似 Sinatra 的 OCaml 网络工具包.
  • Ocsigen Eliom – Eliom 是一个功能齐全的多层框架,用于将多平台 Web 和移动应用程序开发为 100% OCaml 分布式应用程序. 它还可以用于更传统的 Web 或移动应用程序:网站、单页应用程序、REST API 等.
  • Dream - OCaml 和 ReasonML 的 Tidy Web 框架
  • webmachine – OCaml 的 REST 工具包. OCaml webmachine 是 cohttp 之上的一个层,它实现了一个基于状态机的 HTTP 请求处理器. 它特别适合编写 RESTful API. 顾名思义,这是 webmachine 项目的 OCaml 端口.
  • incr_dom - 使用 Js_of_ocaml 构建动态网络应用程序的库
  • ocaml-vdom - OCaml 的 Elm 架构和 (V)DOM

  • 工具

  • COW – Web 上的 Caml (COW) 是一组解析器和语法扩展,可让您直接从 OCaml 代码操作 HTML、CSS、XML、JSON 和 Markdown.
  • Ocamlnet 有很多相关的网络图书馆—— Nethtml html解析器, Netasn1 对于 ASN.1 解析, Netencoding 对于 Base64、Quoted Printable、URL 编码和 HTML 转义, Netmime 用于 MIME 处理等.请参阅 list of 模块 在 Ocamlnet 的手册中.
  • tyxml — 构建有效(根据 W3C 规范)Html 和 Svg 树的库.
  • js_of_ocaml – Js_of_ocaml 是 OCaml 字节码到 Javascript 的编译器. 它使得在 Web 浏览器中运行 Ocaml 程序成为可能.
  • ReScript - ReScript 是一种强类型语言,可编译为高效且人类可读的 JavaScript.
  • ocaml-uri – RFC3986 URI 解析库.
  • Goji – 用于 JavaScript 库的 OCaml 绑定生成器.
  • Syndic – RSS 和 Atom 提要解析
  • ocaml-mustache – OCaml 中的 mustache.js 无逻辑模板.
  • atdjs – OCaml/js_of_ocaml 的 atd 代码生成器.
  • jingoo – OCaml 模板引擎几乎与 jinja2 兼容.
  • dispatch – 客户端和服务器端应用程序的基于路径的调度.
  • Lambda Soup - 使用 CSS 选择器进行功能性 HTML 抓取和操作,就像 Python 的 Beautiful Soup.
  • Markup.ml - 错误恢复流式 HTML5 和 XML 解析器、序列化器.
  • gen_js_api - gen_js_api 旨在简化为 Javascript 库创建 OCaml 绑定.
  • routes - OCaml/ReasonML 网络应用程序的类型化路由.

  • 开源项目

  • Cumulus – 黑客新闻,例如使用 OCaml 框架 Ocsigen 的网站

受 awesome projects 系列的启发. 发现 more awesomeness ✨.