浏览器只支持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++




参考资料