سؤال

في هذا العصر الذي يتسم بتعدد اللغات، يبدو أن هناك لغة رائعة لكل مهمة تقريبًا وأجد نفسي أكافح على المستوى المهني ضد شعار ""لا شيء سوى C سريع"، حيث يُقصد بالسرعة حقًا أن تعني "بالسرعة الكافية".أنا أعمل مع أشخاص عقلانيين ومنفتحين للغاية، يحبون مقارنة الأرقام، وكل ما لدي هو أفكار وآراء.هل يمكنك مساعدتي في العثور على طريقي عبر الآراء الشخصية إلى "العالم الحقيقي"؟

هل يمكنك مساعدتي في العثور على بحث حول ما إذا كان من الممكن استخدام أي لغات أخرى لبرمجة الأنظمة المدمجة وأنظمة (Linux)؟من الممكن جدًا أن أدفع بفرضية خاطئة وسأكون ممتنًا جدًا للبحث الذي يوضح لي ذلك.هل يمكنك من فضلك ربط أرقام جيدة أو تضمينها للمساعدة في تقليل التعليقات "هذا مجرد رأيه/رأيها" إلى الحد الأدنى.


إذن هذه هي متطلباتي الخاصة

  • الذاكرة ليست عائقا خطيرا
  • قابلية النقل ليست مصدر قلق خطير
  • هذا ليس نظام الوقت الحقيقي
هل كانت مفيدة؟

المحلول

"لا شيء سوى لغة C سريعة [بما فيه الكفاية]" يعد تحسينًا مبكرًا وخاطئًا لجميع الأسباب التي تجعل التحسينات المبكرة خاطئة.إذا كان نظامك يحتوي على ما يكفي من التعقيد بحيث يكون هناك شيء آخر غير لغة C مرغوبًا فيه، فستكون هناك أجزاء من النظام يجب أن تكون "سريعة بدرجة كافية" وأجزاء ذات قيود أخف.إذا كانت كتابة التعليمات البرمجية الخاصة بك، على سبيل المثال، في Python ستؤدي إلى إنهاء المشروع بشكل أسرع، مع عدد أقل من الأخطاء، فيمكنك المتابعة باستخدام بعض رموز C أو تعليمات التجميع لتسريع الأجزاء ذات الوقت الحرج.

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

لذا، استخدم الأدوات التي تتيح لك إنجاز أعمال التطوير بشكل صحيح وسريع، ثم استخدم البيانات الحقيقية لتحديد المكان الذي تحتاج إلى تحسينه.من الممكن أن تكون لغة C هي الأداة الأنسب للبدء بها في بعض الأحيان، ولكن بالتأكيد ليس دائمًا، حتى في الأنظمة المضمنة.

نصائح أخرى

من خلال تجربتي، فإن استخدام لغة C للبرمجة المضمنة وبرمجة الأنظمة لا يمثل بالضرورة مشكلة في الأداء - بل غالبًا ما يكون مشكلة في قابلية النقل.تميل لغة C إلى أن تكون اللغة الأكثر قابلية للنقل والمدعومة جيدًا على كل منصة تقريبًا، خاصة على الأنظمة الأساسية للأنظمة المدمجة.

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

إن استخدام لغة C للأنظمة المضمنة له بعض الأسباب الوجيهة للغاية، ومن بينها "الأداء" وهو أحد الأسباب البسيطة.Embedded قريب جدًا من الأجهزة، أنت يحتاج معالجة الذاكرة اليدوية للتواصل مع الأجهزة.جميع واجهات برمجة التطبيقات (APIs) وSDKs متاحة للغة C في الغالب.

لا يوجد سوى عدد قليل من الأنظمة الأساسية التي يمكنها تشغيل جهاز افتراضي لـ Java أو Mono وهو ما يرجع جزئيًا إلى الآثار المترتبة على الأداء ولكن أيضًا بسبب تكاليف التنفيذ الباهظة الثمن.

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

