各语言转wasm-js调用

news/2024/5/17 16:59:40/文章来源:https://blog.csdn.net/qq_29788741/article/details/126908982

起源是 我司应该是抄袭某家player , 也用wasm做的 , 所以我也研究一下

关于标题 我估计需要大家一起完善了 , 我只会讲一下 go c 别的都不会

webassembly( wasm ) 可以编译的如图

我想起我这边应用啊  也就无非播放器~~ 本地文件压缩啊加密啊或直接就上传了,  或者在操作数据库一下?  在封装个js组件别的在组件使用 比如vue~~  暂时还么试验这么多就写了个简单demo

发现了个问题 , 好像js也不太通用呢~~ 先用了node写了个最简单的~~

还有估计会各种类型的问题吧?

go c 都是用docker 编译的 

# 一堆讲解 (为什么用 好处 不讲 自行百度.. )

wasm是与操作系统和node版本无关的,因此我们一次编译,即可运行在linux|mac|window等多个操作系统上,再也不需要为各个系统分别编译动态库产物, 在node 8以上即支持了wasm,也无需担心node版本的兼容问题。

wasm也可同时运行在web,使得我们后期可以探索web上的编译方案。

wasm的运行在一个沙盒环境中,并不会因为其执行异常导致进程奔溃。

注意: 编译的代码只能运行在同样的os且同样的cpu指令集上。在32位linux编译出来的结果,无法运行在64位linux上,更无法运行在mac和window上。

标准化的WASI
为了解决上述问题,wasm制定了标准的api接口(WASI),这时候wasm并不需要依赖js glue代码才能正常运行,任何实现了WASI的接口的runtime都能够正常加载该wasm。 其实wasm本质上和js是无关的,其可以完全运行在独立的沙箱环境里,通过WASI和系统API进行交互,这实际上促使了wasm runtime的发展,此时已经并不局限在可以将多种语言编译为wasm,更进一步的我们可以用各种语言实现wasm 的runtime,wasm此时可以运行在除了browser和node之外的其他runtime里,甚至可以被内嵌入移动端的sdk里。目前已经支持的wasi的runtime包括
wasmtime, Mozilla’s WebAssembly runtime

Lucet, Fastly’s WebAssembly runtime

a browser polyfill

node@14 在开启--experimental-wasi-unstable-preview1 的情况下

emcc目前已经支持了生成wasi格式的代码,c时代码编译为支持wasi

#go语言编译及页面代码

...

#c语言编译及页面代码

...

#关于调试

wasm调试

目前最新的chrome和firefox已经支持了wasm本身的调试

尽管我们可以在wasm上进行断点调试,但是对于复杂的应用,这种汇编级别的调试仍然难以满足我们的需求。我们更期望在源码层面上实现调试功能

sourcemap调试

很幸运的是emscripten已经支持了sourcemap调试,这样在执行代码的时候,能定位到其相对的源码位置。

 $ emcc -g4 hello.cc --source-map-base / -o index.html // g4开启sourcemap调试 

我们可以看到如下图所示,我们成功的将断点断在了c++源码的位置。

然而这种方式仍然存在一定的限制,我们看到sourcemap只处理了代码行数的映射关系,并没有处理c++变量到wasm寄存器变量的映射关系,因此对于复杂的应用,sourcemap调试仍然捉襟见肘。

dwarf 调试

除了sourcemap能处理源码和编译后的代码的映射关系外,dwarf也是一种比较通用的调试数据格式(debugging data format),其广泛运用于c|c++等system programing language上。其为调试提供了代码位置映射,变量名映射等功能。 emscripten目前已经可以为生成的wasm代码带上dwarf信息。

$ emcc hello.cc -o hello.wasm -g // 带上dwarf信息 我们使用lldb和wasmtime进行调试     
$ lldb -- wasmtime -g hello.wasm 

我们可以清楚的看出来wasm映射到c++代码,并且变量也成功映射到c++的变量里。

