WebAssembly,真的是未来吗?

最近,我一直在谈论一些有关WebAssembly的活动,在此期间,我对JavaScript有点过分。我承认我从来都不是粉丝,并且相信JavaScript是一门残破的语言。

JavaScript的问题是众所周知的,但是您可能只能做两件事: 

  1. 从语言中消除这些问题;要么 
  2. 完全避免出现问题。

您如何消除这些问题?你不能ECMA绝不会对JavaScript进行重大更改。破坏JavaScript,您将破坏网络。
那么,如何避免这些问题呢?好吧,唯一的方法是避免完全使用JavaScript,这通常意味着要使用另一种“翻译”语言,而且还有太多的事情需要提及。 

这给我们带来了另一个问题,而这恰恰是Web的中心。 
我对布兰丹·艾希(Brendan Eich)表示同情–设计Javascript的程序员。显然,他只花了10天的时间...但是我可以想象那些日子的感觉。星期一早上9点之前,他可能会被急忙送去一些东西。我们都知道深夜,浓咖啡和压力过大会影响输出质量。从本质上讲,不到两周的工作量最终使Javascript成为了网络的“汇编语言”。这不是一个好的状况。
幸运的是,有一个潜在的解决方案–采用WebAssembly构建您的Web应用程序。我将尝试说服您为什么选择。 
什么是Web Assembly?
简而言之,这就是网络开发的未来。 

  1. 这是一种新语言:WebAssembly代码以二进制格式表示,可将其整齐地转换为文本格式,因此可读性,可写性以及最重要的是– debuggable.
  2. 这是对浏览器的改进:浏览器将理解二进制格式,这意味着我们将能够编译压缩比现在的JavaScript小的二进制捆绑软件。有效载荷较小意味着交付速度更快,并且取决于编译时的优化机会,WebAssembly捆绑包的运行速度也可能比JavaScript快!
  3. 这是一个编译目标:其他语言可以在整个网络平台堆栈中获得一流的二进制支持。

有什么好处?
首先,它快速高效–WebAssembly通过利用多种平台上可用的通用硬件功能,以接近本机的速度执行。如果您拥有最新的nVidia GPU,将非常有帮助。
其次,它很安全–WebAssembly是一种内存安全的沙盒执行环境,可以在现有的JavaScript虚拟机内部实现。它还将强制执行浏览器的同源和权限安全策略。
如上所述,它也是开放且可调试的。它直接翻译成人类可读的文本。因此,您可以“查看源代码”并仍然阅读。而且,大多数最新的浏览器都能够调试WASM。随着时间的流逝,这些工具的功能将不断增强。 
最后,WebAssembly旨在维护Web的无版本,向后兼容的性质。它可以调入和调出JavaScript上下文,因此可以访问JavaScript可用的相同浏览器功能。
这对JavaScript意味着什么?
在我回答这个问题之前,让我们先备份一下。让我带您回到时间,在节点和做出反应之前,在骨干之前,在jQuery之前,现在再回溯22年前…… 
那是1984年,我11岁,学习如何在Commodore 64上编程游戏。我从BASIC开始,这很容易学习,让我用整洁的小技巧让我的家人赞叹不已。但这很慢。非常慢!
BASIC是一种脚本语言,与所有脚本语言一样,它是先逐行解释的,然后将即时编译为二进制,最后执行。 
很快就变得很明显,如果我想做得更快一些,那我就必须学习如何用汇编语言进行编码。有时,您需要接触裸机或至少尽可能接近裸机。 
快进到今天,同样的原则适用;仅仅因为我们的处理器可以处理它, 并不意味着我们不应该优化代码
但请清楚一点,我并不是在要求人们学习如何在原始WASM中进行编码,我只是在说Web的“机器代码”实际上应该是机器代码!
我为什么要使用WebAssembly?
因为这是正确的事情。
我们需要WebAssembly,因为它像JavaScript一样灵活,但仍然遭受我一开始提到的“语言折断”问题。
WebAssembly使我们可以访问一组可以构建几乎所有内容的低级构建块。但是关键是底层的。它定义了原语,包括各种类型和对这些类型的操作,它们的字面形式,控制流,调用以及许多其他内容,甚至包括堆。这些是非常简单的原语。没有什么花哨。没有复杂的对象系统(原型或其他),也没有内置的自动垃圾收集器。
WebAssembly对具有操作码名称的字节码指令进行编码。就像任何其他汇编语言一样,格式是每条指令一个简单的操作码/操作数。每个操作码(例如“ get_local”)直接转换为二进制代码,在这种情况下为“十六进制20”。

因此,让我们谈谈Web程序集的结构。
WebAssembly具有4个值类型:

  • i32:32位整数
  • i64:64位整数
  • f32:32位浮点
  • f64:64位浮点

