#lincoln #web #interactive #html #demostrate #shall

lincoln_wasm

使用 WebAssembly 交互式演示林肯

2 个版本

0.1.1 2019 年 4 月 5 日
0.1.0 2019 年 4 月 4 日

#721 in WebAssembly

MIT 许可证

205KB
2.5K SLoC

Rust 2K SLoC // 0.0% comments JavaScript 374 SLoC // 0.1% comments

这是用来做什么的?

这是一个作为 WebAssembly 模块使用的库。在 "html" 文件夹中给出了一个示例。

先决条件

cargo install http-server

对于最后一部分(HTTP 服务器),您还可以使用以下工具

构建

cd html
cd ..; wasm-pack build --target web; copy pkg\Lincoln_wasm.js html; copy pkg\Lincoln_wasm_bg.wasm html; cd html; http-server -p 8080

尝试

image

打开 http://127.0.0.1:8080

阶乘 程序复制并粘贴到文本区域。在输入框中输入一个数字,例如 10,然后点击 "运行"。您将得到结果以及解释器运行程序所需的步骤数。

image

如果您打开 JavaScript 控制台,您可以看到上面的代码,这是编译程序的表示。

在钩子下

index.html 中,定义了一些简单的函数作为 "外部" 入口点,以及一个异步函数 run,该函数加载 WebAssembly 解释器,并为 "运行" 按钮定义事件处理器。然后它使用解释器 API 运行文本区域中给出的程序。

简单集成

以下 JavaScript 代码就是您在网站中使用它的全部所需

 <script type="module">
    import { LincolnIntepretor, default as init } from './lincoln_wasm.js';
    async function run() {
        await init('./lincoln_wasm_bg.wasm');
        // work with the API
    }
    run();
</script>

LincolnIntepretor.new() 创建一个解释器实例。

LincolnIntepretor.prototype.set_program 允许传入一个 JavaScript 对象作为运行程序。

intepretor.set_program(JSON.parse(program))

LincolnIntepretor.prototype.compile 编译程序。您需要传递一系列函数和值。函数可以是它们自己;但其他值必须有一个名称,所以您将编写 {name: "one", value: 1}

intepretor.compile([copy_int,drop_int,try_minus,mul,{name: "one", value: 1}]);

LincolnIntepretor.prototype.run 运行程序。您需要指定一个入口点(通过名称)、一个变体(因为单个入口点可以有多个变体),以及一个包含初始值的数组。最后一个值是一个布尔值,表示您是否希望以单步模式运行它。

intepretor.run("fact", 0, [input], true);

LincolnIntepretor.prototype.step 需要解释器处于单步模式。它不接受任何参数,如果仍然处于单步模式(执行没有终止)则返回 true,如果是执行结束则返回 false。

执行结束后,LincolnIntepretor.prototype.get_context 将提供最终结果。

intepretor.get_context();

依赖项

~9–13MB
~242K SLoC