إذا لم تتمكن من استخدام بعض أدوات تطوير البرامج (SDK)، فسوف تضع نفسك في مشكلة بدلاً من توفير الوقت في التطوير باستخدام لغة ذات مستوى أعلى.على أقل تقدير، سوف ينتهي بك الأمر إلى إعادة مجموعة من إعلانات الوظائف والتعريفات الثابتة.

بالنسبة إلى ج:

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

سيظل C موجودًا لسنوات عديدة قادمة.في التطوير المضمن، يعد هذا احتكارًا يخنق أي محاولة للتغيير.اللغة التي تحتاج إلى جهاز افتراضي مثل Java أو Lua لن تصبح سائدة أبدًا في البيئة المضمنة.قد تحظى اللغة المترجمة بفرصة إذا كانت توفر ميزات جديدة مقنعة مقارنة بـ C.

هناك العديد من المعايير على الويب بين اللغات المختلفة.ستجد في معظمها تطبيق C أو C++ في الأعلى لأنها تمنحك المزيد من التحكم لتحسين الأشياء حقًا.

مثال: لعبة معايير لغة الكمبيوتر.

من الصعب الجدال ضد لغة C (أو لغات الإجراءات الأخرى مثل Pascal وModula-2 وAda) والتجميع المضمن.هناك تاريخ كبير من النجاح مع تلك اللغات.بشكل عام، تريد إزالة خطر المجهول.إن محاولة استخدام أي شيء آخر غير لغة C أو التجميع أمر غير معروف في رأيي.بعد قولي هذا، لا حرج في النموذج المختلط حيث تستخدم أحد الأنظمة التي تنتقل إلى لغة C أو Python أو Lua أو JavaScript كلغة برمجة نصية.

ما تريده هو القدرة على الانتقال بسرعة وسهولة إلى لغة C عندما يتعين عليك ذلك.

إذا أقنعت الفريق بالموافقة على شيء غير مثبت لهم، فإن المشروع هو ملف تعريف الارتباط الخاص بك.إذا انهار، فمن المحتمل أن يُنظر إليه على أنه خطأك.

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

وهنا مقال آخر، بعنوان مناسب، أسباب سيئة لرفض C++.

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

لذا، اعتمادًا على ما تفعله، قد تكون لغة C "أفضل" أو أكثر ملاءمة.

تحقق من المقالات التالية

Ada هي لغة برمجة عالية المستوى تم تصميمها للأنظمة المدمجة وأنظمة المهام الحرجة.

إنها لغة سريعة وآمنة تحتوي على فحص للبيانات في كل مكان.هذا ما تتم برمجة الطيارين الآليين في الطائرات عليه.

في هذا الرابط لديك مقارنة بين Ada وC.

قد ترغب في إلقاء نظرة على د لغة برمجة.يمكن أن يستخدم بعض ضبط الأداء، حيث أن هناك بعض المجالات التي يمكن أن تتفوق عليها بايثون.لا يمكنني أن أشير إليك حقًا في إجراء مقارنات مرجعية نظرًا لعدم الاحتفاظ بقائمة، ولكن كما أشار بيتر أولسون، المعايير وتنفيذ اللغة لديه D الرقمي المريخ.

ربما تريد أيضًا إلقاء نظرة على هذه الأسئلة الجميلة:

لغة C منتشرة في كل مكان، وهي متاحة لأي بنية تقريبًا، عادةً من اليوم الأول لتوفر المعالج.يأتي C++ في المرتبة الثانية.إذا كان نظامك يمكنه دعم لغة C++ ولديك الخبرة اللازمة، فاستخدمها بدلاً من لغة C - فهي كل ما تعنيه لغة C، وأكثر من ذلك، لذلك هناك أسباب قليلة لعدم استخدامها.

تعد لغة C++ لغة أكبر، وهناك بنيات وتقنيات مدعومة قد تستهلك الموارد أو تتصرف بطرق غير مقبولة في نظام مضمن، ولكن هذا ليس سببًا لعدم استخدام اللغة، بل كيفية استخدامها بشكل مناسب.

قد تكون Java وC# (على Micro.Net أو WinCE) بدائل قابلة للتطبيق في الوقت غير الحقيقي.

