ASM.js คืออะไรและมีความหมายสำหรับทุกคนอย่างไร


27

ฉันเริ่มที่จะคำรามได้ยินเกี่ยวกับโครงการนี้เรียกว่าASM.js ปัจจุบันเว็บไซต์ของพวกเขาน่ากลัวและสับสน นี่คือสิ่งที่ฉันรู้จากการวิจัยของฉันบนเว็บ

  • เป็นชุดย่อยของ JavaScript ที่สามารถปรับให้เหมาะสมอย่างมาก ฉันเดาเพราะมันหลีกเลี่ยงส่วนที่มีพลังมากขึ้นของภาษา
  • ประสิทธิภาพของโค้ดที่คอมไพล์ไปยัง ASM.js จะทำงานที่ความเร็วประมาณครึ่งหนึ่งของ C (ไม่ใช่แสง)
  • จุดประสงค์สำหรับผู้รวบรวมเพื่อสร้างภาษาเป้าหมาย ASM.js
  • Firefox กำลังจะจัดส่งพร้อมกับการเพิ่มประสิทธิภาพ ASM.js อบใน
  • ทีมงาน Mozilla และ Unreal นำพาUnreal Engine ไปยังเว็บด้วยมันและทำงานในรูปแบบของFirefoxด้วยความเร็วใกล้เคียง

ดูเหมือนจะไม่มีข้อมูลที่เป็นรูปธรรมใด ๆ บนเว็บเกี่ยวกับสิ่งที่เป็นจริงหรือมีประโยชน์หรือจุดประสงค์สุดท้าย เป็นเพราะฉันสามารถรวบรวมฐานรหัสฝั่งเซิร์ฟเวอร์ของฉันและเรียกใช้ในเบราว์เซอร์ที่ความเร็วใกล้เคียง สิ่งที่เป็นประโยชน์สำหรับนักพัฒนา?

คำตอบ:


21

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

กรณีการใช้งานของ Mozilla ดูเหมือนว่าจะมีความกระตือรือร้นมากที่สุดคือ: มีวิธีการรวบรวมภาษาด้วยแบ็กเอนด์ LLVM (ส่วนใหญ่ C และ C ++ ที่เด่นชัด) ไปยัง JavaScript ผ่าน Emscripten asm.js นั้นใกล้เคียงกับ Emscripten ที่ปล่อยออกมาแล้วดังนั้นสิ่งนี้จึงทำให้โค้ด Emscripten (ซึ่งเร็วอย่างน่าประทับใจสำหรับคอมไพเลอร์ JavaScript JIT ของวันนี้) จะเร็วขึ้นมากยิ่งขึ้นซึ่งเป็นเป้าหมายของการย้ายฐานรหัสที่มีอยู่ไปยังเว็บ สิ่งที่คุณใช้เพื่อการตัดสินใจของคุณคืออะไร การย้ายเกมเป็นกรณีการใช้งานหนึ่งครั้ง (ซึ่ง Mozilla เกี่ยวข้องกับการใช้งานอย่างเห็นได้ชัด) แต่มีสิ่งต่าง ๆ มากมายที่เขียนใน C และ C ++ ซึ่งบางเรื่องอาจมีประโยชน์สำหรับเว็บไซต์ของใครบางคน บางอย่างที่ฉันเคยเห็นมาก่อน (รวมถึงการคิดค้นของฉันเอง) โดยไม่มีการรับประกันเกี่ยวกับสิทธิ์:

  • การโอนย้ายอัลกอริธึมวัตถุประสงค์ทั่วไป (เช่น zlib, libjpeg, openssl, การใช้งาน FFT) เพื่อให้อำนาจ JavaScript / เว็บไซต์ทำได้มากขึ้นโดยไม่ต้องสร้างมาตรฐานเว็บใหม่และขึ้นอยู่กับแต่ละเบราว์เซอร์เพื่อนำไปใช้
  • การย้ายพอร์ตล่ามเพื่อให้ภาษาอื่นที่ไม่ใช่ JavaScript สามารถทำงานในเบราว์เซอร์ได้โดยมีค่าใช้จ่ายน้อยลงและพยายามย้ายพอร์ตน้อยที่สุด
  • การใช้ asm.js เป็นแบ็กเอนด์สำหรับคอมไพเลอร์มากกว่าโดยเฉพาะอย่างยิ่งสิ่งที่ไม่ได้จับคู่กับ JavaScript ได้ดีและไม่ต้องการคุณสมบัติและโอเวอร์เฮดส่วนใหญ่ ตัวอย่างอาจเป็นภาษาที่ออกแบบมาเพื่องานตัวเลขที่รวดเร็วโดยไม่มีการจัดสรรหน่วยความจำ
  • การใช้ asm.js เพื่อสร้าง JIT ใน JavaScript มันอาจจะใช้ภาษาใด ๆ ที่ทุกคน - ตัวอย่างActionScript
  • ในหลอดเลือดดำเดียวกันการย้ายพอร์ตคอมไพเลอร์ JIT ที่มีอยู่เพื่อรันในเบราว์เซอร์ (เทียบกับล่ามแปลภาษาด้วยค่าใช้จ่ายที่มีประสิทธิภาพเหนือ JS) นี่อาจเป็นไปได้ก็ต่อเมื่อคอมไพเลอร์ JIT ถูกสร้างขึ้นโดยอัตโนมัติเช่นเดียวกับ PyPy

