首页 > 编程语言 >WebAssembly核心编程[2]:类型系统

WebAssembly核心编程[2]:类型系统

时间:2024-02-01 09:03:46浏览次数:34  
标签:WebAssembly Global 核心 编程 引用 Memory 类型 Table

对于绝大多数编程语言来说,类型都是编程的基础,WebAssembly自然也不例外。总的来说,WebAssembly涉及的类型不多,很好掌握,接下来我们就来介绍一下WebAssembly编程涉及到的几种类型。本篇内容参考WebAssembly Spec

一、Value Type
二、Function
三、Memory
四、Table
五、Global
六、External

一、Value Type

值类型(Value Type)在WebAssembly中主要分为三种,它们分别是数字(Number )、向量(Vector)和引用(Reference)。

image

1. Number

WebAssembly涉及数字只包含整数和浮点数,具体又有32位(4字节)和64位(8字节),所以WebAssembly支持的数字类型只包括i32、i64、f32、f64四种。

image

2. Vector

WebAssembly对单指令多数据(SIMD)提供了原生的支持,这进一步提升了它的性能。SIMD指令将一个128位的向量作为操作数,我们可以将多个整数或者浮点数组合成一个向量。比如某个支持i32的指令,采用SIMD方式进行执行理论上可以获得4倍的性能。

image

3. Reference

顾名思义,一个引用类型的变量代表一个指向某个目标对象的指针。目前WebAssembly设计的引用类型只有两种,一种是引用来源于宿主应用的JavaScript对象。由于对于wasm模块来说,这是一种外部引用,所以被定义成externref。另一种被命名位funcref的则是对自身Native函数的引用。

image

二、Function

函数本质上一组输入参数与一组输出结果的映射。虽然WebAssembly的函数目前还不支持返回多个结果,但是后续版本肯定会支持。输入参数列表和输出结果列表可以统一表示为“结果类型(resulttype)”,具体来说就是一组值类型(数字、向量和引用)的有序组合,所以函数类型自然就表示成一个resulttype对象到另一个resulttype的映射。

image

image

三、Memory

Memory和Table都是一组连续的、限定长度的“区间”,所以WebAssembly专门定义了limits这样一个类型来表示“长度限制”。一个limits必需使指定最小边界(min),可缺省的最长边界如果没有指定,意味着可以无限“扩容”。

image

Memory以单纯的二进制字节的形式来存储一组数据。由于数据类型确定,我们只需要指定“长度限制”,所以Memory可以通过limits来表示。

image

四、Table

Memory和Table的不同指出在于它们存储的元素类型,前者为单纯的二进制字节,后者则是指定类型的对象。具体来说,Table的元素为“引用”,要么是指向宿主应用提供的JavaScript对象(externref),要么是自身定义的函数(funcref)。

image

五、Global

用来表示“全局变量”的Global存储值类型(数字、向量和引用),mut(Mutable)用来表示对应的全局变量是否允许修改。

image

六、External

这里External表示可以导出的,作为宿主程序的“外部”对象。宿主应用可以从加载的wasm模块导出的对象类型包括:函数、Table、Memory和Global。

image

标签:WebAssembly,Global,核心,编程,引用,Memory,类型,Table
From: https://www.cnblogs.com/artech/p/17999128/wasm_types

相关文章

  • Flink之状态编程 值状态(ValueState)列表状态(ListState)映射状态(MapState)归约状态(Reducin
    Flink之状态编程值状态(ValueState)列表状态(ListState)映射状态(MapState)归约状态(ReducingState)聚合状态(AggregatingState)广播状态(BroadcastState)Flink之状态编程一、按键分区状态(KeyedState)1.1、值状态(ValueState)1.1.1、定义1.1.2、使用案例1.2、列表状态(ListState)1.2.1......
  • java flink(二十六) 实战之电商黑名单过滤 Flink CEP编程实现、什么是CEP、CEP组合模式d
    javaflink(二十六)实战之电商黑名单过滤FlinkCEP编程实现、什么是CEP、CEP组合模式demo、CEP循环模式demo什么是CEP:1、复杂事件处理2、Flink中实现复杂事件处理库3、CEP允许在无休止的事件中检测事件模式,让我们有机会掌握数据中的重要部分4、一个或多个由简单事件构成的事......
  • flink状态编程
    flink状态编程简单记录一下最近工作中常用的flink状态flink中可以创建不同类型的状态,如键控状态(KeyedState)和操作符状态(OperatorState)等。状态管理是在流处理的整个过程中保持状态的一种能力,它让我们能够在复杂的事件处理和流转换中保留重要的状态信息,例如:聚合结果、过滤条件......
  • linux之socket编程
    linux之socket编程源IP地址与目的IP地址任何主机想要进行网络通信,首先就要拥有IP地址!因为每台主机都有网络地址就注定了有——源IP与目的IP消息从哪里发送——发送主机的IP就是源IP消息要到哪里——接收消息的主机的IP就是目的IP!在IP报头里面就包含了源IP与目的IP端口号......
  • 质量保障工作的核心Roadmap
    之前写过不少关于质量保障体系建设的文章,围绕质量保障这个话题,也分享了很多落地实践案例。公众号后台又同学留言问了这样一个问题:如何在繁琐的工作中抓住质量保障工作的重点,有条不紊的开展工作?这篇文章,分享一下我自己总结的开展质量保障工作,希望能帮到大家。 下图是我结合自......
  • python网络编程笔记(一)Socket 编程入门
    一:Socket简介套接字起源于20世纪70年代加利福尼亚大学伯克利分校版本的Unix,即人们所说的BSDUnix。因此,有时人们也把套接字称为“伯克利套接字"或"BSD套接字”。一开始,套接字被设计用在同-台主机上多个应用程序之间的通讯BSDSocket接口是TCP/IP网络的API在Linux,Unix和W......
  • python网络编程(二)模拟ssh远程执行命令
    1、项目需求:要实现一个像ssh远程连接工具一样,在终端输入命令,返回对应的结果。比如window的dos命令:dir:查看目录下的文件ipconfig:查看网卡信息tasklist:查看进程列表linux的命令:ls:查看目录下的文件ifconfig:查看网卡信息ps-aux:查看进程列表2、项目分析:这......
  • python网络编程(三)实现文件下载功能
    一:目标:要实现一个客户端从服务端下载文件的功能,这个在模拟ssh远程执行命令的基础上再做修改就可以了二:分析:1、要规定客户端获取文件的格式:下载文件用get文件名,比如要下载服务端的a.txt,就写成geta.txt2、因为我目前是客户端和服务端都是在一台服务器上,我模拟的时候就把......
  • python网络编程(四)用面向对象方式实现文件上传下载
    一:背景在之前已经实现了文件的下载,现在再来完善上传功能,并且使用面向对象来封装,让代码看起来更加清楚明了。二:使用规则和运行结果下载文件,下载格式get文件名get空格后面直接接文件名称,在服务端存放的文件名上传文件,上传格式put文件路径+文件名因为是上传,上传的时......
  • Visual Studio 2015+Qt编程,如何使用qDebug()打印出信息
    问题:VisualStudio2015+Qt编程,调试程序的时候,使用qDebug()发现在vs的输出界面没有打印出qDebug()的信息。找到了最容易的解决办法(此方法只可以解决此解决方案的):1.项目文件名那里鼠标右键,点击属性,打开属性页 2.找到连接器->系统->子系统 3.将子系统由窗口改为控制台,点击......