مشاهدة النسخة كاملة : مجمل الفروقات والاختلافات بين C# و VB.net - الخلاصة : 99% تشابه


ابومحمد
07-08-2007, 12:09 AM
جميع لغات البرمجة والموجهة إلى إطار عمل NET Framework. تنتج شيفرة موحدة بعد الترجمة وهي شيفرة MSIL. مما يعني أن جميع لغات NET. مولودة بلغة ولسان واحد ولكن بلهجات متعددة. في المقال التالي اثبت لك هذه الحقيقة وسترى شيفرة #C في موعد غرامي مع شيفرة Visual Basic .NET معاً !!

منذ أن تعلمت لغات البرمجة ودخلت عالم المبرمجين، لا تكاد ان تخلوا مناقشاتهم في المفاضلات والمقارنات -التي تصل الى حد الحروب الدينية- بين لغات البرمجة المختلفة، فكل مبرمج يحيد بشكل واضح الى لغته المفضلة، وكل مبرمج لا تملئ بريق عيناه سوى اللغة التي يتقنها.
شخصيا، واجهت العديد من هذه الأشكال وبالتحديد مع مبرمجي لغة C++\C، والذين يظنون أنهم فوق البشر ويتميزون بمميزات لا يملكها الكثير، وذلك –اعتقادا منهم- ان لغة البرمجة C هي أفضل لغة تخاطب بين الإنسان والآلة على مر التاريخ.
رغم اني مبرمج ASP.NET بلغة Visual Basic .NET، فلن اقدم في هذا المقال مقارنات مضيعة للوقت بين هذه اللغة واللغة المسمى #C. بل سأميل قدر المستطاع الى الحياد محاولا ذكر وجوه الشبه بينهما لأثبت لك امكانية كتابة برنامج واحد بكلا اللغتين.

الوحدات المدارة والمجمعات
الشيفرة المصدرية Source Code –سواء مكتوبة بـ #C او Visual Basic .NET او أي لغة موجهة الى إطار عمل NET Framework- تسمى بعد الترجمة Compiling بالوحدة المدارة Managed Module . لذلك، ان كان المشروع يحتوي على ملف شيفرة مصدرية واحد فقط (بالامتداد cs. مثلا) او اكثر من 39408234902 ملف، كل هذه الملفات ستدمج بعد الترجمة لتنتج ما يسمى بالوحدة المدارة Managed Module. اللغة المستخدمة في هذه الوحدة المدارة هي لغة التجميع Assembly والخاصة بـ Microsoft والتي تسمى MSIL.

هذه الوحدة المدارة يمكن ان تعمل بشكل مستقل او تعتمد على وحدات مدارة اخرى ليتم تنفيذها. الوحدة المدارة او مجموعة الوحدات المدارة المترابطة تكون ما يسمى المجمع Assembly . اذاً، فالمجمع قد يحتوي على وحدة مدارة واحدة او مجموعة من الوحدات المدارة.

المجمع Assembly هو اصغر وحدة تمثل تطبيق منجز باحد لغات NET.، اي بعبارة اخرى المجمع هو التطبيق الذي أنشأته، بحيث يكون له اسم خاص، رقم اصدار، اسم المصمم، الشركة ...الخ. قد يكون المجمع في ملف قابل للتنفيذ مباشرة EXE، او مكتبة DLL تستخدمها في برامج اخرى، او مجموعة مترابطة من الملفات (EXE، DLL، DOC، HTML، BMP ...الخ). يحتوي المجمع على مجموعة من العناصر –كما ذكرت في الفقرة السابقة- تسمى الوحدات المدارة. ليس هذا فقط، بل قد يحتوي المجمع على عناصر اخرى ليست تنفيذية Nonexecutable كملفات المصادر Resource Files، صفحات HTML، ملفات نصوص Texts، صور Pictures ... الخ.

سيناريو الدمج
حتى تعلم كيف يمكننا دمج شيفرات برنامجين مكتوبان بلغة #C و Visual Basic .NET في مجمع (برنامج) واحد، راقب الشكل التالي:



http://web.archive.org/web/20031005182328/http://www.dev4arabs.com/ar/images/admins/1-1-ass.JPG


كما تلاحظ في الشكل السابق، عندما تقوم بكتابة برنامج بلغة #C، ستترجم جميع ملفات الشيفرات المصدرية الى وحدة مدارة Managed Module، كذلك الحال عند كتابة الشيفرات بلغة Visual Basic .NET، فستقوم بترجمة جميع ملفاتها الى وحدة مدارة اخرى.

الخطوة التالية هي ربط كلا الوحدات المدارة في مجمع واحد يمكن تنفيذه مباشرة، يمكنك عمل ذلك باستخدام الرابط AL.EXE كما سترى لاحقا، ولكن من الملفت للنظر هنا ان كلا الوحدات المدارة (والتي ستربطها في مجمع واحد) منجزة بلغتين مختلفتين، ولكن الشيفرة التي تحمل هي شيفرة بلغة موحدة وهي MSIL.

