• 0
Khaled Alshaya

فيديو : لماذا ++C؟

سؤال

السلام عليكم ...

أحد أساطير ++C و الـ concurrency في Microsoft و العالم Herb Sutter يقدم محاضرة بعنوان: لماذا ++C؟

لا تفوت فرصة المشاهدة ;)

6

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

20 إجابة على هذا السؤال .

  • 0

جاري التحميل

25% اكتمل

بصراحة لم اعرف في حياتي شخص يحب السي بلس بلس مثلك :)

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

Herb Sutter هو المصمم القيادي لـ C++\CLI

أشارك mental-driller رأيه فيك خالد.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أتمنى أن لا يكون تعلقي بـ ++C مضراً لي كمبرمج :lol:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لدي استفسار

في محاضرة الفيديو تكلم هيربرت عن افضلية السي بلس بلس من ناحية الاداء وهذا شيئ معروف

ولكن هل C++/CLI التي تعتبر managed language و QT لها نفس افضلية الاداء؟

من وجهة نظري لغة سي بلس بلس لغة رائعه ولكن المشكله (بالنسبة لي) هي انها لا تمتلك Facilities في المكتبات الــ standard ، كما اعتقد انه يمكن اجراء بعض التحسينات على syntax

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
ولكن هل C++/CLI التي تعتبر managed language و QT لها نفس افضلية الاداء؟

C++/CLI موجهه لـ CLI و بالتالي سواء كان الكود الناتج pure IL او Mixed فالنتيجه واحده و هى أداء اقل من Native C++ و لذلك لوجود الحاجه لتحويل IL Code إلى Native.

ولكن المشكله (بالنسبة لي) هي انها لا تمتلك Facilities في المكتبات الــ standard ، كما اعتقد انه يمكن اجراء بعض التحسينات على syntax

:blink:

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لم اشاهد الفيديو بعد لازال فى الطريق ولكنى شاهدت الـ presentation الخاص به و شد انتبهاى ان الكل يركز ان امكانيات اللغه الجديده ستقلل من استهلاك المصادر،

مثلا فى البدايه أوضح Herb Sutter سبب تميز لغة C++ فى 3 نقاط وهم power، size and experiences، ايضا قال Bjarne Stroustrup:

Efficiency is not just running fast or running bigger programs, it’s also running using less resources.

من وجهة نظرى النقاط التى اشاروا إليها لا تعتمد على اللغه او مكتباتها بقدر اعتمادها على الـ implementation و code optimization التى يقوم بها المترجم و بالتالي برنامج مكتوب جيدا بلغة الجافا قد يعمل على iphone افضل من نفس البرنامج مكتوب بشكل سيء بإستخدام objective cpp. فى النهايه الكفاءه تعتمد على الكود المكتوب و استهلاك المصادر يعتمد على كفائة المترجم فى تحويل الكود و اختيار التعليمات المناسبه.

و الله ولي التوفيق

تم تعديل بواسطه محمد علاء الدين
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مشكور اخوي على الرابط

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

لذلك سأطر الى تحميله من مكان اخر ^__^

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

Ok, I am intrigued. But what about GUI, Databases, Daemon Services, Network Sockets?

Does C++ 11 provide these facilities or I should somehow abstract the system API?

تم تعديل بواسطه mental-driller
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
Ok, I am intrigued. But what about GUI, Databases, Daemon Services, Network Sockets?

هذه الخدمات تعتمد على نظام التشغيل فإذا قامت اللغه بدمج هذه الخدمات بها فستقتصر على نظام معين و هو ما يخالف الهدف الذى وجدت من اجله.

يمكنك استخدام POSIX فهى تحتوى على بعض من هذه الخدمات.

و الله ولي التوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
Ok, I am intrigued. But what about GUI, Databases, Daemon Services, Network Sockets?

اذا اردت اطار عمل واحد لدعم كل هذا (او معظم) فلديك qt

