WebAssembly

تُعرّف لغة WebAssembly ( Wasm ) تنسيقًا ثنائيًا قابلًا للنقل وتنسيقًا نصيًا مطابقًا للبرامج القابلة للتنفيذ [ 2 ] وواجهات برمجية لتسهيل الاتصال بين هذه البرامج وبيئة التشغيل الخاصة بها. [ 3 ] [ 4 ] [ 5 ] [ 6 ]

يتمثل الهدف الرئيسي لـ WebAssembly في تسهيل تشغيل التطبيقات عالية الأداء على صفحات الويب ، ولكنه مصمم أيضًا ليكون قابلاً للاستخدام في بيئات غير الويب. [ 7 ] وهو معيار مفتوح [ 8 ] [ 9 ] يهدف إلى دعم أي لغة على أي نظام تشغيل، [ 10 ] وفي الواقع، تتمتع العديد من اللغات الأكثر شيوعًا بالفعل بمستوى معين من الدعم.

أُعلن عن WebAssembly في عام 2015  ، وصدر لأول مرة في مارس 2017. وأصبح معيارًا موصى به من قبل اتحاد شبكة الويب العالمية (W3C) في 5 ديسمبر 2019 [ 11 ] [ 12 ] [ 13 ] ، وحصل على جائزة برمجيات لغات البرمجة من جمعية آلات الحوسبة (ACM) SIGPLAN في عام 2021 [ 14 ]. ويتولى اتحاد شبكة الويب العالمية ( W3C) صيانة هذا المعيار بمساهمات من Mozilla و Microsoft و Google و Apple و Fastly و Intel و Red Hat [ 15 ] [ 16 ] .  

تاريخ

يهدف اسم "WebAssembly" إلى الإشارة إلى إمكانية استخدام لغة التجميع في برمجة الويب ، حيث يتم تنفيذها من جانب المستخدم ، بواسطة حاسوبه عبر متصفح الويب . ولتحقيق ذلك، يجب أن تكون WebAssembly أكثر استقلالية عن مكونات الجهاز من لغة التجميع التقليدية.

أُعلن عن WebAssembly لأول مرة في عام 2015، [ 17 ] وكان أول عرض توضيحي له هو تشغيل Angry Bots من Unity في متصفح Firefox ، [ 18 ] وGoogle Chrome ، [ 19 ] و Microsoft Edge [القديم] . [ 20 ] وكانت التقنيات السابقة هي asm.js من Mozilla و Google Native Client ، [ 21 ] [ 22 ] واستند التنفيذ الأولي إلى مجموعة ميزات asm.js. [ 23 ] [ ملاحظة 1 ]

في مارس 2017، أُعلن عن اكتمال تصميم الحد الأدنى من المنتج القابل للتطبيق (MVP) وانتهت مرحلة المعاينة. [ 25 ] وفي أواخر سبتمبر 2017، صدر متصفح سفاري 11 مع دعم هذه الميزة. وفي فبراير 2018، نشر فريق عمل WebAssembly ثلاثة مسودات عمل عامة للمواصفات الأساسية، وواجهة جافا سكريبت، وواجهة برمجة تطبيقات الويب. [ 26 ] [ 27 ] [ 28 ] [ 29 ]

ركزت النسخة التجريبية على لغات البرمجة منخفضة المستوى مثل C و C++ ، بهدف إضافة ميزات مفيدة للغات البرمجة عالية المستوى في إصدار مستقبلي. [ 30 ]

تعد خاصية تعدد الخيوط حاليًا مسودة، ولكنها مدعومة من قبل متصفح Chrome منذ الإصدار 75 في يونيو 2019، ومتصفح Firefox الإصدار 79، ومتصفح Safari الإصدار 14.1 [ 31 ] [ 32 ] [ 33 ]

تم الانتهاء من مواصفات WebAssembly 2.0 في عام 2022 وأصبحت معيارًا معتمدًا من قبل W3C في ديسمبر 2024. وتضيف هذه المواصفات العديد من التعليمات المتعلقة بـ SIMD (تعليمات مفردة، بيانات متعددة ) ونوع بيانات جديد v128، مع إمكانية قيام الدوال بإرجاع قيم متعددة، وتعليمات تهيئة/نسخ الذاكرة الجماعية، وأنواع مرجعية، وهي مؤشرات مبهمة إلى كائنات خارج الذاكرة الخطية. [ 34 ]

صدرت WebAssembly 3.0 في سبتمبر 2025. تشمل الميزات الجديدة مساحة عناوين 64 بت ، ومساحات عناوين متعددة، ومعالجة الاستثناءات، وأنواع هياكل البيانات والمصفوفات التي يتم جمعها بواسطة جامع البيانات المهملة. [ 35 ] يُمكّن دعم جمع البيانات المهملة من ترجمة أكثر كفاءة للغات البرمجة عالية المستوى، [ 36 ] [ 37 ] إلا أن WasmGC في WebAssembly 3.0 يفتقر إلى الإمكانيات التي يحتاجها وقت تشغيل .NET . [ 38 ]

التطبيقات

على الرغم من أن WebAssembly صُممت في البداية للسماح بسرعة تنفيذ التعليمات البرمجية قريبة من سرعة التنفيذ الأصلية في متصفح الويب، إلا أنها تُعتبر ذات قيمة خارج هذا النطاق، في سياقات أكثر عمومية. [ 39 ] [ 40 ] بيئة تشغيل WebAssembly هي آلة افتراضية منخفضة المستوى ، تُشبه JVM أو Flash VM ؛ ويمكن تضمينها في أي تطبيق مضيف، ولذلك تم إنشاء بيئات تشغيل WebAssembly مستقلة، بما في ذلك Wasmtime  و WebAssembly Micro Runtime  و Wasmer  و WasmEdge  و wazero  . [ 9 ] [ 10 ] تُدمج بيئات تشغيل WebAssembly في خوادم التطبيقات لاستضافة تطبيقات WebAssembly "من جانب الخادم"، وفي تطبيقات أخرى لدعم بنى امتداد البرامج القائمة على المكونات الإضافية ، مثل WebAssembly for Proxies (Proxy-Wasm) الذي يُحدد واجهة ثنائية للتطبيق (ABI) قائمة على WebAssembly لتوسيع خوادم الوكيل . [ 41 ] [ 42 ]

متصفحات الويب

في نوفمبر 2017، أعلنت موزيلا دعمها "في جميع المتصفحات الرئيسية"، [ 43 ] بعد تفعيل WebAssembly افتراضيًا في متصفح Edge [القديم] 16. [ 44 ] يشمل هذا الدعم أيضًا متصفحات الويب للأجهزة المحمولة التي تعمل بنظامي iOS وAndroid. اعتبارًا من مارس 2024 ،يدعم 99% من متصفحات الويب التي تم تتبعها WebAssembly (الإصدار 1.0)، [ 45 ] وهو دعم يفوق دعم سابقه asm.js. [ 46 ] بالنسبة لبعض الإضافات، قد يكون الدعم أقل في مسودة معيار 2.0، ولكن لا يزال من المحتمل أن يدعمها أكثر من 90% من متصفحات الويب، على سبيل المثال إضافة أنواع المراجع. [ 47 ]

أوقات التشغيل غير المرتبطة بالمتصفح

تتضمن بيئات تشغيل WebAssembly غير المرتبطة بالمتصفح Wasmer، [ 10 ] وWasmtime، [ 48 ] وWAMR وWAVM وwasm3، وغيرها. [ 49 ] تُشغّل هذه الأنظمة وحدات Wasm مُجمّعة مسبقًا، وغالبًا ما تُوفّر واجهات برمجة تطبيقات إضافية لتضمين WebAssembly في بيئات مختلفة. تشمل حالات استخدام wasm خارج المتصفح واجهات المكونات الإضافية والمحاكاة الافتراضية الخفيفة. [ 50 ]

المترجمون

تستخدم تطبيقات WebAssembly عمومًا إما الترجمة المسبقة (AOT) أو الترجمة الفورية (JIT)، مع أن بعضها قد يستخدم مترجمًا أيضًا . وبينما ظهرت التطبيقات الأولى في متصفحات الويب، يوجد الآن العديد من التطبيقات غير المتصفحية للاستخدامات العامة.

سلاسل أدوات الترجمة

نظرًا لأن ملفات WebAssembly التنفيذية مُجمَّعة مسبقًا، يمكن لمجموعة متنوعة من لغات البرمجة استهداف Wasm. [ 51 ] تتم عملية التجميع إما من خلال الإخراج المباشر إلى Wasm أو عبر آلات افتراضية وسيطة مُنفَّذة في Wasm.

