精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何在 WebAssembly 中寫 “Hello World”?

開發(fā) 后端
WebAssembly 是一種字節(jié)碼格式,幾乎所有的瀏覽器 都可以將它編譯成其宿主操作系統(tǒng)的機(jī)器代碼。除了 JavaScript 和 WebGL 之外,WebAssembly 還滿足了將應(yīng)用移植到瀏覽器中以實(shí)現(xiàn)平臺獨(dú)立的需求。作為 C++ 和 Rust 的編譯目標(biāo),WebAssembly 使 Web 瀏覽器能夠以接近原生的速度執(zhí)行代碼。

[[390511]]

通過這個分步教程,開始用人類可讀的文本編寫 WebAssembly。

WebAssembly 是一種字節(jié)碼格式,幾乎所有的瀏覽器 都可以將它編譯成其宿主操作系統(tǒng)的機(jī)器代碼。除了 JavaScript 和 WebGL 之外,WebAssembly 還滿足了將應(yīng)用移植到瀏覽器中以實(shí)現(xiàn)平臺獨(dú)立的需求。作為 C++ 和 Rust 的編譯目標(biāo),WebAssembly 使 Web 瀏覽器能夠以接近原生的速度執(zhí)行代碼。

當(dāng)談?wù)?WebAssembly 應(yīng)用時(shí),你必須區(qū)分三種狀態(tài):

  1. 源碼(如 C++ 或 Rust): 你有一個用兼容語言編寫的應(yīng)用,你想把它在瀏覽器中執(zhí)行。
  2. WebAssembly 字節(jié)碼: 你選擇 WebAssembly 字節(jié)碼作為編譯目標(biāo)。最后,你得到一個 .wasm 文件。
  3. 機(jī)器碼(opcode): 瀏覽器加載 .wasm 文件,并將其編譯成主機(jī)系統(tǒng)的相應(yīng)機(jī)器碼。

WebAssembly 還有一種文本格式,用人類可讀的文本表示二進(jìn)制格式。為了簡單起見,我將其稱為 WASM-text。WASM-text 可以比作高級匯編語言。當(dāng)然,你不會基于 WASM-text 來編寫一個完整的應(yīng)用,但了解它的底層工作原理是很好的(特別是對于調(diào)試和性能優(yōu)化)。

本文將指導(dǎo)你在 WASM-text 中創(chuàng)建經(jīng)典的 “Hello World” 程序。

創(chuàng)建 .wat 文件

