ويب أسمبلي

تَجْمِيعِ اَلْوِيب (بالإنجليزية: WebAssembly) (نقحرةً: ويب أسمبلي) اختصارًا بـ (وَازِمْ Wasm) هو معيار مفتوح يُّعرِّف صِيغة محمولة للترميز-الثنائي -(بايت كُودْ)- لتنفيذ برمجيةٍ ما[1]، وتهدف تقنية تجميع الويب إلى تمكين تنفيذ برامج عالية الأداء على صفحات الويب، صُمم تجميع الويب بشكل يجعله قابلة للتنفيذ ومتكامل مع بيئات العمل الأخرى كذلك وليس حصرًا على متصفحات الويب، يعني ذلك قابلية تنفيذ «برمجيات تجميع الويب» بحد ذاتها (standalone). كما يمكن لبعض بيئات تشغيل جافاسكربت مثل نود جي اس، ودينو تشغيل تجميع الويب.[2]

WebAssembly
معلومات عامة
التصنيف
التنميط
ظهرت في
مارس 2017
صممها
الرخصة
التطوير
الإصدار الأول
الإصدار الأخير
المستودع
التأثير
متأثرة بـ
  • asm.js
  • PNaCl
متفرقات
امتدادات الملفات
.wasm ,.wat
موقع الويب

نظرة عامة

تجميع الويب هو صيغة بايت ناتجة من المحول البرمجي، بمقدور المتصفحات ومشغلات جافاسكربت -الداعمة لـوَازِمْ (Wasm)- فكه وتنفيذه مباشرةً، على عكس لغات البرمجة التي تمر بعدة مراحل خلال الترجمة وصولًا للغة يستطيع الحاسوب تنفيذها.

يستخدم تجميع الويب آلة فتراضية تعتمد مفهوم المُكدس ومكدس الإستدعاءات[3] ويعتبر ملف .wasm لغة وسيطة والتي تُحول من بايت-كود إلى تعليمات تفهمها الآلة، يتم تنفيذها في بيئة معزولة (Sandbox).

مخطط بياني يوضح آلية تنفيذ تجميع الويب

تم توفير الصيغة النصية المقروءة لتجميع الويب، لمساعدة المبرمجين على تتبع العلل والأخطاء وإصلاحها ويمكن تحويل ملفات .wat إلى .wasm والعكس.

اُعتمد تجميع الويب في 2019 الخامس من ديسبمبر من طرف رابطة الشبكة العالمية كمعيار في متصفحات الويب، بجانب جافاسكربت وCSS وHTML.[4] يُمكن تجميع الويب مطوري الويب من تنفيذ برمجيات غير مكتوبة بجافاسكربت على المتصفح بشكل مباشر.

ولا تهدف تجميع الويب إلى استبدال لغة جافاسكربت في المتصفحات، بل أن تعمل معها جنبًا إلى جنب في الأماكن التي تكون فيها جافاسكربت بطيئة أو غير مناسبة لأداء وظيفة معينة في تطبيق الويب.

تقدم حزمة Emscripten SDK إمكانية أن ترجمة البرمجيات المكتوبة بلغة السي أو التي تدعم LLVM IR إلى ملف بَايْنَرِي لتجميع الويب.

كما تقدم لغات مثل رست ولغة غو إمكانية الترجمة إلى تجميع الويب.

مصطلحات أساسية

قاموس لمجموعة مصطلحات إنجليزية تتعلق بويب أسمبلي مع تعريفها:

