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

* بعض الأسئله للنقاش رجاءا المشاركه *

بدأه عمرو الصعيدي في 13 يوليو 2009 · 7 رد · 588 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

من منطلق موضوع قد فتحه أخى – محمد نور– فى قسم المجتمع وهونقاش عام حول تصنيع نظم التشغيل دارت فى مخيلتى بعض الأسئله وهى كالتالى:

- هل نستطيع اعادة صياغة نواة لينكس بالسى شارب وترجمتها على بيئة الويندوز؟

- ان كانت نواة نظم التشغيل تكتب بالسى فلماذا السى بالأخص وما الفرق بينها وبين السى شارب؟

- لماذا السى أقوى من السى شارب ؟ بالرغم من أن السى شارب أحدث هل كلما تقدمت التكنولوجيا ضغفت ؟

- هل قوة السى فى قوتها مع التعامل مع العتاد ؟ وهل السى شارب لاتتعامل مع العتاد بنفس الكفاءه ولماذا؟

- لماذا دائما ما نقارن بين السى شارب والفيجوال بيزك بالرغم من أنهم فى نفس السياق ولانذكر الفيجوال سى فى هذه المقارنه؟

- هل يستطيع أحد أن يذكر عن علم اللغات التى تبرمج بها نواة انظمة الويندوز مع وضع الدليل على ذلك حيث أن ذلك يعتبر من أسرار المهنه لدى ميكروسوفت؟

- اذا كانت اجابة السؤال السابق هى لغة السى فأعود لسؤالى مره أخرى لماذا السى وليس السى شارب فما مميزات السى عن السى شارب بالتفصيل ؟

موضوعى لا أهدف به طبعا مناقشة برمجة نظم التشغيل حتى لايكون موضوع مكرر ولكن ما أردته هو مناقشة هذه الأسئله مناقشه علميه لا تتطرق للنزاعات فى المقارنه بين لغات البرمجه

تم تعديل هذه المشاركة بواسطة amr.alsaidy في 13 يوليو 2009 في 12:18

 وممّا زادنـــي شرفــاً وتيهــاً   **  وكدت بأخمصي أطأ الثريّا

دخولي تحت قولك يا عبادي  **   وأن صيّرت أحمد لي نبيّـاً

#2

الفرق الأهم بين لغة C و لغة #C هو الفرق في طريقة عملها. الـC (مثلها مثل جميع اللغات المجمعة compiled languages) تتم ترجمتها إلى لغة الآلة مباشرة. بينما #C (مثل VB.NET و جافا) هي لغة "تجمع عند الحاجة" أو Just in time compiled. هذه اللغات لا تترجم إلى لغة الآلة بل إلى لغة وسيطة، لغة IL في حالة #C. عند تشغيل برنامج #C يقوم برنامج آخر (في هذه الحالة الـMicrosoft .NET Framework) بترجمة اللغة الوسيطة إلى لغة الآلة. هذا يعطي ميزات إلى هذه اللغات لا تتواجد بسهولة في غيرها مثل التحكم الآلي في الذاكرة و التحكم الأمني و تعدد المنصات. و لكن من ناحية أخرى لا يمكن أن تعمل هذه اللغات بدون وجود البرنامج الوسيط. هذا يجعلها غير مناسبة لتطوير أنظمة التشغيل من الصفر.

هناك نظام تشغيل بحثي (غير تجاري) من مايكروسوفت اسمه Singularity مبرمج جزء كبير من الكيرنل الخاص به بالـ#C. ليس كله للاسباب المذكورة سابقاً. ما يفعله هو تحميل نسخة معدلة من Microsoft .NET Framework أولاً ثم يحمل الكيرنل.

#3

الموضوع أكبر من مجرد إعادة كتابة

ليس معنى أننى أملك كود مصدرى لشئ أننى أستطيع أن أعيد كتابته بلغة أخرى غير التى كتب بها

هذا الأمر يتوقف على عدة أشياء

أولها نوع التطبيق

مستوى التعقيد

حجم التطبيق

أسلوب الكتابة الذى تم إتباعه لكتابة الكود الأصلى

و غيره

هذه العوامل مجتمعة هى التى سوف تحدد إذا كان من الممكن إعادة كتابة شئ من عدمه

حيث أن إعادة كتابة محرر إملائى قطعا ليس مثل إعادة كتابة نواة نظام :blink:

بالنسبة لإعادة كتابة نواة لينكس و ترجمتها إلى الوينوز بغض النظر عن اللغة المستخدمة فهذا أمر يستلزم من إستخدام ما يسمى بCross-Compilers || يعنى مترجمات لا تستهدف البيئة التى ترجمت عليها و إنما بيئة أخرى

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

هذا أولا

