ما هي تقنية ال Web Assembly، كان لظهور واختراع لغات البرمجة العامل الأساسي في تطوير الحاسوب، والويب عموماً. حيث ساعد إيجاد لغات البرمجة على ابراز جمال وفخامة الويب. ولكن لفترة من الزمن ، كانت هناك لغة برمجة واحدة فقط على الساحة التكنولوجية، وهي متاحة للاستخدام في متصفح الويب: وهي جافا سكريبت. وقد أدى الموت البطيء للغات الاخرى واعدامها مبكراً إلى استبعادها عن الساحة ، مثل Java و Flash’s ActionScript ، بكونهم لغات من الدرجة الأولى لتطوير الويب. اما عن لغات الويب الأخرى ، مثل CoffeeScript ، فإنه يتم تجميعها فقط إلى JavaScript.

وهذا الامر أدى بدوره لظهور Web Assembly، والتي لها انعكاسات هائلة على النظام الأساسي للويب – فهي توفر طريقة لتشغيل التعليمات البرمجية المكتوبة بلغات متعددة على الويب بسرعة تقارب السرعة الأصلية، مع تشغيل تطبيقات العميل على الويب والتي لم يكن بمقدورها في السابق القيام بذلك.

ما هي تقنية ال Web Assembly

WebAssembly هو اختصار لـ Wasm، وهو عبارة عن تنسيق تعليمات ثنائي وجهاز افتراضي يوفر أداءً شبه أصلي لتطبيقات مستعرض الويب ، ويسمح للمطورين بإنشاء تطبيقات ويب عالية السرعة باللغة التي يختارونها. وقد تم تصميمه ليكون هدفًا تجميعيًا لأي لغة، وجافا سكريبت هي واحدة منها فقط.

ونظرًا لأن كلالمتصفحات الرئيسية تدعم الآن WebAssembly ، فقد حان الوقت لبدء التفكير بجدية في كتابة تطبيقات من جانب العميل للويب والتي يمكن تجميعها على أنها WebAssembly. ومن الجدير بالذكر أن تطبيقات WebAssembly ليس المقصود منها استبدال تطبيقات جافا سكريبت — حتى هذه اللحظة. بدلاً من ذلك ، يمكننا ان نتصور Web Assembly  على انه رفيق درب لـ JavaScript. فبينما يعتبر JavaScript مرنًا ومكتوبًا ديناميكيًا ويتم تقديمه من خلال كود مصدر يمكن قراءته من قبل الإنسان ، فإن WebAssembly يعتبر سريعًا ومكتوبًا بقوة ويتم تسليمه عبر تنسيق ثنائي مضغوط.

لذا يجب على المطورين مراعاة WebAssembly لحالات الاستخدام كثيفة الأداء مثل الألعاب وتدفق الموسيقى وتحرير الفيديو وتطبيقات CAD. فقد قامت العديد من خدمات الويب بالفعل بهذه الخطوة، مثل Google Earth. وقد تحول تطبيق Figma ، وهو تطبيق رسم وتخطيط تعاوني ، إلى WebAssembly لخفض أوقات التحميل وسرعة التنفيذ حتى عندما كان WebAssembly جديدًا نسبيًا.

 

آلية عمل تقنية ال Web Assembly

Web Assembly ، والتي تم تطويرها من قبل W3C، فعلى حد تعبير مصمميه “هدفه التجميع”. فلا يكتب المطورون WebAssembly مباشرة؛ بل يكتبون باللغة التي يختارونها، والتي يتم تجميعها بعد ذلك في WebAssembly bytecode. حيث يتم بعد ذلك تشغيل الرمز الثانوي على العميل – في متصفح ويب – والذي تتم ترجمته إلى رمز جهاز أصلي ويتم تنفيذه بسرعة عالية.

ومن المفترض أن يكون رمز Web Assembly أسرع في التحميل والتحليل والتنفيذ من JavaScript. فعند استخدام Web Assembly بواسطة مستعرض ويب، يظل هناك عبء تحميل وحدة Wasm وإعدادها. اما بالنسبة لمشاريع Wasm الأكبر، فيمكن أن تصل هذه الوحدات إلى عدة ميغا بايت، لذلك يمكن أن تكون هذه التأخيرات كبيرة. ولكن مع تساوي الأشياء الاخر معه يعمل Wasm بشكل أسرع.

