العمل مع WebAssembly وC#: من الألف إلى الياء في .NET

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا يغير WebAssembly قواعد اللعبة لمطوري C#

\n\n

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

\n\n

في هذه المقالة، سنشرح كيفية عمل WebAssembly مع C# و.NET، ونستعرض الأدوات الرئيسية (Blazor وWasmtime وMono) ونكتب أمثلة عملية. في النهاية، ستتمكن من تشغيل كود C# بنفسك في المتصفح أو على الخادم باستخدام Wasm.

\n\n

أساسيات WebAssembly وتكامله مع C#

\n\n

ما هو WebAssembly بلغة بسيطة

\n\n

WebAssembly هو كود بايت منخفض المستوى يُنفذ في آلة افتراضية داخل المتصفح. لا يحل محل JavaScript، بل يعمل معه. المزايا الرئيسية:

\n
    \n
  • الأداء: الكود الثنائي يُنفذ أسرع بنسبة 30-50% من JS.
  • \n
  • الأمان: بيئة تنفيذ معزولة.
  • \n
  • قابلية النقل: نفس ملف .wasm يعمل في Chrome وFirefox وSafari وEdge.
  • \n
\n\n

بالنسبة لـ C#، تم تنفيذ نظام WebAssembly البيئي من خلال عدة مشاريع: Blazor WebAssembly (إطار عمل لواجهات المستخدم)، Mono Wasm Runtime (ينفذ كود IL)، وWasmtime (لسيناريوهات الخادم).

\n\n

كيف تُترجم C# إلى WebAssembly

\n\n

تبدو العملية كالتالي:

\n
    \n
  1. تكتب كوداً بلغة C#.
  2. \n
  3. المترجم Roslyn يحوله إلى IL (لغة وسيطة).
  4. \n
  5. Mono Runtime (أو NativeAOT) يترجم IL إلى WebAssembly.
  6. \n
  7. المتصفح يحمل ملف .wasm وينفذه.
  8. \n
\n\n

هام: يوجد نهجان — التفسير عبر Mono (أبطأ لكنه أبسط) وترجمة AOT (أسرع لكنها تتطلب إعدادات).

\n\n

عملياً: ثلاث طرق لتشغيل C# في WebAssembly

\n\n

1. Blazor WebAssembly — لواجهات الويب

\n\n

Blazor يتيح كتابة الجزء العميل بلغة C# بدلاً من JavaScript. يتم ترجمة كود واجهة المستخدم ومنطق الأعمال بالكامل إلى Wasm.

\n\n

مثال لمكون بسيط:

\n
@page "/counter"\n<h3>العداد: @currentCount</h3>\n<button @onclick="IncrementCount">+1</button>\n\n@code {\n    private int currentCount = 0;\n\n    private void IncrementCount()\n    {\n        currentCount++;\n    }\n}
\n\n

هذا الكود يُنفذ في المتصفح. Blazor يقوم تلقائياً بتحميل Mono Wasm Runtime وملف .wasm الخاص بك. للبدء، أنشئ مشروعاً:

\n
dotnet new blazorwasm -o MyBlazorApp\ncd MyBlazorApp\ndotnet run
\n\n

النتيجة: تطبيق SPA كامل بدون سطر واحد من JavaScript.

\n\n

2. الترجمة المباشرة إلى .wasm باستخدام NativeAOT

\n\n

إذا كنت بحاجة لتنفيذ وظيفة محددة (وليس واجهة مستخدم)، استخدم NativeAOT — فهو يترجم C# مباشرة إلى WebAssembly أصلي بدون Mono Runtime.

\n\n

الخطوات:

\n
    \n
  1. قم بتثبيت SDK .NET 8+ و workload: dotnet workload install wasm-tools
  2. \n
  3. أنشئ تطبيق وحدة تحكم:
  4. \n
\n\n
dotnet new console -n WasmDemo\ncd WasmDemo
\n\n
    \n
  1. عدّل ملف .csproj بإضافة دعم Wasm:
  2. \n
\n\n
<PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net8.0</TargetFramework>\n    <RuntimeIdentifier>browser-wasm</RuntimeIdentifier>\n    <UseNativeAot>true</UseNativeAot>\n</PropertyGroup>
\n\n
    \n
  1. اكتب الكود:
  2. \n
\n\n
using System;\n\npublic class Program\n{\n    public static void Main()\n    {\n                

المدونات

توصيات الكتب