تتضمن سلاسل الأدوات البارزة ما يلي:

  • Emscripten ، الذي يقوم بتحويل لغات C و C++ إلى Wasm باستخدام Clang كواجهة أمامية، و Binaryen كمحسِّن، ويمكنه أيضًا استهداف أي لغة مدعومة من LLVM. [ 25 ]
  • Clang المستقل (الإصدار 8 والإصدارات الأحدث)، والذي يدعم الترجمة المباشرة إلى Wasm. [ 52 ]
  • سير العمل القائم على LLVM للغات مثل Rust و AssemblyScript. [ 53 ]

الدعم اللغوي

اعتبارًا من عام 2021، تدعم حوالي 40 لغة برمجة WebAssembly كهدف للترجمة. [ 53 ] ومن الأمثلة على ذلك:

الحدود

تمنع متصفحات الويب كود WebAssembly من التلاعب المباشر بنموذج كائن المستند (DOC ). يجب أن يعتمد كود Wasm على JavaScript لهذا الغرض. [ ملاحظة 2 ]

في استطلاع رأي أُجري في أكتوبر 2023 وشمل مطورين، أعرب أقل من نصف المشاركين البالغ عددهم 303 عن رضاهم عن حالة WebAssembly. وأشارت أغلبية كبيرة إلى الحاجة إلى تحسينات في أربعة مجالات: §  WASI ، ودعم تصحيح الأخطاء، والتكامل مع JavaScript وواجهات برمجة تطبيقات المتصفح، وأدوات البناء. [ 74 ]

بالنسبة لعمليات تخصيص الذاكرة المكثفة في WebAssembly، هناك "قيود خطيرة تجعل من غير العملي نشر العديد من التطبيقات بشكل موثوق على متصفحات الجوال [...] حاليًا، لا يُعد تخصيص أكثر من 300 ميجابايت من الذاكرة أمرًا موثوقًا به على متصفح Chrome على نظام Android دون اللجوء إلى حلول بديلة خاصة بمتصفح Chrome، ولا في متصفح Safari على نظام iOS." [ 75 ]

تسمح جميع المتصفحات الرئيسية باستخدام WebAssembly إذا لم يتم تحديد قيمة، أو إذا تم استخدام Content-Security-Policyالقيمة ، ولكنها تتصرف بشكل مختلف في غير ذلك؛ [ 76 ] يتطلب Chrome قيمة ، [ 77 ] [ 78 ] على الرغم من أن استخدام سلسلة عمليات عاملة يمكن أن يكون حلاً بديلاً. [ 78 ]unsafe-evalunsafe-eval

الاعتبارات الأمنية

في يونيو 2018، طرح باحث أمني إمكانية استخدام WebAssembly لتجاوز إجراءات الحماية التي تتخذها المتصفحات ضد ثغرات Spectre و Meltdown الأمنية، وذلك بمجرد إضافة دعم للخيوط ذات الذاكرة المشتركة. ونظرًا لهذا القلق، علّق مطورو WebAssembly العمل على هذه الميزة. [ 79 ] [ 80 ] ومع ذلك، ولغرض استكشاف هذه التوسعات اللغوية المستقبلية، أضاف متصفح جوجل كروم دعمًا تجريبيًا لاقتراح خيوط WebAssembly في أكتوبر 2018. [ 81 ]

تعرضت تقنية WebAssembly لانتقادات بسبب تسهيلها إخفاء الأدلة لمطوري البرامج الضارة والمحتالين ومهاجمي التصيد الاحتيالي ؛ إذ لا تتواجد WebAssembly على جهاز المستخدم إلا في شكلها المُجمّع، مما يُصعّب اكتشاف البرامج الضارة. [ 82 ] وقد أدت سرعة WebAssembly وسهولة إخفائها إلى استخدامها في تعدين العملات المشفرة الخفي داخل جهاز زائر الموقع. [ 82 ] [ 83 ] وتزعم Coinhive، وهي خدمة توقفت عن العمل الآن، كانت تُسهّل تعدين العملات المشفرة في متصفحات زوار المواقع، أن "برنامج التعدين الخاص بها يستخدم WebAssembly ويعمل بنحو 65% من أداء برنامج التعدين الأصلي". وقد حللت دراسة أجرتها جامعة براونشفايغ التقنية في يونيو 2019 استخدام WebAssembly في أفضل مليون موقع على Alexa، ووجدت أن الاستخدام السائد كان لتعدين العملات المشفرة الخبيث، وأن البرامج الضارة شكلت أكثر من نصف المواقع التي تستخدم WebAssembly والتي شملتها الدراسة. [ 84 ] [ 85 ] وجدت دراسة أجرتها جامعة شتوتغارت في أبريل 2021 أن تعدين العملات المشفرة قد تراجع منذ ذلك الحين، حيث انخفض إلى أقل من 1% من جميع وحدات WebAssembly التي تم جمعها من مجموعة واسعة من المصادر، بما في ذلك أفضل مليون موقع ويب على Alexa. [ 86 ]

بما أن WebAssembly يدعم فقط تدفق التحكم المنظم ، فإنه قابل للتطبيق على تقنيات التحقق الأمني ​​بما في ذلك التنفيذ الرمزي . [ 87 ]

أداء

في وقت مبكر، تم قياس سرعة تنفيذ برنامج Wasm لتكون حوالي 91٪ من (أو أبطأ بنسبة 10٪ تقريبًا من) برنامج أصلي مماثل، دون احتساب وقت التحميل/الإنشاء؛ ومع ذلك، تشير العديد من المعايير اللاحقة إلى نطاق واسع من خصائص الأداء، من 33٪ إلى 200٪ من سرعة تنفيذ التعليمات البرمجية الأصلية، اعتمادًا على المهمة.

في عام ٢٠١٩، قدم فريق من الباحثين من جامعة ماساتشوستس أمهيرست تحليلًا شاملًا لأداء WebAssembly مقارنةً بالبرمجيات الأصلية. [ ٨٨ ] استخدمت هذه الدراسة مجموعة معايير SPEC CPU ونظامًا يُسمى "Browsix-Wasm" لتشغيل تطبيقات Unix دون تعديل في المتصفح، مما أتاح اختبار تطبيقات واقعية، وكشفت عن فجوة أداء كبيرة بين تنفيذ WebAssembly والتنفيذ الأصلي؛ على وجه الخصوص، أظهرت برامج WebAssembly تباطؤًا متوسطًا بنسبة ٤٥٪ في Firefox و٥٥٪ في Chrome عبر معايير الأداء الواقعية؛ وبلغت ذروة التباطؤات ٢.٠٨ ضعفًا من الوقت اللازم لتشغيل برنامج WebAssembly في Firefox و٢.٥ ضعفًا في Chrome. حددت الورقة البحثية عدة أسباب لهذا الاختلاف في الأداء، بما في ذلك نقص التحسينات، ومشاكل توليد التعليمات البرمجية في مُجمِّعات WebAssembly، والقيود المتأصلة في منصة WebAssembly.

أشارت دراسة أجريت عام 2021 إلى أن WebAssembly أسرع بكثير من JavaScript في بعض الحالات، مثل تشغيل دالة معقدة على ملف صغير ( مثل معالجة ملف رسومي)؛ ومع ذلك، في ذلك الوقت، كان لدى مترجم JavaScript بعض التحسينات المتاحة التي لم تكن موجودة في تطبيقات WebAssembly ( مثل الترجمة الفورية ). [ 89 ]

في عام 2022، توصل باحثون إلى أن برنامج WebAssembly يعمل بسرعة تعادل 120% تقريبًا (أو أسرع بنسبة 20%) من برنامج JavaScript مماثل. [ 90 ] تتوافق هذه النتائج مع تجربة شركة ناشئة تُدعى "Zaplib"، والتي لخص مؤسسوها في مدونة أنها ستُغلق أبوابها بسبب ضعف الأداء في WebAssembly. [ 91 ] كان هدفهم هو تحسين أداء تطبيقات الويب الحالية بشكل ملحوظ من خلال نقلها تدريجيًا إلى Rust /Wasm؛ إلا أن نقل محاكي أحد العملاء من JavaScript لم يُسفر إلا عن تحسين الأداء بنسبة 5% فقط. وبالمثل، فيما يتعلق بـ Figma ، فقد ذكروا ما يلي:

بعد التدقيق، يبدو أن استخدام Figma لتقنية WebAssembly يعود في معظمه إلى ظروف تاريخية - رغبةً في استخدام لغة C++ كضمان لتطبيقها الأصلي - أكثر من كونه استجابةً لمتطلبات الأداء الحرجة. تُعالج ملفات Figma باستخدام C++/WebAssembly، وهذا يُرجّح أنه يُحسّن السرعة بشكل كبير، لكن معظم أداء Figma المذهل يعود إلى مُحرك عرض WebGL الخاص بها .

في عام 2023، أشارت دراسة لأداء WebAssembly في مهام التشفير إلى أنه "عند استخدام أسرع بيئة تشغيل، كان WebAssembly أبطأ بنحو 2.32 مرة فقط (متوسط) من الكود الأصلي مع تحسينات خاصة بالمعمارية". استثنت هذه النتيجة اختبارين استفاد فيهما الكود الأصلي من تعليمات خاصة مُنفذة مباشرةً في وحدة المعالجة المركزية للمنصة المستهدفة؛ في هذين الاختبارين تحديدًا، كانت برامج WebAssembly "أبطأ بـ 80 مرة من الكود الأصلي". [ 92 ]

