HeadlinesBriefing HeadlinesBriefing.com

NetWasm: من C# إلى Wasm صغير ومستقل مع WASI

Hacker News •
×

NetWasm هو مترجم .NET مستقل ومكتبة أساسية وبيئة تشغيل وحزمة SDK، يُترجم لغة C# وCIL الخاصة بـ .NET مباشرةً إلى WebAssembly. وعلى خلاف الأساليب الأخرى، لا ينقل NetWasm إلى بيئة الإنتاج بيئة CLR لسطح المكتب أو Mono أو dotnet.js أو ملفات DLL للتطبيق، لذلك تبقى الوحدات الناتجة صغيرة ومستقلة.

في مقارنة قُيست على حمل العمل نفسه print-42، أنتج NetWasm مع جامع المهملات الدقيق Compact مكوّن WASI Preview 2 بحجم 47,895 بايتًا. أما بناء Rust 1.95.0 المُعدّ لتقليل الحجم فبلغ 53,635 بايتًا. أي أنه أصغر بنسبة 10.7% بحجمه الخام، وأصغر بنسبة 19.5% بعد الضغط بخوارزمية Brotli-11. ويعكس رقم NetWasm إصدار Release الافتراضي له، بينما أضاف بناء Rust إعدادات Cargo الموثّقة لتقليل الحجم. ويعمل wasm-opt من Binaryen داخل خط معالجة NetWasm دون الحاجة إلى تثبيت أي شيء إضافي.

وفي اختبارات تخصيص الذاكرة وجمع المهملات، عمل NetWasm أيضًا بسرعة أكبر من Mono AOT، المترجم من الشيفرة المصدرية نفسها بلغة C# والمُشغَّل عبر Wasmtime. فقد انخفض زمن المعاملة الكامل بنسبة 26%، وانخفض زمن رسم الكائنات المحتفظ بها بنسبة 38%، وانخفض زمن تقلّب واجهة المستخدم بنسبة 40%. والأرقام هي وسيط 15 تشغيلًا على جهاز Apple M1 Max، وتم التحقق من كل تشغيل مقابل نتيجة .NET لسطح المكتب.

لا يُعد خط الأساس البالغ 46.7 كيبيبايت حدًّا أقصى. يدعم NetWasm لغة C# 15، ووحدات JavaScript، وWeb Workers، والتشغيل البيني الثابت مع ملفات .a، ومكونات WIT وWASI P2، وأشجار التعبيرات، ومكتبات HTTP وJSON وXML وRegex، وwasm64. ويستطيع بناء المشاريع وتشغيلها ونشرها واختبارها عبر واجهة dotnet CLI المعتادة.

المصدر: Hacker News · لخّصه HeadlinesBriefing