เว็บแอสเซมบลี

จากวิกิพีเดีย สารานุกรมเสรี
เว็บแอสเซมบลี
กระบวนทัศน์structured; stack machine[1]
ผู้ออกแบบW3C
ผู้พัฒนา
เริ่มเมื่อมีนาคม 2017; 7 ปีที่แล้ว (2017-03)
สัญญาอนุญาตApache License 2.0
นามสกุลของไฟล์
  • .wat (text format)
  • .wasm (binary format)
เว็บไซต์webassembly.org
ได้รับอิทธิพลจาก

เว็บแอสเซมบลี (WebAssembly บางครั้งย่อว่า Wasm) คือรูปแบบของรหัสไบนารี่ที่พอร์ตได้ และรูปแบบข้อความที่สอดคล้องกันสำหรับไฟล์สั่งทำการ[2] รวมถึงอินเทอร์เฟซซอฟต์แวร์ สำหรับอำนวยความสะดวกในการโต้ตอบระหว่างโปรแกรมดังกล่าวและสภาพแวดล้อมของเจ้าบ้าน[3][4][5][6]

เป้าหมายหลักของเว็บแอสเซมบลีคือการเปิดทางไปสู่โปรแกรมประยุกต์ที่มีประสิทธิภาพสูงบนหน้าเว็บ "แต่ไม่ได้มีการอนุมานมาเพื่อเว็บโดยเฉพาะ หรือให้คุณสมบัติเฉพาะของเว็บ ดังนั้นจึงสามารถนำมาใช้ในสภาพแวดล้อมอื่นได้เช่นกัน"[7] เว็บแอสเซมบลีเป็นมาตรฐานแบบเปิด [8] [9] และมีเป้าหมายที่จะสนับสนุนภาษาใดๆ บนระบบปฏิบัติการใดๆ[10] และในทางปฏิบัติ ภาษาโปรแกรมที่ได้รับความนิยมสูงสุดทั้งหมดมีการรองรับอย่างน้อยในระดับหนึ่งแล้ว

ประกาศใน ค.ศ. 2015 (2015) และเปิดตัวครั้งแรกใน มีนาคม ค.ศ. 2017 (2017-03) WebAssembly กลายเป็นคำแนะนำของ World Wide Web Consortium เมื่อวันที่ 5 ธันวาคม 2019 [11] [12] [13] และได้รับ รางวัล Programming Languages Software Award จาก ACM SIGPLAN ในปี 2021 [14] World Wide Web Consortium (W3C) รักษามาตรฐานโดยได้รับการสนับสนุนจาก Mozilla, Microsoft, Google, Apple, Fastly, Intel และ Red Hat

ึความเป็นมา[แก้]

ชื่อเว็บแอสเซมบลีนั้นตั้งตามภาษาแอสเซมบลี ซึ่งเป็นคำที่มีมาตั้งแต่ปี 1950 ความหมายโดยนัยของชื่อนี้คือการนำการเขียนโปรแกรมที่มีลักษณะคล้ายแอสเซมบลีมาสู่เว็บ ซึ่งจะทำงานฝั่งไคลเอ็นต์ — ผ่านทางเว็บเบราว์เซอร์ของผู้ใช้คอมพิวเตอร์ เพื่อให้บรรลุเป้าหมายนี้ได้ เว็บแอสเซมบลีต้องทำงานได้บนฮาร์ดแวร์ที่หลากหลายกว่าภาษาแอสเซมบลีตัวจริง

เว็บแอสเซมบลีได้รับการประกาศครั้งแรกในปี 2015 > และการสาธิตครั้งแรกคือการใช้งาน Angry Bots ของ Unity ใน Firefox, Google Chrome, และ Microsoft Edge เทคโนโลยีที่เป็นบรรพบุรุษของเว็บแอสเซมบลีคือ asm.js จาก Mozilla และ Google Native Client และการใช้งานเบื้องต้นนั้นขึ้นอยู่กับชุดคุณลักษณะของ asm.js โดยเทคโนโลยี asm.js นั้นให้ความเร็วในการประมวลผลโค้ดที่ใกล้เคียงกับโค้ดที่เป็น native ต่อฮาร์ดแวร์แล้ว[15] [16] และถือได้ว่าเป็นทางเลือกที่ใช้งานได้สำหรับเบราว์เซอร์ที่ไม่รองรับเว็บแอสเซมบลีหรือปิดใช้งานไว้เนื่องด้วยเหตุผลด้านความปลอดภัย

ในเดือนมีนาคม 2017 การออกแบบ ผลิตภัณฑ์ที่ใช้งานได้ขั้นต่ำ (minimum viable product หรือ MVP) ได้รับการประกาศว่าเสร็จสิ้นและระยะการแสดงตัวอย่างสิ้นสุดลง ปลายเดือนกันยายน 2560 มีการเปิดตัว Safari 11 พร้อมรองรับเว็บแอสเซมบลี ในเดือนกุมภาพันธ์ 2018 คณะทำงานเว็บแอสเซมบลีได้เผยแพร่ร่างการทำงานสาธารณะสามฉบับสำหรับข้อกำหนดหลัก, อินเทอร์เฟซ JavaScript และ Web API

