一、模块

模块这个概念在不同的语言中有不同的定义,但基本上都差不多,比如在这里定义为“The distributable, loadable, and executable unit of code in WebAssembly is called a module.”可以分发、加载、执行的单元。从应用上看,模块相对于动态库可能会更灵活一些,不过话说回来,还是得看具体的应用场景。
WASM的动态链接就是以模块为基础进行的,如果简单的理解成动态库也不是不可以。模块可以实例化,实例化以后就可以运行并控制不同的状态访问。同时,多个模块间还可以共享状态,这个就比较有意思了,因为一般在动态库设计中,一般是不倾向于这种设计,虽然也可以实现,但问题不少。

二、主要字段

1、import
其导入是非常觉的一种标识符,无论是在任何语言中,不可能一个模块包打天下,所以就需要导入其它模块的函数、变量、内存等。这其中,函数是第一位的。在WASM中,还有全局操作符、线性内存和表和导入。所有的导入都有两个隐含的属性即导出名称和模块名称。导入可以更好的让模块间配合工作,不过在Webassembly中,并没有定义导入名称的解释方式,所以在Web和主机等情况下,它们的细节略有不同。
2、export
有导入就有导出,这个是成对的,不然,你导入啥东西。导出一般要有三个字段即名称、类型和索引空间类型。

3、start
这个类似于硬件中的boot,需要定义一个起始点来发动整个模块,但这个Start函数不能有参数和返回值,它即可以是导入也可以是导出,但是只能有一个。start 函数将在模块加载之后和对模块函数的任何调用完成之前调用。

4、global
这个就好理解了,就是全局变量,包括值类型,可变类型和表达式。

5、memory
这个可以理解成堆的一块内存,它是线性的。

6、data
这个类似于一个数组,它和memory的不同可能不是特别强烈。可能知道编译过程中对内存处理的分节就好理解,因为其中有一个.data段。

7、table
表格可以理解成函数的数组指针。也就是说表可以用来索引函数进行引用。
8、elements
元素默认值是标记值,它包含一个元素段数组(可能为空)。其实可以理解成上面所谓的内存等的内部的值或者表达式。
9、function and code
其实这个类似于编译器处理函数,既要有函数签名又要有相关的代码段(函数体)。

三、索引空间

在模块中,除了有上述的功能字段还有索引空间,它由运算符和部分静态索引组成。其主要有以下几种:
1、the function index space
函数索引空间索引用于所有导入的和内部定义的函数定义,根据模块中的定义顺序(由二进制编码定义)分配单调递增的索引。因此,索引空间从0开始,函数导入(如果有)后跟模块中定义的函数。
函数索引空间用于Calls(调用者),识别直接调用的被调用者;具体的元素;Exports(导出),从而确定哪些函数向外输出;启动函数,用于标识实例完全初始化时调用哪个函数。

2、the global index space
全局索引空间索引所有导入的和内部定义的全局定义,根据模块中的定义顺序(由二进制编码定义)分配单调递增的索引。因此,索引空间从零开始,全局导入(如果有),然后是模块中定义的全局变量。
全局索引空间用于全局变量访问操作符,识别要读/写的全局变量;数据段,将数据段的偏移量(在线性内存中)定义为全局变量的值。

3、the linear memory index space
线性内存索引空间索引所有导入的和内部定义的线性内存定义,根据模块中的定义顺序(由二进制编码定义)分配单调递增的索引。因此,索引空间从零开始,内存导入(如果有),然后是模块中定义的内存。线性内存索引空间仅由 数据部分使用。在 MVP 中,最多有一个线性内存,所以这个索引空间只是一个占位符,用于当可以有 多个线性内存时。

4、the table index space
表索引空间索引所有导入的和内部定义的表定义,根据模块中的定义顺序(由二进制编码定义)分配单调递增的索引。因此,索引空间从零开始,表导入(如果有),后跟模块中定义的表。表索引空间仅由元素部分使用。在 MVP 中,最多有一个表,所以这个索引空间只是一个占位符,用于当可以有 多个表时。

其实所谓空间也好理解,就是为了更高层次划分区间。既可以用来识别不同的标识符,又可以方便界定各种函数变量的范围,一举多得。

四、总结

其实接触的语言或者开发工具越多,越会发现,其中整体的思想是相通的,目的都是为了使开发更容易简便,当然,这是相对来说的。不过在外面表面上,大有不同,主要原因在于,其针对的应用场景有所不同。就比如c\c++和Java,有没有虚拟机,有没有GC就是设计此门语言开始的初衷,目的指向非常明确。但后来Java的应用场景扩大到现在的情况,就不是开始想法所能控制的。
与时俱进,善于打破思想上的牢笼,善于自我批评和自我反省,敢于走出舒适区,敢于迎接新的挑战,勤奋努力,勇于实践,就是胜利。