إستخدام المترجمات CSC.EXE و VBC.EXE والرابط AL.EXE
لن تستطيع الاعتماد على بيئة التطوير Visual Studio NET. حتى تنشئ مجمع منجز بأكثر من لغة برمجة، إذ انك ستضطر الى استخدام مجموعة من الأدوات يدويا بنفسك من موجه الأوامر Command Prompt هي: مترجم لغة #C في الملف CSC.EXE، مترجم لغة Visual Basic .NET في الملف VBC.EXE، ورابط المجمعات Assembly Linker في الملف AL.EXE.

ان قمت بتشغيل موجه الاوامر Command Prompt فلا تنسى تنفيذ الملف corvars.bat (والذي تجده في المجلد X:\Program Files\Microsoft Visual Studio NET.\FrameworkSDK\Bin) حيث يقوم بتحميل مسارات Paths هذه الادوات ويسهل عليك الوصول لها، مع ذلك لست بحاجة الى تنفيذ هذا الملف ان كنت قد شغلت نافذة موجه الاوامر من خلال الرمز Visual Studio .NET Command Prompt الموجود في المجموعة البرمجية Microsoft Visual Studio .NET بقائمة Start كما بالشكل التالي:


http://web.archive.org/web/20031005182328/http://www.dev4arabs.com/ar/images/admins/1-2-ass.JPG




مثال تطبيقي
والان دعنا نرى كيف يمكننا تطبيق النظريات التي تعلمناها ونرى الامر واقعا، انشئ ملف جديد باستخدام المفكرة Notepad بالاسم file.vb واكتب فيه هذا الكود بلغة Visual Basic .NET:



' file.vb في الملف
Public Module MainModule
Public Sub Main ()
System.Console.WriteLine ("VB code works.")
file2.clsfile2.Sub2()
End Sub
End Module



بنفس برنامج المفكرة انشئ ملف اخر بالاسم file2.cs واكتب فيه هذا الكود المعد بلغة #C:



// file2.cs في الملف
namespace file2
{
class clsfile2
{
static public void Sub2()
{
System.Console.WriteLine ("C# code works.");
System.Console.Read();
}
}
}




والان البرنامج جاهز للترجمة والربط، استخدم المترجم CSC.EXE لترجمة الشيفرة المكتوبة بلغة #C، ولا تنسى استخدام الامر target:module/ حتى نخبر المترجم اننا نريد ان يكون الملف المترجم وحدة مدارة Managed Module دون المجمع Assembly:



CSC.EXE /target:module file2.cs



الامر السابق سينشئ ملف وحدة مدارة بالاسم file2.NETmodule، وبالنسبة للشيفرة المكتوبة بلغة Visual Basic .NET، فاستخدم نفس الصيغة السابقة ولكن بالمترجم VBC.EXE مع ضرورة اضافة الامر addmodule/ حيث اننا مضطرين الى استخدام الوحدة المدارة السابقة وذلك لان الشيفرة المكتوبة بلغة Visual Basic .NET تستدعي أحد إجراءاتها:



VBC.EXE /target:module file.vb /addmodule:file2.NETmodule



الخطوة الاخيرة هي استخدام الرابط AL.EXE لربط الوحدات المدارة ومن ثم انتاج ملف المجمع الرئيسي myprog.exe، يتم ذلك بهذه الصيغة:



AL.EXE file.NETmodule file2.NETmodule /t:exe /out:myprog.exe /main:MainModule.Main



عند تشغيل ملف البرنامج الرئيسي myprog.exe، سيتم تنفيذ كلا الشيفرات كما هو متوقع بالشكل التالي:


http://web.archive.org/web/20031005182328/http://www.dev4arabs.com/ar/images/admins/1-3-ass.JPG






خاتمة
كان غرضي من هذا المقال توضيح حقيقة لغات البرمجة والموجه الى اطار عمل NET Framework. حيث انها تنتج نفس المخرجات بعد الترجمة. أتمنى ان لا يصل الامر بعد هذا المقال الى ظهور حلقة في برنامج "الاتجاه المعاكس" حول افضل لغة برمجة، فلا تضيع وقتك الثمين في مثل هذه المهاترات والمناقشات، بل تعلم وابدأ بلغة البرمجة التي تجعلك شخص اكثر إنتاجية More Productive.

المراجع المستخدمة:
كتاب برمجة إطار عمل NET. باستخدام Visual Basic .NET – تركي العسيري 2003.
msdn.microsoft.com

أم احمد
07-24-2007, 06:46 PM
http://www.wardaa.com/uploads/f8df91d164.gif

ملك الاحباب
07-27-2007, 03:17 PM
http://www.m5zn.com/uploads/5e1548b44b.gif

كريم
01-27-2008, 03:47 PM
مشكووووووووووووووووووور

ماجى
04-03-2008, 10:59 PM
http://elbaghdadi.com/up/uploads/ab9294b707.gif (http://forum.moltqa.net/redirector.php?url=http%3A%2F%2Felbaghdadi.com%2Fu p)

خالد حفيظ
04-24-2008, 03:32 PM
شكرا للمجهود الطيب

ننتظر ابداعكم دائما
http://img291.imageshack.us/img291/1669/95363053yr5.gif