WebAssembly(Wasm)是一项技术,可以重塑我们为浏览器构建应用程序的方式。 它不仅使我们能够构建全新的Web应用程序类,而且还使我们能够使用JavaScript编写的现有应用程序更加高效。

在有关Rust和Wasm生态系统状态的本文中,我将尝试解释为什么Rust是可以释放WebAssembly真正潜力的语言。

什么是WebAssembly?

WebAssembly是一种二进制文件格式,所有主流浏览器(IE 11除外)都已实现了虚拟机运行。 WebAssembly的启动和运行速度比JavaScript快得多,因为二进制格式简单易行,浏览器可以以高度优化的方式进行解析和运行。 如果您对使WebAssembly与众不同的技术细节感兴趣,我建议您参阅Lin Clark在该主题上的文章 。

那么,为什么要使用它呢?

JavaScript的性能还不够 。

WebAssembly可用于编写整个Web应用程序或用性能接近本机速度的东西替换性能可能不足的少量现有应用程序。 另外,由于WebAssembly是一种类似于本机的程序集格式,因此许多语言都可以编译为它,这意味着在其他平台和Web之间共享代码现在更加实用。

其他语言

可以将许多不同的语言编译为WebAssembly,包括C#和Go ,那么为什么不使用它们代替Rust? 尽管编程语言的使用总是受个人喜好的影响,但有很多原因使Rust成为工作的最佳工具。 因为这些语言具有必须包含在WebAssembly二进制文件中的大型运行时,所以它们仅对新建项目才真正实用(即,它们仅可用作JavaScript替代品)。 Wasm上的该Go Wiki文章说,未压缩的可实现的最小二进制大小约为2MB。 这反映了我所见。 对于Rust,它的运行时极少(基本上只是一个分配器),“ hello,world”示例在我的机器上编译为1.6KB,而没有任何编译后大小优化(这可能会使它进一步降低)。

这并不是说浏览器中Go或C#的未来是黯淡的-我为这些努力可能带来的结果感到非常兴奋。 但现实情况是,这些技术可能始终是新建项目的最佳选择。

与Rust一样,C和C ++附带的运行时非常小,因此对于将其嵌入现有应用程序和库中可能是实用的。 但是,Rust非常容易使用我们将在本系列其他文章中探讨的工具来创建具有相当惯用JavaScript接口的 WebAssembly二进制文件,而C和C ++中的过程则更为手动。 Rust中的工具绝对很棒,我认为它使整个体验变得更加愉快。 Rust还是一种内存安全性更高的语言,这意味着在安全的Rust中不可能有C和C ++中常见的一整类错误。 如果您习惯于存储JavaScript,Java和C#等安全语言( 即使您不是 ),那么您可能想要使用Rust。

我们继续吧!

如果您对WebAssembly感兴趣,我仍然鼓励您尝试使用WebAssembly支持的任何一种使您最快乐的语言-无论是C ++,C#还是其他。 如果您有兴趣了解有关Rust中Wasm开发的更多信息,请在评论中告诉我。 接下来,我将介绍如何从JavaScript调用Rust。 而且,如果您想比较比较Rust的故事和其他语言(例如C和Go)的故事,请告诉我 ,以后我会写更多。

翻译自: https://opensource.com/article/19/2/why-use-rust-webassembly

