الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

هل أنتقل إلى #C ?

مغلق
بدأه Bander ALS في 3 يناير 2003 · 37 رد · 2,824 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

أيهما الأقوى والأسرع في تنفيذ البرامج ++C أم #C ؟

هل ستكون #C هي لغة المستقبل أم أنه لا غنى عن ++C ؟

هل أنتقل إلى #C أم أبقى على ++C ؟

هل كانت ++C ضمن Visual Studio.NET أم أنه تم استبدالها بـ #C ؟

مع العلم أني مبرمج ++C و 80% من استخدامي لها للبرمجة الثلاثية الأبعاد بما في ذلك الألعاب ثلاثية الأبعاد.

تحياتي لكم...

#2

أخي حسب معلوماتي أن السي # قوى و أنت بكيفك تنتقل الى السي# حسب ضروفك

هل كانت ++C ضمن Visual Studio.NET أم أنه تم استبدالها بـ #C ؟

أخي لم تستبدل

وهناك تغيرات في نسخت السي++ القادمه

أنا سوف احول ان بحث عن معلومات عن النسخه القاده

If you think yourself that you are nobody, you should go somewhere to find yourself

#3

أخي الكريم، أنصحك بعدم إستخدام .NET إذا كنت مبرمجا للألعاب و التطبيقات "الثقيلة"، لأن اللغات الموجهة لـ .NET مثل C# و C++ .NET تقوم بتحويل الكود إلى Microsoft Intermediate Language MSIL ، أي نفس الـ Java Byte Code مما يعني أنه سوف تتم عملية ترجمة في وقت تشغيل البرنامج بإستخدام وحدة الـ Just In Time (JIT) Compiler و هذا سوف يسبب بطءا نسبيا بعض الشيء خصوصا في المجال الذي تبرمج فيه.

#4

بالنسبة لكلام الأخ JB007

فهل هذا يعني أن #C بطيئة!

وإذا كانت جميع لغات NET. تقوم بتحويل الكود إلى Microsoft Intermediate Language فهذا يعني أنه لا فرق في سرعة التنفيذ بينها.

شكراً لكما.

#5

أخي الكريم،

لغـة C# أبطأ من لغـة C++ .

بالنسبة لسـرعة البرامج المكتوبة لـتقنية .NET فهذا يعتمد على مدى تعقيد الكمبايلر الخاص باللغة المستخدمة، فربما يقوم الكومبايلر الخاص بلغة VB.NET بإنتاج كود MSIL معقد بدرجة أكبر من الكود الذي ينتجه كومبايلر C#.NET ، و بالتالي سوف يستغرق الـ JIT Compiler وقتا أطولا في ترجمة كود MSIL الخاص بـ VB.NET .

لذلك ، أعتقد أنه في مثال حالتك، فإن البقاء على لغة C++ أفضل، و إن أصررت على إستخدام تقنية .NET فيمكنك البرمجة بلغة C++ .NET ( و لكنك سوف تخسر بعضا من السـرعة طبعا ).

#6

بسم الله الرحمن الرحيم

أعتقد بالنسبة لتقنيات Micro$eft أعتقد ان المستقبل للسى شارب وهذا ما دفعنى الى البدء فى التعرف عليها لكن يبقى العيب الجوهرى وهى عدم عملها خارج نطاق نظم مايكروسوفت و هذا ما يضعفها اما لغة مثل الجافا.

خالد المصرى

#7

عندما اطلعت على دروس #C للأخ أبو فهد وجدت أنها لا تختلف كثيراً عن ++C ولذلك يمكنني البقاء على ++C إلى أن يأتي الوقت الذي سأضطر فيه إلى الإنتقال إلى C#.NET أو C++.NET وعندها لن أجد صعوبة أبداً في تعلمها , ولكن لا أعتقد أن ذلك الوقت قريب لأن لغة ++C مازالت هي أفضل اللغات حتى الآن.

تحياتي لكم...(f)

#8

في الحقيقة، هناك مشروعي Mono و DotGNU لنقل تقنية .NET إلى أنظمة UNIX، بالنسبة لمقارنة C# مع Java ، فقد قرأت أن C# أسـرع ذلك أن لديها Just In Time Compiler بينما Java في الوضع الإفتراضي ليس لديها هذه الوحدة، و كلا اللغتين أبطأ من C++ قطعا.