ในเดือนมิถุนายน 2019 Chrome 75 เปิดตัวพร้อมเธรดเว็บแอสเซมบลีที่เปิดใช้งานไว้โดยปริยาย[17]

หมายเหตุ[แก้]

ดูเพิ่ม[แก้]

อ้างอิง[แก้]

  1. "WebAssembly/design/Semantics.md". GitHub (ภาษาอังกฤษ). สืบค้นเมื่อ 2021-02-23. WebAssembly code can be considered a structured stack machine; a machine where most computations use a stack of values, but control flow is expressed in structured constructs such as blocks, ifs, and loops. In practice, implementations need not maintain an actual value stack, nor actual data structures for control; they need only behave as if they did so.
  2. Mozilla. "Understanding WebAssembly text format". MDN Web Docs (ภาษาอังกฤษแบบอเมริกัน). สืบค้นเมื่อ 9 December 2019.
  3. "Introduction — WebAssembly 1.0". webassembly.github.io. สืบค้นเมื่อ 18 June 2019. WebAssembly is an open standard...
  4. "Introduction — WebAssembly 1.0". webassembly.github.io. สืบค้นเมื่อ 18 June 2019. WebAssembly is a ... code format
  5. "Conventions — WebAssembly 1.0". webassembly.github.io. สืบค้นเมื่อ 17 May 2019. WebAssembly is a programming language that has multiple concrete representations (its binary format and the text format). Both map to a common structure.
  6. "Introduction — WebAssembly 1.0". webassembly.github.io. สืบค้นเมื่อ 18 June 2019. ... this specification is complemented by additional documents defining interfaces to specific embedding environments such as the Web. These will each define a WebAssembly application programming interface (API) suitable for a given environment.
  7. "Introduction — WebAssembly 1.1". webassembly.github.io. สืบค้นเมื่อ 2021-02-19. Its main goal is to enable high performance applications on the Web, but it does not make any Web-specific assumptions or provide Web-specific features, so it can be employed in other environments as well.
  8. Haas, Andreas; Rossberg, Andreas; Schuff, Derek L.; Titzer, Ben L.; Holman, Michael; Gohman, Dan; Wagner, Luke; Zakai, Alon; Bastien, JF (14 June 2017). "Bringing the Web Up to Speed with WebAssembly". SIGPLAN Notices. 52 (6): 185–200. doi:10.1145/3140587.3062363. ISSN 0362-1340. While the Web is the primary motivation for WebAssembly, nothing in its design depends on the Web or a JavaScript environment. It is an open standard specifically designed for embedding in multiple contexts, and we expect that stand-alone implementations will become available in the future.
  9. "Outside the web: standalone WebAssembly binaries using Emscripten · V8". v8.dev. สืบค้นเมื่อ 2020-07-28.
  10. "Wasmer - The Universal WebAssembly Runtime". wasmer.io. สืบค้นเมื่อ 2021-02-19. Compile everything to WebAssembly. Run it on any OS or embed it into other languages.
  11. World Wide Web Consortium. "WebAssembly Core Specification". World Wide Web Consortium (W3). สืบค้นเมื่อ 9 December 2019.
  12. Couriol, Bruno. "WebAssembly 1.0 Becomes a W3C Recommendation and the Fourth Language to Run Natively in Browsers". infoq.com. สืบค้นเมื่อ 9 December 2019.
  13. "WebAssembly Specification — WebAssembly 1.1". webassembly.github.io. สืบค้นเมื่อ 2021-03-22.
  14. "Programming Languages Software Award". www.sigplan.org.
  15. "Staring at the Sun: Dalvik vs. ASM.js vs. Native". blog.mozilla.org. August 2013. สืบค้นเมื่อ 7 December 2019. Even discarding the one score where asm.js did better, it executes at around 70% of the speed of native C++ code.
  16. Arjun, Jangda, Abhinav Powers, Bobby Berger, Emery Guha (2019-01-25). Not So Fast: Analyzing the Performance of WebAssembly vs. Native Code. OCLC 1106328738.
  17. "WebAssembly Worker Based Threads - Chrome Platform Status". chromestatus.com. สืบค้นเมื่อ 2022-02-19.

อ้างอิงผิดพลาด: ป้ายระบุ <ref> ชื่อ "techcrunch2015" ซึ่งนิยามใน <references> ไม่ถูกใช้ในข้อความก่อนหน้า
อ้างอิงผิดพลาด: ป้ายระบุ <ref> ชื่อ "ars" ซึ่งนิยามใน <references> ไม่ถูกใช้ในข้อความก่อนหน้า
อ้างอิงผิดพลาด: ป้ายระบุ <ref> ชื่อ "bytecode" ซึ่งนิยามใน <references> ไม่ถูกใช้ในข้อความก่อนหน้า
อ้างอิงผิดพลาด: ป้ายระบุ <ref> ชื่อ "AcceleratingWeb" ซึ่งนิยามใน <references> ไม่ถูกใช้ในข้อความก่อนหน้า
อ้างอิงผิดพลาด: ป้ายระบุ <ref> ชื่อ "Implementations" ซึ่งนิยามใน <references> ไม่ถูกใช้ในข้อความก่อนหน้า
อ้างอิงผิดพลาด: ป้ายระบุ <ref> ชื่อ "stack machine" ซึ่งนิยามใน <references> ไม่ถูกใช้ในข้อความก่อนหน้า
อ้างอิงผิดพลาด: ป้ายระบุ <ref> ชื่อ "github.com" ซึ่งนิยามใน <references> ไม่ถูกใช้ในข้อความก่อนหน้า
อ้างอิงผิดพลาด: ป้ายระบุ <ref> ชื่อ "PNaCl" ซึ่งนิยามใน <references> ไม่ถูกใช้ในข้อความก่อนหน้า
อ้างอิงผิดพลาด: ป้ายระบุ <ref> ชื่อ "initial implementation" ซึ่งนิยามใน <references> ไม่ถูกใช้ในข้อความก่อนหน้า
อ้างอิงผิดพลาด: ป้ายระบุ <ref> ชื่อ "Launch bug" ซึ่งนิยามใน <references> ไม่ถูกใช้ในข้อความก่อนหน้า
อ้างอิงผิดพลาด: ป้ายระบุ <ref> ชื่อ "Unity in Firefox" ซึ่งนิยามใน <references> ไม่ถูกใช้ในข้อความก่อนหน้า
อ้างอิงผิดพลาด: ป้ายระบุ <ref> ชื่อ "V8 blog" ซึ่งนิยามใน <references> ไม่ถูกใช้ในข้อความก่อนหน้า
อ้างอิงผิดพลาด: ป้ายระบุ <ref> ชื่อ "Edge" ซึ่งนิยามใน <references> ไม่ถูกใช้ในข้อความก่อนหน้า
อ้างอิงผิดพลาด: ป้ายระบุ <ref> ชื่อ "MVP" ซึ่งนิยามใน <references> ไม่ถูกใช้ในข้อความก่อนหน้า
อ้างอิงผิดพลาด: ป้ายระบุ <ref> ชื่อ "canIuse.com" ซึ่งนิยามใน <references> ไม่ถูกใช้ในข้อความก่อนหน้า
อ้างอิงผิดพลาด: ป้ายระบุ <ref> ชื่อ "in browsers" ซึ่งนิยามใน <references> ไม่ถูกใช้ในข้อความก่อนหน้า
อ้างอิงผิดพลาด: ป้ายระบุ <ref> ชื่อ "Edge16" ซึ่งนิยามใน <references> ไม่ถูกใช้ในข้อความก่อนหน้า
อ้างอิงผิดพลาด: ป้ายระบุ <ref> ชื่อ "ars2015" ซึ่งนิยามใน <references> ไม่ถูกใช้ในข้อความก่อนหน้า
อ้างอิงผิดพลาด: ป้ายระบุ <ref> ชื่อ "Rust" ซึ่งนิยามใน <references> ไม่ถูกใช้ในข้อความก่อนหน้า
อ้างอิงผิดพลาด: ป้ายระบุ <ref> ชื่อ "Roadmap" ซึ่งนิยามใน <references> ไม่ถูกใช้ในข้อความก่อนหน้า
อ้างอิงผิดพลาด: ป้ายระบุ <ref> ชื่อ "W3C-WD2018" ซึ่งนิยามใน <references> ไม่ถูกใช้ในข้อความก่อนหน้า
อ้างอิงผิดพลาด: ป้ายระบุ <ref> ชื่อ "W3C-CSWD2018" ซึ่งนิยามใน <references> ไม่ถูกใช้ในข้อความก่อนหน้า
อ้างอิงผิดพลาด: ป้ายระบุ <ref> ชื่อ "W3C-JIWD2018" ซึ่งนิยามใน <references> ไม่ถูกใช้ในข้อความก่อนหน้า
อ้างอิงผิดพลาด: ป้ายระบุ <ref> ชื่อ "W3C-WAWD2018" ซึ่งนิยามใน <references> ไม่ถูกใช้ในข้อความก่อนหน้า
อ้างอิงผิดพลาด: ป้ายระบุ <ref> ชื่อ "Folded Instructions" ซึ่งนิยามใน <references> ไม่ถูกใช้ในข้อความก่อนหน้า

อ้างอิงผิดพลาด: ป้ายระบุ <ref> ชื่อ "manticore" ซึ่งนิยามใน <references> ไม่ถูกใช้ในข้อความก่อนหน้า

 บทความนี้รวมข้อความจากงานที่มีเนื้อหาเสรี (free content) ลิขสิทธิ์ภายใต้ Apache License 2.0 ข้อความนำมาจาก Text Format,

แหล่งข้อมูลอื่น[แก้]

แม่แบบ:W3C Standards

แม่แบบ:Web interfacesแม่แบบ:JavaScript