وايضاء متاح لك ان تختار مكتباتك بشكل يريحك مثلا قد تختار clutter للواجهة الرسومية و مكتبة poco للشبكات و تستخدم json بدل xml ودواليك. فسى++ لا تحدك بالادوات ولا تجبرك على احدهم (التى ستزيد حجم بيئة العمل الافتراضية للغة) . سواء اخترت اطار عمل شامل او اخترت مكتباتك بشكل منفصل (وقد يكون المكتبات المنفصلة تخدمك بشكل افضل)

تم تعديل بواسطه apex
2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اذا اردت اطار عمل واحد لدعم كل هذا (او معظم) فلديك qt

وايضاء متاح لك ان تختار مكتباتك بشكل يريحك مثلا قد تختار clutter للواجهة الرسومية و مكتبة poco للشبكات و تستخدم json بدل xml ودواليك. فسى++ لا تحدك بالادوات ولا تجبرك على احدهم (التى ستزيد حجم بيئة العمل الافتراضية للغة) . سواء اخترت اطار عمل شامل او اخترت مكتباتك بشكل منفصل (وقد يكون المكتبات المنفصلة تخدمك بشكل افضل)

انا لا اتحدث عن مكتبات مثل Qt وغير هذه من الادوات الcross platform ولكني اتحدث عن كيفيه المحافظة على اداء السي بلس بلس الذي يعتبر Superior بالنسبة للغات الاخرى ولكن في مجال هذه الادوات التي تعتبر ضروريه تقريبا في كل برنامج

هذه الخدمات تعتمد على نظام التشغيل فإذا قامت اللغه بدمج هذه الخدمات بها فستقتصر على نظام معين و هو ما يخالف الهدف الذى وجدت من اجله.

يمكنك استخدام POSIX فهى تحتوى على بعض من هذه الخدمات.

ولم لا يا محمد ، لم لا يكون هناك اصدارات خاصة بكل نظام تشغيل على حده بحيث تستخدم مكتبات خاصه لكل نظام تشغيل ، فلو جئنا الى الواقع مسألة الportability ليست مهمة لهذه الدرجة وانا ارى انها overrated والحقيقه هي انها المبرمجون الذين يبرمجون لويندوز في الغالب لايهتمون بالبرمجة لانظمة UNIX والعكس ، الى ماندر ، حتى اني لاحظت في كثير من البرامج المفتوحه المصدر ، اختلاف المكتبات المستخدمة في النسخة الخاصة بالويندوز عن المستخدمة في UNIX

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
Ok, I am intrigued. But what about GUI, Databases, Daemon Services, Network Sockets?

Does C++ 11 provide these facilities or I should somehow abstract the system API?

بالنسبة للـ GUI فأنا أتفق مع الرأي القائل بأنه من الخطأ إنشاء مكتبة قياسية للواجهات. لغة كـ ++C, تمتد من الـ embedded systems إلى الـ supercomputers مروراً بالحاسبات الشخصية لايمكن أن يكون هناك مكتبة تغطي كل هذه الأنظمة. ثانياً, مكتبات الـ GUI التي تدعي أنها قياسية لا تراها إلا في الـ demos و البرامج البسيطة و خلافه! خذ Java على سبيل المثال, أولاً AWT ثم Swing ثم قامت Eclipse ببناء مكتبتها الخاصة, و عندما أتى Android, هل قام باستخدام أحدهم؟ الفروق بين الأنظمة كبيرة و هذا يؤدي إلى صعوبة وجود Abstraction حقيقي يغطي الفروق الجسيمة بين الأنظمة. عموماً, لو تكلمنا عن الحاسبات الشخصية و ما حولها, ستجد MFC كانت البداية الشهيرة تقريباً جاء بعدها مكتبات عدة, و باعتقادي أثبتت Qt أنها الأفضل حالياً لبناء واجهات متقدمة في ++C عابرة للأنظمة.

بالنسبة لقواعد البيانات, فأنا أتفق معك. لكن يمكنك بسهولة إيجاد مكتبة مناسبة و portable. بالنسبة لي قرأت الكثير ممن يستخدمون SOCIو هم راضون كثيراً عنها, و هي عبارة عن DSL مشابه لـ SQL بالمناسبة :)

أما Daemon Services, فهلا تطلعنا ماهي اللغة التوفر portable demons؟! أصلاً demons هذا مصطلح في عالم nix* مشابه للـ services في Windows.