ثانيا كتابة بيئة نظام ليس بالأمر السهل, صدقنى هذا أمر شديد الصعوبة لو أنك لا تعلم ماذا يجب أن تصنع

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

نواة النظام موجة لعمل طبقة فاصلة بين عتاد الحاسب و كل شئ فوقها

بمعنى أنه كما قال الأخ خالد هى عبارة عن حاسوب وهمى فوق الحاسوب الأصلى

و هذا تسهيلا لعمل معيارية لصياغة أساليب كتابة البرامج بالنسبة لكل الناس

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

هذا الأمر وحدة ليس متاح إلا لأناس قلائل جدا صراحتا

فليس كل مبرمج يعلم كيف يتم التعامل مع المعالج بطريقة مباشرة

و خصوصا أولاء الذين يتعاملون مع لغات البرمجة عالية المستوى و هذا بدءاً من السى بلس بلس و مرورا بكل ما جاء بعدها تقريبا

و قطعا مبرمجى الدوت نت منهم

سوف تجد أناس على دراية ببعض الأشياء و لكنها ليست هى التى تجعل منه شخص قادر على كتابة نواه نظام

التعامل مع العتاد يلزم له لغه تكون قريبا جدا إليه لماذا؟

لإن المفروض أنك سوف تخاطب العتاد مباشرة بنفسك و سوف تكتب كل سطر و كل حرف يتم نقله للمعالج

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

أنا لست ملما بهذا الجزء من الناحية الفنية فأنا لا أعلم مثالا يوضح ما أقول و لكنى مستوعب الأمر لكونى كتبت برامج بالاسمبلى من قبل و أيضا كتبت برامج للعمل على ميكروكنترولر بالسى

بالنسبة لسؤالك : لماذا السى و ليس أى شئ أخر

السى من اللغات التى تعد منخفضة المستوى و ليس عالية المستوى فهى تمكنك من كتابة أشياء كثيرة بكل سهولة و بدون عناء للوصول إلى عتاد بينما فى اللغات العالية المستوى فإنها تمنعك من ذلك أو تجعل الأمر صعب المنال

أنت مستحيل تستطيع أن تتخاطب مع المعالج مباشرة من الدوت نت (إلا إذا كان من الممكن كتابة أسمبلى فى الدوت نت)

و لكن فى السى من الممكن أن تكتب دوال كاملة محتواها عبارة عن أكواد أسمبلى

و هذا الأمر يمكنك من عمل أعلى درجة optimization (تحسين) لما تكتبه بل و تكتب مباشرة الذى تريده بدون عناء

فمثلا لو أردت أن تقل للمعالج أن يقوم بنقل أجزاء معينة من الذاكرة و وضعها فى أماكن أخرى من أجل ترتيب أجزاءها و هذا ما يسمى إلغاء التجزئه فى الأقراص الصلبة

هذه العملية سوف تؤدى إلى تحرير مساحات فى الذاكرة و تنسيقها بشكل مستمر

هل تستطيع عمل هذا بالسى شارب

إن كنت تعرف فقل, فأنا لا أعلم :)

فى السى سوف تكتب كود خليط من الأسمبلى و السى نفسها لكى تصنع هذا بكل سهولة

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

بالنسبة لهذا السؤال : هل قوة السى فى قوتها مع التعامل مع العتاد ؟ وهل السى شارب لاتتعامل مع العتاد بنفس الكفاءه ولماذا؟

نعم فى الشق الأول و الثانى

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

السى شارب وحدها لا تستطيع أن تتعامل مع العتاد إلا قليلا جدا

فلابد من وجود مكتبات تم كتابتها من أطراف أخرى لكى تستطيع أن تتعامل مع العتاد

كل المكتبات التى تتعامل مع العتاد تقريبا تم كتابتها بالأسمبلى و السى

لذلك فإنك قادر على أن تتعامل مع العتاد بكل سهولة من خلال السى

السى شارب أصلا موجهه لتطبيقات من نوعية أخرى تماما, تطبيقات عالية المستوى و هذا بسبب المرونة العالية التى تتمتع بها من أجل هذه النوعية من التطبيقات

فأنت و بكل سهولة من الممكن أن تكتب تطبيق صغير لأداء وظائف محددة بعدة أسطر و يكون هذا التطبيق به نوافذ و أزرار وقوائم, إلى أخره من الأدوات

لو أتيت تصنع هذا بالسى فسوف تلعن السى و من صنعها :lol: لإنك سوف تكتب طن كود بدون مبالغة

لذلك فإن مبرمجى الدوت نت و الجافا يعيشون عصرهم الذهبى الأن و هم فى قمة الرفاهية

سوف أنتهى من الحديث إلى ها هنا لإنى تعبت :P

أرجو أن أكون قد أجبت على بعض هذه الإستفسارات التى تطرحتها