أنا لست حقًا مبرمج أنظمة/مضمنًا، ولكن يبدو لي أن البرامج المضمنة تحتاج عمومًا إلى أداء محدد - وهذا يستبعد على الفور العديد من اللغات المجمعة المهملة، لأنها لا الحتمية بشكل عام.ومع ذلك، كان هناك عمل على جمع البيانات المهملة الحتمية (على سبيل المثال، Metronome for Java: http://www.ibm.com/developerworks/Java/library/j-rtj4/index.html)

المشكلة هي إحدى القيود - هل تفي اللغات/أوقات التشغيل بالمتطلبات الحتمية واستخدام الذاكرة وما إلى ذلك.

C حقًا هو خيارك الأفضل.

هناك فرق بين كتابة كود C المحمول والتعمق في ميزات ghee whiz لمترجم معين أو حالات ركنية للغة (يجب تجنب كل ذلك).لكن قابلية النقل عبر المترجمين وإصدارات المترجم.عدد الموظفين الذين سيكونون قادرين على تطوير الكود أو صيانته.سيكون لدى المترجمين وقتًا أسهل في التعامل معها وسينتجون تعليمات برمجية أفضل وأكثر نظافة وأكثر موثوقية.

لغة C لن تذهب إلى أي مكان، حيث تم تصميم جميع اللغات الجديدة لإصلاح العيوب في جميع اللغات السابقة.لغة C، مع كل العيوب التي تحاول هذه اللغات الجديدة إصلاحها، لا تزال قوية.

إليك بعض المقالات التي تقارن بين C# وC++:

http://systematicgaming.wordpress.com/2009/01/03/performance-c-vs-c/

http://journal.stuffwithstuff.com/2009/01/03/debunking-c-vs-c-performance/

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

لذلك سأقول أن لغة C أو C++ يمكن أن تكون الفائز الواضح من حيث الأداء في كثير من الحالات.ولكن في كثير من الأحيان يكون الهامش ضئيلا.ما إذا كنت تريد استخدام C أم لا هو موضوع آخر تمامًا.في رأيي، يجب أن يعتمد الأمر على المهمة التي بين أيدينا.لكن في الأنظمة المضمنة، لا يكون لديك في كثير من الأحيان الكثير من الخيارات.

وقد ذكر زوجان لوا.الأشخاص الذين أعرفهم والذين عملوا مع الأنظمة المضمنة قالوا إن Lua مفيدة، لكنها ليست في الحقيقة لغتها الخاصة في حد ذاتها ولكنها أقرب إلى مكتبة يمكن تضمينها في لغة C.إنه موجه نحو الاستخدام في الأنظمة المدمجة وعمومًا ستحتاج إلى الاتصال برمز Lua من C.لكن لغة C النقية تجعل الصيانة أبسط (وإن لم تكن بالضرورة أسهل)، لأن الجميع يعرف ذلك.

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

من المحتمل أن تكون لغة C في هذا الصدد هي الأكثر شهرة من قبل الفريق والأكثر دعمًا على نطاق واسع بالمكتبات والأدوات المتاحة.

الحقيقة هي - ليس دائما.

يبدو أن وقت تشغيل .NET (ولكن يمكن أخذ أي وقت تشغيل آخر كمثال) يفرض عدة ميغابايت من الحمل الزائد لوقت التشغيل.إذا كان هذا هو كل ما لديك (في ذاكرة الوصول العشوائي)، فلن يحالفك الحظ.يبدو أن JavaME أكثر إحكاما، لكن الأمر كله يعتمد على الموارد المتوفرة لديك.

تعد برامج التحويل البرمجي للغة C أسرع بكثير حتى على أنظمة سطح المكتب، نظرًا لقلة ميزات اللغة الموجودة مقارنة بـ C++، لذلك أتخيل أن الفرق ليس تافهًا على الأنظمة المدمجة.يُترجم هذا إلى أوقات تكرار أسرع، على الرغم من أنك لا تتمتع بوسائل الراحة التي توفرها C++ (مثل المجموعات) والتي قد تبطئك على المدى الطويل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top