بالنسبة للـ Sockets, فـ Asioهي الـ de facto حالياً بين مبرمجي ++C, و تعمل على أنظمة لا تعد و لا تحصى!

انا لا اتحدث عن مكتبات مثل Qt وغير هذه من الادوات الcross platform ولكني اتحدث عن كيفيه المحافظة على اداء السي بلس بلس الذي يعتبر Superior بالنسبة للغات الاخرى ولكن في مجال هذه الادوات التي تعتبر ضروريه تقريبا في كل برنامج

الأداء الحقيقي يأتي من التصميم الجيد و استخدام إمكانيات اللغة بشكل صحيح. شخصياً أجد في Boost كل ما أحتاجه و زيادة. الأداء في ++C يأتي من أن كل الـ abstractions تذوب و ينتج لديك كود كما لو أنه مكتوب يدوياً(أفضل من اليدوي في كثير من الحالات!). هذه هي نقطة قوة ++C. يمكنك بناء مكتبة كاملة دون تكلف عناء أي overhead من جراء استخدام abstraction. و لكن لا تنسى أن بناء المكتبات بشكل احترافي بـ ++C ليس لعبة :)

ولم لا يا محمد ، لم لا يكون هناك اصدارات خاصة بكل نظام تشغيل على حده بحيث تستخدم مكتبات خاصه لكل نظام تشغيل ، فلو جئنا الى الواقع مسألة الportability ليست مهمة لهذه الدرجة وانا ارى انها overrated والحقيقه هي انها المبرمجون الذين يبرمجون لويندوز في الغالب لايهتمون بالبرمجة لانظمة UNIX والعكس ، الى ماندر ، حتى اني لاحظت في كثير من البرامج المفتوحه المصدر ، اختلاف المكتبات المستخدمة في النسخة الخاصة بالويندوز عن المستخدمة في UNIX

كلامك هذا ينافي الواقع تماماً. كيف الـ portability غير مهمة؟! كيف تم بناء Microsoft Office و Adobe Photoshop لـ Windows و Mac؟ هل تعتقد أنهم أعادوا كتابة الكود في كل مرة؟ :lol:

الاختلاف في الكود بين النسخ, ينبع من الاختلافات الجوهرية بين النظامين.

تم تعديل بواسطه Khaled.Alshaya
2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

كلامك هذا ينافي الواقع تماماً. كيف الـ portability غير مهمة؟! كيف تم بناء Microsoft Office و Adobe Photoshop لـ Windows و Mac؟ هل تعتقد أنهم أعادوا كتابة الكود في كل مرة؟ :lol:

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

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

I know it is not pretty but it works

بالنسبة لمن يبرمج بالسي بلس بلس سينتهي به الامر في كل الاحوال باستخدام شيئ غير قياسي لذا لما لا يتم تضمينها في اللغة مثل جافا مثلا، فاستدعاء لــ JFrame في الويندوز سينتج اطار خاص بويندوز بينما استدعاء لــ JFrame في ماكنتوش سوف ينتج اطار خاص بالماك

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

وهناك حالات لبرامج يتم بناءها مره اخرى من الصفر From scratch لاي سبب كان ، كما ان البرنامج المكتوب الى منصة عمل معينة يكون اداءة افضل من البرنامج الذي يستهدف منصات عمل متعدده

تم تعديل بواسطه mental-driller
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
لذا من الممكن مثلا ان اصمم برنامج لبيئة ويندوز ، ثم اذا اردت ان اغير البرنامج الى بيئة linux اغير الاستدعاءات التي تتضمن المكتبات الغير قياسية بما يناسبها في البيئة الاخرى

عزيزي, في C و ++C على حد سواء يتم استخدام المكتبات, نحن لا نخترع العجلة في كل مرة كما تعتقد :)

