欢迎大家赞助一杯啤酒🍺 我们准备了下酒菜:Formal mathematics/Isabelle/ML, Formal verification/Coq/ACL2, C++/F#/Lisp
OCaml
来自开放百科 - 灰狐
(版本间的差异)
小 (→链接) |
小 |
||
(未显示1个用户的75个中间版本) | |||
第1行: | 第1行: | ||
{{SeeWikipedia}} | {{SeeWikipedia}} | ||
− | + | OCaml | |
− | + | [[image:OCaml-Logo.png|right]] | |
+ | |||
+ | ==简介== | ||
+ | OCaml,最早称为 Objective Caml,是 Caml 编程语言的主要实现,由 Xavier Leroy,Jérôme Vouillon,Damien Doligez,Didier Rémy 及其他人于1996年创立,OCaml 是开放源代码项目(LGPLv2.1)。 | ||
+ | |||
+ | OCaml 一般用于编译器、程序分析、金融交易、虚拟机等方面。它是 Jane Street 的核心语言,重点是用它写实时交易系统会很赚钱。 | ||
[[F Sharp|F#]],Microsoft [[.NET]]平台上 OCaml 风格的编程语言。 | [[F Sharp|F#]],Microsoft [[.NET]]平台上 OCaml 风格的编程语言。 | ||
− | == | + | [[ML]] 家族的两个主要的方言是 Standard ML 和 OCaml。 |
− | *[https://protz.github.io/ocaml-installer/ OCaml on Windows] | + | |
+ | ==功能== | ||
+ | OCaml拥有的语言特性: | ||
+ | *垃圾回收(garbage collection) | ||
+ | *首类函数(first-class functions)可以像常规的值一样传递 | ||
+ | *静态类型检查(static type-checking) | ||
+ | *参数化多态(parametric polymorphism)允许构造抽象涵盖不同数据类型,类似 [[C Sharp|C#]] 泛型和 [[C++]] 模板特性 | ||
+ | *支持不可变编程(immutable programming) | ||
+ | *自动类型推断(automaticc type inference) | ||
+ | *通过[https://v2.ocaml.org/manual/gadts-tutorial.html 通用代数数学类型(Generalized algebraic datatypes)GADTs] 和模式匹配(pattern matching)定义和管理复杂数据结构 | ||
+ | |||
+ | ==指南== | ||
+ | [https://ocamlverse.github.io/ OCamlverse] Documenting everything about OCaml | ||
+ | |||
+ | Windows | ||
+ | [https://protz.github.io/ocaml-installer/ OCaml on Windows] | ||
+ | |||
+ | 完成第一个OCaml程序,Hello World!,创建test.ml文件,包含: | ||
+ | let _=print_endline "hello world!" | ||
+ | 编译 test.ml | ||
+ | ocamlc test.ml -o test // Byte-code编译 | ||
+ | 或 ocamlopt test.ml -o test // Native-code编译 | ||
+ | ./test | ||
+ | REPL | ||
+ | $ ocmal 或 $ utop // eval $(opam config env) | ||
+ | utop # let () = print_endline "Hello OCaml World!";; | ||
+ | Hello OCaml World! | ||
+ | 类型 | ||
+ | utop # (1, "str1", 2.);; // 元组tuple | ||
+ | - : int * string * float = (1, "str1", 2.) | ||
+ | utop # [1; 2; 3];; // 列表list | ||
+ | - : int list = [1; 2; 3] | ||
+ | utop # [|1; 2; 3|];; 数组array | ||
+ | - : int array = [|1; 2; 3|] | ||
+ | utop # type vec2 = { x : float; y : float };; //记录record | ||
+ | type vec2 = { x : float; y : float; } | ||
+ | |||
+ | ==常见问题== | ||
+ | Error: Unbound module Core | ||
+ | |||
+ | vim ~/.ocamlinit 加入以下内容,并重新运行utop | ||
+ | #use "topfind" | ||
+ | #camlp4o | ||
+ | #thread | ||
+ | #require "core.top" | ||
+ | #require "core.syntax" | ||
+ | |||
+ | -bash: ocamlfind: command not found | ||
+ | eval $(opam config env) | ||
==项目== | ==项目== | ||
− | *[https:// | + | [https://github.com/rizo/awesome-ocaml Awesome OCaml] [[image:awesome.png]] |
− | *[https://github.com/ | + | [[文件:FStarLang-logo.png|right|FStarLang]] |
+ | *[https://github.com/ocaml/ocaml OCaml @ GitHub] | ||
+ | *[https://ocamlverse.github.io/content/ecosystem.html OCaml ecosystem] [https://ocamlverse.github.io/content/compilers.html Compilers, Typecheckers, and Parsers] [https://ocamlverse.github.io/content/security.html Security and Cryptography] [https://ocamlverse.github.io/content/static_analysis.html Static Analysis] [https://ocamlverse.github.io/content/testing.html Testing] [https://ocamlverse.github.io/content/software_verification.html Formal Software Verification] [https://ocamlverse.github.io/content/protocols.html Protocols] | ||
+ | *[https://forge.ocamlcore.org/ OCaml Forge] Deprecating the Forge in 2017 | ||
+ | *[https://github.com/OCamlPro OCamlPro] | ||
+ | *[https://github.com/ocamllabs/ OCaml Labs] | ||
+ | *[[F*]] A Proof-oriented Programming Language | ||
+ | *[https://github.com/jrh13/hol-light/ The HOL Light theorem prover] | ||
+ | *[https://dune.build/ Dune] is a build system for OCaml projects with support for [[Reason]] and [[Coq]] | ||
+ | *[https://github.com/ocsigen Ocsigen] Multi-tier programming for Web and mobile apps | ||
+ | *[https://github.com/BinaryAnalysisPlatform/bap Binary Analysis Platform] | ||
+ | *[[Coq]] [https://github.com/mit-plv Programming Languages and Verification Group at MIT CSAIL] | ||
+ | *[https://github.com/savonet/liquidsoap Liquidsoap] Audio & Video Streaming Language | ||
+ | *[https://github.com/owlbarn Owl] - OCaml Scientific Computing | ||
+ | *[https://github.com/mirage MirageOS] 一个用于构建安全、高性能网络应用的库(library)操作系统 | ||
+ | *[https://github.com/rescript-lang/rescript-compiler ReScript Compiler] | ||
+ | *[[Reason]] 是一门基于 OCaml 强大类型系统的编程语言,并拥有让 [[JavaScript]] 和 C 语言家族开发者所熟悉的语法。 | ||
+ | *[https://github.com/esy/esy esy] Easy package management for native Reason, OCaml and more | ||
+ | *[https://aeternity.com/#sophia aeternity Sophia] is a Ocaml-like language with syntax mostly resembling that of Reason. | ||
+ | *[https://github.com/mirage/irmin Irmin]数据库 | ||
+ | *[https://github.com/mirage/ocaml-cohttp ocaml-cohttp] 非常轻量的HTTP server | ||
+ | *[https://github.com/mirage/ocaml-dns ocaml-dns] DNS协议的OCaml实现 和 [https://github.com/mirage/jitsu jitsu] DNS Server | ||
*[https://github.com/docker/datakit datakit] from [[Docker]] team. | *[https://github.com/docker/datakit datakit] from [[Docker]] team. | ||
*[https://github.com/docker/vpnkit vpnkit] from [[Docker]] team. | *[https://github.com/docker/vpnkit vpnkit] from [[Docker]] team. | ||
− | |||
*[https://github.com/realworldocaml/ Real World OCaml] | *[https://github.com/realworldocaml/ Real World OCaml] | ||
*[https://github.com/ocsigen ocsigen] | *[https://github.com/ocsigen ocsigen] | ||
*[[Haxe]] | *[[Haxe]] | ||
− | + | *[https://github.com/moby/datakit DataKit] -- Orchestrate applications using a Git-like dataflow | |
+ | *[https://github.com/bcpierce00/unison Unison File Synchronizer] | ||
+ | *[https://blog.janestreet.com/deep-learning-experiments-in-ocaml/ Deep learning experiments in OCaml] [https://github.com/LaurentMazare/tensorflow-ocaml TensorFlow OCaml bindings] | ||
+ | *[https://github.com/input-output-hk/qeditas-ledgertheory Ledger Theory] Coq开发的轻量级加密账本理论 | ||
+ | Jane Street 开源的 Ocaml 项目 | ||
+ | *[https://github.com/janestreet Jane Street @ GitHub] | ||
+ | *[https://github.com/janestreet/core Jane Street Capital's standard library overlay] | ||
+ | *[https://github.com/janestreet/hardcaml Hardcaml] is an OCaml library for designing hardware. | ||
+ | *[https://github.com/janestreet/incr_dom Incr_dom]: a library for writing dynamic web-apps [https://blog.janestreet.com/a-tutorial-for-building-web-applications-with-incrdom/ A tutorial for building web applications with Incr_dom] | ||
+ | Facebook 开源的 OCaml 项目 | ||
+ | *[https://github.com/facebook/hhvm/tree/master/hphp/hack Hack] is a programming language for [[HHVM]] | ||
*[https://github.com/facebook/flow flow] Adds static typing to JavaScript to improve developer productivity and code quality. | *[https://github.com/facebook/flow flow] Adds static typing to JavaScript to improve developer productivity and code quality. | ||
*[https://github.com/facebook/reason Reason]: Build Systems Rapidly | *[https://github.com/facebook/reason Reason]: Build Systems Rapidly | ||
第25行: | 第108行: | ||
*[https://github.com/facebook/pfff pfff] Tools for code analysis, visualizations, or style-preserving source transformation. | *[https://github.com/facebook/pfff pfff] Tools for code analysis, visualizations, or style-preserving source transformation. | ||
− | == | + | ==文档== |
− | *[https:// | + | *[https://ocaml.xyz/tutorial/ Owl Online Tutorials] FUNCTIONAL PROGRAMMING MEETS DATA SCIENCE |
+ | *[http://docs.huihoo.com/cufp/2004-2008/2008/slides/MadhavapeddyAnil.pdf Xen and the art of OCaml] | ||
+ | *[http://docs.huihoo.com/cufp/2004-2008/2007/slides/XavierLeroy.pdf Some uses of Caml in industry] | ||
+ | *[http://docs.huihoo.com/cufp/2004-2008/2006/slides/HowardMansell.pdf Why FP matters to Credit Suisse] | ||
+ | *[http://docs.huihoo.com/cufp/2004-2008/2006/slides/YaronMinsky.pdf Caml Trader:Adventures of a functional programmer on Wall Street] | ||
==书籍== | ==书籍== | ||
− | *[https://www.amazon.cn/gp/product/B013W98L4C Real World OCaml] | + | *[https://www.amazon.cn/gp/product/B013W98L4C Real World OCaml] [https://realworldocaml.org/ 在线阅读] |
*[http://book.huihoo.com/developing-applications-with-objective-caml/ Developing applications with Objective Caml] | *[http://book.huihoo.com/developing-applications-with-objective-caml/ Developing applications with Objective Caml] | ||
+ | *[https://www.amazon.com/gp/product/3030976440 OCaml Scientific Computing] | ||
+ | *[https://www.amazon.com/gp/product/0957671113 More OCaml: Algorithms, Methods & Diversions] | ||
− | == | + | ==开发== |
+ | *[https://github.com/ocaml/ocaml/blob/trunk/HACKING.adoc Hacking the compiler] | ||
+ | *[https://github.com/ocamllabs/compiler-hacking/wiki/Compiler-or-Language-projects-to-work-on Compiler or Language projects to work on] | ||
*[https://www.zhihu.com/people/hongbo_zhang 张宏波] 前[https://github.com/ocaml OCaml编译器]核心作者, [https://github.com/bloomberg/bucklescript BuckleScript] 作者。 | *[https://www.zhihu.com/people/hongbo_zhang 张宏波] 前[https://github.com/ocaml OCaml编译器]核心作者, [https://github.com/bloomberg/bucklescript BuckleScript] 作者。 | ||
+ | |||
+ | ==课程== | ||
+ | *[https://www.cs.cornell.edu/courses/cs3110/2014sp/lecture_notes.php CS 3110 Spring 2014 :: Data Structures and Functional Programming] | ||
==用户== | ==用户== | ||
*[[Facebook]] | *[[Facebook]] | ||
− | *[https:// | + | *[https://esper.com/ Esper] |
*[https://blogs.janestreet.com/why-ocaml/ Jane Street是OCaml最大的用户] [https://www.zhihu.com/search?type=content&q=Jane+Street 知乎上的一些信息] [https://github.com/janestreet at github] [https://www.quora.com/Why-doesnt-Jane-Street-switch-from-Ocaml-to-F Why doesn't Jane Street switch from Ocaml to F#?] | *[https://blogs.janestreet.com/why-ocaml/ Jane Street是OCaml最大的用户] [https://www.zhihu.com/search?type=content&q=Jane+Street 知乎上的一些信息] [https://github.com/janestreet at github] [https://www.quora.com/Why-doesnt-Jane-Street-switch-from-Ocaml-to-F Why doesn't Jane Street switch from Ocaml to F#?] | ||
*[https://github.com/xapi-project/ Citrix] | *[https://github.com/xapi-project/ Citrix] | ||
第46行: | 第140行: | ||
<gallery> | <gallery> | ||
image:lexifi-ide.png|LexiFi IDE | image:lexifi-ide.png|LexiFi IDE | ||
+ | image:owl-architecture.png|owl架构 | ||
+ | image:ocaml-owl-library.png|owl库 | ||
+ | image:ocaml-compiler-pipeline.png|OCaml编译器 | ||
</gallery> | </gallery> | ||
==链接== | ==链接== | ||
*[https://ocaml.org/ OCaml官网] | *[https://ocaml.org/ OCaml官网] | ||
− | |||
*[https://ocaml.org/community/planet/ OCaml Planet] | *[https://ocaml.org/community/planet/ OCaml Planet] | ||
+ | *[https://blog.janestreet.com/using-ocaml-to-drive-a-raspberry-pi-robot-car/ Using OCaml to drive a Raspberry Pi robot car] | ||
*[https://ocaml.org/learn/tutorials/index.zh.html OCaml中文教程] | *[https://ocaml.org/learn/tutorials/index.zh.html OCaml中文教程] | ||
− | *[https | + | *[https://caml.inria.fr/ The Caml language] |
− | + | ||
*http://docs.huihoo.com/ocaml/ | *http://docs.huihoo.com/ocaml/ | ||
*http://download.huihoo.com/ocaml/ | *http://download.huihoo.com/ocaml/ | ||
第63行: | 第159行: | ||
[[category:OCaml]] | [[category:OCaml]] | ||
[[category:ML]] | [[category:ML]] | ||
+ | [[category:lambda]] | ||
+ | [[category:Huihoo Foundation]] |
2022年10月19日 (三) 02:33的最后版本
您可以在Wikipedia上了解到此条目的英文信息 OCaml Thanks, Wikipedia. |
OCaml
目录 |
[编辑] 简介
OCaml,最早称为 Objective Caml,是 Caml 编程语言的主要实现,由 Xavier Leroy,Jérôme Vouillon,Damien Doligez,Didier Rémy 及其他人于1996年创立,OCaml 是开放源代码项目(LGPLv2.1)。
OCaml 一般用于编译器、程序分析、金融交易、虚拟机等方面。它是 Jane Street 的核心语言,重点是用它写实时交易系统会很赚钱。
F#,Microsoft .NET平台上 OCaml 风格的编程语言。
ML 家族的两个主要的方言是 Standard ML 和 OCaml。
[编辑] 功能
OCaml拥有的语言特性:
- 垃圾回收(garbage collection)
- 首类函数(first-class functions)可以像常规的值一样传递
- 静态类型检查(static type-checking)
- 参数化多态(parametric polymorphism)允许构造抽象涵盖不同数据类型,类似 C# 泛型和 C++ 模板特性
- 支持不可变编程(immutable programming)
- 自动类型推断(automaticc type inference)
- 通过通用代数数学类型(Generalized algebraic datatypes)GADTs 和模式匹配(pattern matching)定义和管理复杂数据结构
[编辑] 指南
OCamlverse Documenting everything about OCaml
Windows OCaml on Windows
完成第一个OCaml程序,Hello World!,创建test.ml文件,包含:
let _=print_endline "hello world!"
编译 test.ml
ocamlc test.ml -o test // Byte-code编译 或 ocamlopt test.ml -o test // Native-code编译 ./test
REPL
$ ocmal 或 $ utop // eval $(opam config env) utop # let () = print_endline "Hello OCaml World!";; Hello OCaml World!
类型
utop # (1, "str1", 2.);; // 元组tuple - : int * string * float = (1, "str1", 2.) utop # [1; 2; 3];; // 列表list - : int list = [1; 2; 3] utop # [|1; 2; 3|];; 数组array - : int array = [|1; 2; 3|] utop # type vec2 = { x : float; y : float };; //记录record type vec2 = { x : float; y : float; }
[编辑] 常见问题
Error: Unbound module Core
vim ~/.ocamlinit 加入以下内容,并重新运行utop
#use "topfind" #camlp4o #thread #require "core.top" #require "core.syntax"
-bash: ocamlfind: command not found
eval $(opam config env)
[编辑] 项目
- OCaml @ GitHub
- OCaml ecosystem Compilers, Typecheckers, and Parsers Security and Cryptography Static Analysis Testing Formal Software Verification Protocols
- OCaml Forge Deprecating the Forge in 2017
- OCamlPro
- OCaml Labs
- F* A Proof-oriented Programming Language
- The HOL Light theorem prover
- Dune is a build system for OCaml projects with support for Reason and Coq
- Ocsigen Multi-tier programming for Web and mobile apps
- Binary Analysis Platform
- Coq Programming Languages and Verification Group at MIT CSAIL
- Liquidsoap Audio & Video Streaming Language
- Owl - OCaml Scientific Computing
- MirageOS 一个用于构建安全、高性能网络应用的库(library)操作系统
- ReScript Compiler
- Reason 是一门基于 OCaml 强大类型系统的编程语言,并拥有让 JavaScript 和 C 语言家族开发者所熟悉的语法。
- esy Easy package management for native Reason, OCaml and more
- aeternity Sophia is a Ocaml-like language with syntax mostly resembling that of Reason.
- Irmin数据库
- ocaml-cohttp 非常轻量的HTTP server
- ocaml-dns DNS协议的OCaml实现 和 jitsu DNS Server
- datakit from Docker team.
- vpnkit from Docker team.
- Real World OCaml
- ocsigen
- Haxe
- DataKit -- Orchestrate applications using a Git-like dataflow
- Unison File Synchronizer
- Deep learning experiments in OCaml TensorFlow OCaml bindings
- Ledger Theory Coq开发的轻量级加密账本理论
Jane Street 开源的 Ocaml 项目
- Jane Street @ GitHub
- Jane Street Capital's standard library overlay
- Hardcaml is an OCaml library for designing hardware.
- Incr_dom: a library for writing dynamic web-apps A tutorial for building web applications with Incr_dom
Facebook 开源的 OCaml 项目
- Hack is a programming language for HHVM
- flow Adds static typing to JavaScript to improve developer productivity and code quality.
- Reason: Build Systems Rapidly
- Infer is a static analysis tool for Java, Objective-C and C, written in OCaml.
- pfff Tools for code analysis, visualizations, or style-preserving source transformation.
[编辑] 文档
- Owl Online Tutorials FUNCTIONAL PROGRAMMING MEETS DATA SCIENCE
- Xen and the art of OCaml
- Some uses of Caml in industry
- Why FP matters to Credit Suisse
- Caml Trader:Adventures of a functional programmer on Wall Street
[编辑] 书籍
- Real World OCaml 在线阅读
- Developing applications with Objective Caml
- OCaml Scientific Computing
- More OCaml: Algorithms, Methods & Diversions
[编辑] 开发
[编辑] 课程
[编辑] 用户
- Esper
- Jane Street是OCaml最大的用户 知乎上的一些信息 at github Why doesn't Jane Street switch from Ocaml to F#?
- Citrix
- Lexifi
[编辑] 图集
[编辑] 链接
分享您的观点