C/C++与JavaScript的WebAssembly编程(一)

打印 上一主题 下一主题

主题 1611|帖子 1611|积分 4833

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1. JavaScript与C/C++混合编程的技术

JavaScript与C++混合编程可以实现两种语言的优势联合,C++的程序性能很高且支持强大的系统调用本事,JavaScript则生态丰富且开发效率高。
JavaScript与C++混合编程常见的技术手段主要有以下几种:

  • Node.js的C++扩展: 常用于Node.js实现的后端服务代码。在WebAssembly出现之前,Node.js的服务器代码通常以这种方式调用C/C++的模块。
  • JsAPI和Native API: 常应用于包含WebView的客户端。将Native端的代码封装成Web接口(JsAPI)供前端调用,将Web端的代码封装成Native接供词Native调用。像Electron、CEF技术栈的客户端均采用了此种方式。
  • WebAssembly: 主要用于欣赏器上运行的前端页面,Node.js从8.0开始也支持WebAssembly,因此也可用于服务端开发
本章所讲的内容是基于WebAssembly的混合编程技术。
2. 什么是WebAssembly?

WebAssembly是一种新的编码方式,是一种为web设计的高效、低级字节码格式。我们可以将C/C++、Rust等低级语言编写的代码编译成WebAssembly字节码,现代的Web欣赏器可以加载WebAssembly,并与JavaScript协同运行。从而使得WebAssembly成为JavaScript与C/C++混合编程并在Web上运行的最有效机制。C/C++编译成的WebAssembly可以或许以接近原生语言的效率在欣赏器上运行。
2.1. 支持WebAssembly的欣赏器

支持WebAssembly的常用欣赏器及版本:

  • Chrome 57及以上版本。
  • Firefox 52及以上版本。
  • Edge 16(基于Chromium的版本)及以上。
  • Safari 11及以上版本。
  • Opera 44及以上版本。
参考信息: https://caniuse.com/wasm
此外,Node.js从8.0版本也开始支持WebAssembly,WebAssembly目前已经成了W3C的Web标准之一。
2.2. WebAssembly的编译器

除了C/C++外,WebAssembly还支持多种其他计算机语言编译成.wasm,常见的语言和编译器如下:

  • C/C++: emscripten编译工具链可以将 C/C++ 编译成 WebAssembly。
  • Rust: wasm-pack:工具可以将 Rust  编译成 WebAssembly。
  • Go: Go语言的官方工具就链支持将 Go 编译成 WebAssembly。
3. 开发情况搭建


  • emscripten官方文档: https://emscripten.org/docs/getting_started/downloads.html
  • 依赖的情况准备

    • git
    • Python3.6或更新版本(Windows)

  • 安装步骤
    1. # 1. 从Github上克隆emsdk仓库
    2. # emsdk即Emscripten SDK,是将C/C++编译成WebAssembly的工具
    3. git clone https://github.com/emscripten-core/emsdk.git
    4. # 2. 进入emsdk目录
    5. cd emsdk
    6. # 3. 下载和安装最新的SDK tools(包括node.js、emscripten等)
    7. # Linux/macOS:
    8. ./emsdk install latest
    9. # Windows:
    10. ./emsdk.bat install latest
    11. # (安装大概需要十几分钟的时间,可以去喝杯茶休息一下了)
    12. # 会将相关的工具安装在以下三个目录
    13. # emsdk/node
    14. # emsdk/upstream
    15. # emsdk/python (Windows才有,会安装nuget)
    16. # 4. 为当前用户设置latest版本为当前激活的工具
    17. # Linux/macOS:
    18. ./emsdk activate latest
    19. # Windows:
    20. ./emsdk.bat activate latest
    21. # 5. 为当前命令终端设置环境变量
    22. # Linux/macOS:
    23. source ./emsdk_env.sh
    24. # Windows:
    25. ./emsdk_env.bat
    26. # 6. 验证是否安装成功
    27. emcc -v
    28. # (如果有显示正常的版本信息,则说明安装成功)
    复制代码
    以上示例基于3.1.72版本的emscripten。
4. Hello World程序

我们从一个Hello World程序开始,相识WebAssembly程序的开发、编译、运行的大抵流程。
<ol>新建一个测试目次hello_world和源码文件hello.cpp。
[code]// hello_world/hello.cpp#include int main(){    std::cout
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农妇山泉一亩田

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表