ماهو الشيء الذي تحاول تصميمه؟ هناك مكتبات portable لـ ++C في أي مجال تتخيله. و أضف إلى ذلك, أن مكتبات C هي first class libraries أي أنك لا تحتاج إلى bindings لكي تستخدم مكتبات C. صحيح أن المكتبات القياسية ليست كمكتبات لغات أخرى, و هناك نقص نسبي في المكتبات إلا أنك تطلب شيء لا يريده أحد. مثالك حول الـ GUI هو في صالح ++C من الأساس. هل لك أن تسمي تطبيقاً واحداً عليه القيمة يستخدم Swing؟ أريد تطبيقاً واحداً موجود على جهازك أو جهاز أي أحد يقرأ الموضوع مكتوب بـ Swing! هل هذا صعب. في بعض الأحيان, قد تبدو فكرة الـ portability ممتازة من الناحية النظرية, و لكن من نواح عملية عدة ستجد أن الموضوع خاطئ تماماً. قارن ذلك بـ Qt التي كتب بها سطح المكتب KDE! الفرق أن هناك إمكانية لكتابة portable GUI على عدة أنظمة تشترك فيما بينها في إمكانيات معينة يمكن عمل Abstraction للـ GUI.

عموماً, موضوع بناء المكتبات هو من اهتماماتي في ++C, و لكن لن أدخل في نقاش حول الموضوع إلا بطرح نقاط بعينها :)

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

ماذا تريد أن تفعل بالضبط؟ أحب أن تعطي مثالاً في الموضوع لكي يكون أكثر وضوحاً.

وهناك حالات لبرامج يتم بناءها مره اخرى من الصفر From scratch لاي سبب كان ، كما ان البرنامج المكتوب الى منصة عمل معينة يكون اداءة افضل من البرنامج الذي يستهدف منصات عمل متعدده

فقط في عالم الأحلام يتم بناء برنامج من الصفر مع وجود كود يعمل أصلاً للبرنامج الأصلي! و نعم البرنامج المكتوب لمنصة عمل معينة يكون أداؤه أفضل في حالة استخدام لغة لا تراعي الفروق كـ Java. أما C و ++C, فهما في الأساس لبناء portable source code that compiles to native code.

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

وهناك حالات لبرامج يتم بناءها مره اخرى من الصفر From scratch لاي سبب كان ، كما ان البرنامج المكتوب الى منصة عمل معينة يكون اداءة افضل من البرنامج الذي يستهدف منصات عمل متعدده.

واحده واحده أخ mental-driller، يمكنك بناء برنامج بأكمله يستهدف منصات عديده مع بقاء الأداء لأفضل ما يكون و ذلك إن وجد تصميم جيد فمثلا يمكنك كتابة داله لفتح ملف و تكون inline و إذا تم استدعائها بويندوز يتم استخدام CreateFile و داخل الأنظه الأخرى يمكنك استخدام fopen هذا لو افترضنا انك لا تريد استخدام عائلة iostream و التى فى النهاية الكود الناتج منها سيقابل بنسبة كبيرة جدا ما توصلنا له منذ قليل و بعد تفعيل الـ optimization سيحدث ما لا تتخيله فى احلامك البرمجيه.

يوجد كتاب اسمه API Design for Cpp انصحك بقرائته فهو سيوضح لك العديد من الأمور فى هذا الشأن.

بالنسبه لبرامج تم بناءها من الصفر فهذا أمر لم اسمع به فى حياتى حتى مع برامج ضخمه مثل التى يتم انتاجها من Autodesk و Adobe و Pixologic و غيرهم و التى تحتاج إلى Framework يتم بناءها بإمكانيات خاصه لتعمل بأفضل ما يمكن على اكثر من منصه، فإنه يتم إستخدام مكثف جدا لمكتبات اللغه و ذلك لأنها على اسوء الظروف very highly optimized، هذه المعلومات عرفتها عن طريق reserving engineering لبعض المكتبات من تطبيقات هذه الشركات على windows و mac، و ايضا من عمل reserving engineering لأكثر من تضمين لمكتبات اللغه على اكثر من مترجم لعدة انظمة تشغيل.

و الله ولي التوفيق

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أريد تطبيقاً واحداً موجود على جهازك أو جهاز أي أحد يقرأ الموضوع مكتوب بـ Swing!

هناك مثلا WebScarab ولكن المسألة ليست في الواجهات المسألة هي عن ان الامكانيات التي نريدها للغه بحيث تكون شموليه ، ولكني استخدمت الواجهات كمثال لا اكثر

