首页 > 其他分享 >quickjs-emscripten webassembly 包

quickjs-emscripten webassembly 包

时间:2024-02-02 09:34:54浏览次数:30  
标签:webassembly quickjs emscripten dispose vm result

quickjs-emscripten是基于emscripten将quickjs c 版本,编译为了webassembly 方便通过npm 使用

包含的特性

  • 支持node以及web 使用
  • 安全的执行js (支持到es2020)
  • quickjs runtime 进行创建以及维护值
  • 暴露主机函数到quickjs runtime
  • 通过asyncify 支持执行异步代码

参考使用

  • app.mjs
import { getQuickJS } from "quickjs-emscripten"
 
async function main() {
  const QuickJS = await getQuickJS()
  const vm = QuickJS.newContext()
 
  const world = vm.newString("world")
  vm.setProp(vm.global, "NAME", world)
  world.dispose()
 
  const result = vm.evalCode(`"Hello " + NAME + "!"`)
  if (result.error) {
    console.log("Execution failed:", vm.dump(result.error))
    result.error.dispose()
  } else {
    console.log("Success:", vm.dump(result.value))
    result.value.dispose()
  }
 
  vm.dispose()
}
 
main()
  • 运行效果

说明

因为quickjs webassembly 是基于了emscripten ,所以使用的时候需要注意资源释放,同时从上边代码也可以看出需要随时进行相关资源的释放

参考资料

https://github.com/justjake/quickjs-emscripten
https://www.npmjs.com/package/quickjs-emscripten

标签:webassembly,quickjs,emscripten,dispose,vm,result
From: https://www.cnblogs.com/rongfengliang/p/18001537

相关文章

  • WebAssembly核心编程[2]:类型系统
    对于绝大多数编程语言来说,类型都是编程的基础,WebAssembly自然也不例外。总的来说,WebAssembly涉及的类型不多,很好掌握,接下来我们就来介绍一下WebAssembly编程涉及到的几种类型。本篇内容参考WebAssemblySpec。一、ValueType二、Function三、Memory四、Table五、Global六、......
  • WebAssembly核心编程[1]:wasm模块实例化的N种方式
    当我们在一个Web应用中使用WebAssembly,最终的目的要么是执行wasm模块的入口程序(通过start指令指定的函数),要么是调用其导出的函数,这一切的前提需要创建一个通过WebAssembly.Instance对象表示的wasm模块实例(源代码)。一、wasm模块实例化总体流程二、利用WebAssembly.Module创建实......
  • WebAssembly入门笔记[4]:利用Global传递全局变量
    利用WebAssembly的导入导出功能可以灵活地实现宿主JavaScript程序与加载的单个wasm模块之间的交互,那么如何在宿主程序与多个wasm之间传递和共享数据呢?这就需要使用到Global这个重要的对象了。一、数值类型全局变量二、将JavaScript函数设置为全局变量三、利用全局变量处理字符......
  • WebAssembly入门笔记[3]:利用Table传递引用
    在《WebAssembly入门笔记[2]》中,我们介绍了如何利用Memory在作为宿主的JavaScript应用和wasm模块之间传递数据,但是Memory面向单纯二进制字节的读写在使用起来还是不太方便,此时我们会更多地用到另一个重要的对象Table。Table利用用来存储一组指定类型的对象,说得准确一点是对象的引......
  • WebAssembly入门笔记[2]:利用Memory传递数据
    利用灵活的“导入”和“导出”机制,WebAssembly与承载的JavaScript应用之间可以很便利地“互通有无”。《与JavaScript的交互》着重演示了如何利用函数的导入和导出实现功能的共享,接下来我们主要关注数据的传递或者共享。宗地来说,WebAssembly与宿主程序之间的数据传递主要有如下三......
  • mrml python 以及webassembly 实现简单说明
    简单说明下mrmlpython以及webassembly的实现pythonpython是基于了pyo3,利用pyo3提供的能力,暴露了python模块参考处理//暴露的mrml模块#[pymodule]#[pyo3(name="mrml")]fnregister(_py:Python<'_>,m:&PyModule)->PyResult<()>{//mrml方法的注册m.ad......
  • mrml python 以及webassembly 实现简单说明
    简单说明下mrmlpython以及webassembly的实现pythonpython是基于了pyo3,利用pyo3提供的能力,暴露了python模块参考处理//暴露的mrml模块#[pymodule]#[pyo3(name="mrml")]fnregister(_py:Python<'_>,m:&PyModule)->PyResult<()>{......
  • quickjs运行typescript?
    一、前言quickjs是标准的js引擎,不可能直接运行ts文件。所以需要对ts文件,进行编译,编译成符合当前版本的js脚本,然后在运行。二、简单ts例子安装typescript,就有tsc编译器。使用npm之类安装。使用tsc--init创建项目,此时会得到一个tsconfig.js配置文件。在src目录创建一......
  • quickjs C功能扩展的四种写法
    一、前言 茴香豆的“茴”字有多少种写法?这篇博客不是为了炫技,是JS就是这么多种情况。比如C语言,就只能通过函数调用,没有类的概念。比如Java,就只能通过类、对象的方式。不能单独创建函数。哪怕main函数也要包装成一个class。而JS,即可以提供函数,也可以提供类。在ES5之前,JS......
  • containerd-wasm-shims k8s 运行webassembly 的containerd shim
    containerd-wasm-shims属于一个包装,基于了runwasi可以实现在k8ss中运行webassembly工作负载,使用上提供了多种wasm应用runtimes以及扩展,同时目前KWasm组织也包装了一个k8soperator实现方便的部署说明基于webassembly的运行模式是越来越多了,大家趋向于与k8s以及容器集成......