كشفت عملية قياس الأداء عن العديد من نقاط الضعف الأخرى في WebAssembly، مثل ضعف الأداء بسبب عدم وجود وصول مباشر إلى DOM، [ ملاحظة 3 ] وهي مشكلة يجري العمل على معالجتها. [ 94 ]

واسي

واجهة نظام WebAssembly (WASI) هي واجهة بسيطة ( واجهة ثنائية للتطبيق (ABI) وواجهة برمجة تطبيقات (API)) صممتها موزيلا ، وهي مصممة لتكون قابلة للنقل إلى أي منصة. [ 95 ] توفر هذه الواجهة ميزات مشابهة لواجهة نظام التشغيل المحمولة ( POSIX )، مثل إدخال/إخراج الملفات (I/O) المقيد بأمان قائم على القدرات . [ 96 ] [ 97 ] وهناك واجهات ثنائية/واجهات برمجة تطبيقات مقترحة إضافية. [ 98 ] [ 99 ]

يتأثر WASI بـ CloudABI و Capsicum . [ 100 ]

كتب سولومون هايكس ، أحد مؤسسي دوكر ، في عام 2019: "لو كان WASM+WASI موجودًا في عام 2008، لما كنا بحاجة إلى إنشاء دوكر. هذه هي أهميته. إن WebAssembly على الخادم هو مستقبل الحوسبة." [ 101 ]

يوفر WASI 0.1 بعض واجهات برمجة التطبيقات (APIs) المشابهة لمعيار POSIX، مثل إدخال/إخراج الملفات، وقراءة متغيرات البيئة، وتوليد الأرقام العشوائية، ولكنه لا يدعم الشبكات إلا بشكل محدود للغاية. أُعيد تصميم WASI 0.2 استنادًا إلى نموذج مكونات WebAssembly. [ 102 ] [ 103 ] سيضيف WASI 0.3 دعمًا للدوال غير المتزامنة؛ حيث يقوم النظام المضيف بالترجمة بين استدعاءات الدوال المتزامنة وغير المتزامنة، وبالتالي يمكن استدعاء دالة مُصدَّرة تحظر التنفيذ كدالة غير متزامنة، والعكس صحيح. [ 104 ] [ 105 ]

ابتداءً من الإصدار 0.2، يُعرَّف WASI باستخدام نموذج المكونات. تُحدَّد الواجهات في نموذج المكونات بلغة تعريف واجهة تُسمى WIT (أنواع واجهات WebAssembly). بينما يدعم WebAssembly الأساسي الأعداد الصحيحة والأعداد العشرية فقط، يمكن للواجهات في WIT التعبير عن أنواع مثل السلاسل النصية والقوائم وأنواع السجلات والمتغيرات المُعرَّفة من قِبل المستخدم، وهي مستقلة عن لغة البرمجة. [ 106 ] لا يمكن للمكونات الوصول إلى ذاكرة بعضها البعض، وبالتالي تتفاعل فقط عبر الدوال المُستوردة والمُصدَّرة. صُمِّم نموذج المكونات حول التركيب: يمكن دمج مكونين في مكون واحد عندما تتطابق مُصدِّرات أحدهما مع مُستوردات الآخر، مما يسمح بمحاكاة أي واجهة افتراضيًا. [ 103 ] تُجمَّع الواجهات في WIT معًا في "بيئة". يُعرِّف WASI 0.2 بيئة سطر أوامر مشابهة لواجهة برمجة التطبيقات POSIX في WASI 0.1، وبيئة وكيل HTTP لخوادم الويب. [ 107 ]

لا يدعم المتصفحات حاليًا نموذج المكونات. [ 108 ]

مواصفة

بيئة المضيف

يوفر المعيار العام المواصفات الأساسية لواجهة برمجة تطبيقات جافا سكريبت وتفاصيل حول التضمين. [ 5 ]

آلة افتراضية

يُصمَّم كود WebAssembly (الكود الثنائي، أي بايت كود) ليتم تشغيله على آلة افتراضية محمولة . [ 109 ] صُمِّمت الآلة الافتراضية لتكون أسرع في التحليل والتنفيذ من جافا سكريبت، ولتتميز بتمثيل كود مضغوط. [ 110 ] لا ينص المعيار على أي وظائف خارجية (مثل استدعاءات النظام ) قد يتوقعها كود WebAssembly الثنائي؛ بل يحدد المعيار كيفية توفير بيئة الاستضافة لمثل هذه الواجهة عبر "وحدة نمطية". [ 111 ] [ 9 ]

برنامج WebAssembly

يُصمَّم برنامج WebAssembly كوحدة نمطية منفصلة تحتوي على مجموعات من القيم المختلفة المُعرَّفة في WebAssembly وتعريفات أنواع البرامج. تُقدَّم هذه القيم إما بتنسيق ثنائي أو نصي (انظر أدناه) ولها بنية مشتركة. [ 112 ] قد تُوفِّر هذه الوحدة النمطية دالة بدء تُنفَّذ عند إنشاء نسخة من برنامج WebAssembly الثنائي.

مجموعة التعليمات

يُحدد المعيار الأساسي للتنسيق الثنائي لبرنامج WebAssembly بنية مجموعة التعليمات (ISA)؛ حيث تُخصص لكل عملية يمكن تنفيذها بواسطة الآلة الافتراضية ترميز ثنائي محدد (رمز العملية)، ولكن لا تُحدد الطريقة الدقيقة لتنفيذ العملية، مما يسمح بمرونة في بناء الآلة الافتراضية. [ 113 ] تتضمن قائمة أنواع التعليمات تعليمات تحميل/تخزين الذاكرة القياسية، والتعليمات العددية، والتعليمات البارامترية، وتعليمات التحكم في التدفق ، والمتغيرات الخاصة بـ WebAssembly. [ 114 ]

كان عدد رموز العمليات المستخدمة في المعيار الأصلي ( MVP  ) أقل بقليل من 200 من أصل 256 رمزًا ممكنًا. رفعت الإصدارات اللاحقة من WebAssembly عدد رموز العمليات إلى ما يزيد قليلًا عن 200. يقدم اقتراح WebAssembly SIMD (للمعالجة المتوازية) بادئة بديلة لرمز العملية (0xfd) لتعليمات SIMD بعرض 128 بت ؛ ويتكون كل رمز عملية SIMD من دمج بادئة SIMD مع رمز عملية صالح بعد بادئة SIMD. تُضيف رموز عمليات SIMD 236 تعليمة إضافية إلى قدرة MVP على معالجة SIMD (ليصبح المجموع حوالي 436 تعليمة) [ 115 ] [ 116 ]. يتم تفعيل هذه المجموعة من التعليمات [ 117 ] افتراضيًا في عدد من التطبيقات المهمة: [ 118 ].

  1. محرك V8 من جوجل (في متصفح جوجل كروم)
  2. محرك SpiderMonkey في متصفح موزيلا فايرفوكس
  3. محرك JavaScriptCore في متصفح Safari من Apple

تتميز رموز عمليات SIMD هذه بأنها قابلة للنقل ومصممة للتوافق المباشر مع مجموعات التعليمات الأصلية مثل x86-64 و ARM . في المقابل، لا تدعم آلة جافا الافتراضية (JVM) [ ملاحظة 4 ] أو لغة CIL الخاصة بـ .NET تعليمات SIMD بشكل مباشر ؛ ومع ذلك، يمتلك كلاهما بعض واجهات برمجة التطبيقات (APIs) للمعالجة المتوازية، مما يوفر تسريعًا في تنفيذ SIMD. تسمح مجموعة أحدث من تعليمات "SIMD المُخففة" بقدر محدود من السلوك المُحدد من قِبل التنفيذ لتحسين الأداء. [ 120 ] [ 121 ]

تمثيل الشفرة

في مارس 2017، توصلت مجموعة مجتمع WebAssembly إلى توافق في الآراء بشأن الصيغة الثنائية الأولية (" MVP ")، وواجهة برمجة تطبيقات JavaScript، والمترجم المرجعي. [ 122 ] تُعرّف هذه الصيغة صيغة WebAssembly الثنائية ( .wasm)، المصممة للاستخدام بواسطة الحواسيب، وليس البشر، وصيغة نصية قابلة للقراءة البشرية ( .wat)، تُشبه مزيجًا بين تعابير S ولغات التجميع التقليدية. تتميز الصيغة الثنائية ببساطتها، وهي مصممة للسماح بالتجميع المتدفق، بحيث يمكن بدء التجميع قبل اكتمال تنزيل الوحدة، وللسماح بتجميع الدوال بالتوازي. [ 30 ]