ماذا تريد أن تفعل بالضبط؟ أحب أن تعطي مثالاً في الموضوع لكي يكون أكثر وضوحاً.

مثلا لتكن هناك مكتبه تتعامل مع الuser preferences بحيث انه لو كان النظام المستخدم ويندوز يتم خزنه في registry او اذا كان في لينوكس يتم خزنه في script file حسب نظام التشغيل

فقط في عالم الأحلام يتم بناء برنامج من الصفر مع وجود كود يعمل أصلاً للبرنامج الأصلي

برنامج Metasploit من البرامج التي تم اعادة كتابتها من الصفر

تم تعديل بواسطه mental-driller
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
مثلا لتكن هناك مكتبه تتعامل مع الuser preferences بحيث انه لو كان النظام المستخدم ويندوز يتم خزنه في registry او اذا كان في لينوكس يتم خزنه في script file حسب نظام التشغيل

يمكن عن طريق الconditional compilation

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
مثلا لتكن هناك مكتبه تتعامل مع الuser preferences بحيث انه لو كان النظام المستخدم ويندوز يتم خزنه في registry او اذا كان في لينوكس يتم خزنه في script file حسب نظام التشغيل

كيف ستقوم بعمل Abstraction لهذه المشكلة؟ الـ registry لها تقسيمات معينة, مثلاً يمكنك تخصيص بعض الإعدادت للمستخدم و البعض الآخر للنظام ككل! كيف يمكن للمكتبة تحديد ما تريد؟

إذا كنت تريد مكتبة للتعامل مع الإعدادات تقوم بهذا الأمر بشكل portable, فهناك مكتبة في boost تسمى Program Options رائعة بمعنى الكلمة, في البداية ستعتقد أن المكتبة عبارة عن تخاريف, و لكن بمجرد أن تفهم أنها DSL أنا متأكد أن ++C ستحوز على اهتمامك!

هناك مكتبة أخرى في boost أيضاً, تسمى property tree, و هذه يفضل استخدامها عندما تكون البيانات على شكل شجرة. يمكن التصدير لـ ini, json, xml, ... و خلافه!

تم تعديل بواسطه Khaled.Alshaya
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

يمكن عن طريق الconditional compilation

هل تقصد مثل تعريف الدالة CreateFile بـــCreateFileA او CreateFileW?

مادام الامر سهل لماذا لا يتم تضمينه في لغة البرمجه نفسها؟

كيف ستقوم بعمل Abstraction لهذه المشكلة؟ الـ registry لها تقسيمات معينة, مثلاً يمكنك تخصيص بعض الإعدادت للمستخدم و البعض الآخر للنظام ككل! كيف يمكن للمكتبة تحديد ما تريد؟

إذا كنت تريد مكتبة للتعامل مع الإعدادات تقوم بهذا الأمر بشكل portable, فهناك مكتبة في boost تسمى Program Options رائعة بمعنى الكلمة, في البداية ستعتقد أن المكتبة عبارة عن تخاريف, و لكن بمجرد أن تفهم أنها DSL أنا متأكد أن ++C ستحوز على اهتمامك!

هناك مكتبة أخرى في boost أيضاً, تسمى property tree, و هذه يفضل استخدامها عندما تكون البيانات على شكل شجرة. يمكن التصدير لـ ini, json, xml, ... و خلافه!

انها تحوز على اهتمامي فعلا هذه الايام ولهذا قلت I am intrigued

ولكن حبذا لو كانت السي بلس بلس شامله لان حلم كل مبرمج هو ان تكون لديه تقوم بكل شيء ، اليس كذلك؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
انها تحوز على اهتمامي فعلا هذه الايام ولهذا قلت I am intrigued

مرحباً بك في قسم ++C على كل حال :)

ولكن حبذا لو كانت السي بلس بلس شامله لان حلم كل مبرمج هو ان تكون لديه تقوم بكل شيء ، اليس كذلك؟

Anybody who comes to you and says he has a perfect language is either naive or a salesman. -- Stroustrup

3

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .