谈论源码

如果您还没有听说过WebAssembly ,那么您很快就会知道。 这是业界保存最完好的秘密之一,但无处不在。 所有主要的浏览器都支持它,并且它也在服务器端使用。 它很快。 它被用于游戏。 它是万维网联盟(W3C)的开放标准,万维网联盟是Web的主要国际标准组织。

您可能会说:“哇,这听起来像是我应该学习编写的东西!” 你是对的,但你也是错的。 您不需要在WebAssembly中进行编码。 我们花一些时间来学习通常被缩写为“ Wasm”的技术。

它从哪里来的?

大约十年前,人们越来越认识到,广泛使用JavaScript不足以用于许多目的。 JavaScript无疑是成功和方便的。 它可以在任何浏览器中运行,并启用了我们今天认为理所当然的动态网页类型。 但这是一种高级语言,设计时并未考虑到计算密集型工作负载。

但是,尽管负责领先的Web浏览器的工程师通常在性能问题上达成共识,但他们在解决该问题上并不一致。 两个营地出现了。 Google开始了其Native Client项目,后来又推出了Portable Native Client变体,着重于允许用C / C ++编写的游戏和其他软件在Chrome的安全隔间中运行。 同时,Mozilla赢得了Microsoft的asm.js的支持,该方法更新了浏览器,因此可以非常快速地运行JavaScript指令的低级子集(另一个项目使C / C ++代码可以转换为这些指令)。

在这两个阵营都没有得到广泛采用的情况下,各方同意在2015年围绕一种称为WebAssembly的新标准,以asm.js所采用的基本方法为基础,共同努力。 正如CNET的斯蒂芬·尚克兰(Stephen Shankland)当时写道: “在当今的Web上,浏览器JavaScript将这些指令转换为机器代码。但是,在WebAssembly中,程序员在此过程的早些时候做了很多工作,生成了介于两种状态之间的程序这使浏览器摆脱了创建机器代码的繁重工作,但也实现了Web的承诺-该软件将在具有浏览器的任何设备上运行,而不管底层的硬件细节如何。”

在2019年12月 ,WebAssembly工作组发布了三个WebAssembly规范作为W3C的建议。

WebAssembly为可执行程序,相应的文本汇编语言和接口定义了可移植的二进制代码格式,以促进此类程序与其宿主环境之间的交互。 WebAssembly代码在低级虚拟机中运行,该虚拟机模仿可以在其上运行的许多微处理器的功能。 通过即时(JIT)编译或解释,WebAssembly引擎可以以几乎为本机平台编译的代码速度执行。

为什么现在感兴趣?

当然,最近对WebAssembly感兴趣的部分原因是最初希望在浏览器中运行更多计算密集型代码。 特别是笔记本电脑用户,他们的时间越来越多地花在浏览器上(或者,对于Chromebook来说,基本上是所有时间)。 这种趋势已迫切需要消除在浏览器中运行各种应用程序的障碍。 这些障碍之一通常是性能的某些方面,而这正是WebAssembly及其前身最初旨在解决的问题。

但是,WebAssembly不仅适用于浏览器。 在2019年, Mozilla宣布了一个名为WASI (WebAssembly系统接口)的项目,以标准化WebAssembly代码如何与浏览器上下文之外的操作系统进行交互。 通过对WebAssembly和WASI的浏览器支持的组合,编译后的二进制文件将能够在浏览器的内部和外部在不同的设备和操作系统上以接近本地的速度运行。

WebAssembly的低开销立即使其可以在浏览器之外使用,但这无疑是赌注。 运行应用程序的其他方式显然不会带来性能瓶颈。 为什么要专门使用WebAssembly?

一个重要的原因是它的可移植性。 如今,像C ++和Rust这样的广泛使用的编译语言可能是与WebAssembly关联最紧密的语言。 但是, 许多其他语言可以在WebAssembly中编译或在虚拟机中使用其虚拟机。 此外,尽管WebAssembly为其执行环境假设了某些先决条件 ,但它被设计为在各种操作系统和指令集体系结构上有效执行。 因此,WebAssembly代码可以使用多种语言编写,并可以在多种操作系统和处理器类型上运行。

WebAssembly的另一个优势来自于代码在虚拟机中运行的事实。 结果,每个WebAssembly模块都在沙盒环境中执行,并使用故障隔离技术将其与主机运行时分开。 这意味着,除其他外,这意味着应用程序与其他宿主环境隔离地执行,并且必须通过适当的API才能逃脱沙箱。

Web大会在行动

在实践中这一切意味着什么?

Enarx是WebAssembly实际应用的一个例子。

Enarx是一个提供硬件独立性的项目,可使用受信任的执行环境(TEE)保护应用程序的安全。 Enarx使您可以安全地将编译为WebAssembly的应用程序始终交付到云提供程序中,并远程执行它。 正如红帽安全工程师Nathaniel McCallum所说 :“我们这样做的方式是,我们将您的应用程序作为输入,并使用远程硬件执行证明过程。我们验证远程硬件实际上是硬件它的最终结果不仅是提高了对我们正在谈论的硬件的信任度;而且还是会话密钥,我们可以用来提供加密的代码和数据在我们刚刚要求加密证明的环境中。”

另一个例子是开放策略代理OPA,它于2019年11月宣布 ,您可以将其策略定义语言Rego 编译为WebAssembly。 使用Rego,您可以编写逻辑来搜索和组合来自不同来源的JSON / YAML数据,以询问诸如“是否允许使用此API?”之类的问题。