يوضح الجدول أدناه مثالاً على دالة مضروب مكتوبة بلغة C ورمز WebAssembly المقابل لها بعد التجميع، معروضة بتنسيق نص .wat (تمثيل نصي قابل للقراءة البشرية لـ WebAssembly) وبتنسيق ثنائي .wasm ( رمز البايت الخام ، المعبر عنه أدناه بالنظام الست عشري )، والذي يتم تنفيذه بواسطة متصفح ويب أو بيئة تشغيل تدعم WebAssembly.

شفرة المصدر بلغة C وWebAssembly المقابلة
شفرة المصدر بلغة Cتنسيق نص WebAssembly .watتنسيق WebAssembly الثنائي .wasm
دالة حساب المضروب ( عدد صحيح n ) { إذا كان ( n == 0 ) { أرجع 1 ؛ } وإلا { أرجع n * مضروب ( n - 1 } }
( func ( param i64 ) ( result i64 ) local.get 0 i64.eqz if ( result i64 ) i64.const 1 else local.get 0 local.get 0 i64.const 1 i64.sub call 0 i64.mul end )
00 61 73 6D 01 00 00 00 01 06 01 60 01 7E 01 7E 03 02 01 00 0A 17 01 15 00 20 00 50 04 7E 42 01 05 20 00 20 00 42 01 7D 10 00 7E 0B 0B 

يتم ترميز جميع الثوابت العددية باستخدام ترميز LEB128 ذي الطول المتغير والفعال من حيث المساحة . [ 123 ]

يُكتب تنسيق نص WebAssembly عادةً بتنسيق مطوي باستخدام تعابير S. بالنسبة للتعليمات والتعابير، يُعد هذا التنسيق مجرد اختصار نحوي ولا يختلف سلوكيًا عن التنسيق الخطي. [ 124 ] من خلال wasm2wat، يُفكّك الكود أعلاه إلى:

( وحدة ( نوع $t0 ( دالة ( معامل i64 ) ( نتيجة i64 ))) ( دالة $f0 ( نوع $t0 ) ( معامل $p0 i64 ) ( نتيجة i64 ) ( إذا كان $I0 ( نتيجة i64 ) ;; $I0 هو اسم تسمية غير مستخدم ( i64.eqz ( local.get $p0 )) ;; الاسم $p0 هو نفسه 0 هنا ( ثم ( i64.const 1 )) ( وإلا ( i64.mul ( local.get $p0 ) ( استدعاء $f0 ;; الاسم $f0 هو نفسه 0 هنا ( i64.sub ( local.get $p0 ) ( i64.const 1 ))))))))

يُنشئ المُصرّف وحدةً ضمنيًا. ويُشار إلى الدالة من خلال مدخل في جدول الأنواع في الملف الثنائي، ومن ثمّ قسم الأنواع، ويُصدرها typeالمُفكِّك. [ 125 ] يُمكن الوصول إلى المُصرّف والمُفكِّك عبر الإنترنت. [ 126 ]

الذاكرة والمتغيرات

تُخزَّن البيانات في الذاكرة ضمن مصفوفة بايتات كبيرة قابلة للتوسع تُسمى الذاكرة الخطية . وتُفصل الذاكرة الخطية عن مكدس استدعاءات وحدة WebAssembly (wasm) وشفرتها، وعن ذاكرة المحرك. وهذا يسمح بتشغيل شفرة WebAssembly في نفس عملية آلة JavaScript الافتراضية المُضمَّنة فيها دون الإخلال بسلامة الذاكرة. [ 30 ]

تحتوي الوحدة النمطية على قائمة من المتغيرات العامة منفصلة عن الذاكرة الخطية، والتي قد تكون قابلة للتغيير أو غير قابلة للتغيير. تُعلن الدوال عن قائمة من المتغيرات المحلية. وتُعتبر معاملات الدالة أيضًا متغيرات محلية.

تعمل التعليمات على مكدس من القيم . تخطيط المكدس ثابت (يجب على الفروع دفع وسحب نفس عدد المعاملات)، لذا يمكن لمحركات WebAssembly ترجمة المكدس، مما ينتج عنه عمليات فعالة لرمز الآلة على المسجلات، بدلاً من إدارة المكدس أثناء التشغيل. تم اختيار بنية آلة المكدس لأنها تتميز بكثافة رمز أعلى من آلة المسجلات . [ 30 ]

تدفق التحكم

على عكس لغات التجميع التقليدية، تستخدم لغة WebAssembly (wasm) فقط تدفق تحكم منظم مشابه للغات البرمجة عالية المستوى. إن عدم دعم تعليمات القفز عمدًا يُسهّل عملية التحقق من صحة كود WebAssembly وتجميعه في خطوة واحدة ، كما يُسهّل قراءة الكود المُفكك إلى صيغة نصية.

تُفصل الكتل باستخدام block`\` loopو`\` و` if/ else`. تحتوي تعليمات التفرع على مُعرّف يُحدد عمق الكتلة التي تقع ضمنها: `\` br 0سيتفرع إلى الكتلة التي تحتوي على هذه التعليمة، `\` br 1سيتفرع إلى الكتلة التي تحتوي على تلك الكتلة، وهكذا. `\` يتفرع إلى `\` blockأو ifيقفز إلى نهاية الكتلة مثل عبارة `break`، بينما `\` يتفرع إلى `\` loopويقفز إلى بداية الحلقة، على غرار عبارة `continue`. br_tableتأخذ التعليمة فهرس إدخال وتقفز إلى هدف من قائمة مُعرّفات. يمكن التعبير عن عبارة `switch` على نمط لغة C باستخدام `\` br_tableداخل سلسلة من الكتل المتداخلة. [ 30 ] [ 127 ]

تقوم المترجمات التي تستهدف لغة WebAssembly بتحويل تدفق التحكم غير المنظم إلى حلقات عالية المستوى باستخدام خوارزمية Relooper الخاصة بـ Emscripten، والتي صُممت في الأصل لاستهداف JavaScript. [ 128 ]

الوظائف

تُدرج تعريفات الدوال في قسم منفصل قبل القسم الذي يحتوي على أجسام الدوال. تُحاكى مؤشرات الدوال باستخدام فهرس في جدول الدوال العامة، نظرًا لأن التعليمات البرمجية ليست داخل الذاكرة الخطية. يمكن أيضًا استيراد الدوال وتصديرها، مما يوفر واجهة الدوال الخارجية للتواصل مع جافا سكريبت أو غيرها من البرامج المضمنة. [ 30 ]

انظر أيضاً

ملحوظات

  1. يوفر ملف asm.js بالفعل سرعات تنفيذ قريبة من سرعات البرمجة الأصلية: "حتى مع تجاهل النقطة الوحيدة التي تفوق فيها asm.js، فإنه يُنفذ بسرعة تقارب 70% من سرعة كود C++ الأصلي (أي أبطأ) . [ 24 ] ويمكن اعتباره بديلاً مناسباً للمتصفحات التي لا تدعم WebAssembly أو التي عطلتها لأسباب أمنية.
  2. بالنسبة لتطوير Rust /Wasm، يمكن لمكتبات الطرف الثالث توفير بعض عمليات الإدخال والإخراج الضرورية لـ JavaScript. [ 72 ] [ 73 ]
  3. "لا يوفر WebAssembly أي وصول إلى البيئة المحيطة إلا من خلال واجهة برمجة تطبيقات JavaScript الموضحة في مواصفات JS API." [ 93 ]
  4. هناك امتداد لجافا يضيف تعليمات مضمنة لتعليمات x86-64 SIMD، [ 119 ] وهو غير قابل للنقل، أي غير قابل للاستخدام على ARM أو الهواتف الذكية.

مراجع

  1. " WebAssembly/design/Semantics.md" . GitHub . مؤرشف من الأصل في 15 يونيو 2021. تم الاطلاع عليه في 23 فبراير 2021. يمكن اعتبار كود WebAssembly بمثابة آلة مكدس مُهيكلة ؛ آلة تستخدم فيها معظم العمليات الحسابية مكدسًا من القيم، ولكن يتم التعبير عن تدفق التحكم في بنيات مُهيكلة مثل الكتل، وعبارات if، والحلقات. عمليًا، لا تحتاج التطبيقات إلى الاحتفاظ بمكدس قيم فعلي، ولا بهياكل بيانات فعلية للتحكم؛ بل يكفي أن تتصرف كما لو كانت تفعل ذلك.
  2. موزيلا. "فهم تنسيق نص WebAssembly" . وثائق MDN على الويب . مؤرشف من الأصل في 5 فبراير 2022. تم الاطلاع عليه في 9 ديسمبر 2019 .
  3. "مقدمة: WebAssembly 1.0" . webassembly.github.io . مؤرشف من الأصل بتاريخ 22 نوفمبر 2021. تم الاطلاع عليه بتاريخ 18 يونيو 2019. WebAssembly معيار مفتوح ...
  4. "مقدمة: WebAssembly 1.0" . webassembly.github.io . مؤرشف من الأصل في 22 نوفمبر 2021. تم الاطلاع عليه في 18 يونيو 2019. WebAssembly هو تنسيق كود...
  5. ١ ٢ " الاتفاقيات: WebAssembly 1.0" . webassembly.github.io . مؤرشف من الأصل في 6 مايو 2019. تم الاسترجاع في 17 مايو 2019. WebAssembly هي لغة برمجة لها تمثيلات ملموسة متعددة (تنسيقها الثنائي وتنسيقها النصي). كلاهما يرتبط ببنية مشتركة.
  6. "مقدمة: WebAssembly 1.0" . webassembly.github.io . مؤرشف من الأصل بتاريخ 22 نوفمبر 2021. تم الاطلاع عليه بتاريخ 18 يونيو 2019. ... تُستكمل هذه المواصفة بوثائق إضافية تُعرّف واجهات لبيئات تضمين محددة مثل الويب. ستُعرّف كل منها واجهة برمجة تطبيقات WebAssembly (API) مناسبة لبيئة معينة.
  7. " مقدمة - WebAssembly 1.1" . webassembly.github.io . مؤرشف من الأصل بتاريخ 22 نوفمبر 2021. تم الاطلاع عليه بتاريخ 19 فبراير 2021. هدفه الرئيسي هو تمكين التطبيقات عالية الأداء على الويب، ولكنه لا يفترض أي خصائص خاصة بالويب أو يوفر ميزات خاصة به، لذا يمكن استخدامه في بيئات أخرى أيضًا.
  8. هاس، أندرياس؛ روسبرغ، أندرياس؛ شوف، ديريك ل.؛ تيتزر، بن ل.؛ هولمان، مايكل؛ غومان، دان؛ فاغنر، لوك؛ زكاي، ألون؛ باستيان، جيه إف (14 يونيو 2017). "مواكبة الويب لسرعة WebAssembly" . إشعارات SIGPLAN . 52 (6): 185-200 . doi : 10.1145/3140587.3062363 . ISSN 0362-1340 . على الرغم من أن الويب هو الدافع الرئيسي لـ WebAssembly، إلا أن تصميمه لا يعتمد على الويب أو بيئة جافا سكريبت. إنه معيار مفتوح مصمم خصيصًا للتضمين في سياقات متعددة، ونتوقع أن تتوفر تطبيقات مستقلة في المستقبل. 
  9. 1 2 3 "خارج نطاق الويب: ملفات WebAssembly الثنائية المستقلة باستخدام Emscripten · V8" . v8.dev . مؤرشف من الأصل في 19 يوليو 2020. تم الاطلاع عليه في 28 يوليو 2020 .
  10. ١ ٢ ٣ " Wasmer - بيئة تشغيل WebAssembly الشاملة" . wasmer.io . مؤرشف من الأصل في ٢ مارس ٢٠٢١. تم الاطلاع عليه في ١٩ فبراير ٢٠٢١. قم بتجميع كل شيء إلى WebAssembly. قم بتشغيله على أي نظام تشغيل أو تضمينه في لغات أخرى.
  11. اتحاد شبكة الويب العالمية. "المواصفات الأساسية لـ WebAssembly" . اتحاد شبكة الويب العالمية (W3) . مؤرشف من الأصل في 6 ديسمبر 2019. تم الاطلاع عليه في 9 ديسمبر 2019 .
  12. كوريول، برونو. "WebAssembly 1.0 يصبح توصية من اتحاد شبكة الويب العالمية (W3C) واللغة الرابعة التي تعمل بشكل أصلي في المتصفحات" . infoq.com . مؤرشف من الأصل في 25 نوفمبر 2021. تم الاطلاع عليه في 9 ديسمبر 2019 .
  13. "مواصفات WebAssembly — WebAssembly 1.1" . webassembly.github.io . مؤرشف من الأصل بتاريخ 22 سبتمبر 2022. تم الاطلاع عليه بتاريخ 22 مارس 2021 .
  14. "جائزة لغات البرمجة للبرمجيات" . www.sigplan.org . مؤرشف من الأصل بتاريخ 29 أكتوبر 2022. تم الاطلاع عليه بتاريخ 5 أكتوبر 2021 .
  15. برايت، بيتر (18 يونيو 2015). "الويب يحصل على شفرته الثنائية: WebAssembly" . آرس تكنيكا . كوندي ناست . مؤرشف من الأصل في 11 أبريل 2019. تم الاطلاع عليه في 15 يونيو 2017 .
  16. "تحالف بايت كود الجديد يُقدّم أمان وانتشار وقابلية التشغيل البيني للويب إلى عالم الحوسبة المنتشرة" . موزيلا . ١٢ نوفمبر ٢٠١٩. مؤرشف من الأصل في ١٠ ديسمبر ٢٠١٩. تم الاطلاع عليه في ٢٧ مايو ٢٠١٩ .
  17. "خطأ في الإطلاق" . GitHub / WebAssembly / design . 11 يونيو 2015. مؤرشف من الأصل في 21 نوفمبر 2021. تم الاسترجاع في 21 مارس 2016 .
  18. فاغنر، لوك (14 مارس 2016). "إنجاز هام في WebAssembly: دعم تجريبي في متصفحات متعددة" . Mozilla Hacks . مؤرشف من الأصل في 11 أغسطس 2017. تم الاطلاع عليه في 21 مارس 2016 .
  19. تومسون، سيث (15 مارس 2016). "دعم تجريبي لـ WebAssembly في V8" . مدونة V8 . مؤرشف من الأصل في 9 فبراير 2018. تم الاطلاع عليه في 25 يوليو 2019 .
  20. تشو، ليمين (15 مارس 2016). "معاينة تجارب WebAssembly في Microsoft Edge" . مدونة مطوري Microsoft Edge . مؤرشف من الأصل في 18 أغسطس 2021. تم الاطلاع عليه في 21 مارس 2016 .
  21. لاردينوا، فريدريك (17 يونيو 2015). "جوجل ومايكروسوفت وموزيلا وآخرون يتعاونون لإطلاق WebAssembly، وهو تنسيق ثنائي جديد للويب" . TechCrunch . مؤرشف من الأصل في 17 يناير 2018. تم الاطلاع عليه في 24 ديسمبر 2017 .
  22. أفرام، أبيل (31 مايو 2017). "جوجل ستزيل دعم PNaCl" . InfoQ . مؤرشف من الأصل في 23 ديسمبر 2017. تم الاطلاع عليه في 22 ديسمبر 2017 .
  23. "WebAssembly: تنسيق ثنائي للويب" . ②ality – JavaScript and more . ١٨ يونيو ٢٠١٥. مؤرشف من الأصل في ٦ نوفمبر ٢٠٢٣. تم الاطلاع عليه في ٢٥ يوليو ٢٠١٩ . 
  24. "التحديق في الشمس: دالفيك مقابل ASM.js مقابل Native" . blog.mozilla.org . أغسطس 2013. مؤرشف من الأصل في 7 ديسمبر 2019. تم الاطلاع عليه في 7 ديسمبر 2019 .
  25. 1 2 3 كريل، بول (6 مارس 2017). "WebAssembly جاهز الآن للاستخدام من قبل المتصفحات" . إنفوورلد . مؤرشف من الأصل في 1 أبريل 2020. تم الاطلاع عليه في 23 ديسمبر 2017 .
  26. "المسودات العامة الأولى لـ WebAssembly" . W3C. 15 فبراير 2018. مؤرشفة من الأصل في 16 يوليو 2021. تم الاطلاع عليها في 20 أبريل 2018 .
  27. "المواصفات الأساسية لـ WebAssembly" . W3C. 15 فبراير 2018. مؤرشف من الأصل في 8 مارس 2021. تم الاطلاع عليه في 20 أبريل 2018 .
  28. "واجهة جافا سكريبت لـ WebAssembly" . W3C. 15 فبراير 2018. مؤرشف من الأصل في 30 نوفمبر 2020. تم الاطلاع عليه في 20 أبريل 2018 .
  29. "واجهة برمجة تطبيقات الويب WebAssembly" . اتحاد شبكة الويب العالمية (W3C). 15 فبراير 2018. مؤرشف من الأصل في 19 أبريل 2021. تم الاطلاع عليه في 20 أبريل 2018 .
  30. 1 2 3 4 5 6 هاس، أندرياس؛ روسبرغ، أندرياس؛ شوف، ديريك ل.؛ تيتزر، بن ل.؛ هولمان، مايكل؛ غومان، دان؛ فاغنر، لوك؛ زكاي، ألون؛ باستيان، جيه إف (14 يونيو 2017). "تحديث الويب باستخدام WebAssembly". وقائع المؤتمر الثامن والثلاثين لجمعية ACM SIGPLAN حول تصميم لغات البرمجة وتنفيذها . PLDI 2017. نيويورك، نيويورك، الولايات المتحدة الأمريكية: جمعية آلات الحوسبة . الصفحات 185-200 . doi : 10.1145/3062341.3062363 . ISBN  978-1-4503-4988-8.
  31. "WebAssembly Worker Based Threads - Chrome Platform Status" . chromestatus.com . مؤرشف من الأصل بتاريخ 19 فبراير 2022. تم الاطلاع عليه بتاريخ 19 فبراير 2022 .
  32. "حالة الميزة - WebAssembly" . webassembly.org . تم الاطلاع عليه في 5 يناير 2026 .
  33. WebAssembly/threads ، WebAssembly، 3 يناير 2026 ، تم الاطلاع عليه في 5 يناير 2026
  34. "اكتملت تقنية WebAssembly 2.0 - WebAssembly" . webassembly.org . تم الاطلاع عليه بتاريخ 5 يناير 2026 .
  35. "اكتمل إصدار WebAssembly 3.0 - WebAssembly" . webassembly.org . تم الاطلاع عليه بتاريخ 5 يناير 2026 .
  36. "تم تفعيل خاصية جمع البيانات المهملة لـ WebAssembly (WasmGC) افتراضيًا في متصفح Chrome" . تم الاطلاع عليه بتاريخ 11 ديسمبر 2023 .
  37. "طريقة جديدة لدمج لغات البرمجة التي تعتمد على جمع البيانات المهملة بكفاءة في WebAssembly" . V8.dev . تم الاطلاع عليه بتاريخ 11 ديسمبر 2023 .
  38. كوتاس، جان (18 سبتمبر 2025). " مقترح جمع البيانات المهملة [ wasm ] [ بعد الإصدار الأولي ] في .NET" . جيت هاب . تم الاطلاع عليه في 2 فبراير 2026. لا يمتلك WASM-GC الإمكانيات المطلوبة لبيئة تشغيل .NET. لا يمكن استبدال نظام جمع البيانات المهملة في بيئة تشغيل .NET بنظام WASM-GC.
  39. "التضمينات غير المتعلقة بالويب" . WebAssembly . مؤرشف من الأصل في 15 مايو 2019. تم الاسترجاع في 15 مايو 2019 .
  40. "التضمينات غير المتعلقة بالويب" . GitHub / WebAssembly . مؤرشف من الأصل في 13 نوفمبر 2020. تم الاطلاع عليه في 15 مايو 2019 .
  41. فريز، داني (3 أكتوبر 2023). "Proxy-Wasm: إنه WebAssembly للوكلاء" . مدونة. كونغ . تم الاسترجاع في 6 مايو 2024 .
  42. "proxy-wasm/spec: WebAssembly for Proxies (ABI specification)" . GitHub . مؤرشف من الأصل في 6 مايو 2024. تم الاطلاع عليه في 6 مايو 2024 .
  43. "دعم WebAssembly متوفر الآن في جميع المتصفحات الرئيسية" . مدونة موزيلا . مؤرشف من الأصل في 31 أكتوبر 2019. تم الاطلاع عليه في 21 نوفمبر 2017 .
  44. "تقديم تحسينات جديدة لجافا سكريبت، وWebAssembly، وSharedArrayBuffer، وAtomics في EdgeHTML 16" . مدونة مطوري مايكروسوفت إيدج . 31 أكتوبر 2017. مؤرشف من الأصل في 15 نوفمبر 2017. تم الاطلاع عليه في 21 نوفمبر 2017 .
  45. "WebAssembly | هل يمكنني استخدام... جداول الدعم لـ HTML5 وCSS3، إلخ" . canIuse.com . مؤرشف من الأصل في 13 نوفمبر 2021. تم الاطلاع عليه في 1 مارس 2024 .
  46. "asm.js | هل يمكنني استخدام... دعم الجداول لـ HTML5 وCSS3 وما إلى ذلك" . caniuse.com . تم الاطلاع عليه بتاريخ 29 سبتمبر 2024 .
  47. "أنواع مراجع WebAssembly | هل يمكنني استخدام... جداول الدعم لـ HTML5 وCSS3 وما إلى ذلك" . caniuse.com . تم الاطلاع عليه في 3 مارس 2024 .
  48. "Wasmtime — بيئة تشغيل صغيرة وفعّالة لـ WebAssembly وWASI" . wasmtime.dev . مؤرشف من الأصل بتاريخ 4 ديسمبر 2020. تم الاطلاع عليه بتاريخ 18 ديسمبر 2020 .
  49. "خارطة الطريق" . مؤرشفة من الأصل في 7 ديسمبر 2021. تم الاطلاع عليها في 7 ديسمبر 2021 .
  50. وينغو، آندي (30 يونيو 2025). "WebAssembly: نعم، ولكن لأي غرض؟" . ACM Queue . 23 (3): 18–30 . doi : 10.1145/3746171 .
  51. بول، كيفن (26 يونيو 2018). "كيف تُسرّع تقنية WebAssembly مستقبل تطوير الويب" . مؤرشف من الأصل في 12 فبراير 2019. تم الاطلاع عليه في 22 أكتوبر 2018 .
  52. "ملاحظات إصدار LLVM 8.0.0 - وثائق LLVM 8" . مؤرشف من الأصل بتاريخ 22 أكتوبر 2019. تم الاطلاع عليه بتاريخ 22 أكتوبر 2019 .
  53. ١ ٢ ٣ "لغات WebAssembly الرائعة" . GitHub . ٢٦ يونيو ٢٠١٨. مؤرشف من الأصل في ١٢ فبراير ٢٠١٩. تم الاطلاع عليه في ١٥ فبراير ٢٠٢٢ .
  54. كريل، بول (29 نوفمبر 2017). "تجميع WebAssembly المباشر يصل إلى لغة Rust" . InfoWorld . مؤرشف من الأصل في 1 أبريل 2020. تم الاسترجاع في 24 ديسمبر 2017 .
  55. "AssemblyScript/assemblyscript" . مشروع AssemblyScript. 9 سبتمبر 2020. مؤرشف من الأصل في 11 سبتمبر 2020. تم الاطلاع عليه في 9 سبتمبر 2020 .
  56. بونفينتر، أندرو (24 أغسطس 2018). "إصدار Go 1.11" . مدونة Go . مؤرشف من الأصل في 14 يونيو 2025. تم الاطلاع عليه في 11 أغسطس 2025 .
  57. "الأسئلة الشائعة حول Blazor" . مؤرشف من الأصل بتاريخ 18 يونيو 2018. تم الاطلاع عليه بتاريخ 18 يونيو 2018 .
  58. "بوليرو: لغة F# في WebAssembly" . fsbolero.io . مؤرشف من الأصل في 4 يونيو 2019. تم الاطلاع عليه في 25 يوليو 2019 .
  59. "تشغيل لغة F# في WebAssembly باستخدام Bolero" . Microsoft Learn . Microsoft. 20 نوفمبر 2019. تم الاطلاع عليه بتاريخ 17 سبتمبر 2025 .{{cite web}}: CS1 maint: deprecated archiveal service ( link )
  60. "Pyodide: جلب حزمة بايثون العلمية إلى المتصفح - Mozilla Hacks" . مؤرشف من الأصل في 3 سبتمبر 2020. تم الاطلاع عليه في 9 سبتمبر 2020 .
  61. "مترجم جافا إلى ويب أسمبلي - CheerpJ" . مؤرشف من الأصل بتاريخ 27 أبريل 2023. تم الاطلاع عليه بتاريخ 27 أبريل 2023 .
  62. "JWebAssembly" . 27 أبريل 2023. مؤرشف من الأصل في 27 أبريل 2023. تم الاسترجاع في 27 أبريل 2023 عبر GitHub.
  63. "نظرة عامة على TeaVM" . مؤرشف من الأصل بتاريخ 27 أبريل 2023. تم الاطلاع عليه بتاريخ 27 أبريل 2023 .
  64. "تقديم لغة كوتلين إلى الويب" . تم الاطلاع عليه بتاريخ 11 ديسمبر 2023 .
  65. ديليوز، سيباستيان (13 فبراير 2023). "الإمكانات الهائلة لـ Kotlin/Wasm" . تم الاطلاع عليه بتاريخ 11 ديسمبر 2023 .
  66. "استخدام واجهة GHC WebAssembly الخلفية" . مؤرشف من الأصل في 1 مايو 2025. تم الاطلاع عليه في 1 مايو 2025 .
  67. "جوليا في المتصفح" . nextjournal.com . مؤرشف من الأصل بتاريخ 24 مارس 2019. تم الاطلاع عليه بتاريخ 9 أبريل 2019 .
  68. "MRuby في متصفحك" . ruby.dj. مؤرشف من الأصل بتاريخ 8 أغسطس 2019. تم الاطلاع عليه بتاريخ 25 يوليو 2019 .
  69. بول كريل (24 أغسطس 2020). "تحديث لغة Ring يركز على WebAssembly" . InfoWorld. مؤرشف من الأصل في 14 أكتوبر 2020. تم الاطلاع عليه في 17 أغسطس 2024 .
  70. "تجميع WebAssembly (Wasm)" . dart.dev . تم الاطلاع عليه بتاريخ 21 ديسمبر 2025 .
  71. "Hoot: Scheme on WebAssembly" . تم الاطلاع عليه بتاريخ 11 مارس 2026 .
  72. "stdweb - Rust" . docs.rs. مؤرشف من الأصل في 21 فبراير 2019. تم الاطلاع عليه في 5 يونيو 2019. يهدف هذا المشروع إلى توفير روابط Rust لواجهات برمجة تطبيقات الويب ، والسماح بدرجة عالية من التوافق بين Rust وJavaScript.
  73. "web_sys - Rust" . docs.rs. مؤرشف من الأصل بتاريخ 15 مايو 2020. تم الاطلاع عليه بتاريخ 5 يونيو 2019. روابط API خام لواجهات برمجة تطبيقات الويب . هذه حزمة برمجية مُولّدة إجرائيًا من WebIDL المتصفح ، توفر رابطًا لجميع واجهات برمجة التطبيقات التي يوفرها المتصفح على الويب.
  74. "حالة WebAssembly لعام 2023" . سكوت لوجيك. 18 أكتوبر 2023. مؤرشف من الأصل في 14 مارس 2024. تم الاطلاع عليه في 14 مارس 2024 .
  75. "يحتاج WebAssembly إلى حلٍّ أفضل لإدارة الذاكرة · المشكلة رقم 1397 · WebAssembly/design" . GitHub . مؤرشف من الأصل بتاريخ 27 مارس 2021. تم الاطلاع عليه بتاريخ 15 فبراير 2021 .
  76. "WebAssembly/content-security-policy" . GitHub . مؤرشف من الأصل بتاريخ 12 سبتمبر 2020. تم الاطلاع عليه بتاريخ 17 فبراير 2021 .
  77. "948834 - كروميوم - مشروع مفتوح المصدر للمساهمة في تطوير الويب. - مونوريل" . bugs.chromium.org . مؤرشف من الأصل في 2 يونيو 2021. تم الاطلاع عليه في 17 فبراير 2021 .
  78. ١ ٢ "لا توجد طريقة لاستخدام WebAssembly على Chrome بدون 'unsafe-eval' · المشكلة رقم ٧ · WebAssembly/content-security-policy" . GitHub . مؤرشف من الأصل في ١٨ مارس ٢٠٢١. تم الاطلاع عليه في ١٧ فبراير ٢٠٢١ .
  79. سيمبانو، كاتالين (24 يونيو 2018). "تغييرات في WebAssembly قد تجعل تصحيحات المتصفح لثغرات Meltdown وSpectre عديمة الفائدة" . Bleeping Computer . مؤرشف من الأصل في 10 يوليو 2019. تم الاطلاع عليه في 8 يونيو 2019 .
  80. ساندرز، جيمس (25 يونيو 2018). "كيف يمكن لرمز WebAssembly المبهم أن يزيد من خطر هجمات Spectre عبر الإنترنت" . Tech Republic . مؤرشف من الأصل في 9 يونيو 2019. تم الاطلاع عليه في 9 يونيو 2019 .
  81. ر، بهاجياشري (30 أكتوبر 2018). "يدعم متصفح جوجل كروم 70 الآن خيوط WebAssembly لبناء تطبيقات ويب متعددة الخيوط" . Packt Pub . مؤرشف من الأصل في 18 أبريل 2019. تم الاطلاع عليه في 9 يونيو 2019 .
  82. 1 2 لونكار، أيشواريا؛ تشاندرايان، سيديش (أكتوبر 2018). "الجانب المظلم من WebAssembly" . نشرة الفيروسات . مؤرشف من الأصل في 9 يونيو 2019. تم الاسترجاع في 8 يونيو 2019 .
  83. سيغورا، جيروم (29 نوفمبر 2017). "التعدين الخفي للعملات الرقمية قادم إلى متصفحك" . مالويربايتس . مؤرشف من الأصل في 15 أبريل 2019. تم الاطلاع عليه في 8 يونيو 2019 .
  84. «دراسة حديثة تُشير إلى أن 50% من المواقع الإلكترونية التي تستخدم WebAssembly تُوظّفها لأغراض خبيثة» . InfoQ . مؤرشف من الأصل بتاريخ 31 أكتوبر 2019. تم الاطلاع عليه بتاريخ 3 نوفمبر 2019 .
  85. موش، ماريوس؛ وريسنيغر، كريستيان؛ جونز، مارتن؛ ريك، كونراد (يونيو 2019). "الوافد الجديد على الويب: دراسة حول انتشار WebAssembly في بيئات التشغيل الحقيقية". كشف الاختراقات والبرمجيات الخبيثة، وتقييم الثغرات الأمنية (ملف PDF) . سلسلة محاضرات في علوم الحاسوب. المجلد 11543. كشف الاختراقات والبرمجيات الخبيثة، وتقييم الثغرات الأمنية. الصفحات 23-42 . doi : 10.1007/978-3-030-22038-9_2 . ISBN   978-3-030-22037-2S2CID 184482682. مؤرشف من الأصل (PDF) بتاريخ 26 يوليو 2022. تم الاطلاع عليه بتاريخ 15 فبراير 2022 . الشرائح (ملف PDF) مؤرشفة بتاريخ 3 نوفمبر 2019 في أرشيف الإنترنت (Wayback Machine).
  86. آرون هيلبيغ، ودانيال ليمان، ومايكل براديل (أبريل 2021). "دراسة تجريبية لملفات WebAssembly الثنائية في العالم الحقيقي: الأمن، واللغات، وحالات الاستخدام." (مؤرشف في أبريل 2021) https://software-lab.org/publications/www2021.pdf
  87. وات، كونراد (8 يناير 2018). "ميكنة مواصفات WebAssembly والتحقق منها" . وقائع المؤتمر الدولي السابع لجمعية ACM SIGPLAN حول البرامج والبراهين المعتمدة . CPP 2018. لوس أنجلوس، كاليفورنيا، الولايات المتحدة الأمريكية: ACM. الصفحات 53-65 . doi : 10.1145/3167082 . ISBN  978-1-4503-5586-5S2CID 9401691. مؤرشف من الأصل في 1 مارس 2021. تم الاطلاع عليه في 9 أغسطس 2023 . 
  88. جانجدا، أبهيناف؛ باورز، بوبي؛ بيرغر، إيمري؛ جوها، أرجون (31 مايو 2019). ليس بهذه السرعة: تحليل أداء WebAssembly مقابل الكود الأصلي (ملف PDF) . المؤتمر التقني السنوي لـ USENIX لعام 2019. رينتون، واشنطن. الصفحات 107-120 . arXiv : 1901.09056v3 . OCLC 1106328738. مؤرشف (ملف PDF) من الأصل في 20 مارس 2025. تم الاسترجاع في 20 مارس 2025 .  
  89. يان، يوتيان؛ تو، تينغفي؛ تشاو، ليجيان؛ تشو، يوتشن؛ وانغ، ويهانغ (2 نوفمبر 2021). "فهم أداء تطبيقات WebAssembly" . وقائع المؤتمر الحادي والعشرين لقياس الإنترنت التابع لجمعية ACM . الصفحات 533-549 . doi : 10.1145/3487552.3487827 . ISBN  978-1-4503-9129-0.
  90. ^ دي ماسيدو، جواو؛ أبرو، روي. بيريرا، روي؛ سارايفا ، جواو (يونيو 2022). “WebAssembly مقابل JavaScript: أداء الطاقة ووقت التشغيل”. المؤتمر الدولي لتكنولوجيا المعلومات والاتصالات من أجل الاستدامة (ICT4S) 2022 . الصفحات من 24 إلى 34. دوى : 10.1109/ICT4S55073.2022.00014 . اتش دي ال : 1822/90291 . رقم ISBN  978-1-6654-8286-8.
  91. "تحليل ما بعد وفاة Zaplib" . zaplib.com . أبريل 2022. مؤرشف من الأصل في 21 مارس 2024. تم الاطلاع عليه في 14 مارس 2024 .
  92. دينيس، فرانك (4 يناير 2023). "أداء بيئات تشغيل WebAssembly في عام 2023" . 00f.net . تم الاطلاع عليه في 6 ديسمبر 2024 .
  93. "واجهة برمجة تطبيقات الويب WebAssembly" . webassembly.github.io . مؤرشف من الأصل في 9 ديسمبر 2024. تم الاطلاع عليه في 6 ديسمبر 2024 .
  94. كامبالي، إينوك. "WebAssembly في عام 2024: وعود وتحديات والطريق إلى الأمام" . blog.enkambale.com . مؤرشف من الأصل في 17 يناير 2025. تم الاطلاع عليه في 6 ديسمبر 2024 .
  95. "مستودع واجهة نظام WebAssembly" . GitHub : WebAssembly . ١٠ فبراير ٢٠٢٠. مؤرشف من الأصل في ٣٠ أكتوبر ٢٠٢٢. تم الاطلاع عليه في ١٥ مايو ٢٠١٩ .
  96. "معلومات إضافية حول الإمكانيات" . GitHub . bytecodealliance. 4 مارس 2022. مؤرشف من الأصل في 24 فبراير 2020. تم الاطلاع عليه في 8 أبريل 2020 .
  97. "توحيد معايير WASI: واجهة نظام لتشغيل WebAssembly خارج الويب" . مدونة موزيلا هاكس: مدونة مطوري الويب . مؤرشفة من الأصل في 30 أكتوبر 2022. تم الاطلاع عليها في 9 أبريل 2020 .
  98. "مستودع الجذر المرجعي" . جيت هاب : ويب أسيمبلي . ١٢ يناير ٢٠٢٠. مؤرشف من الأصل في ٢١ أغسطس ٢٠٢٢. تم الاسترجاع في ١٥ مايو ٢٠١٩ .
  99. "مستودع wasm-c-api" . جيت هاب : WebAssembly . 3 فبراير 2020. مؤرشف من الأصل في 31 أكتوبر 2022. تم الاطلاع عليه في 15 مايو 2019 .
  100. NuxiNL/cloudlibc ، Nuxi، 6 ديسمبر 2024، مؤرشف من الأصل في 1 أبريل 2025 ، تم استرجاعه في 1 أبريل 2025
  101. هايكس، سولومون (27 مارس 2019). "سولومون هايكس يتحدث عن X" . تويتر . مؤرشف من الأصل في 31 مايو 2024. تم الاطلاع عليه في 29 سبتمبر 2024 .
  102. "WASI ونموذج مكونات WebAssembly: الوضع الحالي - eunomia" . eunomia.dev . تم الاطلاع عليه بتاريخ 30 مارس 2026 .
  103. 1 2 "لماذا نموذج المكونات؟ - نموذج مكونات WebAssembly" . component-model.bytecodealliance.org . تم الاطلاع عليه بتاريخ 30 مارس 2026 .
  104. دايس، جويل (13 مارس 2025). "نظرة مستقبلية على WASIp3" . www.fermyon.com . تم الاطلاع عليه في 30 مارس 2026 .
  105. WebAssembly. "component-model/design/mvp/Concurrency.md at main · WebAssembly/component-model" . GitHub . تم الاطلاع عليه بتاريخ 30 مارس 2026 .
  106. "مرجع WIT - نموذج مكونات WebAssembly" . component-model.bytecodealliance.org . تم الاطلاع عليه بتاريخ 30 مارس 2026 .
  107. ^ جوهمان ، دان (25 يناير 2024). "تم إطلاق WASI 0.2" . تحالف بايت كود . تم الاسترجاع في 30 مارس 2026 .
  108. "لماذا تُعتبر لغة WebAssembly لغةً من الدرجة الثانية على الويب؟ - مدونة Mozilla Hacks - مدونة مطوري الويب" . مدونة Mozilla Hacks - مدونة مطوري الويب . تاريخ الاطلاع: 30 مارس 2026 .
  109. "أساسيات التصميم" . GitHub / WebAssembly / design . 1 أكتوبر 2016. مؤرشف من الأصل في 25 سبتمبر 2022. تم الاطلاع عليه في 25 سبتمبر 2022 .
  110. "أهداف WebAssembly عالية المستوى" . GitHub / WebAssembly / design . ١١ ديسمبر ٢٠١٥. مؤرشف من الأصل في ٢٥ سبتمبر ٢٠٢٢. تم الاطلاع عليه في ٢٥ سبتمبر ٢٠٢٢ .
  111. "قابلية النقل - WebAssembly" . webassembly.org . مؤرشف من الأصل بتاريخ 28 يوليو 2020. تم الاطلاع عليه بتاريخ 28 يوليو 2020 .
  112. "الاتفاقيات - WebAssembly 1.0" . webassembly.github.io . مؤرشف من الأصل في 6 مايو 2019. تم الاطلاع عليه في 12 نوفمبر 2019 .
  113. "مقدمة: WebAssembly 1.0" . webassembly.github.io . مؤرشف من الأصل في 2 يونيو 2021. تم الاطلاع عليه في 17 مايو 2019 .
  114. "تعليمات — WebAssembly 1.0" . webassembly.github.io . مؤرشف من الأصل بتاريخ 21 أكتوبر 2019. تم الاطلاع عليه بتاريخ 12 نوفمبر 2019 .
  115. لايفلي، توماس (19 فبراير 2021) [تم فتح طلب السحب في 5 فبراير 2021]. "الرموز البرمجية النهائية من إعداد tlively · طلب السحب رقم 452 · WebAssembly/simd · GitHub" . تحالف بايت كود. مؤرشف من الأصل في 30 أكتوبر 2022. تم الاسترجاع في 12 مايو 2021 عبر GitHub .
  116. ديلينديك، يوري (19 فبراير 2021) [تم إدخال تغييرات SIMD في 19 فبراير 2021]. "الملف wasm-tools/expr.rs في b5c3d98e40590512a3b12470ef358d5c7b983b15 · bytecodealliance/wasm-tools · GitHub" . تحالف بايت كود. مؤرشف من الأصل في 22 مايو 2022. تم الاسترجاع في 12 مايو 2021 عبر GitHub .
  117. "تحديث المفسر والنص برموز العمليات النهائية بواسطة ngzhian · طلب سحب رقم 486 · WebAssembly/simd" . GitHub . مؤرشف من الأصل في 30 أكتوبر 2022. تم الاطلاع عليه في 14 مايو 2021 .
  118. "WebAssembly/simd" . GitHub . مؤرشف من الأصل في 10 مايو 2021. تم الاطلاع عليه في 14 مايو 2021 .
  119. "كيف جعلنا آلة جافا الافتراضية أسرع بـ 40 مرة" . astojanov.github.io . مؤرشف من الأصل بتاريخ 26 ديسمبر 2020. تم الاطلاع عليه بتاريخ 17 فبراير 2021 .
  120. WebAssembly/relaxed-simd ، WebAssembly، 3 مايو 2021، مؤرشف من الأصل في 17 أبريل 2022 ، تم استرجاعه في 14 مايو 2021
  121. "اكتمل إصدار WebAssembly 3.0 - WebAssembly" . webassembly.org . تم الاطلاع عليه بتاريخ 5 يناير 2026 .
  122. "خارطة الطريق" . WebAssembly . مارس 2017. مؤرشف من الأصل في 7 ديسمبر 2021. تم الاطلاع عليه في 25 يوليو 2019 .
  123. مجموعة مجتمع WebAssembly (يناير 2020). "مواصفات WebAssembly الإصدار 1.0" . مؤرشف من الأصل في 21 أكتوبر 2019. تم الاطلاع عليه في 13 يناير 2020 .
  124. "تعليمات مطوية" . جيت هاب . مؤرشف من الأصل في 12 يوليو 2018. تم الاطلاع عليه في 18 يونيو 2018 ./ WebAssembly / spec
  125. "الوحدات (الثنائية)" . WebAssembly 1.0 . مؤرشف من الأصل في 30 أكتوبر 2022. تم الاطلاع عليه في 9 أبريل 2020 .
  126. "عروض توضيحية لمجموعة أدوات WebAssembly الثنائية (wabt)" . webassembly.github.io . مؤرشف من الأصل في 30 أكتوبر 2022. تم الاطلاع عليه في 9 أبريل 2020 .
  127. "تعليمات التحكم في تدفق WebAssembly - WebAssembly | MDN" . وثائق MDN على الويب . 23 نوفمبر 2025. تم الاطلاع عليه في 5 يناير 2026 .
  128. زكاي، ألون (22 أكتوبر 2011). "إمسكريبتن: مُترجم من LLVM إلى جافا سكريبت" . وقائع المؤتمر الدولي المصاحب لجمعية ACM حول لغات وأنظمة البرمجة كائنية التوجه وتطبيقاتها . OOPSLA '11. نيويورك، نيويورك، الولايات المتحدة الأمريكية: جمعية آلات الحوسبة . الصفحات 301-312 . doi : 10.1145/2048147.2048224 . ISBN  978-1-4503-0942-4.

 تتضمن هذه المقالة نصًا من عمل محتوى مجاني . مرخص بموجب رخصة أباتشي 2.0 ( بيان الترخيص/الإذن ). النص مأخوذ من Text Format ، jfbastien؛ rossberg-chromium؛ kripken؛ titzer؛ s3ththompson؛ sunfishcode؛ lukewagner؛ flagxor؛ enricobacis؛ c3d؛ binji؛ andrewosh، GitHub. WebAssembly/design.