帮酷LOGO
  • 显示原文与译文双语对照的内容
OCamlrun WebAssembly - OCaml Bytecode Interpreter in WASM

  • 源代码名称:ocamlrun-wasm
  • 源代码网址:http://www.github.com/sebmarkbage/ocamlrun-wasm
  • ocamlrun-wasm源代码文档
  • ocamlrun-wasm源代码下载
  • Git URL:
    git://www.github.com/sebmarkbage/ocamlrun-wasm.git
  • Git Clone代码到本地:
    git clone http://www.github.com/sebmarkbage/ocamlrun-wasm
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/sebmarkbage/ocamlrun-wasm
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • OCamlrun WebAssembly

    这是一个构建脚本,用于使用for构建WebAssembly的for解释器。

    虚拟机中虚拟机的原因?

    为什么不直接编译OCaml代码到

    目前没有那么容易,因为is没有高保真性维护的rtc输出目标或者任何WebAssembly兼容输出目标。 因为WebAssembly目前没有必要的钩子来扫描它的GC指针,因这里也很难做到这一点。 也许OCaml已经维护了一个手动堆栈,或者可以修改它这样做,我不知道。

    解释器是用可移植的C 编写的,维护自己的栈,这样就容易了。

    然而,现在WebAssembly代码的一大缺点是vm将它作为一个AOT编译工具链实现。 这意味着你花费了大量的时间来编译代码。

    如果你有很多不热的代码路径,你将浪费大量的循环编译它,而不是在解释器中运行它。 当你在解释器中运行它时,你可以立即开始执行代码。

    可以能是浏览器在将来更改为解释器模式,这可以能会改变这个方程式。

    为什么不将OCaml代码编译为像js_of_ocaml或者BuckleScript这样的JavaScript?

    如果你希望完全的GC互操作,并且它为热路径提供JIT能力,这可能仍然是最好的技术。

    但是,如果你有很多代码意味着在启动时在客户机上分析和编译大量 JavaScript 。 运行字节码的好处是它可以立即开始执行。

    另外,通过使用专门针对OCaml构建的GC,你可以利用更多的可以预测和一致的GC行为,。

    多核OCaml即将到来,共享的array 缓冲器和atom用于网络。 通过使用自定义内存模型,我们可以以利用浏览器中的并行性。

    安装

    我只在 OS X 上尝试过这一点,但还没有修改任何构建脚本。

    1.浏览器

    为了测试这一点,你需要一个带有WebAssembly支持的浏览器,比如 Chrome Canary 。

    2.Emsdk

    首先,你需要安装 Emscripten 。 根据开发者的 WebAssembly指南,你现在需要从源代码构建工具链。 我说包括 binaryen-master-64bit 但这对我并不适用,目前我不需要它。 sdk-incoming-64bit 应该足够了。( 请注意: 这将需要大量的磁盘空间来重建源代码。

    git clone https://github.com/juj/emsdk.git
    cd emsdk
    ./emsdk install sdk-incoming-64bit
    ./emsdk activate sdk-incoming-64bit

    完成这些步骤后,安装就完成了。 若要在当前 命令行 提示中输入一个Emscripten编译器环境,请键入

    source./emsdk_env.sh

    返回到项目文件夹。

    3检查OCaml源代码

    ocaml源被作为这个项目的一个Git模块签出。

    git submodule update --init --recursive

    4.构建

    在这个 repo的root 中运行构建脚本。

    ./build.sh

    它将把 example.ml 文件构建成OCaml字节码。 这将被嵌入到emscripten文件系统的虚拟化。

    它还将构建OCaml字节码解释器和GC到一个Web程序集文件中。

    example.html 包含引导脚本。

    你可以使用 emrun ( 或者只是通过HTTP服务器自己) 在浏览器中进行尝试。

    emrun --browser=chrome_canary example.html

    它应该使用默认示例打印到控制台。

    下一步

    这是最容易建立起来的构建工具。 然而,emscripten和ocamlrun有很多特性,比如虚拟文件系统和动态链接,它们通常不适用于web环境。 我们将把它们分成最小可以能的库,可以以整齐地适合现有的web工具链。

    这里脚本还使用 -O2 标志进行编译。 我们应该看看是否可以用其他标志减少文件的大小。




    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语