了解为什么在Wasm中使用Rust而不是其他编程语言。
WebAssembly(Wasm)是一项技术,可以重塑我们为浏览器构建应用程序的方式。 它不仅使我们能够构建全新的Web应用程序类,而且还将使我们使用JavaScript编写的现有应用程序更加高效。
在有关Rust和Wasm生态系统状态的本文中,我将尝试解释为什么Rust是可以释放WebAssembly真正潜力的语言。
WebAssembly是二进制文件格式,所有主要浏览器(IE 11除外)都已实现,以使虚拟机运行。 WebAssembly的启动和运行速度比JavaScript快得多,因为二进制格式对于浏览器而言非常简单,而且易于浏览器以高度优化的方式运行。 如果您对使WebAssembly与众不同的技术细节感兴趣,我建议您参阅Lin Clark在该主题上的文章 。
尽管我最初开始研究WebAssembly作为在另一种环境(即浏览器)中编写Rust的方法,但这并不是WebAssembly真正与众不同的原因。 我喜欢编写JavaScript(尤其是TypeScript),并且用JavaScript构建的围绕Web开发的生态系统是一笔巨大的财富,不应该被抛弃。当JavaScript的性能不够高时,WebAssembly会对它进行补充。
WebAssembly可用于编写整个Web应用程序或用性能接近本机的速度替换性能可能不足的少量现有应用程序。 另外,由于WebAssembly是一种类似于本机的程序集格式,因此许多语言都可以编译为它,这意味着在其他平台和Web之间共享代码现在更加实用。
可以将许多不同的语言编译为WebAssembly,包括C#和Go ,那么为什么不使用它们代替Rust? 尽管编程语言的使用始终受个人喜好影响,但有很多原因使Rust成为工作的最佳工具。 因为这些语言具有必须包含在WebAssembly二进制文件中的大型运行时,所以它们仅对新建项目才真正实用(即,它们仅可用作JavaScript替代品)。 Wasm上的该Go Wiki文章说,未压缩的可实现的最小二进制大小约为2MB。 这反映了我所见。 对于Rust来说,它的运行时极少(基本上只是一个分配器),“ hello,world”示例在我的机器上被编译为1.6KB,而没有任何编译后的大小优化(这可能会进一步降低它的大小)。
这并不是说浏览器中Go或C#的未来前景黯淡——我为这些努力可能带来的结果感到非常兴奋。 但现实情况是,这些技术可能始终是新建项目的最佳选择。
C和c++运行时非常小,就像Rust一样,因此可以实用地嵌入现有的应用程序和库。然而,Rust使用我们将在本系列其他文章中探讨的工具,很容易创建具有相当惯用的JavaScript接口的WebAssembly二进制文件,而c和c++中的过程则更加手动。在Rust的工具是绝对了不起的,我认为它使整个经验更加令人愉快。Rust也是一种内存安全的语言,这意味着c和c++中常见的一整类bug在safeRust中是不可能存在的。如果您已经习惯了存储JavaScript、Java和c#等安全语言(即使您不习惯),那么您可能希望使用Rust。
如果你对WebAssembly感兴趣,我仍然鼓励你去钻研那些WebAssembly支持的语言——不管是c++、c#还是其他什么语言。如果你有兴趣了解更多关于Rust的Wasm开发,请在评论中告诉我。接下来,我将介绍如何从JavaScript调用Rust。如果你想对比一下Rust的故事和其他语言的故事,比如c语言和Go语言,请告诉我,以后我会写更多。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。