OCaml

很棒的OCaml Build Status =============

> _ 在掌握OCaml的过程中,您将需要的一切. _

精选的精选OCaml工具,框架,库和文章的参考清单. 此外,还有一些免费提供的收藏 books, paperspresentations.

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

有关现代OCaml开发工作流程的快速介绍,请参阅 OCaml for the impatient 指南.

您最喜欢的包装没有列出? 叉和 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 –轻量级的模块化标准库扩展,字符串库和各种库(bigarray,unix等的接口). BSD许可证.

Benchmarking

Blogs

Books

  • More OCaml: Algorithms, Methods, and Diversions –在More OCaml中,约翰·惠灵顿(John Whitington)曲折地浏览了OCaml的函数式编程,介绍了各种语言功能并描述了一些经典算法. 本书最后有一个处理PDF文件生成的大型示例. 每章都有问题,以及有效的答案和提示.
  • How to Think Like a (Functional) Programmer 艾伦·唐尼(Allen Downey)和尼古拉斯·蒙耶(Nicholas Monje)撰写的-《如何像计算机科学家一样思考》是一本基于OCaml语言的入门编程教科书. 它是Allen Downey编写的Think Python的修改版本. 它适用于编程的新手,以及那些了解一些编程但想在面向功能的范式中学习编程的人,或者只是想学习OCaml的人.
  • OCaml from the Very Beginning 由J. Whitington撰写-OCaml从一开始就将吸引新的程序员,以及经验丰富的渴望探索功能语言(例如OCaml)的程序员.
  • Pearls of Functional Algorithm Design 由理查德·伯德(Richard Bird)撰写-总结了函数编程世界中的30个难题. 尽管是针对Haskell的,但算法问题却非常有趣,尝试在OCaml中解决它们也有助于功能编程的思考. OCaml中的部分解决方案是 here.
  • Real World OCaml 由Y. Minsky,A.Madhavapeddy和J. Hickey编写-面向大众的函数式编程.
  • Unix System Programming in OCaml 由X. Leroy和D.Rémy撰写– Unix系统编程简介,重点是进程之间的通信.
  • Using, Understanding, and Unraveling OCaml –本书描述了OCaml语言及其强大的类型系统背后的理论基础.
  • Purely Functional Data Structures -这是针对FP世界中各种数据结构的第一本或唯一一本书籍. 必读的.
  • OCaml for Scientists -乔恩·哈罗普(Jon Harrop).
  • Functional Programming in OCaml: A Principled Approach -康奈尔大学CS 3110数据结构和功能编程教科书.

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程序.

Program analysis

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

Compilers and Compiler Tools

-语言和编译器: - cDuce -cDuce是一种具有创新功能的现代XML面向功能语言. - Compcert C Compiler -它是C编译器,支持大多数ISO C90和C99 / ANSI C功能. - Eff Programming Language -Eff是一种功能语言,不仅具有异常处理程序,而且还具有其他计算效果(例如状态或I / O)的处理程序. - Hack Programming Language - Haxe Programming Language - Neko Programming Language -最初,编译器是用OCaml编写的. - Mezzo Programming Language -Mezzo是ML传统中的一种编程语言,它特别强调对别名的控制和对可变内存的访问. - OCaml-Java -OCaml到Java字节码编译器. - Opa Programming Language - Rhine –用OCaml编写的有关LLVM的Lisp. - Rust Programming Language -最初在引导前用OCaml编写. - Quick C-- Target Language -现在这是一个失败的项目. Github Repo. Alternative website. - tis-interpreter -在标准C语言编写的程序中发现细微错误的解释器

  • Reason -Facebook OCaml的友好语法和工具链.
  • RaML -资源感知ML(RaML)是一种工具,可以自动和静态地计算OCaml程序的资源使用范围.

-解析器和词法生成器: - Opal –用于OCaml的独立式Monadic解析器组合器. - Sedlex 是现代的,与编码无关的(阅读:支持Unicode的)词法分析器生成器(基于ppx的后继生成器) ulex.) - Menhir – Menhir是OCaml的LR(1)解析器生成器. -看 ocaml-parsing 有关使用Menhir和Sedlex生成有用的解析器的更清晰示例, -...和 Obelisk,一个精巧的项目,可为您的语法生成可读的LaTeX,HTML或纯文本EBNF样式的文档. - ocamllex/ocamlyacc – OCaml的lex和yacc实现. - Angstrom -解析器组合器,旨在提高速度和内存效率 -文章: - Kaleidoscope: Implementing a Language with LLVM in Objective Caml¶

Concurrency

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

-图书馆: - Lwt — OCaml的合作线程库. - Async —与Core库一起使用的monadic并发库. -文章: - The blog post that introduced Async - A user gives up on Async - Cooperative Concurrency in OCaml: A Core.Std.Async Example.

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

Databases

