เมื่อเร็ว ๆ นี้ ประกาศเปิดตัวคอมไพเลอร์ Emscripten 3.0 เวอร์ชันใหม่ซึ่งมีลักษณะเฉพาะโดยอนุญาตให้คอมไพล์โค้ดใน C / C ++ และภาษาอื่น ๆ ที่มีฟรอนต์เอนด์ที่ใช้ LLVM อยู่ใน WebAssembly มิดเดิลแวร์สากลระดับต่ำ
หน้าที่หลักของการคอมไพล์นี้มีไว้สำหรับการรวมเข้ากับโปรเจ็กต์ JavaScript ในภายหลัง รันในเว็บเบราว์เซอร์ ใช้ใน Node.js Js หรือสร้างแอปพลิเคชันแบบสแตนด์อโลนข้ามแพลตฟอร์มที่ทำงานด้วยรันไทม์ของ wasm
เกี่ยวกับ Emscripten
เป้าหมายหลัก การพัฒนาโครงการ Emscripten คือการสร้างเครื่องมือที่ให้คุณรันโค้ดบนเว็บ โดยไม่คำนึงถึงภาษาโปรแกรมที่เขียน
แอปพลิเคชันที่คอมไพล์แล้วสามารถใช้การเรียกไลบรารี C และ C ++ มาตรฐาน (libc, libcxx), ส่วนขยาย C ++, มัลติเธรดแบบ pthreads, POSIX API และไลบรารีมัลติมีเดียจำนวนมาก API สำหรับการผสานรวมกับเว็บ API และโค้ด JavaScript มีให้แยกต่างหาก
ลงชื่อ รองรับการสตรีมเอาต์พุตไลบรารี SDL2 ผ่าน Canvasและยังให้การสนับสนุน OpenGL และ EGL ผ่าน WebGL ซึ่งช่วยให้คุณแปลงแอปพลิเคชันกราฟิกและเกมเป็น WebAssembly
แทบทุกฐานโค้ด C หรือ C ++ แบบพกพาสามารถคอมไพล์เป็น WebAssembly โดยใช้ Emscriptenตั้งแต่เกมประสิทธิภาพสูงที่ต้องการเรนเดอร์กราฟิก เล่นเสียง โหลดและประมวลผลไฟล์ ไปจนถึงเฟรมเวิร์กของแอพพลิเคชั่นอย่าง Qt. มีการใช้ Emscripten เพื่อแปลงรายการฐานรหัสในโลกแห่งความเป็นจริงจำนวนมากเป็น WebAssembly รวมถึงฐานรหัสเชิงพาณิชย์ เช่น Unreal Engine 4 และ Unity Engine
นอกจากการคอมไพล์โค้ด C / C ++ แล้ว โครงการต่างๆ ยังได้รับการพัฒนาแยกต่างหากเพื่อให้แน่ใจว่าล่ามและเครื่องเสมือนสำหรับ Lua, C #, Python, Ruby และ Perl เริ่มทำงานในเบราว์เซอร์ นอกจากนี้ยังสามารถใช้อินเทอร์เฟซที่ไม่ใช่ Clang กับ LLVM ที่มีให้สำหรับภาษาต่างๆ เช่น Swift, Rust, D และ Fortran
ควรสังเกตว่า มีความแตกต่างระหว่างรันไทม์ดั้งเดิมและ Emscripten ซึ่งหมายความว่า โดยทั่วไป eจำเป็นต้องทำการเปลี่ยนแปลงบางอย่างกับโค้ดเนทีฟ. ดังที่กล่าวไปแล้ว แอปพลิเคชั่นจำนวนมากจะต้องเปลี่ยนวิธีการกำหนดลูปหลักและแก้ไขการจัดการไฟล์เพื่อรองรับข้อจำกัดของเบราว์เซอร์ / JavaScript
นอกจากนี้ยังมีข้อจำกัดที่สามารถทำให้โค้ดบางตัวโยกย้ายได้ง่ายขึ้น โปรดอ่านแนวทางการพกพาเพื่อกำหนดตำแหน่งที่คุณอาจต้องใช้ความพยายามมากขึ้น
คุณสมบัติใหม่หลักของ Emscripten 3.0
ในเวอร์ชันใหม่ที่นำเสนอนี้ ไลบรารี musl C ที่ใช้ใน emscripten ได้รับการอัปเดตเป็นเวอร์ชัน 1.2.2 (เวอร์ชัน 1.1.15 ถูกใช้ในสาขา Emscripten 2.x)
จากไลบรารี parseTools.js ส่วนหนึ่งของฟังก์ชันถูกลบออก ซึ่งส่วนใหญ่ใช้ในโปรเจ็กต์: removePointing, pointingLevels, removeAllPointing, isVoidType, isStructPointerType, isArrayType, isStructType, isVectorType, isStructuralType getStructuralTypeParts, getStructuralType _IntToHex, IEEEUnHex, Compiletime.isPointerType, Compiletime.EStructileType
ในขณะที่ ในเทมเพลต shell.html และ shell_minimal.html ผลลัพธ์ของข้อความแสดงข้อผิดพลาด ที่เกิดขึ้นระหว่างการดำเนินการ emscripten และออกโดยแอปพลิเคชันผ่าน stderr โดยค่าเริ่มต้นจะเปลี่ยนไปใช้ console.warn แทน console.error
นอกจากนี้ยังมีการเน้นย้ำว่า เพิ่มความสามารถในการระบุการเข้ารหัสข้อความเฉพาะที่ใช้ในชื่อไฟล์ สามารถระบุการเข้ารหัสเป็นส่วนต่อท้ายเมื่อส่งชื่อไฟล์ เช่น "a.rsp.utf-8" หรือ "a.rsp.cp1251")
สุดท้ายนี้ หากคุณสนใจที่จะทราบข้อมูลเพิ่มเติมเกี่ยวกับ Emscripten คุณสามารถศึกษารายละเอียดของโครงการได้ใน เว็บไซต์อย่างเป็นทางการ
และในทำนองเดียวกัน คุณสามารถดูเอกสารบนเว็บเกี่ยวกับวิธีใช้ Emscripten ไซต์อ้างอิงที่เราสามารถแนะนำได้คือเว็บไซต์สำหรับนักพัฒนา Mozilla: https://developer.mozilla.org.
นอกจากนี้ สิ่งสำคัญคือต้องระบุว่ารหัสโครงการเผยแพร่ภายใต้ใบอนุญาต MIT คอมไพเลอร์ใช้การพัฒนาจากโครงการ LLVM และใช้ไลบรารี Binaryen เพื่อสร้าง WebAssembly และการปรับให้เหมาะสม คุณสามารถตรวจสอบรหัสของคุณ แหล่งที่มาบน GitHub