webassembly学习-modules相关推荐

  1. WebAssembly 学习笔记

    第一次听到 WebAssembly 的是来自于同事,他描述了一种不通过 JavaScript编程语言也能够实现前端开发的方式.刚听到的时候很惊艳,想到前端开发竟然可以避开JavaScript,简直神乎 ...

  2. webassembly学习

    webassembly webassembly学习 基本理论 webassembly介绍 wasm介绍 基本信息 为什么需要webassembly ASM.js(wasm的前身) wasm会替换jav ...

  3. Webassembly 学习3 -- 打造web端的aac 播放器

    1.引言 aac 是很常见的音频格式,压缩率比mp3 还高,H5 支持从audio 标签文件读取aac 文件并播放,但不支持从网络流中直接读取.这里借助webassembly 技术,将aac 转码成p ...

  4. Qt+WebAssembly学习笔记(六)win10+Qt6.4.0rc1开发环境搭建

    前言: 因项目的缘故,笔者有段时间没测试了,官方也修复了很问题,笔者今天记录下最新版本环境搭建 一.安装Qt预编译库 笔者只是测试下,所以就不自己编译了,直接使用官方的预编译库 有兴趣的小伙伴要注意下 ...

  5. webassembly学习-安全控制

    一.为什么要提安全 学过编程的人都知道,代码的安全有两类:一类是代码本身编写的问题,比如内存访问越界,流控制等等:另外一种是代码执行期间的错误,同样有代码注入和劫持控制流等.而这些错误,轻则造成程序执 ...

  6. 十三、Vuex学习笔记

    一.Vuex是做什么的? 官方解释:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式. 它采用 集中式存储管理 应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. ...

  7. Vue学习笔记(5)(Vuex)

    Vue2.x学习笔记.原视频教程:最全最新Vue.Vuejs教程,从入门到精通_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili Vuex 认识Vuex 官方解释:Vuex 是一个专为 Vue.js ...

  8. 解读 2018之Go语言篇(下):明年有哪些值得期待?

    2018年接近尾声,InfoQ 策划了"解读 2018"年终技术盘点系列文章,希望能够给读者清晰地梳理出重要技术领域在这一年来的发展和变化.本篇文章是Go语言2018年终盘点的下篇 ...

  9. wasm-simd入门(卷积指令)

    本文对卷积过程中常用的一些wasm指令做了整理,欢迎转载 编译条件:-msimd128 头文件:#include <wasm_simd128.h> 变量类型: v128_t wasm_v1 ...

最新文章

  1. shellinabox安装
  2. 为什么我们有时不用配置java环境变量?
  3. pycharm怎么查看代码结构,看函数定义、变量定义、类定义索引、目录?(左方structure)
  4. 计算机组成实验v代表什么,2014计算机组成原理实验指导V1.3.docx
  5. 除了HTML、CSS与JS,现在WASM也是标准Web语言
  6. react学习(15)---antdesign form两种验证
  7. nodejs通过响应回写的方式渲染页面资源
  8. 使用GUID作为数据库主键与INT作为主键的性能测试
  9. Matplotlib随记2
  10. /dev/mapper/centos-root 100% 虚拟机硬盘空间占满
  11. 详细教程:编译Linux最新内核
  12. 数字电路与逻辑设计——加法器实现
  13. 【转】货币的未来取决于打破关于货币历史的虚构谎言
  14. c语言 虚拟示波器软件下载,多功能串口虚拟示波器(DataScope)
  15. 论坛介绍 | COSCon'22 开源硬件(H)
  16. HTML5期末大作业:抗疫主题网站设计(14页) HTML+CSS+JavaScript web课程设计网页规划与设计...
  17. 支付宝 APP登录 获取用户信息 PHP
  18. 内网渗透之PPT票据传递攻击(Pass the Ticket)
  19. 分类Classification:决策树Decision Tree
  20. 使用cordova把h5应用打包成apk

热门文章

  1. 出栈顺序(栈和队列)B
  2. 中国压电材料取得突破性进展,未来B超机可折叠弯曲
  3. onlyoffice5.4.2离线包的制作—解决中文字体问题
  4. bios设置使用集成显卡输出视频信号后,显示器黑屏了
  5. 好书收藏:读书知多少
  6. 最佳实战 | 如何使用腾讯云微搭从0到1开发企业门户应用
  7. 宏定义编程软件_什么是计算机编程? 定义软件开发。
  8. 【Linux】创建新用户 sudo配置,添加信任
  9. Ural_1671. Anansi's Cobweb(并查集)
  10. Android更换logo之后小米手机和部分三星手机通知栏的小图标未显示正确的图标问题