السلام عليكم ...
أحد أساطير ++C و الـ concurrency في Microsoft و العالم Herb Sutter يقدم محاضرة بعنوان: لماذا ++C؟
لا تفوت فرصة المشاهدة ;)
السلام عليكم ...
أحد أساطير ++C و الـ concurrency في Microsoft و العالم Herb Sutter يقدم محاضرة بعنوان: لماذا ++C؟
لا تفوت فرصة المشاهدة ;)
جاري التحميل
25% اكتمل
بصراحة لم اعرف في حياتي شخص يحب السي بلس بلس مثلك :)
No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!

" إن الله كتب الإحسان على كل شيء"
::
الإرادة ... تحقق السيادة.
لدي استفسار
في محاضرة الفيديو تكلم هيربرت عن افضلية السي بلس بلس من ناحية الاداء وهذا شيئ معروف
ولكن هل C++/CLI التي تعتبر managed language و QT لها نفس افضلية الاداء؟
من وجهة نظري لغة سي بلس بلس لغة رائعه ولكن المشكله (بالنسبة لي) هي انها لا تمتلك Facilities في المكتبات الــ standard ، كما اعتقد انه يمكن اجراء بعض التحسينات على syntax
No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!

اقتباسولكن هل C++/CLI التي تعتبر managed language و QT لها نفس افضلية الاداء؟
C++/CLI موجهه لـ CLI و بالتالي سواء كان الكود الناتج pure IL او Mixed فالنتيجه واحده و هى أداء اقل من Native C++ و لذلك لوجود الحاجه لتحويل IL Code إلى Native.
اقتباسولكن المشكله (بالنسبة لي) هي انها لا تمتلك Facilities في المكتبات الــ standard ، كما اعتقد انه يمكن اجراء بعض التحسينات على syntax
:blink:
مدونتي: C++ Tips and Tricks
لم اشاهد الفيديو بعد لازال فى الطريق ولكنى شاهدت الـ 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. فى النهايه الكفاءه تعتمد على الكود المكتوب و استهلاك المصادر يعتمد على كفائة المترجم فى تحويل الكود و اختيار التعليمات المناسبه.
و الله ولي التوفيق
تم تعديل هذه المشاركة بواسطة محمد علاء الدين في 10 سبتمبر 2011 في 09:44
مدونتي: C++ Tips and Tricks
مشكور اخوي على الرابط
بصراحه متشوق لمشاهدة الفيديو لكن النت بطي عندي اقل حجم يبغاله 3 ساعات
لذلك سأطر الى تحميله من مكان اخر ^__^
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 في 12 سبتمبر 2011 في 04:50
No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!

اقتباسOk, I am intrigued. But what about GUI, Databases, Daemon Services, Network Sockets?
هذه الخدمات تعتمد على نظام التشغيل فإذا قامت اللغه بدمج هذه الخدمات بها فستقتصر على نظام معين و هو ما يخالف الهدف الذى وجدت من اجله.
يمكنك استخدام POSIX فهى تحتوى على بعض من هذه الخدمات.
و الله ولي التوفيق
مدونتي: C++ Tips and Tricks
اقتباسOk, I am intrigued. But what about GUI, Databases, Daemon Services, Network Sockets?
اذا اردت اطار عمل واحد لدعم كل هذا (او معظم) فلديك qt
وايضاء متاح لك ان تختار مكتباتك بشكل يريحك مثلا قد تختار clutter للواجهة الرسومية و مكتبة poco للشبكات و تستخدم json بدل xml ودواليك. فسى++ لا تحدك بالادوات ولا تجبرك على احدهم (التى ستزيد حجم بيئة العمل الافتراضية للغة) . سواء اخترت اطار عمل شامل او اخترت مكتباتك بشكل منفصل (وقد يكون المكتبات المنفصلة تخدمك بشكل افضل)
تم تعديل هذه المشاركة بواسطة apex في 12 سبتمبر 2011 في 08:23
apex كتب:اذا اردت اطار عمل واحد لدعم كل هذا (او معظم) فلديك qt
وايضاء متاح لك ان تختار مكتباتك بشكل يريحك مثلا قد تختار clutter للواجهة الرسومية و مكتبة poco للشبكات و تستخدم json بدل xml ودواليك. فسى++ لا تحدك بالادوات ولا تجبرك على احدهم (التى ستزيد حجم بيئة العمل الافتراضية للغة) . سواء اخترت اطار عمل شامل او اخترت مكتباتك بشكل منفصل (وقد يكون المكتبات المنفصلة تخدمك بشكل افضل)
انا لا اتحدث عن مكتبات مثل Qt وغير هذه من الادوات الcross platform ولكني اتحدث عن كيفيه المحافظة على اداء السي بلس بلس الذي يعتبر Superior بالنسبة للغات الاخرى ولكن في مجال هذه الادوات التي تعتبر ضروريه تقريبا في كل برنامج
اقتباسهذه الخدمات تعتمد على نظام التشغيل فإذا قامت اللغه بدمج هذه الخدمات بها فستقتصر على نظام معين و هو ما يخالف الهدف الذى وجدت من اجله.
يمكنك استخدام POSIX فهى تحتوى على بعض من هذه الخدمات.
ولم لا يا محمد ، لم لا يكون هناك اصدارات خاصة بكل نظام تشغيل على حده بحيث تستخدم مكتبات خاصه لكل نظام تشغيل ، فلو جئنا الى الواقع مسألة الportability ليست مهمة لهذه الدرجة وانا ارى انها overrated والحقيقه هي انها المبرمجون الذين يبرمجون لويندوز في الغالب لايهتمون بالبرمجة لانظمة UNIX والعكس ، الى ماندر ، حتى اني لاحظت في كثير من البرامج المفتوحه المصدر ، اختلاف المكتبات المستخدمة في النسخة الخاصة بالويندوز عن المستخدمة في UNIX
No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!

