• الإعلانات

    • فيصل الحربي

      تسجيل عضوية جديدة في المنتدى   01/31/2016

      السلام عليكم ورحمة الله وبركاته  عزيزي العضو الجديد :  حاليا رسالة الإيميل لتأكيد صحة إيميلكم تذهب للبريد العشوائي ( جاري حل المشكلة )  فإذا لم تجد رسالة التحقق من إيميلكم في صندوق الوارد لديكم إتجه للبريد العشوائي ( JUNK)  وقم بتفعيل إشتراككم من هناك   

Khaled Alshaya

المشرفون
  • عدد المشاركات

    2,052
  • تاريخ الانضمام

  • تاريخ اخر زياره

مشاركه بواسطة Khaled Alshaya


  1. لا أخ محمد, و إلا احتجنا "لمفسر" كامل لـ ++C يعمل وقت الترجمة. constexpr هي عبارة عن subset من ++C, بحيث أنها تسمح بـ return و عبارة بعدها, و لكن الـ recursion مسموح و الـ conditional مسموح, فهي لغة برمجة كاملة يمكنك فعل أي شيء تريده(لا يعتمد على مدخل أو مخرج وقت التشغيل بالطبع). بالطبع يمكنك استخدامها مع متغيرات وقت التشغيل و لكنها في تلك الحالة تنفذ وقت التشغيل و ليس وقت الترجمة. لذلك ليس هناك حاجة لكتابة نسختين من الدالة رغم أنه من الممكن فعل ذلك لاستخدام الحلقات, لأنها أفضل بالطبع من الـ recursion.

    بالنسبة للصيغة, فهي الطريقة المعتادة أخ محمد, و الحقيقة لم أكن أعرف أن الـ templates ليست lazy!!! عندما كتبت المثال, كنت أتوقع أن الخطأ من الكود الذي كتبته و لكن عندما جاءت الإجابة في SO تذكرت أنني فعلاً لم أقم بكتابة أي meta function بهذه الطريقة أبداً! طريقة الـ specialization عبارة pattern matching توجد في لغات أخرى عديدة كـ run-time feature و لكنها غير موجودة في ++C غير في الـ metaprogramming!

    تحياتي,

    0

  2. مع العلم بأن عند أسترجاعها إلى debug تختفى هذة الرسائل ويعمل البرنامج بدون مشكلة

    عزيزي, يجب عليك تكرار الإعدادات لنسخة الـ debug كما وضحت في الموضوع, من ثم قم باختيار release و اختيار نفس الإعدادات في وضع release. نفس الخطوات بالضبط, و ستقوم boost باختيار المكتبة الستاتيكية المناسبة تلقائياً. و تأكد أنك اتبعت الخطوات التي شرحتها في الموضوع لكي يتم بناء Boost بشكل كامل.

    1

  3. و الله يا أخ محمد كنت سأقوم بكتابة نسخة مشابهة للإجابة المطروحة في SO لأنني حقيقة لم أكتب recursive template بدون specialization من قبل و لكن لم أتوقع أن كتابتها بهذا الشكل غير ممكنة في ++C! و لكن بالفعل سؤالك فتح أفق جديد بالنسبة لي في ++C. لم أكن أعلم أن الـ templates في ++C ليست Lazy Evaluated و هذا يشرح سبب الخطأ بكل بساطة. طرحت سؤالاً في SO و جاءت الإجابة و الحمدلله لتشرح السبب. شكراً لك على الموضوع القيم.

    1

  4. عزيزي بالنسبة للسؤال الأول, قام أخي محمد بالإجابة عليه.

    بالنسبة للثاني, فهذا الخطأ ناتج عن عدم معرفة المترجم أين يجد الـ static lib الخاصة بـ boost::file_system. تأكد من أنك أعددت Boost بطريقة صحيحة, و لا تنسى ترجمة برنامجك كـ release كما قال محمد, لكي تستطيع توزيعه دون الحاجة للمكتبات التي توفر خصائص التنقيح.

    1

  5. هذه هي الطريقة باستخدام constexpr, أجدها أسهل للإنسان الطبيعي العاقل من اللعب مع الـ structs :lol: قمت بتجربتها و تعمل بشكل سليم, و سأحاول جعل النسخة الأولى تعمل!

    constexpr std::size_t isqrt_impl
    (std::size_t sq, std::size_t dlt, std::size_t value){
    return sq <= value ?
    isqrt_impl(sq+dlt, dlt+2, value) : (dlt >> 1) - 1;
    }

    constexpr std::size_t isqrt(std::size_t value){
    return isqrt_impl(1, 3, value);
    }

    int main(){
    std::cout << isqrt(24) << std::endl; // prints: 4
    }

    1

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

    لم أقم بتجربة الكود و لكن العملية مجرد تحويل التكرار إلى recursion:

    #include <cstddef>
    #include <iostream>

    template <std::size_t value, std::size_t sq, std::size_t dlt>
    struct isqrt_impl{
    static const std::size_t square_root = sq <= value ? isqrt_impl<value, sq+dlt, dlt+2>::square_root : (dlt >> 1) - 1;
    };

    template <std::size_t value>
    struct isqrt{
    static const std::size_t square_root = isqrt_impl<value, 1, 3>::square_root;
    };

    int main(){
    std::cout << isqrt<25>::square_root << std::endl;
    }

    1

  7. يمكنك استخدام الطريقة التالية:

    $ git diff v1 v2
    

    مكان v1 و v2 هي الـ commits التي تريد مقارنتها, و يمكنك الإشارة إليها بالـ hash أو رقم النسخة المحلي, أو الـ tag حسب علمي. عموماً, الطريقة من هنا:

    http://learn.github.com/p/diff.html

    تحت بند: changes between two commits

    1

  8. كما قلت في تعليقي الأول يا جماعة, الهدف من تحويلها إلى Javascript هو إعطائها فرصة للانتشار و جعل المبرمجين يجربونها في أي مكان. و لكن Dart بكل بساطة لديها potential لكي تكون efficiently compiled مثلها مثل أي لغة كـ Java أو #C. نقطة الأداء, سوف تظهر عندما يتم كتابة VM لها باستخدام ++C/C و سترى كيف يمكن للغة scripting كـ dart أن ينتج عنها كود يعادل المكتوب بأي لغة static. هذا الأمر من المستحيل فعله في حالة js أو python على سبيل المثال, لأن الأنواع لابد أن تكون متوفرة لحظة التشغيل, بينما في dart الأنواع معروفة وقت الترجمة(إلا إن كنت تستخدم الـ dynamic typing فيها). عموماً, سنرى في الأيام القادمة ماذا ستوفر google لهذه اللغة.

    0

  9. كلوجر في نسختها الجديدة (1.3) التي صدرت قريباً تحوي معظم هذه المميزات بما فيها الoptional type annotation,

    هل يمكنك الإشارة إلى رابط يشرح الميزة فيها, لا أعتقد أن هذه الميزة بالذات موجودة. و الـ Optional Type Annotation لا تعني أنه يمكن التحويل بين الـ dynamic و static و إنما يمكنك الاستغناء عن var في #C على سبيل المثال, و لكن النوع لا بد من تحديده.

    0

  10. أعتقد أنهم نسخوا كثير بعض من خصائص Scala ، مثل ، optional typing

    حسب ما أفهمه, Scala ليس فيها optional typing كالموجود في Dart. الطريقة المتبعة في Scala هي استخلاص النوع من الـ initializer و هي مثل استخدام var في #C و auto في ++C. في Dart يمكنك التنقل بين الـ dynamic typing و الـ static typing.

    0

  11. سأطرح بعض النقاط, و يمكن أن نتناقش فيها. أتمنى لو كنت مبرمج ويب جيد و لكن للأسف حلمي لم يتحقق بعد لذلك, سأطرح النقاط من وجهة نظر اللغة نفسها :)

    الأمر الأول, هو أن لغة Dart حسب رأيي المتواضع لها أهداف حقيقية بتغيير خارطة الـ scripting! أنا أقول هذا الأمر لأن هناك قرارات تم اتخاذها تحتاج إلى تعمق في فهم الأهداف لمعرفة الأسباب الحقيقية وارء بعض القرارات.

    أولاً, اختارت Dart أن تتبع أسلوب الـ Classic Inheritance و لا تذهب في طريق الـ Prototype Inheritance. على الرغم من أن الثاني أكثر مرونة, إلا أن الأول يعمل بشكل أكثر من ممتاز في حالة وجود Static Typing. لأن Dart توفر Optional Typing و هذه ميزة حقيقة من المرات القلائل التي أراها في لغة, و أول مرة في لغة C-like لا أدري حقيقة ما مستقبل هذه الميزة. و لكن بلا شك أنها ثورية. و بوجود الـ Classic Inheritance سيكون بالإمكان كتابة كود كفؤ بوجود الـ Static Typing. الجميل في الأمر أنك يمكن أن تبدأ في كتابة code يتبع dynamic typing, و بمجرد أنك قد رأيت أن الـ Prototype ناجح, ستبدأ في إضافة الـ Type Annotation و بالتالي فإنك ستكسب أمرين رئيسيين بهذه الطريقة. أولاً, التطبيق سوف يعمل دون اللجوء لتحديد الأنواع لمرونة الطريقة, ثم عند إضافة الأنواع سينتج لديك كود كفؤ و في نفس الوقت ستتيح الفرصة لاكتشاف أخطاء باستخدام المترجم فقط, كان يجب كتابة unit-testi مملة لها لتغطية جميع مسارات البرنامج!

    اختيارهم الـ C-like syntax ليس مستغرباً بالنسبة لي. ليس لأنه الأفضل(أفضل الطريقة البايثونية), و لكن لأن c-like أفضل طريقة للوصول إلى قلب المبرمجين بسرعة. و لكن الغريب في الأمر, أنهم قاموا بكتابة الآلة الافتراضية لـ Dart باستخدام Javascript؟! فكرت في هذا الأمر قليلاً, و كنت سأشعل فتيل الحرب ضد هذه اللغة, و لكن فجأة فهمت المطلوب. هم يريدون أن تتطور اللغة في البداية في كل مكان. الطريقة الوحيدة هي أن تعمل في كل مكان من خلال JS Implementation. الغريب أنهم لا يريدون عمل compilation كما هو الحال في CoffeScript و لكنهم يريدون توفير المرونة في البداية. النتيجة, أن هذه الآلة الافتراضية ستراها على Chrome في وقت ليس ببعيد. ربما بـ Compatibility Mode بحيث إذا كانت الآلة الافتراضية المكتوبة بـ JS موجودة في موقعك سيقوم Chrome بالتقاطها و التعامل مع الأمر. كما قلت, Dart لا تريد أن تكون standard أخرى على الويب, و لكنها تريد أن تكون الـ standard "للتطبيقات" التي تحتاج إلى أداء عالي(و أنا أشير هنا إلى HTML 5)!

    عموماً, لدي رأي ظاهري في المكتبات و لكن دون تجربة اللغة بشكل حقيقي لا يمكن الحكم على المكتبات. و قبل أن أنسى, Dart لغة concurrency من المقام الرفيع من أتباع الـ message passing. قد لا أرى هذه الميزة مهمة الآن, و لكن عند توفر concurrent implementations من الآلة الافتراضية ستجبر العديد من المبرمجين على استخدامها لتوفير تطبيقات فعالة.

    تحياتي...

    2

  12. أنا أثق في كل شيء ينشر كتخصص للمتخصصين , يعني الأخبار في هذا المنتدى والمقالات أستمتع في قراءتها وآخذ منها على أنه الصواب إذا لم يعترض عليه أحد ... لماذا ؟ لسبب بسيط وهو وجود متخصصين في منتدى خاص في موضوع معين

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

    عندما تكون الإحصائية موضوعة بشكل علمي, و الـ sample تكون مأخوذة بشكل عشوائي, و طريقة التعميم تأخذ المنحى العملي عندها أوافقك الرأي. و لكن أي شخص يفهم كلمتين في الإحصاء يعلم أن هذه "الإحصائية" لا علاقة لها بالعلم لا من قريب و لا من بعيد, و لا علاقة لها بالمختصين لا من قريب و لا من بعيد.

    2

  13. لا أعتقد أن كلامك فيه شيئ من الصحة ...

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

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

    الذين "يعملون" على C لا يبحثون عن لغة C و إنما عن تطبيقاتها: device drivers, posix, win api, glib, و خلافه. الذي يعمل بلغة C دون وجود المواصفات على مكتبه أو على الأقل K&R فهو يلعب.

    و بالمناسبة 99% من الإحصائيات غير حقيقية, بما فيهم هذه الإحصائية. و إذا كنت تأخذ هذه الإحصائية أكثر من المتعة للنظر, و تتخذ عليها قرار(الإحصائيات يتخذ عليها قرارات صحيح؟):

    The language should have an own entry on Wikipedia and it should clearly state that it concerns a programming language. This is the reason why ColdFusion, (Ruby on) Rails, Excel, Cocoa, ASP and AJAX are not considered programming languages for the index.

    هذا أول ضابط. طبعاً ضابط إيقاع.

    The ratings are calculated by counting hits of the most popular search engines. The search query that is used is

    +"<language> programming"

    This search query is executed for the top 7 websites of Alexa that meet the following conditions:

    The entry page of the site contains a search facility

    The result of querying the site contains an indication of the number of page hits

    Based on these criteria currently the following search engines are used:

    Google: 32%

    Blogger: 32%

    Wikipedia: 16%

    YouTube: 10%

    Yahoo!: 3%

    Bing: 3%

    Baidu: 3%

    مرة أخرى يا عزيزي, هذا ليس إلا كمية البحث على أوزان مختلفة لأين يتم البحث!

    Besides the rating of programming languages, there is also a status indicated in the TIOBE chart. Programming languages that have status "A" are considered to be mainstream languages. Status "A-" and "A--" indicate that a programming language is between status "A" and "B". If a programming language has a rating that is higher than 0.7% (yes, this number is arguable but we had to fix it somewhere) for at least 3 months it is rewarded status "A". The first two months the programming language will receive status "A--" and "A-" respectively. The opposite holds for languages that go from status "A" to status "B". So if a language had status "A" 2 months ago, a rating of "0.607%" last month and a rating of "0.687%" now, it will have status "A--".

    From a supportability point of view, it is strongly advised to stick to mainstream languages for industrial, mission-critical software systems. This is for three reasons:

    The pool of skilled engineers is much smaller for non-mainstream languages

    Tool vendors do not write and maintain tools for non-mainstream languages

    In general fewer libraries are available for non-mainstream languages

    It is important to note that this is only one of many criteria to be used before taking a decision to adopt a language. Other criteria are: suitability for the application domain, reliability of compilers, expression power, performance, and scalability. Hence, Ada can still be used for mission-critical systems although one should consider alternatives. This is what you also see in daily practice: Ada is hardly used for new mission-critical systems anymore. The other way around is also true. Everybody will agree that it is not wise to program missile software in JavaScript.

    مرة أخرى, من وضع هذه التصنيفات! ماذا تعني mainstream language؟ هو قام بتعريفها.

    يعني بالعربي, أنا ما أشتري أي شيء أقرأه. و لمعلوماتك الـ sample التي يستخدمها تعتبر convenient sample و ليست random sample حتى يعمم منها على الـ population و هو أصلاً لم يشرح طريقة التعميم على الـ population من الـ sample التي لديه.

    0

  14. بوجه عام (و مقارنه غالبا غير عادله) .. ال gc و ال svn أسهل في الإستخدام ..

    بصراحة الـ centralized SC بشكل عام معقدة أكثر من اللازم خصوصاً في المشاريع الشخصية. و أرى أن hg سهل الاستخدام جداً, استخدمته فترة طويلة قبل أن أبدأ في استخدام bitbucket.

    0

  15. وانما يوضح اكثر اللغات المستخدمة خلال شهر معين ويحدثها مرة كل شهر

    لا أتوقع أن هذا أكثر من كمية البحث حول لغة ما, و ليس استخدامها الفعلي. ربما أقتنع بأن Java عليها طلب كبير, و لكن ماذا عن C؟ بكل تأكيد طلاب الجامعات! أي أن نسبة البحث عن اللغة لا تعبر عن شهرتها في سوق العمل و لا في الاستخدام الحقيقي لها من قبل مبرمجي سوق العمل(أو المشاريع الحرة).

    3

  16. الأخ الكريم/الأخت الكريمة

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

    مرحباً بكم في منتدى الفريق العربي للبرمجة

    تأسف إدارة المنتدى لغلق الموضوع وذلك لمخالفته قوانين المشاركات .

    قواعد طرح المشاركات

    http://www.arabteam2000-forum.com/index.php?showtopic=29343

    شاكرين لكم حُسن تعاونكم

    {username}

    0

  17. يا أخ أحمد الخوارزمية التي تفضلت بها كيف تقترح كتابتها؟ كتابة دالة لتحليل arbitrary precision integer صعب باعتقادي باستخدام الـ SPMD. ربما لعمل تحليل لمصفوفة من الأعداد؟ و لكنها لن تكون مختلفة عن الطريقة العادية sequential. عموماً, كنت أتحمس لفكرة يسهل إيجاد حل لها تحت SPMD model, أقصد هنا أن المشكلة يمكن أن تجزأ إلى أجزاء تعمل بشكل متوازي, أما تطبيق خوارزمية sequential على عدة عناصر بيانات فهذا ممكن أيضاً و لكنه ليس فكرة جيدة للتطبيق على CUDA برأيي الشخصي. و بصراحة أيضاً, الخوارزمية صعبة قليلاً لإنجازها في يومين أو ثلاثة و التأكد أنها تعمل بشكل سليم :S

    0