كما وانه يوفر أيضًا نموذج تنفيذ في وضع الحماية، استنادًا إلى نماذج الأمان نفسها الموجودة في JavaScript الآن. فلا يمكن لتطبيقات Wasm الوصول إلى أي شيء خارج وضع الحماية مباشرةً ، بما في ذلك DOM لصفحة الويب التي تعمل عليها. ويجب أن تستخدم أي تفاعلات مع باقي الجهاز عناصر ABI مثل واجهة نظام WebAssembly (WASI). بالإضافة لانه يوفر إمكانية الوصول المتحكم فيه إلى الملفات والشبكات وساعة النظام وخدمات النظام الأخرى التي غالبًا ما تكون مطلوبة في البرامج.

في الوقت الحالي ، يعد تشغيل Web Assembly في متصفحات الويب هو حالة الاستخدام الأكثر شيوعًا، ولكن الهدف منه أن يكون أكثر من مجرد حل مستند إلى الويب. حيث يدير مشروع Wasmer تطبيقات WebAssembly من جانب الخادم، وبنفس الطريقة التي يعمل بها وقت تشغيل Node.js جافا سكريبت خارج المتصفح.

 

اللغات التي تدعم تقنية WebAssembly

ان الوضع الطبيعي لكتابة  تقنية WebAssembly بشكل مباشر. كما يوحي الاسم ، فهي أشبه بلغة تجميع ، كما لو انه شيء تستهلكه الآلة ، وليس لغة برمجة رفيعة المستوى وصديقة للإنسان ومستقلة بذاتها.  حيث يمكننا اعتبار WebAssembly أقرب إلى كونه الوسيط (IR) الذي تم إنشاؤه بواسطة البنية التحتية لمترجم اللغة LLVM ، مما هو عليه مثل C أو Java. وبالتالي فإن معظم سيناريوهات العمل مع Web Assembly تتضمن كتابة تعليمات برمجية بلغة عالية المستوى وتحويلها إلى WebAssembly. ويمكن القيام بذلك بأي من الطرق الثلاث الأساسية:

 

  • التجميع المباشر.

والذي من خلاله يتم ترجمة المصدر إلى Web Assembly بواسطة سلسلة أدوات مترجم اللغة الخاصة. وتملك كل من Rust و C / C ++ و Kotlin / Native و D طرق أصلية لإصدار Wasm من المجمعين الذين يدعمون تلك اللغات.

  • أدوات الطرف الثالث.

لا تحتوي اللغة على دعم Wasm الأصلي في سلسلة الأدوات الخاصة بها، ولكن يمكن استخدام أداة مساعدة من الجزء الثالث للتحويل إلى Wasm. حيث تتمتع كل من Java و Lua وعائلة لغات .Net ببعض الدعم مثل هذا.

  • مترجم قائم على Web Assembly.

هنا ، لا يتم ترجمة اللغة نفسها إلى WebAssembly ؛ حيث يقوم مترجم اللغة ، المكتوب في WebAssembly ، بتشغيل التعليمات البرمجية المكتوبة باللغة. لذا يمكننا اعتباره النهج والطريقة الأكثر تعقيدًا، فقد يكون المترجم الشفري العديد من الميغا بايت من التعليمات البرمجية، ولكنه يسمح للكود الحالي المكتوب في اللغة بالعمل جميعًا دون تغيير. مع الإشارة الى انه يوجد لدى كل من Python (عن طريق PyScript ، على سبيل المثال) و Ruby مترجمين فوريين مترجمين إلى Wasm.

 

ميزات تقنية Web Assembly

يمكننا القول ان WebAssembly لا يزال في مراحله الأولى، حيث تظل سلسلة أدوات WebAssembly والتنفيذ أقرب إلى إثبات المفهوم من تقنية الإنتاج. ومع ذلك ، فإن القائمين على WebAssembly يضعون نصب أعينهم جعل Web Assembly أكثر فائدة من خلال سلسلة من العمليات:

 

  • أساسيات جمع القمامة

لا يدعم WebAssembly اللغات التي تستخدم نماذج الذاكرة المجمعة بشكل غير مباشر. لا يمكن دعم لغات مثل Lua أو Python إلا من خلال تقييد مجموعات الميزات أو عن طريق تضمين وقت التشغيل بالكامل كملف WebAssembly القابل للتنفيذ. ولكن هناك عمل جار لدعم نماذج الذاكرة المجمعة بغض النظر عن اللغة أو طريقة التنفيذ.

 

  • الترابط