بالمناسبة، هناك مشروع لتنفيذ لغة برمجة جديدة و هي D .

#9

!!!!!!!!!!!!!!!!!!!!!!!!!!!!عجيب!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

أخي JB007 :

كيف تكون النسخه السابعه اقل سرعه من نسخه السادسه من السي++ من المعرف لم يتغير فيها الا الشيى القليل جداً ؟

أخي Bander ALS :

أنت تعقدني مره ثانيه في القوه السي++ يعني أنا سألت سؤال ايهم اقوى السي ++ ام السي شارب أنا فهمت أن السي شارب اقوى (بنجن)

If you think yourself that you are nobody, you should go somewhere to find yourself

#10

أخي الكريم الشبح،

لغـة C++ أسـرع من لغة C# و سوف أشرح لك ذلك بعد قليل، أما لغة C++.NET فاعتقد أن سرعتها نفس سرعة C#.NET .

و الآن، دعني أشـرح لك البطء الذي يحصل في تطبيقات .NET :

1- تقوم بكتابة برنامجك بلغـة C# مثلا.

2- تقوم بتشغيل المجمع csc.exe عليه لتجميعه إلى كود وسطي MSIL.

3- تأخذ البرنامج الناتج ( و الذي يكون بلغة MSIL ) و توفره لعميلك.

4- تقوم منصـة .NET على كمبيوتر العميل بإستقبال كود برنامجك.

5- تقوم المنصة بتشغيل وحدة Just In Time Compiler على الكود لتجميعه نهائيا إلى كود Assembly في أثناء تشغيل البرنامج، و هذا يفسر البطء النسبي في تطبيقات .NET ، إلا أن مايكروسوفت تدعي أن هذا البطء لا يمكن ملاحظته في حالة التطبيقات العادية.

يجب أن تلاحظ أنه لا بد من وجود Microsoft .NET Framework مثبته على كمبيوتر المستخدم.

مميزات هذه العميلة:

- التشارك بين اللغات، فالآن يمكنك كتابة برنامج بلغة C#.NET و مكتبة بلغة VB.NET و تقوم بإستدعاء الـ Classes و الـ Methods بكل سلاسة من VB.NET .

- الإستقلال عن معمارية المعالج، حيث أنه يمكن للكود الذي تمت برمجته على معالج x86 أن يعمل على معالج IA-64 مثلا ( هذا إذا كانت منصة .NET موجودة على على IA-64 ).

- و هناك الـ Assemblies و هي تطوير مكتبات الربط الديناميكي، و تتيح هذه الوحدات القيام بعمليات تثبيت للبرنامج بدون تعديل الرجستري ( Zero-Impact Installation ) لأنها توصف نفسها بنفسها.

معلومات عن الـ Just In Time Compiler :

تقوم هذه الوحدة بإستقبال كود MSIL و تحدد الأجزاء المطلوب تشغيلها من البرنامج و ثم تقوم بتجميعها إلى كود Assembly، و عند تشغيلك للبرنامج مرة ثانية، فإن هذه الوحدة لن تقوم بإعادة تجميع الأجزاء التي تم تجميعها في المرة الأولى، بل سوف تحملها جاهزة، مما يعني أن برامجك سوف تصبح أسرع و أسـرع بتكرار تشغيلها.

ما يحصل في اللغات العادية:

في لغة مثل C، فإنك عندما تدخل الكود إلى المجمع compiler فإنه سوف يترجم مباشرة إلى كود الـ Assembly، مما يعني أنه لا حاجة لإجراء المزيد من عمليات التجميع لاحقا، و هذا يفسر السـرعة التي تتميز بها هذه اللغات عن Java و لغات .NET ، و لكنك لن تستطيع أن تشغل البرنامج الناتج على معمارية تختلف عن معمارية المعالج الذي قمت بتطوير البرنامج عليه، بل يجب عليك إعادة تجميع البرنامج مرة أخرى على المعمارية المختلفة.

تعقيد أليس كذلك؟ :confused::confused:

#11

أنا بصرحه دخت :D لكن لماذا مايكرسوفت لم تجعلها كسرعة السي++ العاديه

إلا أن مايكروسوفت تدعي أن هذا البطء لا يمكن ملاحظته في حالة التطبيقات العادية.

يعني في التطبيفات غير عاديه بيصير بطء شديد ؟

شكراً

If you think yourself that you are nobody, you should go somewhere to find yourself

#12

لا أدري بصراحة، و لكن يبدو أن مايكروسوفت ضحت بالسـرعة من أجل المميزات المذكورة أعلاه.

تخيل مثلا أن لعبة Quake III او Max Payne قد برمجتا بتقنية .NET ، سوف يستغرق الأمر ساعات طوال حتى يمكنك تشغيل اللعبة ناهيك عن تحميل بيئة اللعب نفسها، و ذلك بسبب الوقت اللازم لتجميع كود اللعبة أثناء تشغيلها.

#13

شكراً

اسف قد طولت عليك بالاسئله

عندما تترجم الى اللغة الا اليه وتنشى الى برنامج ذو متداد exe هل تكون السرعة واحده ام لا ؟

أنا بدي الفرق بين السرعة السي ++.نت و السي++ يعني الفرق كبير جدا عندما تكون التطبيقات غير عاديه ؟

اسف قد ثقلت عليك في الاسئله

شكراً

If you think yourself that you are nobody, you should go somewhere to find yourself

#14

لا مشكلة أخي الكريم،

عندما تبرمج بـ C++.NET و تقوم بعمل ترجمة للبرنامج فإنه يصبح .exe و لكنه ليس .exe عادي، بل يحتاج إلى منصة .NET لتشغيله.

و كما قلت، كلما شغلت البرنامج أكثر كلما صار أسـرع.

الفـرق في رأيي سوف يكون كبيرا إذا حاولت برمجة تطبيقات ثقيلة بلغات .NET.

#15

شكراً

(f)

If you think yourself that you are nobody, you should go somewhere to find yourself

#16

بسم الله الرحمن الرحيم

سؤال أخير هل مايكروسوفت تدعم رسميا عملية تصدير تكنولولوجيا NET. الى النظم الأخرى اما لا زالت كما هى فى موضوع منع انتقال التكنولوجيا؟

خالد المصرى

#17

مشروعي Mono و DotGNU الذين يبحثان نقل التقنية إلى أنظمة UNIX غير مدعومان من مايكروسوفت فهما مفتوحان المصدر.

لذلك لا يوجد دعم رسمي لنقل التقنية إلى أنظمة أخرى.

و لكـن ربما تقوم مايكروسوفت بتصدير منصة .NET إلى أنظمة Windows XP و Windows 2000 العاملة تحت معالجات Alpha.

بالمناسبة هناك لغـة Perl .NET و التي يمكنك بواسطتها برمجة ASP.NET ، مزيج غريب أليس كذلك؟

#18

بسم الله الرحمن الرحيم

غريب فعلا. يعنى مستخدمى برمجيات الدوت نت سيظلوا تحت رحمة مايكروسوفت و نظم التشغيل الخاصة بها.

للعلم يوجد مقابل من صن لتقنية الدوت نت و هى JavaOne و بنفس المفهوم.

خالد المصرى

#19

صحيح ما تفضلت به أخي خالد، و لكن لمن يريد البرمجة على ويندوز فقط، فأعتقد أن .NET هي الخيار الرئيسي له.

#20

بالنسبة لتشغيل .NET على أنظمة التشغيل الأخرى فهناك مشروع كامل من مايكروسوفت نفسها بالاشتراك مع شركة Corel هذا المشروع عبارة عن كود مفتوح المصدر لـ Microsoft .NET Framework فبذلك أصبح الآن بالامكان تشغيل برامج تحت بيئة FreeBSD & MAC OS & Windows .. كل ماعليك الدخول إلى موقع مايكروسوفت وسوف يكون بإمكانك بكل سهولة وتنزيل الـ CLI وعمل Build لهذا المشروع !

http://msdn.microsoft.com/netframework/

بالنسبة للسرعة في السي شارب فهي تعتبر رائعة (وهذا لجميع برامج الدت نت) .. وهذا بشهادة كبار المبرمجين .. لكن ربما يحصل لدى البعض لبس في أن اللغة تقوم بالترجمة أثناء وقت التشغيل وهذا في الحقيقة ليس مقياس في سرعة البرنامج لكن المقياس الحقيقي هو في أداء البرنامج ..

أيضا هناك ادة تتبع .NET SDK هذي الاداة اسمها ngen.exe تقوم بتحويل الملف إلى Native EXE وبذلك تنتهي الاشكالية المزعومة :rolleyes:

#21

مما فهمته من مشاركتك القيمة أن أداء البرنامج أثناء التشغيل سوف يكون عاديا، و لكن ماذا عن بداية تشغيل البرنامج و هي الفترة التي تتطلب عمل ترجمة له، و أعتقد أن هذه الفترة سوف تكون طويلة في حالة البرامج ثلاثية الأبعاد.

في الحقيقة، لم أدر عن ngen.exe، شكرا لك جزيلا!

#22

بالنسبة لطريقة ترجمة البرامج من MSIL إلى Native لا تتم دفعة واحدة ...

أي أن البرنامج لما يشتغل يكون هناك استدعاة لدالة موجودة في ملف mscorlib .. اسمها على ما أعتقد (DllCoreMain()) هذه الدالة تقوم بتهيئة الـ CLR ثم تقوم باستدعاء JIT الذي يقوم بترجمة قدر من الكود يكفي لبدء عمل البرنامج ، مع العلم ان الـ JIT لا يحتاج إلى ترجمة ما ترجمه مسبقا ، أيضا البرامج التي تقوم بتشغيلها تخزن في ذاكرة كالكاش بحيث لما ترجع وتشغل البرنامج يبدأ بعمله بسرعة ..

أما عند استخدام ngen.exe يقوم بتحويل البرنامج إلى Native EXE لكن هذا الملف لا يعمل إلا على نفس الجهاز الذي قمت فيه بعمل تحويل ملف IL إلى لغة الآلة ..

وعندما تقوم بتشغيل الملف يتأكد الـ CLR إذا كان يوجد نسخة مترجمة من نفس البرنامج فإذا كان يوجد فسوف ينتقل الـ CLR إليها ويبدأ بتنفيذها !

تحياتي :)

#23
اقتباس
بالنسبة لطريقة ترجمة البرامج من MSIL إلى Native لا تتم دفعة واحدة ...  

أي أن البرنامج لما يشتغل يكون هناك استدعاة لدالة موجودة في ملف mscorlib .. اسمها على ما أعتقد (DllCoreMain()) هذه الدالة تقوم بتهيئة الـ CLR ثم تقوم باستدعاء JIT الذي يقوم بترجمة قدر من الكود يكفي لبدء عمل البرنامج ، مع العلم ان الـ JIT لا يحتاج إلى ترجمة ما ترجمه مسبقا ، أيضا البرامج التي تقوم بتشغيلها تخزن في ذاكرة كالكاش بحيث لما ترجع وتشغل البرنامج يبدأ بعمله بسرعة ..

أما عند استخدام ngen.exe يقوم بتحويل البرنامج إلى Native EXE لكن هذا الملف لا يعمل إلا على نفس الجهاز الذي قمت فيه بعمل تحويل ملف IL إلى لغة الآلة ..

وعندما تقوم بتشغيل الملف يتأكد الـ CLR إذا كان يوجد نسخة مترجمة من نفس البرنامج فإذا كان يوجد فسوف ينتقل الـ CLR إليها ويبدأ بتنفيذها !

هل تتنتهي مشكلة السرعة ؟

If you think yourself that you are nobody, you should go somewhere to find yourself

#24

أعتقد أنه في حالة البرمجة ثلاثية الأبعاد أو للملتميديا..

لازالت C++ و ال Win32 platform هي الأفضل..

وحسب علمي إذا أردت أن تكتب برامج من هذا النوع في سي شارب...

ستضطر أن تكتب المكتبات الخاصة بك..

فحتى الآن لا يوجد دعم مباشر للملتميديا أو الجرافيكس فس دوت نيت.

ولكن الأمل معقود على أن النسخ القادمة من .NET ستحتوي على هذه

النواقص..

#25

شكراً

لان عرف لماذا اصدرت مايكرسوفت اصدر جديد !

اتمنى أن تكون سرعة السي++.نت كسرعة السي++6

If you think yourself that you are nobody, you should go somewhere to find yourself

هذا الموضوع مغلق.

مواضيع مشابهة