2
นี่คือคำอธิบายที่ดีอีกประการหนึ่ง: ejohn.org/blog/asmjs-javascript-compile-target
Jarrod Nettles

1
นี่เป็นข้อพิสูจน์แนวคิดสำหรับการย้าย JIT ไปยัง asm.js มันเป็นจุดขายที่ไม่ซ้ำใครแพลตฟอร์มที่เกิดขึ้นใหม่ส่วนใหญ่ไม่ได้เป็นมิตรกับ JIT
Tobu

มีคำอธิบายว่า asm.js สนับสนุนการรวบรวม JIT ไหม? ดูเหมือนจะไม่พบข้อมูลใด ๆ ส่วนใหญ่สนใจวิธีจัดการความปลอดภัย
Roman Starkov

@romkyns การรวบรวม JIT ของ asm.js ไปยังรหัสเครื่องโดยเบราว์เซอร์หรือการรวบรวม JIT เป็น asm.js (โดยโปรแกรม JavaScript)? สำหรับอย่างน้อยใน Firefox สิ่งอำนวยความสะดวกการสร้างรหัสเครื่องของคอมไพเลอร์ pure-JS JIT นั้นถูกนำกลับมาใช้ใหม่ เนื่องจาก asm.js สามารถโทรเข้าสู่ JS เท่านั้นดำเนินการทางคณิตศาสตร์และอ่าน / เขียนอาร์เรย์ฮีปที่มีการตรวจดัชนีในช่วงการตรวจสอบความปลอดภัยเป็นเรื่องดีเท่ากับความปลอดภัยของการดำเนินการ JS สำหรับหลังคุณเพิ่งสร้างซอร์สโค้ด asm.js และให้เบราว์เซอร์ดำเนินการและไม่มีผลกระทบด้านความปลอดภัยเพิ่มเติมนอกเหนือจากที่ฉันกล่าวถึงก่อนหน้านี้

(ฉันหมายถึงหลัง) Ooh แน่นอน; อย่างใดฉันคิดว่าคอมไพเลอร์ JIT เปล่งรหัสเครื่องพื้นเมือง ขอขอบคุณสำหรับการชี้แจง!
Roman Starkov

4

ลองนึกภาพ ASM.js เป็น ArrayBuffer ไบนารีขนาดใหญ่ที่เรียกว่า heap และชุดของโมดูล JavaScript ซึ่งเริ่มต้นด้วยคำสั่งอารัมภบท: "use asm";และดำเนินการระดับต่ำอย่างรวดเร็วกับข้อมูลไบนารีดิบคล้ายกับภาษาแอสเซมบลี โมดูลเหล่านั้นสามารถเขียนด้วยมือหรือรวบรวมจาก LLVM code โดยสคริปต์เช่น Emscripten ประสิทธิภาพการทำงานของพวกเขาสามารถเพิ่มขึ้นได้ด้วยเครื่องมือ Mozilla OdinMonkey แต่สามารถใช้งานร่วมกับล่าม ECMAScript ที่ทันสมัยได้เกือบทั้งหมด

ASM.js ไม่ จำกัด เฉพาะเกมคุณสามารถเรียกใช้แอพ Qt ทั้งหมดในเบราว์เซอร์ของคุณเช่นนี้ !

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.