浏览器只支持Javascript和WebAssembly,所以作为Javascript的补充,要么能够转换成Javascript,要么能转换成WebAssembly。
补充Javascript的出发点有三:
- 一、重复利用已经有的代码,特别是C/C++的代码,不用为了将应用转移到Web端,用Javascript重写一遍,将原来的C/C++转换一下就好。
- 二、为了避开Javascript是动态类型的坑,因为是动态类型,所以很多错误要在运行时才能被发现,这在大型工程中是致命的,所以要用静态类型的语言来代替动态类型的语言,以便在编译时就可以发现更多的错误。
- 三、为了保密,选择Rust或C/C++,然后编译成WebAssembly,二进制的代码破解起来比文本型的Javascript困难地多,不想让人看到内部逻辑的,可以这么做。
如果是出于前两点,Javascript或WebAssembly都可以作为编译目标,看个人喜好。如果出于第三点,只能编译成WebAssembly。
所谓TypeScript就是Typed JavaScript,即增加了类型的Javascript,有了类型就可以做静态检查,就可以在编译期排查很多类型不匹配问题。TypeScript可以用tsc转换成Javascript。TypeScript可以用AssemblyScript转换成WebAssembly。
Rust可以转换成WebAssembly。WebAssembly是Rust的编译目标之一。通过rustc可以将Rust编译成WebAssembly输出。
C/C++既可以转换成Javascript,也可以转换成WebAssembly。使用Emscripten可以将C/C++转换成Javascript,也可以编译成WebAssembly。
Javascript | WebAssembly | |
---|---|---|
TypeScript | ✔ | ✔ |
Rust | ✔ | |
C/C++ | ✔ | ✔ |
重复利用 | 避开动态类型 | 保密 | |
---|---|---|---|
TypeScript | ✔ | ✔ | |
Rust | ✔ | ✔ | |
C/C++ | ✔ | ✔ | ✔ |
参考资料