lldb对wasm的dwarf调试依赖了llvm的jit功能的,而 lldb在jit功能在MacOSX上是默认关闭的(lldb 的jit在linux上开启的,gdb的jit功能在MacOSX上也是开启的。因此我们需要手动的在MacOS上开启lldb的 jit功能,只需要在.lldbinit上配置​settings set plugin.jit-loader.gdb.enable on​即可

我们可以进一步的在vscode上依赖codelldb插件调试wasm程序,同样也需要进行jit的配置,只需要在settings.json里配置lldb的initCommands即可

调试效果如下

我们虽然可以在通过lldb调试wasm应用,但是在浏览器上并没法执行lldb,幸运的是浏览器已经开始尝试支持wasm的dwarf调试了,最新的chrome可以开启dwarf 调试功能的实验特性

粗浅的试了下,貌似还是有bug。。。并不能处理变量映射,显示的仍然是寄存器变量

目前node对于wasm的debug支持程度貌似仍然有限,相关断点并未生效。

whaosoft aiot http://143ai.com 

未完待续.... 如有需要此贴持续更新...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_9271.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RestHighLevelClient创建索引时报错[299 Elasticsearch-7.12.1

RestHighLevelClient创建索引时报错[299 Elasticsearch-7.12.1出现原因 : 这是因为在使用create方法时 , 会有两个选择 , 其中一个已经过时了 client.indices().create(request, RequestOptions.DEFAULT); 其中的create方法 , 有两个版本 , 有一个显示已经过时了 , 两个方法虽然…

蜂蜜什么时候喝,才可以获得蜂蜜更大的好处?真可以治疗咳嗽?

中秋节刚过去不久,家里面的礼品多的是不是可以开超市了?中国人讲究一个“礼”字,逢年过节、探望故友病友手里不带点东西就会难受。中秋节这样带有美好祝愿的节日自然也是中国人送礼的最佳时间之一。 ​ 编辑切换为居中 添加图片注释,不超过…

Google Chrome Privacy Sandbox All In One

Google Chrome Privacy Sandbox All In OneGoogle Chrome Privacy Sandbox All In OneGoogle Chrome 隐私沙盒chrome://settings/privacySandbox With Privacy Sandbox trials, sites can deliver the same browsing experience using less of your info. That means more priv…

需要在html中加CSS,怎么加

在html中加CSS有三种方式 一种是直接写到标签上的style属性里面 <divid"mydiV"style"width:200px;border:1pxsolid#f00;margin:0;"></div> 一种是写到head标签里面的style标签里面 <styletype"text/css"> #mydiV{ width:2…

C++ 01 内存模型

内存分区的示意图。一般内存主要分为&#xff1a;代码区、常量区、静态区&#xff08;全局区&#xff09;、堆区、栈区这几个区域。 什么是代码区、常量区、静态区&#xff08;全局区&#xff09;、堆区、栈区&#xff1f; 代码区&#xff1a;存放程序的代码&#xff0c;即CPU执…

springboot 整合dubbo3开发rest应用

一、前言 作为微服务治理生态体系内的重要框架 dubbo&#xff0c;从出身到现在历经了十多年的市场检验而依旧火热&#xff0c;除了其自身优秀的设计&#xff0c;高性能的RPC性能&#xff0c;以及依托于springcloud-alibaba的这个背后强劲的开源团队支撑&#xff0c;在众多的微…

MongoDB6安装配置详解

官网下载地址&#xff1a; https://www.mongodb.com/try/download/community?tckdocs_server 打开后是这样的&#xff1a; 鼠标滑到上图红色箭头位置&#xff0c;可以看到最新版本目前是6.0.1&#xff0c;点击download下载即可&#xff0c;这里下载的是Windows版本。 下载好后…

vue插槽---作用域插槽(三)

编译作用域:模板中的变量,在模板对应的实例中查找相应的变量和数据。通俗的说就是父级模板里的所有内容都是在父级作用域中编译的;子模板里的所有内容都是在子作用域中编译的。 作用域插槽:带参数的插槽,子组件提供给父组件参数,父组件决定其展示形式替换插槽标签。 为什…

哈希原理及模拟实现并封装unordered系列关联式容器

目录一、哈希1. 哈希概念2. 哈希冲突3. 哈希函数4. 哈希冲突的解决闭散列线性探测二次探测开散列开散列与闭散列比较二、哈希表哈希表的实现三、封装unordered系列关联式容器1. 封装unordered_set2. 封装unordered_map四、哈希表的应用1. 位图概念2. 应用3. 位图的实现2. 布隆过…

springboot客户关系管理系统源码 CRM小程序源码

CRM客户关系管理系统源码 crm小程序源码 基于springbootvue MySQL数据库开发的客户关系管理系统。 客户全流程高效管理&#xff0c;客户资料管理&#xff0c;客户跟踪管理&#xff0c;订单、合同管理&#xff0c;回款及交付管理等功能。 功能介绍 1、系统管理&#xff1a;员工…

基于STM32单片机和AD9850的智能DDS函数信号发生器

CSDN话题挑战赛第2期 参赛话题&#xff1a;学习笔记 文章目录1、整体设计2、硬件方案3、软件程序4、实物验证1、整体设计 有一天&#xff0c;我在浏览CSDN时看到一篇关于 AD9850 的帖子。AD9850是一款可以产生1hz到40mhz左右正弦波的芯片。淘宝的产品经销商能够将芯片与提供 T…

第二章-使用KNN和GBDT进行收入的预测分析

本文是《从零开始学python数据分析与挖掘》的第二章学习心得&#xff0c;相关数据可以从对应的官方数据库获取。 提供给你的只有一份收入相关的xlsx&#xff0c;你需要通过里面的数据进行年收入的预测。 1.数据预处理 首先读取数据&#xff0c;查看是否存在缺失值。对于存在…

关于模糊理论及简单应用

关于模糊理论及简单应用 1.开始 最近导师让我了解一下模糊理论,思考能不能结合现有技术实现创新点.这篇博客主要记录一下这两天对模糊理论的学习,以及做的一个小demo,希望如果有研究相关方面的大佬能留言相互交流学习. 之前用模糊c均值聚类的时候了解过scikit-fuzzy,这次发现…

(14.1)Zotero常用功能:导入题录、参考文献

(14.1)Zotero常用功能&#xff1a;导入题录、参考文献 文章目录一、插件1.1、Zotfile1.2、Zotfile配置2、translators_CN3、zotero-pdf-translate4、jasminum5、zotero-better-bibtex-Sponsor&#xff08;待更新&#xff09;二、导入题录(知网为例)三、参考文献样式1、样式选择…

隐写术——PNG文件隐藏payload

0x01 PNG文件格式 PNG文件基本上由两部分组成: 文件头、文件数据块 文件头也叫署名域 用来标识这是一个PNG格式的文件&#xff0c;8字节长度&#xff0c;固定数据:89 50 4E 47 0D 0A 1A 0A 数据块: PNG定义了两种类型的数据块: 1:关键数据块(Critical Chunk):PNG文件必须包含&…

网课题库接口API—小白专用版本

网课题库接口API—小白专用版本 本平台优点&#xff1a;免费查题接口搭建 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a;题库后台http://daili.jueguangzh…

URP渲染管线场景优化实战 2.3静态资源导入及优化——Texture

2.3 Texture导入设置及优化 2.3.1 纹理类型 DefaultNormal MapEditor GUI and Legacy GUI&#xff1a;在编辑器GUI上使用纹理的类型Sprite&#xff1a;常用于2D游戏和UGUICursor&#xff1a;鼠标光标自定义纹理类型Cookie&#xff1a;用于光照CookieLightmap&#xff1a;光照…

SQL Server 备份与恢复

use master go --还原数库库-- D:\backup1\backup restore database ERP from diskD:\backup1\backup1\stu.bak with replace,norecovery restore database ERP from diskD:\backup1\backup\stu_diff2.bak with replace ,norecovery restore log ERP from diskD:\backup1\bac…

Part17:Pandas的数据转换函数--map、apply、applymap

Pandas的数据转换函数map.apply、applymap 数据转换函数对比: map、apply、applymap 1.map用于Series值的转换 实例:将股票代码英文转换成中文名字 Series.map(dict) or Series.map(function)均可 import pandas as pd stockspd.read_excel(./datas/stocks/互联网公司股票…

Ubuntu 无法安装 vim,使用 vi 不提示输入模式

Ubuntu 默认只安装了 vim-tiny,是一个精简版,没有代码提示、代码补全。没有安装 vim-basic 时(vim-tiny 的完整版),vim-tiny 和 vi 都不提示你当前是否处于输入模式。使用 vim-tiny 的指令不是vim,而是vim.tiny;vim-basic 的指令才是vim。 在 BASH Shell 中输入 vim 就提…