۲۹ مهر ۱۴۰۵ github.com ۳ دقیقه مطالعه

پروژه NetWasm؛ کامپایلر مستقل C# برای تولید خروجی WebAssembly با حجم و عملکرد بهینه

پروژه NetWasm؛ کامپایلر مستقل C# برای تولید خروجی WebAssembly با حجم و عملکرد بهینه — C# now beats Rust on WASM size

خلاصه

پروژه NetWasm یک کامپایلر و ران‌تایم مستقل برای زبان C# است که کدهای دات‌نت را مستقیماً به کامپوننت‌های سبک WebAssembly و WASI تبدیل می‌کند. این ابزار با حذف وابستگی‌های سنگین دات‌نت دسکتاپ، حجم خروجی و کارایی را به‌شدت بهبود می‌دهد.

معرفی پروژه NetWasm و مسئله آن

ابزار NetWasm یک کامپایلر، CoreLib، ران‌تایم و SDK مستقل است که کدهای C# و .NET CIL را مستقیماً به WebAssembly تبدیل می‌کند. برخلاف روش‌های سنتی که کل دسکتاپ CLR یا مونو را به همراه فایل‌های DLL وارد محیط تولید می‌کنند، این ابزار بدون نیاز به بارگذاری ران‌تایم‌های سنگین، خروجی‌های بسیار کم‌حجم و مستقل تولید می‌کند.

معماری و نحوه عملکرد

ابزار Roslyn کدهای C# را به CIL تبدیل می‌کند و سپس NetWasm کدهای قابل‌دسترس را مستقیماً کامپایل کرده و جنریک‌ها را اختصاصی‌سازی می‌کند. ویژگی‌های کلیدی این معماری عبارتند از:

  • کامپوننت بسته‌محور (Closed-world compilation): کدهای غیرقابل‌دسترس، ایمپورت‌های اضافی و قابلیت‌های غیرضروری ران‌تایم حذف می‌شوند.
  • قرارداد پلتفرم کوچک‌تر: به جای بازتولید تمام فرض‌های ران‌تایم دسکتاپ، از APIهای قابل‌حمل پشتیبانی می‌کند.
  • مدیریت حافظه اختصاصی: دارای چند استراتژی مدیریت حافظه مانند Compact (زباله‌روب دقیق علامت‌گذاری و جاروب کردن غیرجابه‌جا شونده) و نت‌ویسم‌جی‌سی است.
  • نبود بازتاب (Reflection) سنگین: بارگذاری دینامیک اسمبلی‌ها و کلمات کلیدی داینامیک در این پروفایل حذف شده‌اند.

نحوه استفاده و شروع به کار

برای استفاده از این ابزار به SDK دات‌نت نسخه ۱۰.۰.۳۰۳ یا بالاتر نیاز دارید. دستورات زیر قالب‌های پروژه را نصب و یک برنامه نمونه را اجرا می‌کنند:

dotnet new install NetWasm.Templates
dotnet new netwasm-app -n HelloNetWasm
cd HelloNetWasm
dotnet restore
dotnet run
dotnet publish -c Release -o publish/local

سپس می‌توانید کامپوننت خروجی را با یک میزبان سازگار با WASI Preview 2 مانند Wasmtime اجرا کنید:

wasmtime run publish/local/HelloNetWasm.wasm

سیگنال‌های بلوغ و مقایسه با جایگزین‌ها

این مخزن در گیت‌هاب با نام zion-sati/NetWasm توسعه یافته و دارای بیش از ۱۵۰ ستاره است. این پروژه بر روی نتایج بنچمارک‌های حجم و عملکرد، توجه زیادی را جلب کرده است؛ از جمله اینکه روی یک تست ساده، خروجی آن حتی از پروفایل بهینه‌سازی‌شده حجم در Rust نیز کوچک‌تر گزارش شده است.

با این حال، در بحث‌های Hacker News برخی کاربران اشاره کرده‌اند که این مقایسه‌ها در شرایط بسیار خاص و روی بنچمارک‌های محدودی انجام شده‌اند و نمی‌توان آن را یک قانون کلی برای تمام سناریوها دانست. همچنین نظراتی درباره کاربرد محدود WebAssembly در مقایسه با توسعه سنتی وب وجود دارد، اما برای مهندسانی که به دنبال اجرای کدهای C# در لبه شبکه یا محیط‌های ابری سبک با WASI هستند، NetWasm یک دستاورد فنی جذاب به شمار می‌رود.

در یک نگاه

  • نام پروژه: NetWasm
  • زبان اصلی: C#
  • حوزه فعالیت: کامپایلر، WebAssembly، WASI، AOT
  • هدف اصلی: تولید خروجی‌های مستقل و بسیار سبک Wasm از کدهای C# بدون وابستگی به ران‌تایم دسکتاپ
  • قابلیت کلیدی: پشتیبانی از استاندارد WASI Preview 2 و ماژول‌های JavaScript

این مطلب به‌صورت کاملاً خودکار و با هوش مصنوعی از مقالهٔ اصلی و بحث هکرنیوز تهیه شده و ممکن است خطا داشته باشد. حقوق مطلب اصلی متعلق به نویسندهٔ آن است. قوانین و گزارش مشکل

این خبر را با دیگران به اشتراک بگذارید

خبرهای فناوری در قالب پست و ویدیوی کوتاه، در اینستاگرام هکرنیوز بلاگ. به‌زودی
هر خبر به محض انتشار، به‌همراه پادکست روزانه در کانال تلگرام هکرنیوز بلاگ.