اقتباس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 في 12 سبتمبر 2011 في 18:56
اقتباسكلامك هذا ينافي الواقع تماماً. كيف الـ 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 في 12 سبتمبر 2011 في 21:58
No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!

اقتباسلذا من الممكن مثلا ان اصمم برنامج لبيئة ويندوز ، ثم اذا اردت ان اغير البرنامج الى بيئة 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.
اقتباسوهناك حالات لبرامج يتم بناءها مره اخرى من الصفر 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 لأكثر من تضمين لمكتبات اللغه على اكثر من مترجم لعدة انظمة تشغيل.
و الله ولي التوفيق
مدونتي: C++ Tips and Tricks
اقتباسأريد تطبيقاً واحداً موجود على جهازك أو جهاز أي أحد يقرأ الموضوع مكتوب بـ Swing!
هناك مثلا WebScarab ولكن المسألة ليست في الواجهات المسألة هي عن ان الامكانيات التي نريدها للغه بحيث تكون شموليه ، ولكني استخدمت الواجهات كمثال لا اكثر
اقتباسماذا تريد أن تفعل بالضبط؟ أحب أن تعطي مثالاً في الموضوع لكي يكون أكثر وضوحاً.
مثلا لتكن هناك مكتبه تتعامل مع الuser preferences بحيث انه لو كان النظام المستخدم ويندوز يتم خزنه في registry او اذا كان في لينوكس يتم خزنه في script file حسب نظام التشغيل
اقتباسفقط في عالم الأحلام يتم بناء برنامج من الصفر مع وجود كود يعمل أصلاً للبرنامج الأصلي
برنامج Metasploit من البرامج التي تم اعادة كتابتها من الصفر
تم تعديل هذه المشاركة بواسطة mental-driller في 12 سبتمبر 2011 في 23:28
No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!

اقتباسمثلا لتكن هناك مكتبه تتعامل مع الuser preferences بحيث انه لو كان النظام المستخدم ويندوز يتم خزنه في registry او اذا كان في لينوكس يتم خزنه في script file حسب نظام التشغيل
يمكن عن طريق الconditional compilation
اقتباسمثلا لتكن هناك مكتبه تتعامل مع الuser preferences بحيث انه لو كان النظام المستخدم ويندوز يتم خزنه في registry او اذا كان في لينوكس يتم خزنه في script file حسب نظام التشغيل
كيف ستقوم بعمل Abstraction لهذه المشكلة؟ الـ registry لها تقسيمات معينة, مثلاً يمكنك تخصيص بعض الإعدادت للمستخدم و البعض الآخر للنظام ككل! كيف يمكن للمكتبة تحديد ما تريد؟
إذا كنت تريد مكتبة للتعامل مع الإعدادات تقوم بهذا الأمر بشكل portable, فهناك مكتبة في boost تسمى Program Options رائعة بمعنى الكلمة, في البداية ستعتقد أن المكتبة عبارة عن تخاريف, و لكن بمجرد أن تفهم أنها DSL أنا متأكد أن ++C ستحوز على اهتمامك!
هناك مكتبة أخرى في boost أيضاً, تسمى property tree, و هذه يفضل استخدامها عندما تكون البيانات على شكل شجرة. يمكن التصدير لـ ini, json, xml, ... و خلافه!
تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 13 سبتمبر 2011 في 00:06
apex كتب:يمكن عن طريق الconditional compilation
هل تقصد مثل تعريف الدالة CreateFile بـــCreateFileA او CreateFileW?
مادام الامر سهل لماذا لا يتم تضمينه في لغة البرمجه نفسها؟
Khaled.Alshaya كتب:كيف ستقوم بعمل Abstraction لهذه المشكلة؟ الـ registry لها تقسيمات معينة, مثلاً يمكنك تخصيص بعض الإعدادت للمستخدم و البعض الآخر للنظام ككل! كيف يمكن للمكتبة تحديد ما تريد؟
إذا كنت تريد مكتبة للتعامل مع الإعدادات تقوم بهذا الأمر بشكل portable, فهناك مكتبة في boost تسمى Program Options رائعة بمعنى الكلمة, في البداية ستعتقد أن المكتبة عبارة عن تخاريف, و لكن بمجرد أن تفهم أنها DSL أنا متأكد أن ++C ستحوز على اهتمامك!
هناك مكتبة أخرى في boost أيضاً, تسمى property tree, و هذه يفضل استخدامها عندما تكون البيانات على شكل شجرة. يمكن التصدير لـ ini, json, xml, ... و خلافه!
انها تحوز على اهتمامي فعلا هذه الايام ولهذا قلت I am intrigued
ولكن حبذا لو كانت السي بلس بلس شامله لان حلم كل مبرمج هو ان تكون لديه تقوم بكل شيء ، اليس كذلك؟
No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!

اقتباسانها تحوز على اهتمامي فعلا هذه الايام ولهذا قلت I am intrigued
مرحباً بك في قسم ++C على كل حال :)
اقتباسولكن حبذا لو كانت السي بلس بلس شامله لان حلم كل مبرمج هو ان تكون لديه تقوم بكل شيء ، اليس كذلك؟
Anybody who comes to you and says he has a perfect language is either naive or a salesman. -- Stroustrup