تجاوز حاجز 2 غيغابايت: إدخال/إخراج غير متزامن للملفات الكبيرة في WebAssembly

2025-03-04
تجاوز حاجز 2 غيغابايت: إدخال/إخراج غير متزامن للملفات الكبيرة في WebAssembly

نفذ الكاتب سابقًا setjmp في WebAssembly ، متجاوزًا اعتماد WASI libc على اقتراح معالجة الاستثناءات. ومع ذلك ، كان هذا النهج محدودًا بالملفات التي تقل عن 2 غيغابايت. تشرح هذه المشاركة كيفية استخدام واجهة برمجة تطبيقات الملف ونوع Blob لإنشاء نظام ملفات قائم على الذاكرة للتعامل مع الملفات الأكبر حجمًا. نظرًا لأن إدخال/إخراج الويب غير متزامن ، بينما تكون لغات النظام عادةً متزامنة ، فقد تم استخدام Asyncify لربط النماذج. واجه الكاتب مشاكل في التحسين باستخدام wasm-opt ، وحلها بإنشاء wasm-opt وهمي. وأخيرًا ، باستخدام مؤشر دالة متطاير بذكاء ، تجاوز الافتراض الخاطئ لـ Asyncify حول وظيفة `asyncjmp_rt_start` ، محققًا في النهاية معالجة الملفات الكبيرة بشكل غير متزامن.

اقرأ المزيد
التطوير

ترجمة بيرل إلى ويب أسمبلي: مهمة شاقة

2025-02-11
ترجمة بيرل إلى ويب أسمبلي: مهمة شاقة

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

اقرأ المزيد
التطوير

تجاوز قيود وقت تشغيل WebAssembly: تنفيذ ZeroPerl غير المتزامن

2025-02-11
تجاوز قيود وقت تشغيل WebAssembly: تنفيذ ZeroPerl غير المتزامن

شعر المؤلف بالإحباط بسبب نقص دعم exnref في معظم أوقات تشغيل WebAssembly ، مما جعل ZeroPerl غير قابل للاستخدام ، لذلك قرر حل المشكلة بدلاً من الشكوى. من خلال الاستفادة من ميزة Asyncify في Binaryen ، تم تنفيذ بديل لـ setjmp من الصفر ، متجاوزًا مشكلات توافق libsetjmp. بعد إزالة المكتبة الرسمية ، وكتابة رمز التجميع ، وتحسينه باستخدام wasm-opt ، يعمل ZeroPerl الآن بنجاح في Wasmer و Wasmtime وأوقات تشغيل WebAssembly الأخرى. هذا الاختراق يوفر وحدة Perl WebAssembly معزولة تمامًا وذاتية الاكتفاء.

اقرأ المزيد
التطوير