يعد الدعم الأصلي للترابط شائعًا للغات مثل Rust و C ++. ما يعني عدم وجود دعم الترابط في Web Assembly أنه لا يمكن كتابة فئات كاملة من البرامج المستهدفة WebAssembly بهذه اللغات. يستخدم اقتراح إضافة خيوط إلى WebAssembly نموذج خيوط C ++ كأحد مصادر الإلهام الخاصة به.

 

  • عمليات الذاكرة المجمعة و SIMD

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

 

  • تراكيب لغة عالية المستوى

يتم النظر في العديد من الميزات الأخرى لتعيين WebAssembly مباشرة إلى التركيبات عالية المستوى بلغات أخرى.

 

  • يمكن محاكاة الاستثناءات في WebAssembly ، ولكن لا يمكن تنفيذها محليًا عبر مجموعة تعليمات WebAssembly. تتضمن الخطة المقترحة للاستثناءات أساسيات استثناء متوافقة مع نموذج استثناء C ++ ، والتي يمكن استخدامها بدورها بواسطة لغات أخرى تم تجميعها في WebAssembly.
  • تسهل أنواع المراجع تمرير الكائنات المستخدمة كمراجع إلى البيئة المضيفة. وهذا من شأنه أن يجعل عملية جمع البيانات المهملة وعددًا من الوظائف عالية المستوى الأخرى أسهل في التنفيذ في WebAssembly.
  • مكالمات الذيل ، نمط تصميم يستخدم في العديد من اللغات.
  • الدالات التي تُرجع قيمًا متعددة ، على سبيل المثال ، عبر المجموعات في Python أو C #.
  • عوامل تمديد الإشارة ، عملية حسابية مفيدة منخفضة المستوى. (تدعم LLVM هذه أيضًا.)

 

  • أدوات التصحيح والتنميط

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

 

 

حالات استخدام تقنية ال Web Assembly

تعتبر حالة الاستخدام الأساسية لـ WebAssembly هدفًا لكتابة برنامج داخل المتصفح. حيث يمكن كتابة المكونات التي تم تجميعها في WebAssembly بأي من اللغات؛ ثم يتم تسليم حمولة WebAssembly النهائية من خلال JavaScript إلى العميل.

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

  • رمز عالي الأداء موجود بالفعل في لغة قابلة للاستهداف. على سبيل المثال ، إذا كانت لديك وظيفة رياضية عالية السرعة مكتوبة بالفعل بلغة C، وتريد دمجها في تطبيق ويب ، فيمكنك نشرها كوحدة WebAssembly. ويمكن أن تظل أجزاء التطبيق الأقل أهمية من حيث الأداء والتي تواجه المستخدم في JavaScript.
  • يجب كتابة رمز عالي الأداء من البداية، حيث لا تكون JavaScript مثالية. لكن في السابق ، قد يستخدم الشخص منا js لكتابة هذا الرمز. ولا يزال بإمكانك القيام بذلك ، ولكن يتم وضع WebAssembly كحل أفضل على المدى الطويل.
  • نقل تطبيق سطح المكتب إلى بيئة الويب. حيث تندرج العديد من العروض التوضيحية للتكنولوجيا لكل من js و WebAssembly في هذه الفئة. ويمكن أن يوفر WebAssembly ركيزة للتطبيقات الأكثر طموحًا من مجرد واجهة مستخدم رسومية مقدمة عبر HTML.

سايبر وان لمكافحة مخاطر الأمن السيبراني

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

972533392585+

972505555511+

او من خلال البريد الإلكتروني التالي: info@cyberone.co

 

يمكننا القول ان تقنية ال Web Assembly ما هي الا تنسيق تعليمات ثنائي بالإضافة لكونه جهاز افتراضي يوفر أداءً شبه أصلي لتطبيقات مستعرض الويب، ويسمح للمطورين بإنشاء تطبيقات ويب عالية السرعة باللغة التي يختارونها. والذي صُمم ليكون هدفًا تجميعيًا لأي لغة من لغات البرمجة، الذي يسهل الكثير على المبرمجين ويوفر عليهم الوقت والجهد، فيستطيع من خلالها المبرمجين بناء تطبيقات كاملة او بناء أجزاء من تطبيقات. حيث تساهم تقنية WASM على تدعيم اللغات كما ولها دور في دعم لغات الذاكرة.

 

جميع الحقوق محفوظة لشركة سايبر وان المختصة في الامن السيبراني والجرائم الإلكترونية

لا يحق لكم نقل او اقتباس اي شيء بدون موافقه الشركة قد يعاقب عليها القانون.

للتواصل info@cyberone.co

00972533392585

الحماية الالكترونية

CyberoneAuthor posts

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

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *