写在前面的话

MMP在抠了2个工作日外加1个休息日之后,这玩意终于走上了正轨。以至于我不用再在语言和环境的问题上纠结。(然而并不完全是)、所以大概通篇下来会以一种 头疼 + 骂街 + 真的牛逼 的方式写下来。以及由于本人毅力有限。不清楚能不能写完这个系列。尽量做到事无巨细以及最好能坚持写完。

要知道,现在已经没什么问题可以让我纠结三天才有个结论了。

计划

基本会分为三块说吧

  • 环境 (EMCC)
  • 浏览器中的坑
  • 想到哪算哪

进入正题

  • WebAssamebly是个什么玩意?

简单点来说 就是 c/c++ => 汇编 在浏览器中运行。具体点就是 C/C++ 项目 => wasm => js => html 的过程。相信大部分人已经知道了。

  • WebAssamebly有什么好处?

运行效率什么的就不扯淡了。作为前端程序员理解最大的好处就是 甩锅给C/C++程序员

  • 需要什么材料?
  1. 一个会写点C或者C++ 并且可以流畅自如的修改C/C++开源库的前端开发工程师。(个人认为是最重要的一点)
  2. Emscripten: 编译环境
  3. 一个兼容WASM的浏览器
  4. webworker (optional) 这真是看情况。后面会详细说

gayhub的解释: An LLVM-to-JavaScript Compiler 也就是 LLVM到js的编译器。
具体结构(由底层到上层) LLVM => Clang => emscripten

  • 什么是 Clang?
    Clang 是一个C、C++、Objective-C和Objective-C++编程语言的编译器前端 (摘自维基百科)

说明白点:就是给LLVM包装了一层。让它能够编译↑述代码。

  • 什么是 LLVM?
    LLVM是一个自由软件项目,它是一种编译器基础设施,以C++写成。它是为了任意一种编程语言而写成的程序,利用虚拟技术创造出编译时期、链接时期、运行时期以及“闲置时期”的最优化。它最早以C/C++为实现对象,而目前它已支持包括ActionScript、Ada、D语言、Fortran、GLSL、Haskell、Java字节码、Objective-C、Swift、Python、Ruby、Rust、Scala以及C#等语言。(摘自维基百科)

说明白点:就是一个编译各种语言的虚拟机,把各种乱七八糟的语言变异成汇编。

  • LLVM 工作原理?
    编译器1 / 编译器2 / 编译器3/ 编译器4 => .o文件 => Linker(连接)=> 编译、优化 => Assembly

此处可以看出。即便装了emscripten, 你的环境里必须装了对应编译器及LLVM。

  • 为毛我的电脑装了编译器emscripten仍然报错?

emscripten工作时,会先检测环境是不是对的,其中需要找你的LLVM。如果找不到就直接抛错了。嗯。。(正常情况下可以找到)

先絮叨这么多,明天写安装过程