WASM-text 文件通常以 .wat 結(jié)尾。第一步創(chuàng)建一個名為 helloworld.wat 的空文本文件,用你最喜歡的文本編輯器打開它,然后粘貼進(jìn)去:

  1. (module
  2.     ;; JavaScript 命名空間導(dǎo)入
  3.     (import  "console"  "log" (func  $log (param  i32  i32))) ;; 導(dǎo)入 log 函數(shù)
  4.     (import  "js"  "mem" (memory  1)) ;; 導(dǎo)入 1 內(nèi)存(64kb
  5.    
  6.     ;; 我們的模塊的數(shù)據(jù)段
  7.     (data (i32.const 0) "Hello World from WebAssembly!")
  8.    
  9.     ;; 函數(shù)聲明:導(dǎo)出 helloWorld(),無參數(shù)
  10.     (func (export  "helloWorld")
  11.         i32.const 0  ;; 傳遞偏移 0 log
  12.         i32.const 29  ;; 傳遞長度 29 log(示例文本的字符串長度)
  13.         call  $log
  14.         )
  15. )

WASM-text 格式是基于 S 表達(dá)式的。為了實(shí)現(xiàn)交互,JavaScript 函數(shù)用 import 語句導(dǎo)入,WebAssembly 函數(shù)用 export 語句導(dǎo)出。在這個例子中,從 console 模塊中導(dǎo)入 log 函數(shù),它需要兩個類型為 i32 的參數(shù)作為輸入,以及一頁內(nèi)存(64KB)來存儲字符串。

字符串將被寫入偏移量 為 0 的數(shù)據(jù)段。數(shù)據(jù)段是你的內(nèi)存的疊加投影overlay,內(nèi)存是在 JavaScript 部分分配的。

函數(shù)用關(guān)鍵字 func 標(biāo)記。當(dāng)進(jìn)入函數(shù)時(shí),棧是空的。在調(diào)用另一個函數(shù)之前,函數(shù)參數(shù)會被壓入棧中(這里是偏移量和長度)(見 call $log)。當(dāng)一個函數(shù)返回一個 f32 類型時(shí)(例如),當(dāng)離開函數(shù)時(shí),一個 f32 變量必須保留在棧中(但在本例中不是這樣)。

創(chuàng)建 .wasm 文件

WASM-text 和 WebAssembly 字節(jié)碼是 1:1 對應(yīng)的,這意味著你可以將 WASM-text 轉(zhuǎn)換成字節(jié)碼(反之亦然)。你已經(jīng)有了 WASM-text,現(xiàn)在將創(chuàng)建字節(jié)碼。

轉(zhuǎn)換可以通過 WebAssembly Binary Toolkit(WABT)來完成。從該鏈接克隆倉庫,并按照安裝說明進(jìn)行安裝。

建立工具鏈后,打開控制臺并輸入以下內(nèi)容,將 WASM-text 轉(zhuǎn)換為字節(jié)碼:

  1. wat2wasm helloworld.wat -o helloworld.wasm

你也可以用以下方法將字節(jié)碼轉(zhuǎn)換為 WASM-text:

  1. wasm2wat helloworld.wasm -o helloworld_reverse.wat

一個從 .wasm 文件創(chuàng)建的 .wat 文件不包括任何函數(shù)或參數(shù)名稱。默認(rèn)情況下,WebAssembly 用它們的索引來識別函數(shù)和參數(shù)。

編譯 .wasm 文件

目前,WebAssembly 只與 JavaScript 共存,所以你必須編寫一個簡短的腳本來加載和編譯 .wasm 文件并進(jìn)行函數(shù)調(diào)用。你還需要在 WebAssembly 模塊中定義你要導(dǎo)入的函數(shù)。

創(chuàng)建一個空的文本文件,并將其命名為 helloworld.html,然后打開你喜歡的文本編輯器并粘貼進(jìn)去:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Simple template</title>
  6. </head>
  7. <body>
  8. <script>
  9. var memory = new WebAssembly.Memory({initial:1});
  10.  
  11. function consoleLogString(offset, length) {
  12. var bytes = new Uint8Array(memory.buffer, offset, length);
  13. var string = new TextDecoder('utf8').decode(bytes);
  14. console.log(string);
  15. };
  16.  
  17. var importObject = {
  18. console: {
  19. log: consoleLogString
  20. },
  21. js : {
  22. mem: memory
  23. }
  24. };
  25. WebAssembly.instantiateStreaming(fetch('helloworld.wasm'), importObject)
  26. .then(obj => {
  27. obj.instance.exports.helloWorld();
  28. });
  29. </script>
  30. </body>
  31. </html>

WebAssembly.Memory(...) 方法返回一個大小為 64KB 的內(nèi)存頁。函數(shù) consoleLogString 根據(jù)長度和偏移量從該內(nèi)存頁讀取一個字符串。這兩個對象作為 importObject 的一部分傳遞給你的 WebAssembly 模塊。

在你運(yùn)行這個例子之前,你可能必須允許 Firefox 從這個目錄中訪問文件,在地址欄輸入 about:config,并將 privacy.file_unique_origin 設(shè)置為 true

 

Firefox setting

注意: 這樣做會使你容易受到 CVE-2019-11730 安全問題的影響。

現(xiàn)在,在 Firefox 中打開 helloworld.html,按下 Ctrl+K 打開開發(fā)者控制臺。

 

Debugger output

了解更多

這個 Hello World 的例子只是 MDN 的 了解 WebAssembly 文本格式 文檔中的教程之一。如果你想了解更多關(guān)于 WebAssembly 的知識以及它的工作原理,可以看看這些文檔。 

 

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2011-11-21 14:10:53

C#

2012-08-27 09:10:05

JVMJava

2020-03-25 14:40:45

語言編程語言Hello

2014-12-19 10:07:10

C

2017-11-23 17:45:46

Yii框架IntelYii框架深度剖析

2013-06-06 13:58:14

C語言

2012-02-20 14:26:48

JavaPlay Framew

2023-09-04 07:30:03

Wasm匯編語言

2009-08-11 10:32:23

什么是Groovy

2009-07-30 13:21:17

Scala入門Hello World

2011-06-08 14:39:06

Qt 教程

2009-09-16 17:15:19

OSGi Bundle

2023-01-06 08:18:44

2021-02-01 17:29:19

FlutterHello World開發(fā)

2011-03-14 09:33:35

Mono

2021-11-26 08:22:01

Java動態(tài)開發(fā)

2014-04-11 11:36:42

NDKAndroid開發(fā)終端

2009-08-14 16:54:19

C# Hello Wo

2024-04-11 13:13:27

2011-08-05 09:48:46

iPhone Interface
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

精品国产999| 风流少妇一区二区| 久久久999精品视频| 欧美xxxx黑人| 成人午夜在线影视| k8久久久一区二区三区| 国产成人免费av电影| 一级黄色片日本| 欧美a大片欧美片| 欧美三级乱人伦电影| www.激情网| 国产高清在线| 成人精品小蝌蚪| 国产精品免费视频久久久| 久久精品99久久久久久| 自拍亚洲一区| 欧美成人精品高清在线播放| 成人一级片网站| av网址在线免费观看| 91欧美激情一区二区三区成人| 国产一区二区在线播放| 国产成人精品一区二三区| 999精品在线| 亚洲人成电影网站| 欧美性生交xxxxx| 电影一区二区| 精品国产精品自拍| 人人妻人人澡人人爽欧美一区| 麻豆导航在线观看| 成人激情小说网站| 91深夜福利视频| 在线观看免费高清视频| 国产精品一级| 欧美—级高清免费播放| 国内毛片毛片毛片毛片毛片| 一本久久青青| 亚洲第一中文字幕| 日韩高清一二三区| 国产一精品一av一免费爽爽| 欧亚一区二区三区| www黄色av| sm久久捆绑调教精品一区| 亚洲男人天堂av网| 在线成人性视频| lutube成人福利在线观看| 99v久久综合狠狠综合久久| 成人国产1314www色视频| 91av久久久| 美腿丝袜亚洲一区| 国产精品久久久精品| 欧美日韩一级黄色片| 日韩天天综合| 午夜精品久久久99热福利| 久久久国产精华液| 亚洲午夜在线| 九九热这里只有精品免费看| 国产成人久久久久| 一本一道久久综合狠狠老| 色阁综合伊人av| 性少妇xx生活| 久久在线播放| 日韩在线观看av| 国产在视频线精品视频| 久久香蕉国产| 欧美成人午夜激情在线| 黄视频网站免费看| 欧美日韩1080p| 欧美激情日韩图片| 日韩精品一区二区av| 亚洲一区二区成人| 国产成人一区二区在线| 探花国产精品一区二区| 激情综合色综合久久| 91精品国产91久久久久青草| 日韩一卡二卡在线| 国产亚洲成aⅴ人片在线观看| 日本成人黄色免费看| 色哟哟免费在线观看| 亚洲激情校园春色| 国产妇女馒头高清泬20p多| 在线观看网站免费入口在线观看国内 | 亚洲少妇屁股交4| 日韩精品久久一区二区| 玖玖在线播放| 欧美三级三级三级| 国产成人精品一区二区在线小狼| 美女午夜精品| 色小说视频一区| 美女毛片在线观看| 免费在线亚洲| 国产一区私人高清影院| 亚洲精品国偷拍自产在线观看蜜桃| www.亚洲精品| 水蜜桃一区二区三区| 免费在线看电影| 91久久奴性调教| www.黄色网| 欧美天天综合| 欧美激情中文字幕在线| 中文天堂在线资源| 波多野结衣一区二区三区| 翔田千里亚洲一二三区| 波多野结衣在线观看| 欧美午夜精品电影| 自拍视频一区二区| 天天综合精品| 国产成人精品免费久久久久| 国产片在线播放| 久久精品人人做人人爽人人| 日韩在线视频在线| 国产成人精品一区二区三区视频 | 中文字幕55页| 国产调教一区二区三区| 久久免费福利视频| 国产精品一区二区免费视频| 2024国产精品视频| 妞干网在线播放| 亚洲18在线| 国产亚洲成av人片在线观看桃| a级黄色片免费看| 日韩电影在线观看一区| 激情小说综合区| 性欧美猛交videos| 欧美欧美欧美欧美首页| 少妇按摩一区二区三区| 在线欧美视频| 国产精品10p综合二区| 在线看的av网站| 在线看国产一区二区| 香蕉视频黄色在线观看| 韩国亚洲精品| 91亚洲国产成人久久精品网站| www.成人.com| 在线观看亚洲成人| 中文字幕5566| 亚洲福利国产| 99在线看视频| 日本三级在线观看网站| 欧美一区二区大片| 午夜激情视频在线播放| 久久国产麻豆精品| 性刺激综合网| www.国产精品| 一区二区三区天堂av| 五月婷婷六月婷婷| 国产欧美一区二区三区沐欲| 欧美成人免费高清视频| 日韩激情毛片| 2019最新中文字幕| 婷婷国产在线| 日韩欧美高清视频| 天堂久久精品忘忧草| 日本aⅴ亚洲精品中文乱码| 欧美色图亚洲自拍| 日韩精品麻豆| 久久久久北条麻妃免费看| 国产喷水福利在线视频| 亚洲在线视频免费观看| 伊人网综合视频| 国产精品美女久久久| 欧美三级网色| 色综合久久久| 久久成人人人人精品欧| 国模无码一区二区三区| 精品日本高清在线播放| av男人的天堂av| 久久www免费人成看片高清| www.午夜色| 日韩视频1区| 992tv在线成人免费观看| 亚洲AV第二区国产精品| 欧美中文字幕一二三区视频| 久久精品色妇熟妇丰满人妻| 国产资源精品在线观看| 成年人看的毛片| 国产aⅴ精品一区二区三区久久| 国产精品久久99久久| 黄色免费网站在线观看| 精品99久久久久久| 青青艹在线观看| 亚洲色图19p| 手机在线看片日韩| 日本欧美韩国一区三区| 400部精品国偷自产在线观看 | 7777kkk亚洲综合欧美网站| 日韩av在线网页| 中文字幕在线观看视频一区| 一区二区三区四区在线播放| 亚洲国产综合视频| 美国三级日本三级久久99| 香港三级日本三级a视频| 国产日产一区| 91嫩草在线| 户外露出一区二区三区| 欧美成在线视频| 麻豆av电影在线观看| 日韩欧美在线综合网| 天天干在线播放| 亚洲视频一二区| 人妻少妇精品视频一区二区三区| 老鸭窝一区二区久久精品| 日本xxxxxxxxxx75| 91成人精品视频| 欧美中日韩一区二区三区| 美女日韩一区| 国产精品精品视频| 国产盗摄一区二区| 最近2019中文字幕一页二页| 色一情一乱一区二区三区| 欧美精三区欧美精三区| 一级免费在线观看| 一区二区欧美视频| 性色国产成人久久久精品| 91丨porny丨在线| av在线免费观看不卡| 日韩电影一区二区三区| 免费看一级大黄情大片| 欧美一区二区三区另类| 五月天亚洲综合情| 日韩av影院| 国产精品一区免费观看| 精品久久亚洲| 国产一区欧美二区三区| 国产精品毛片久久久久久久久久99999999| 久久久久国产视频| 性生活一级大片| 黄色av一级片| 91免费观看视频| 日本人妻一区二区三区| 国内精品写真在线观看| 九九视频精品在线观看| 久久久久国内| 国产91对白刺激露脸在线观看| 午夜日韩福利| 中文字幕乱码免费| 91视频一区| 亚洲精品国产精品国自产| 精品国产91| 日本一区视频在线观看免费| 日本成人a网站| 精品在线观看一区二区| 欧美日韩一本| 精品国产乱码久久久久久丨区2区| 日韩高清一区| 91嫩草免费看| www.国产精品一区| 国产精品二区二区三区| 91成人午夜| 国产精品区一区二区三含羞草| 18国产精品| 激情五月综合色婷婷一区二区 | 我不卡一区二区| 久久中文字幕电影| 久久av无码精品人妻系列试探| 2021久久国产精品不只是精品| 欧美精品欧美极品欧美激情| www国产成人| 日本一卡二卡在线播放| 国产精品视频一二三| 国产美女网站视频| 亚洲老妇xxxxxx| 日本在线视频中文字幕| 福利微拍一区二区| 免费在线不卡av| 欧美日韩日日夜夜| aaaa一级片| 日韩风俗一区 二区| 免费在线视频一级不卡| 中文字幕欧美日韩精品| 久久bbxx| 97人人模人人爽人人喊中文字 | 天堂网在线观看国产精品| 欧洲xxxxx| 9国产精品视频| 手机看片福利日韩| 国产美女精品一区二区三区| 高清中文字幕mv的电影| 久久久久久久久免费| 黄色免费一级视频| 一区二区三区精品久久久| 国产 日韩 欧美 在线| 欧美专区亚洲专区| 精品国自产拍在线观看| 日韩久久精品电影| 免费黄色在线看| 性色av一区二区三区红粉影视| 成人av观看| 91久久精品一区二区别| 偷拍视屏一区| 国产又大又长又粗又黄| 一区二区毛片| 午夜一区二区视频| 91婷婷韩国欧美一区二区| 天堂а√在线中文在线鲁大师| 亚洲国产综合视频在线观看| 久久久久久不卡| 欧美岛国在线观看| 番号在线播放| 国语自产在线不卡| 精品美女一区| 久久99精品久久久久久青青日本 | 福利视频免费在线观看| 久久久精品网| 中文字幕视频观看| 中文字幕精品在线不卡| 日本三级理论片| 4438成人网| 国产美女性感在线观看懂色av| 欧美激情高清视频| 欧美亚洲黄色| 欧美aaaaa喷水| 影音先锋在线一区| 日韩av一卡二卡三卡| 久久久国产综合精品女国产盗摄| 青青操视频在线播放| 欧美日韩一区不卡| 青青九九免费视频在线| 国外成人性视频| 香蕉大人久久国产成人av| 一区二区三区国| 天使萌一区二区三区免费观看| av av在线| 亚洲欧美日韩国产成人精品影院| 免费在线不卡av| 亚洲视频综合网| 蜜桃麻豆av在线| 国产欧美亚洲日本| 国产精品成人一区二区网站软件| 中文字幕视频三区| 国产精品女主播av| 日韩国产成人在线| 亚洲欧美日韩久久久久久| www.九色在线| 精品国产乱码久久久久久108| 国产中文一区| 真实乱偷全部视频| 亚洲色图制服丝袜| 国产又粗又猛又爽又黄91| 中文字幕日韩免费视频| 欧美性片在线观看| 色爱区成人综合网| 视频一区中文字幕国产| 实拍女处破www免费看| 欧美日韩一区二区免费视频| 无码精品人妻一区二区| 欧美性受xxxx黑人猛交| 日韩欧美美女在线观看| av动漫在线看| 91蜜桃视频在线| 国产免费一区二区三区四区五区| 亚洲欧美综合另类中字| 欧美日韩视频免费观看| 日本一区二区三区视频免费看| 日韩av中文字幕一区二区三区| 最近中文字幕免费| 欧美日韩在线直播| 国产黄大片在线观看画质优化| 亚洲精品欧美日韩| 韩国一区二区三区在线观看| 中文字幕在线播放一区| 欧美视频中文在线看| 国产在线小视频| 国产精品久久久久高潮| 88国产精品视频一区二区三区| 欧美xxxxxbbbbb| 午夜精品久久久| 黄色在线视频观看网站| 国产在线观看不卡| 午夜欧美理论片| 添女人荫蒂视频| 欧美性色综合网| 自由的xxxx在线视频| 国产精品自拍首页| 奇米精品一区二区三区在线观看| 来吧亚洲综合网| 亚洲国产福利在线| 人人鲁人人莫人人爱精品| 日本黄色a视频| 成人免费高清视频在线观看| 中文字幕黄色片| 精品国内亚洲在观看18黄| 风间由美性色一区二区三区四区 | 国内精彩免费自拍视频在线观看网址| 久久精品日产第一区二区三区精品版 | 国产精品极品在线观看| 欧美性久久久久| 国产精品毛片久久久久久久| 二区三区在线视频| 国产精品99导航| 欧美fxxxxxx另类| 色婷婷av777| 欧美一级免费大片| 巨茎人妖videos另类| 国产人妻互换一区二区| 91美女视频网站| 国产免费高清av| 欧美在线影院在线视频| 一区二区在线| 国产精品一二三区在线观看| 日韩欧美在线123|