لا إله إلا الله محمد رسول الله

アッラー以外に神はなし。ムハンマドはアッラーの使徒である

#4

شكرا أخى محمد على الشرح الوافى بصراحه تحليل ممتاز

أنا أسف جدا ان كنت أرهقتك

لى استفسار صغير

حيث أننى لم أعمل على بيئة C++.NET فهل هذه البيئه لاتستطيع القيام بمهام لغة السى التى تحدثت عنها بالرغم من أنها تسير على نهج السى شارب فى الترجمه الى اللغه الوسيطه على حد علمى ؟

سؤال ثانى

لماذا لاتوجد مكتبات فى الشارب تتعامل مع العتاد حتى تكون لغه متكامله تسطيع برمجة أى شئ من الأبره للصاروخ ؟

أرجوا من بقية الأعضاء الأدلاء بأرائهم

 وممّا زادنـــي شرفــاً وتيهــاً   **  وكدت بأخمصي أطأ الثريّا

دخولي تحت قولك يا عبادي  **   وأن صيّرت أحمد لي نبيّـاً

#5

C++. NET هي لغة من لغات دوت نت، مثلها مثل #C (تنبه أنها ليست ++C) لذا فهي بعيدة عن الـC من حيث التطبيق.

التعامل مباشرة مع العتاد يحتاج إلى لغة منخفضة المستوى (أي قريبة من لغة الآلة). لغات الدوت نت لغات عالية المستوى، لذا فهي بعيدة عن لغى الآلة مما يجعلها غير مناسبة للتعامل مع العتاد مباشرة.

نقول هنا "مباشرة". يمكن للدوت نت التعامل مع مكتبات العتاد المبرمجة بلغة أخرى في كثير من الحالات.

#6

معنى كلامك أخى أن بيئة الدوت نت بأكملها لاتقدر على التعامل مع العتاد

فكيف يتم برمجة الأجهزة الكفيه والجوالات وغيرها هل فى هذه الحالات أيضا نلجأ للسى

اقتباس
C++. NET هي لغة من لغات دوت نت، مثلها مثل #C (تنبه أنها ليست ++C) لذا فهي بعيدة عن الـC من حيث التطبيق.

رجاءا تفصيل أكثر حيث أننى عملت على ال c++ ولم أعمل على C++. NET

 وممّا زادنـــي شرفــاً وتيهــاً   **  وكدت بأخمصي أطأ الثريّا

دخولي تحت قولك يا عبادي  **   وأن صيّرت أحمد لي نبيّـاً

#7
amr.alsaidy كتب:
معنى كلامك أخى أن بيئة الدوت نت بأكملها لاتقدر على التعامل مع العتاد

فكيف يتم برمجة الأجهزة الكفيه والجوالات وغيرها هل فى هذه الحالات أيضا نلجأ للسى

ليس هذا ما قصدته. لغات الدوت نت لا تستطيع التعامل مع العتاد "مباشرة". أي أنك لا تستطيع مثلاً أن تطور driver لسكانر عن طريق الدوت نت. و لكن يمكنك التعامل مع السكانر عن طريق driver جاهز و مطور بلغة C (مثلاً).

بالنسبة للأجهزة الكفية و الجوالات، فهناك نسخة من دوت نت موجهة للأجهزة التي تعمل على نظام ويندوز موبايل (مثل أجهزة HTC) تمكنك من عمل برامج بلغات الدوت نت عليها.

amr.alsaidy كتب:
رجاءا تفصيل أكثر حيث أننى عملت على ال c++ ولم أعمل على C++. NET

C++ .Net هي ++C تعمل تحت منصة دوت نت و بالتالي لها نفس مميزاتها و عيوبها. تنبه أن Visual Studio يمكنك عمل برامج ++C القياسية بالإضافة إلى برامج C++ .Net. شخصياً أعتقد أنه إذا كنت تريد العمل تحت منصة دوت نت فاختيار C++ .Net ليس صائباً. أفضل عليه #C إذا كنت تفضل شكل أكواد لغات الـC أو فيجوال بيسك دوت نت لو كنت تفضل شكل أكواد لغات بيسك.

تم تعديل هذه المشاركة بواسطة System Down في 13 يوليو 2009 في 21:45

#8

ملحوظة صغيرة بالنسبة للdriver

من الممكن عمل driver من خلال الدوت نت و لكنها لكى تعمل سوف تحتج إطار العمل

و من الممكن أيضا أن تصنع من خلال الدوت نت معظم الذى تستطيع صناعته بالسى بلس بلس طالما أنك قادر على أن تتعامل مع المكتبات المناسبة

لا إله إلا الله محمد رسول الله

アッラー以外に神はなし。ムハンマドはアッラーの使徒である

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…