为什么要在WebAssembly中使用Rust?相关推荐

  1. rust安装教程linux,如何在 Linux 中安装 Rust 编程语言

    Rust 通常被称为 rust-lang.Rust 是一个由 Mozilla Research 赞助的通用的.多范式.现代的.跨平台和开源系统编程语言. 它旨在实现安全性.速度和并发性等目标. Rus ...

  2. 在 Blazor WebAssembly 中使用 gRPC-Web

    对于单页面应用程序,gRPC-Web 是 JSON-over-HTTP 的一种方便.高性能的替代方案. 如果你已经了解关于 gRPC 和 gRPC-Web 的一切,你可以跳到 添加 gRPC 服务到一 ...

  3. webgl 着色器_如何在WebAssembly中使用WebGL着色器

    webgl 着色器 by Dan Ruta 通过Dan Ruta 在WebAssembly中使用WebGL着色器 (Using WebGL shaders in WebAssembly) WebAss ...

  4. rust php 扩展,在PHP程序中使用Rust扩展的方法_PHP

    C或PHP中的Rust 我的基本出发点就是写一些可以编译的Rust代码到一个库里面,并写为它一些C的头文件,在C中为被调用的PHP做一个拓展.虽然并不是很简单,但是很有趣. Rust FFI(fore ...

  5. rust php 扩展,在PHP程序中使用Rust扩展的方法_php技巧

    C或PHP中的Rust 我的基本出发点就是写一些可以编译的Rust代码到一个库里面,并写为它一些C的头文件,在C中为被调用的PHP做一个拓展.虽然并不是很简单,但是很有趣. Rust FFI(fore ...

  6. 【Rust 日报】2021-07-04 如何在面试中确定 Rust 程序员水平?

    如何在面试中确定 Rust 程序员水平? 对于这个问题,张汉东老师在 RustFriday 飞书群线上沙龙第十三期中进行了分享: 视频:RustFriday 飞书群线上沙龙 第十三期 | [讨论]如何 ...

  7. 如何在 Blazor WebAssembly中 使用 功能开关

    微软Azure 团队开发的 功能管理 (Feature Management) 包 Microsoft.FeatureManagement可用于实现 功能开关,可以通过功能开关特性动态的改变应用程序的 ...

  8. VSCode中配置Rust时报错:error: linking with `x86_64-w64-mingw32-gcc` failed: exit code: 1

    环境配置:Win10+VSCode+MinGW Rust安装成功后,在VSCode中创建工程调试,执行编译时报了这个错:error: linking with x86_64-w64-mingw32-g ...

  9. rust php 扩展,在PHP程序中使用Rust扩展的方法

    #include #include "hello_from_rust.h" int main(int argc, char *argv[]) { hello_from_rust(& ...

最新文章

  1. sap linux下配置文件,Linux下配置sapjco3
  2. MySQL安装失败问题汇总
  3. Kafka设计解析(四):Kafka Consumer解析--转
  4. 【项目实战】:Python 商铺地址分布数据分析
  5. JavaWeb黑马旅游网-学习笔记08【旅游线路详情】
  6. HaaS 物联网极客大赛来了!奖金丰厚等你来!
  7. mysql占位符 防注入_php mysql中防注入的几个小问题,麻烦大大帮我解答谢谢
  8. 安装配置Eclipse开发PHP环境配置
  9. python实现简易聊天需要登录_python编写简易聊天室实现局域网内聊天功能
  10. python怎么命名未知数_python—命名规范
  11. ugui unity3d 仪表盘_Unity3D---UGUI---UI创建以及Canvas设置
  12. codeforces#237_div2_B Marathon
  13. python抢演唱会门票_韩国演唱会抢票系统生产环境(Linux)配置记录
  14. 关于perl6的若干问题?
  15. 【地图学】高斯-克吕格(Gauss-Kruger)投影原理、应用详解(3°带、6°带)
  16. ANSYS_APDL——实例002-模态分析
  17. 正态分布的峰度和偏度分别为_关于偏度与峰度的一些探索
  18. vue3+vite2警告提示The above dynamic import cannot be analyzed by vite问题,vite中import动态引入
  19. 零基础-微信小程序入门教程
  20. RTB广告技术修炼之-流量漫游

热门文章

  1. Eureka心跳续约机制
  2. activity6快速部署流程文件
  3. Spring Boot + SpringSecurity + JWT 实现简单的 restful Api 权限控制
  4. springboot整合fastdfs
  5. xml 连表查询(2) --自关联! 查询父类name,显示父类下的所有子类
  6. phpexcel如何读和写大于26列的excel
  7. 扒网站:模板小偷 单页模板扒手
  8. Visual Studio IDE 背景色该为保护眼睛色
  9. android 仿QQ手机版
  10. [转]项目管理有感之一 沟通