与任何图灵计算机一样,我们需要内存。对于网络装配,我们使用所谓的线性内存。这是一个范围,从偏移量0到扩展到可变的内存大小。该大小始终是WebAssembly页面大小的倍数,该大小固定为64K。可以通过grow_memory运算符动态增加内存大小,并通过页面大小(即64K)增加内存大小。
内存是一个字节数组,因此,它是沙盒–它不访问其他线性存储器,执行堆栈,局部变量或其他进程存储器。
要访问线性内存,我们需要加载操作码集。这里的模式是每个操作码的地址都是32位或64位整数或浮点数。 

  • i32.load:将4个字节作为i32加载
  • i64.load:将8个字节作为i32加载
  • f32.load:加载4个字节作为f32
  • f64.load:将8字节加载为f32

以及存储的操作码集。此处使用相同的模式:

  • i32.store:存储4个字节
  • i64.store:存储8个字节
  • f32.store:存储4个字节
  • f64.store:存储8个字节

我们可以使用“ get_local”和“ set_local”获取并设置局部变量,使用; get_global'和“ set_global”的全局变量也是如此。 
然后,我们有了一些控制结构。例如分支和比较。 

我们还可以使用“ call”和“ call_indirect”来调用函数。每个函数都有一个由返回类型和参数组成的签名。在这里,我们具有正常调用或间接调用的能力,其中间接调用是对调用预期和函数签名的动态比较。
最后,我们有运算符……对于每个程序员的日常工作(例如加法,减法,乘法,移位和旋转),它们都很方便。

因此,我们可以在这里看到程序由您希望使用低级语言的所有正常部分组成–更重要的是,可以轻松调整编译器以产生这种二进制格式。 
这更有意义,因为我们实际上可以回到开发软件的正常模式……用高级语言编写,直接编译为机器代码并执行。 Web开发缺少这种模式已有太长时间了!
我今天可以使用吗? 
绝对。我第一次公开谈论WASM时,全球支持水平为75%。 
到今天为止,这个数字是 全球所有用户的85%。这很重要。还有一段距离,但是如果我们忽略IE,Opera和其他适用于Android的浏览器,那么我们可以认为它几乎是普遍支持。 
那么有什么收获呢?没有什么不容易克服的。 
再次,当我去年7月(2018年)公开发言时,我说编译器支持是最大的障碍,因为我们有效地限于LLVM,但是在过去的一年中发生了很多变化…… 

只要看看上面的列表!短短几个月内发生了巨大的变化,现在所有大公司都对此给予了大力支持。 
关于WASM的最好的事情之一是很容易表达诸如线程和SIMD(单指令,多数据)之类的东西。这意味着您实时视频流效果处理器的并行处理管线繁琐。
尽管存在问题,但Javascript多年来为我们提供了很好的服务。有一些显着的增强功能使我们拥有了今天的Web。最值得注意的可能是XMLHttpRequest。没有这个,就不会有单页应用程序! JavaScript有很多优点,但是现在是进行更改的时候了,该更改应该是WebAssembly及其带来的可能性。我真的相信这是网络开发的一场革命,您也应该这样做。 

在脸书上分享
Facebook
分享到Twitter
Twitter
在linkedin上分享
LinkedIn

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

最近的帖子

文化,技能和能力//如何成为数据驱动型组织

在我们的白皮书“如何成为一个由数据驱动的组织中”,我们写了一个组织需要采取的五个步骤,它们是:成果:定义目标和指标以确保获得清晰和可衡量的结果分析:实施和共享分析,以改善数据驱动型决策创新:通过假设测试和学习来测试假设数据平台:获得新见解

Read More »

数据平台//如何成为更具数据驱动力的组织

这是我们关于“如何成为一个由数据驱动的更多组织”系列文章中的第四篇,我们将专注于数据平台。在这一点上,大多数人开始深入研究Data Lakes vs Data Warehouse的技术方面,但是我们想让我们回到一个更高的水平,并要求

Read More »

创新//如何成为更具数据驱动力的组织

在我们的白皮书“如何成为一个由数据驱动的组织中”,我们写了一个组织需要采取的五个步骤,它们是:成果:定义目标和指标以确保获得清晰和可衡量的结果分析:实施和共享分析以改善以数据为依据的决策制定创新:通过假设检验和学习来检验假设数据平台:获得新

Read More »

搜索博客

敏捷 Management Made Easy!

All About 敏捷

凯利·沃特斯(Kelly Waters)

“’Agile’ is one of the biggest buzzwords of the last decade. 敏捷 methods often come across as rather more complicated than they really are. This book is an attempt to unravel that complexity. To simplify the concepts. This book breaks the concepts into small bite-sized pieces that are easy to understand and easy to implement and delivers the message in a friendly and conversational style. Allaboutagile.com is one of the most popular blogs about agile on the web. ”

凯利·沃特斯

敏捷 101 is available to purchase. GAME ON!

敏捷 101

艾玛·霍普金森火花

“尽管有很多方法可以根据您拥有的团队和想要的学习成果来改变游戏,但是游戏的基本流程是所有人共有的。”
艾玛·霍普金森火花

我们为什么制作游戏?

怎么玩游戏?

伦敦

101种方式Limited
城市路145号
伦敦
EC1V 1AZ
英国

阿姆斯特丹

101种方式BV
Weesperstraat 61-105
1018 VN阿姆斯特丹
荷兰

联系我们

如果您想与101 Ways的团队之一联系,请填写以下表格或给我们发送电子邮件: contact-us@101ways.com.