OPA已用于启用策略的软件,包括但不限于Kubernetes。 使用OPA之类的工具简化策略被认为是在各种不同环境中正确保护Kubernetes部署的重要步骤 。 WebAssembly的可移植性和内置的安全功能非常适合这些工具。

我们的最后一个示例是Unity 。 还记得我们在文章开头提到过WebAssembly用于游戏吗? 好吧,跨平台游戏引擎Unity是WebAssembly的早期采用者,它提供了在浏览器中运行的Wasm的首个演示,并且自2018年8月以来, 已将WebAssembly用作Unity WebGL构建目标的输出目标。

这些只是WebAssembly已经开始产生影响的几种方式。 在https://webassembly.org/了解更多信息并了解Wasm的所有最新信息。

翻译自: https://opensource.com/article/20/1/webassembly

谈论源码

谈论源码_为什么每个人都在谈论WebAssembly相关推荐

  1. 谈论源码_当我们谈论软件“替代品”时,这是什么意思?

    谈论源码 " 替代 "一词是那些易变的术语之一,其定义随视角而变化. 例如,一个人的替代品就是另一个人的规范. 通常,"替代"一词被认为是由以下事实定义的:它不 ...

  2. 谈论源码_与普通人谈论安全性

    谈论源码 大多数人1并没有完全意识到安全性是多么有趣,或者没有什么安全性专业知识可以使您对其他人了解. 2 我们知道这令人着迷,引人入胜并且很酷, 但事实并非如此. 因此,当安全人员去找其他人(在本文 ...

  3. 谈论源码_当我们谈论开放音乐时,我们指的是什么?

    谈论源码 了解Bolero最近进入公共领域后,使我想到了"开放音乐"的总体概念. 在哪里找到的? 什么特征定义开放音乐? 因此,我让最喜欢的搜索引擎帮助我完成了侦探工作,以期发现对 ...

  4. 好看的个人网站源码_新手想建个人网站,都要注意哪些关于自助建站源码的坑?...

    随着各种网站建设系统的普及.建站门槛的降低,现在个人建站越来越火,不管是工作党.学生党.自媒体人,想建设个人网站已经是非常简单的事.但是你知道自助建站都有哪些坑吗? 前段时间在某论坛里看到一个小白想要 ...

  5. 谈论源码_6,000名自由职业者谈论金​​钱,幸福和对未来的希望

    谈论源码 More than 6,000 US-based freelancers responded to a new in-depth survey. I dug through the data ...

  6. 谈论源码_5,000名开发人员谈论他们的薪水

    谈论源码 Let's dive into the most interesting results from the O'Reilly 2016 Salary Survey of 5,000 deve ...

  7. 新动态视频壁纸微信小程序源码_支持多种分类短视频-也有静态壁纸

    这是一款主打动态视频壁纸的一款微信小程序源码,当然啦,里面也是有静态壁纸的. 其实这款小程序也可以说是短视频小程序都可以,该款小程序全采集,另外支持多种流量主!! 下载链接: 新动态视频壁纸微信小程序 ...

  8. 随机头像大全,多分类带历史记录微信小程序源码_支持流量主

    这是一款头像小程序,用户可以在每一个分类随机头像,然后觉得满意可以保存到相册!! 支持多个分类,基本都是全了如下: 动漫头像 男生头像 女生头像 动漫男生 动漫女生 另外还支持多种流量主模式!!! 源 ...

  9. 客户要求提供源码_一对一直播源码定制:如你所愿,得你所想

    作者:布谷惠泽/来源:山东布谷鸟网络 移动互联网时代,产品的更新迭代层出不穷,视频直播行业的火爆,催生了不少直播程序开发公司,乘着这股火爆的劲头,一对主播源码也是一路繁华.一对一直播源码开发定制更是做 ...

最新文章

  1. 从语义(semantic)GIS和知识表达谈起
  2. clientdataset新增append新增多条记录的时候报错 key valation
  3. (操作系统)实验二 作业调度
  4. 如何快速解决繁杂的国际化替换
  5. SQLi-LABS(1~10关详解)
  6. 【Linux】一步一步学Linux——ypdomainname命令(173)
  7. 【技术维新 践行精彩】大数据与私有云
  8. 20145319 第五周学习总结
  9. 嵌入式NVR发展浅析
  10. 趣学 C 语言(三)—— 琐碎
  11. 欧姆龙PLC 通过CJ1W-EIP21实现在线编程
  12. Select, Supplement and Focus for RGB-D Saliency Detection CVPR2020 卢湖川团队
  13. python正则表达式中的冒号_正则表达式,正则匹配冒号
  14. ctfshow中Misc入门WP(超级全)
  15. 【智慧医疗】EMR vs EHR vs PHR 有何区别?
  16. vscode前端常用插件
  17. 微信消息记录如何恢复
  18. Intel® 2019网络技术研讨会圆满落幕
  19. 使用电容触摸屏做一个画板--原理(一)
  20. 机器学习四 数据的差异性

热门文章

  1. Dubbo管理控制台dubbo-admin搭建
  2. Docker容器虚拟化技术---Docker运维管理(Docker Compose)4
  3. jvm性能调优工具之 jmap使用详解
  4. android 中手势GestureDetector 的使用
  5. linux下的shell和脚本
  6. 第十二篇 Android 系统电话管理机制一--工厂模式和代理模式
  7. Linux下SCP使用技巧
  8. 离散数学引发的脑科学思考
  9. JDK源码(14)-Error、Exception
  10. JDK源码(10)-Integer(用处最多,重点讲解)