-绑定 - Dbm —绑定到NDBM / GDBM Unix“数据库”. - Mongo.ml – Mongodb的OCaml驱动程序 - PG'OCaml —纯OCaml中到PostgreSQL的类型安全接口. - ppx_pgsql –使用PG'OCaml的嵌入式SQL查询的语法扩展. - PostgreSQL-OCaml —通过C API(libpq)到PostgreSQL的接口. - SQLite3 — OCaml绑定到SQLite3数据库. - Sqlite3EZ —用于SQLite3的精简包装,具有简化的界面. - ocaml-redis – OCaml的Redis绑定. - mysql –绑定到libmysqlclient以与MySQL数据库交互. - mysql_protocol –使用Bitstring库实现MySQL协议. -新实现 - Irmin —遵循与Git相同的设计原则的分布式数据库. - Obigstore —在LevelDB上具有类似BigTable数据模型的数据库. - RunOrg -这是用OCaml编写的WIP数据库服务器. -叠加 - Sequoia -Sequoia是MySQL / MariaDB和PostgreSQL的类型安全查询构建器 - Macaque —猕猴是使用PG'OCaml之上的理解功能进行安全灵活的数据库查询的库. - ORM — ORM for SQLite. - Caqti -合作关系数据访问 -文章: - Implementing the Binary Memcached Protocol with Ocaml and Bitstring - Interfacing OCaml and PostgreSQL with Caqti

Datetime

Developer Tools

  • Try OCaml –在您的Web浏览器中尝试OCaml.
  • codingground –在线编译并执行OCaml代码.
  • Jupyter – Jupyter笔记本电脑的OCaml内核.
  • utop – OCaml的通用顶层,支持多行版本,历史记录,实时和上下文相关的补全,颜色等.
  • ocamlformat -格式化OCaml代码的命令行工具.
  • ocamlbrowser –使用LablTk编写的源代码和编译接口浏览器. 包含在ocaml <= 4.01的标准发行版中,以及包含在labml> = 4.02的labltk中.
  • ghim –用于管理Github问题的命令行工具.
  • OCaml Yeoman Generator –支架式OCaml模块的Yeoman发电机.

-外部功能接口: - ctypes –用于使用纯OCaml绑定到C库的库. - ocaml-main-program-in-c –用于制作混合C / Ocaml二进制文件的示例构建系统,其中主程序位于C中. - Modular foreign function bindings - Py.ml -适用于Python的OCaml绑定. -编辑器集成: - merlin – Vim和Emacs中Ocaml的上下文相关完成. - tuareg -用于Emacs的OCaml模式,可以在Emacs中运行顶层和调试器. - merlin-eldoc – Emacs软件包,可通过eldoc提供merlin的功能. - vscode-ocaml –为OCaml语言提供支持的扩展 VSCode - OCaml Debugger –为OCaml调试器提供扩展 VSCode - Sublime better ocaml –更好的OCaml模式用于Sublime Text. - Sublime text package - ocp-index –轻松访问已安装的OCaml库的接口信息. 提供独立工具,例如ocp-browser和ocp-grep. - ocp-browser –小型的基于ncurses的API和文档浏览器. - ocp-index-top –用于使用ocp-index查找文档的顶级指令. - Sublime text package - ocp-indent –用于OCaml的缩进工具,可在Emacs和Vim等编辑器中使用. - Vim plugin. -代码覆盖率: - Bisect_ppx

Exercises

Formal Software Verification

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

General

Graphics

- 2D - archimedes — 2D绘图库. - cairo2 —绑定到2D矢量图形库Cairo. 与lablgtk很好地集成. - Vg – OCaml的声明性2D矢量图形. - 3D - glMLite — OCaml的OpenGL绑定. 提供(实验)功能性API. - 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绑定,具有各种高级功能来定义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中的简单高级读取行功能.

Logging

  • dolog –愚蠢的OCaml记录器.
  • Volt – Bolt OCaml日志记录工具的变体.
  • Logs -日志为OCaml提供了日志记录基础结构.

Machine Learning

-图书馆 - Owl -具有神经网络,算法差异化和ONNX支持的科学图书馆. - Object detection convolutional neural network with OCaml (based on Owl). - PyTorch bindings -PyTorch的OCaml绑定. -文章 - Deep Learning with OCaml (PyTorch bindings). - Transfer Learning with OCaml (PyTorch bindings). - Reinforcement Learning with OCaml (PyTorch bindings).

Messaging

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

Metaprogramming

-文章: - A Guide to Extension Points in OCaml - Extension Points, or how OCaml is becoming more like Lisp - Syntax extensions without Camlp4: let's do it! - Reading Camlp4 – Ambassador to the Computers -语法扩展: - ppx_import –导入是一种语法扩展,它允许从其他已编译的接口文件中提取类型或签名. - ppx_string_interpolate –一个简单的ppx过滤器,用于支持字符串插值,例如[%str“ foo的值为$(foo)”]. - ppx_monad – OCaml的Monad语法扩展. - ppx_deriving_yojson –用于OCaml的Yojson编解码器生成器. -工具和语言扩展: - MetaOCaml –用于多阶段编程的OCaml方言. - Fan – Fan是OCaml的编译时元编程系统,其最初灵感来自Camlp4. 它是OCaml和Lispy宏的组合. 它与OCaml共享相同的具体语法. - camlp5 -Camlp5是OCaml的预处理器漂亮打印机. - camlp4 -Camlp4是标准OCaml发行版的一部分,与Camlp5不同.

