DBDelve
DBDelve는 Rust 기반 빠른 다중 엔진 데이터베이스 클라이언트, 무료 오픈소스, 텔레메트리 없음
OCaml 코드를 Javascript 로 변환하는 컴파일러
Compiler from OCaml to Javascript.
개발 도구OCaml · JavaScriptGitHub @ocsigen직접 설치운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Js_of_ocaml is a compiler from OCaml bytecode to JavaScript. It makes it possible to run pure OCaml programs in JavaScript environment like browsers and Node.js.
Js_of_ocaml is composed of multiple packages:
See the opam files for version constraints.
wasm_of_ocaml-compiler additionally depends on a system installation of binaryen (version 120 or later)
The generated code and runtime target ECMAScript 2020 (ES2020). Out of the box they run on Node.js 18 or later and any evergreen web browser released since early 2020 (Chrome 80+, Firefox 74+, Safari 13.4+, Edge 80+). QuickJS-NG is also supported.
We optionally rely on js WeakRef, which is part of ECMAScript 2021, to implement Stdlib.Weak and Stdlib.Ephemeron.
For older engines, the output can be transpiled down to ES5 — see the
browser compatibility section of the manual.
opam install js_of_ocaml js_of_ocaml-compiler js_of_ocaml-ppx
Your program must first be compiled using the OCaml bytecode compiler ocamlc.
JavaScript bindings are provided by the js_of_ocaml package. The syntax
extension is provided by js_of_ocaml-ppx package.
ocamlfind ocamlc -package js_of_ocaml -package js_of_ocaml-ppx -linkpkg -o cubes.byte cubes.ml
Then, run the js_of_ocaml compiler to produce JavaScript code:
js_of_ocaml cubes.byte
Most of the OCaml standard library is supported. However,
Extra libraries distributed with OCaml (such as Thread) are not supported in general. However,
Tail call is not optimized in general. However, mutually recursive functions are optimized:
Effect handlers are supported with the --effects={cps,double-translation}
flag.
Data representation differs from the usual one. Most notably, integers are 32 bits (rather than 31 bits or 63 bits), which is their natural size in JavaScript, and floats are not boxed. As a consequence, marshalling, polymorphic comparison, and hashing functions can yield results different from usual:
| OCaml | JavaScript |
|---|---|
| int | number (32bit int) |
| int32 | number (32bit int) |
| nativeint | number (32bit int) |
| int64 | Object (MlInt64) |
| float | number |
| string | string or object (MlBytes) |
| bytes | object (MlBytes) |
| "immediate" (e.g. true, false, None, ()) | number (32bit int) |
| "block" | array with tag as first element (e.g. C(1,2) => [tag,1,2]) |
| array | block with tag 0 (e.g. [|1;2|] => [0,1,2]) |
| tuple | block with tag 0 (e.g. (1,2) => [0,1,2]) |
| record | block (e.g. {x=1;y=2} => [0,1,2]) |
| constructor with arguments | block (e.g. C (1, 2) => [tag,1,2]) |
| module | block |
| exception and extensible variant | block or immediate |
| function | function |
| Filename | Description |
|---|---|
| LICENSE | license and copyright notice |
| README | this file |
| compiler/ | compiler |
| examples/ | small examples |
| lib/ | library for interfacing with JavaScript APIs |
| ppx/ | ppx syntax extensions |
| runtime/ | runtime system |
| toplevel/ | web-based OCaml toplevel |