مصطلحات إنجليزية متعلقة ويب أسمبلي
المصطلح التّعريف ملاحظة
Virtual Machine (VM) الآلة الإفتراضية هي مُحاكاة لحاسوب يقوم بتنفيذ مجموعة تعليمات بسيطة (بايت كُودْ).[5]
Binary الشفرة الثنائية أو الترميز الثنائي (باينري)، هي شفرة تحمل المعلومات في مسلسلة رقمية تتكون من رمزين (0,1).
Bytecode بايت كود أو شيفرة بايت، هي مجموعة تعليمات مكتوبة على هيئة شفرة ثنائية.
Sandbox Environment البيئة المعزولة أو الملعب، مصطلح يقصد به أن تنفيذ البرمجية لا يحصل على وصول مباشر إلى موارد نظام التشغيل.
wasm Format امتداد الملف .wasm عبارة عن ملف يحوي تعليمات ويب أسمبلي على هيئة شيفرة بايت.
wat Format امتداد الملف .wat هو صيغة لكتابة مجموعة تعليمات ويب أسمبلي على هيئة صيغة نصية تشبه لغة التجميع، وتهدف الصيغة إلى تسهيل اكتشاف وتصحيح الأخطاء على المطوريين، وبالإمكان تحويلها لاحقًا إلى صيغة شيفرة بايت .wasm

التاريخ

أُعلِنَ عن تجميع الويب لأول مرة في 2015 [6]، وقد أثبت المفهوم لأول مرة من خلال تنفيذ Unity's Angry Bots على متصفح فاير فوكس[7]، قوقل كروم،[8] مايكروسوفت إيدج[9]، وقد سبقتها بعض التقنيات لإجراء محاولات أولية مثل مشروع «آزِمْ» asm.js من موزيلا، ومشروع PNaCI من قوقل،[10][11] وقد استندت التجارب الأولية إلى نموذج asm.js من موزيلا.[12]

asm.js - آزِمْ.ج س:

تفرع من لغة جافا سكرِبت، صُمِّمت لتكون قابلًا للتوليد من لغات أخرى كلغة سِي C على سبيل المثال، ويكمن الفرق الجوهريّ بينها وبين الجافا سكربت العادية أن «آزِمْ» asm.js ستحافظ على أداء أفضل من جافا سكربت العادية. لا تزال تُستخدم في المتصفحات التي لا تدعم تجميع الويب WebAssembly، أو المتعطِّلة فيها لأسباب أمنية.[13]

في فبراير 2018، قامت «مجموعة عمل تجميع الويب» WebAssembly Working Group بنشر ثلاث مسودات للعمل على توثيق كل من المواصفات والمعايير الأساسية [14][15]، وواجهة جافا سكربت JavaScript Interface[16] وكذلك Web API[17] التي يحتاج تجميع الويب لها.

وازي

مشروع الواجهة البرمجية لنظام تجميع الويب (بالإنجليزية: WebAssembly System Interface) ويشار إليه اختصارًا بـ (وَازِي Wasi)، يهدف إلى توحيد المعايير وطرق عمل كود تجميع الويب في البيئات خارج المتصفح.[18]

المميزات والأهداف

  • تمكين تنفيذ تطبيقات عالية الأداء ومقاربة إلى أداء التطبيقات الأصلية (Native Code).
  • توفير صيغة محمولة (Portable).
  • الحماية عن طريق العزل (Sandbox).
  • العمل في بيئات متعددة (Cross Platform).

مثال

شفرة برمجية بلغة السي، في مقابل شفرة تجميع الويب:

شفرة برمجية مكتوبة بلغة C صيغة .wat النصية لتجميع الويب صيغة .wasm الشفرة الثنائية لتجميع الويب
int factorial(int n) {
  if (n == 0)
    return 1;
  else
    return n * factorial(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 00 01 60 01 73 01 73 06
03 00 01 00 02
0A 00 01
00 00
20 00
50
04 7E
42 01
05
20 00
20 00
42 01
7D
10 00
7E
0B
0B 15 17

انظر أيضًا

المراجع

  1. "Understanding WebAssembly text format - WebAssembly | MDN"، developer.mozilla.org (باللغة الإنجليزية)، مؤرشف من الأصل في 5 فبراير 2022، اطلع عليه بتاريخ 12 مارس 2022.
  2. "Introduction — WebAssembly 1.1 (Draft 2021-11-22)"، webassembly.github.io، مؤرشف من الأصل في 22 نوفمبر 2021، اطلع عليه بتاريخ 22 نوفمبر 2021.
  3. "WebAssembly"، webassembly.org، مؤرشف من الأصل في 9 يوليو 2022، اطلع عليه بتاريخ 10 يوليو 2022.
  4. "WebAssembly 1.0 Becomes a W3C Recommendation and the Fourth Language to Run Natively in Browsers"، InfoQ (باللغة الإنجليزية)، مؤرشف من الأصل في 25 نوفمبر 2021، اطلع عليه بتاريخ 22 نوفمبر 2021.
  5. Terence Parr (13 مايو 2014)، "How to build a virtual machine"، مؤرشف من الأصل في 14 مايو 2022. {{استشهاد بدورية محكمة}}: Cite journal requires |journal= (مساعدة)
  6. "Going public launch bug · Issue #150 · WebAssembly/design"، GitHub (باللغة الإنجليزية)، مؤرشف من الأصل في 21 نوفمبر 2021، اطلع عليه بتاريخ 04 ديسمبر 2021.
  7. "A WebAssembly Milestone: Experimental Support in Multiple Browsers – Mozilla Hacks - the Web developer blog"، Mozilla Hacks – the Web developer blog (باللغة الإنجليزية)، مؤرشف من الأصل في 28 يناير 2021، اطلع عليه بتاريخ 04 ديسمبر 2021.
  8. "Experimental support for WebAssembly in V8 · V8"، v8.dev، مؤرشف من الأصل في 3 يونيو 2021، اطلع عليه بتاريخ 04 ديسمبر 2021.
  9. Blog, Microsoft Edge (15 مارس 2016)، "Previewing WebAssembly experiments in Microsoft Edge"، Microsoft Edge Blog (باللغة الإنجليزية)، مؤرشف من الأصل في 18 أغسطس 2021، اطلع عليه بتاريخ 04 ديسمبر 2021.
  10. "Google Is to Remove Support for PNaCl"، InfoQ (باللغة الإنجليزية)، مؤرشف من الأصل في 28 أكتوبر 2021، اطلع عليه بتاريخ 04 ديسمبر 2021.
  11. "Google, Microsoft, Mozilla And Others Team Up To Launch WebAssembly, A New Binary Format For The Web"، TechCrunch (باللغة الإنجليزية)، مؤرشف من الأصل في 2 يونيو 2021، اطلع عليه بتاريخ 04 ديسمبر 2021.
  12. "WebAssembly: a binary format for the web"، 2ality.com، مؤرشف من الأصل في 23 أكتوبر 2021، اطلع عليه بتاريخ 04 ديسمبر 2021.
  13. "asm.js"، asmjs.org، مؤرشف من الأصل في 24 نوفمبر 2021، اطلع عليه بتاريخ 04 ديسمبر 2021.
  14. "WebAssembly First Public Working Drafts | W3C News" (باللغة الإنجليزية)، مؤرشف من الأصل في 16 يوليو 2021، اطلع عليه بتاريخ 04 ديسمبر 2021.
  15. "wasm core"، https://www.w3.org، 15 فبراير 2018، مؤرشف من الأصل في 8 مارس 2021، اطلع عليه بتاريخ 12 أبريل 2021. {{استشهاد ويب}}: روابط خارجية في |موقع= (مساعدة)
  16. "Wasm JavaScript API"، https://www.w3.org/، 15 فبراير 2018، مؤرشف من الأصل في 30 نوفمبر 2020، اطلع عليه بتاريخ 12 أبريل 2021. {{استشهاد ويب}}: روابط خارجية في |موقع= (مساعدة)
  17. "wasm Web API"، https://www.w3.org/، 15 فبراير 2018، مؤرشف من الأصل في 19 أبريل 2021، اطلع عليه بتاريخ 12 فبراير 2021. {{استشهاد ويب}}: روابط خارجية في |موقع= (مساعدة)
  18. "WASI |"، wasi.dev، مؤرشف من الأصل في 5 يوليو 2022، اطلع عليه بتاريخ 10 يوليو 2022.
  • بوابة برمجة الحاسوب
  • بوابة اتصال عن بعد
  • بوابة إنترنت
  • بوابة علم الحاسوب
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.