Metrics

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

Mobile Applications

-文章: - OCaml on iOS 7 Released - OCaml + Cordova = more secured, typed and hybrid mobile applications -绑定: - Cordova plugins – Cordova插件的绑定列表. 可以访问OCaml中的本机设备组件,如加速度计,SMS,地理位置等.

Networking

- HTTP工具: - ocaml-cohttp –使用Lwt或Async的非常轻量级的HTTP服务器. - ocurl – OCaml绑定到libcurl. - httpaf –用OCaml编写的高性能,内存高效且可扩展的Web服务器. - ocaml-dns – DNS协议的纯OCaml实现. - fluent-logger – OCaml的流畅记录器. - charrua-unix -charrua-unix是基于以下内容的Unix DHCP守护程序 charrua-core.

Online Courses

Package Management

-分布: - OPAM –具有多种编译器支持的灵活的Git友好软件包管理器. - ocamlfind —本地OCaml库管理器. 被大多数OCaml生态系统使用. - OCaml for Windows -适用于Windows的opam存储库和实验版本. - makorel –轻松发布OPAM软件包. - esy -用于使用Reason / OCaml进行本机开发的package.json工作流程.

-构建工具: - Oasis -在OCaml项目中集成配置,构建和安装系统的工具. 它有助于在构建系统中创建标准入口点,并允许外部工具轻松分析项目. - oasis2opam —用于将OASIS元数据转换为OPAM软件包描述的工具. - obuild –简单的ocaml软件包构建系统. - dune –用于OCaml的可组合且自以为是的构建系统(以前的jbuilder) - jenga – Jane Street的Monadic构建系统. - ocamlbuild —编译器随附的构建系统. - ocaml-makefile —适用于中小型OCaml项目的易于使用的Makefile. - topkg —使用ocamlbuild的可识别OPAM的包装系统. - Namespaces -ocamlbuild插件,可将您的目录树转换为嵌套模块. - Bazel - OCaml rules for Bazel,这是Google的多语言和平台构建工具.

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?

Questions

Science and Technical Computing

  • biocaml – OCaml生物信息学图书馆 http://biocaml.org .
  • guizmin –用于建立生物信息学管道的OCaml库.
  • lacaml -用于BLAS / LAPACK的OCaml绑定(高性能线性代数Fortran库).
  • obandit - OCaml library for multi-armed bandits.
  • 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 –人性化的尝试为90%的正则表达式提供简单的界面感谢ocaml-re
  • Tyre -Tire是一组组合器,用于构建类型安全的正则表达式,从而允许自动提取和修改匹配的组.

Security and Cryptography

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

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

Semantic Technology

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

Serialization

  • bencode — Bencode(.torrent文件格式)读取器/写入器.
  • biniou –可扩展的二进制数据格式,例如JSON,但速度更快.
  • 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.

Utilities

  • ocaml-cuid -用于服务器可伸缩性和数据库性能的防冲突ID.

Web Development

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

-工具: - COW – Web上的Caml(COW)是一组解析器和语法扩展,可让您直接从OCaml代码中操作HTML,CSS,XML,JSON和Markdown. - Ocamlnet 有许多相关的网络库- Nethtml html解析器 Netasn1 对于ASN.1解析, Netencoding 对于Base64,带引号的可打印内容,URL编码和HTML转义, Netmime 用于MIME处理等.请参见 modules 在Ocamlnet的手册中. - tyxml —用于构建有效的(根据W3C规范)Html和Svg树的库. - js_of_ocaml – Js_of_ocaml是OCaml字节码到Javascript的编译器. 这样就可以在Web浏览器中运行Ocaml程序. - commonjs_of_ocaml -从js_of_ocaml项目轻松导入和导出CommonJS模块. - BuckleScript -BuckleScript是OCaml的后端,可生成可调试的Javascript. 它使OCaml能够无缝集成Java平台. - 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 – Path-based dispatching for client- and server-side applications. - Lambda Soup -使用CSS选择器进行功能性HTML抓取和操作,如Python的Beautiful Soup. - Markup.ml -错误恢复流HTML5和XML解析器,序列化器. - gen_js_api -gen_js_api旨在简化Java库的OCaml绑定的创建. - routes -OCaml / ReasonML Web应用程序的类型化路由.

-开源项目: - Cumulus –带有OCaml框架Ocsigen的黑客新闻(如网站)


受到很棒的项目线的启发. 发现 more awesomeness :sparkles:.