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

موضوع للنقاش حول clang

بدأه apex في 13 مايو 2010 · 6 رد · 946 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

بمناسبة قرب الامتحانات افضل القيام باشياء جديدة من اجل التغيير :D

تعرفت على مشروع llvm وواجهتة clang عن طريق اخونا خالد الشايع ومن ثم عند زيارة موقع xcode لاحظت انهم بداو بدعمة . فقلت يبدو فعلا انة مشروع واعد و تشجعت على القاء نظرة .

لمن لا يعرف المشروع

http://en.wikipedia.org/wiki/Low_Level_Virtual_Machine

قمت بتثبتهم من مدير الحزم وقلت ابداء بتجربتهم, من قراء الman pages لاحظت ان الاستعمال البسيط لة مثل gcc فى اسماء الarguments وهكذا (تكاد تكون اكثر من نصفها متطابقة) .

clang src-files -o executable

مع وجود مثلا

-O4

لlink-time

optimization (التى لم يقبلها الLINKER المثبت عندى بسبب انة لايقبل llvm bytecode )

قمت بتجربتة على كود صغير (ولكن من كلام الموقع انة اسرع على الاقل 3 مرات فى الترجمة ولكنى بالتاكيد لن الاحظ ذلك فى كودى المتواضع) ولكنى متاكد انى لم استعملة بالشكل الصحيح (مثلا كيف استخدم تقنية jit )

واعجبنى ايضاء ان يفتح مميزات وامكانيات مثلا استخدام ابل لة فى ان يحدد اذا كان المنصة التى تقوم بتشغيل البرنامج تحتوى مسرع رسومى gpu ام لا وفى حالة عدم وجودة يستعمل cpu فتبدوا انها مطلب ملح خاصة مع توقع ازذهار تقنيات مثل opencl و محركات جرافيك وفيزيائية تعتمد على ذلك .

وايضاء بعض القراء عن شعرت انها ستكون اصعب فى الdebugging التقليدى .

ماهو رايكم فى التقنية وهل تتوقع لها انتشار ؟ وما توقعك لمدى انتشارها والتاثير الذى ستفعلة على استخدامها؟

ملاحظة اخرى

قمت بتجربة امر objdump على الملفين الناتجين من gcc و clang ولم الاحظ اى فرق (ربما لانى لم افعل اى خيارات )

تم تعديل هذه المشاركة بواسطة apex في 13 مايو 2010 في 23:20

3

name : mohamedyosry

#2

ال Clang يقدم Interface لل gcc وال LLVM ك backend

من ناحيه ال arguments فهو ايضا يحاكى ال gcc ويقدم مجموعه جديده

المشروع واعد جدا ,, ببساطه Modular , Hackable Compiler ,, كما يحبوا ان يقولوا

العديد من التنظيف الداخلى ,, ووضع الاعتبار لانواع عدييييده من المستخدمين وطرق عديده من الاستخدام ,, على العكس من gcc

يفخرون ايضا بال compile time و ال Diagnositics ,, دعم قوى لل PCH وايضا مبدأى لل Distibuted Compilation

يدعم ال C بشكل كامل وممتاز ,, دعم ال Cpp فى الطريق ,, انتهوا من الكثير ويظل الكثير (الجميل انه من حدود شهر اتم ال self hosting ) ,, ايضا يقدم اضافات للغه تضع فى الاعتبار بشكل خاص ربما ال vector types (بشكل مشابه لل ocl )

من فتره بسيطه اعلنوا عن مشروع جديد libc++ منافس اخر لل libstdc++ ( من ناحيه السبب فالرويه مازالت مغيمه ,, ولكن هناك كلام عن ال Performace و ال Debug/Release binary compatability )

من اهم واقوى مميزاته الرخصه ,, واحده من اخوات ال BSD , MIT (باسم جامعه امريكيه ثالثه عريقه :D ) ,, بمعنى رخصه مفتوحه وليست كريهه (بالنسبه للشركات طبعا ) مثل ال GPL واخواتها (تبع ال gcc )

يحظى بدعم قوى واساسى من ال Apple ,, واهتمام من شركات اخرى كبيره تستخدمه من الان :D مثل ال Google و Cray

اخر شىء ربما هو انه يستعمل ك frontend لثلاثه لغات فى وقت واحد C,Cpp , ObjC

المسؤول عنه حاليا هو Chris Lattner وهو من بدأ مشروع ال LLVM (رساله الماجستير الخاصه به ),, وبعد الدكتوراه ,, حاليا هو المسؤل عن ال Compiler Group فى Apple ,, وقائد فريق ال Clang الذى يبدو ان Apple وعدد من اخواتها يعولون عليه كثيرا

فى النهايه المشروع يستحق جدا ان تلقى عليه نظره كمستخدم او مطور ,, عيبه الاساسى للمطورين ان ال docs ~= 0 ,, النصيحه الاساسيه من المطورين Hack your way through the code :P

2
#3

بالفعل يسد نقطة مهمة فى الترجمة خاصة فى الjit التى طالما تميز بها مبرمجى لغات الvm .

ولكنة لا اظن انة ينوى استبدالة او ازاحة gcc (حتى وان كان يريد) لكن من المتوقع ان يستبدل GCC optimizer and code generator (لذلك لم يختلف معى ناتج objdump ) بمكونات llvm

وايضاء ال Diagnositics يذكرنى ببايثون .

اعتقد انها مسالة وقت وستبداء البرامج لاستخدامة لكن بعضا من الوقت للنضوج واثبات امكانياتة .

بالنسبة لنقطة الdocs فهى فعلا ضعيفة

وجدت مثال لاستخدام jit ساحاول تجربتة قريبا

http://llvm.org/docs/tutorial/LangImpl4.html#jit

تم تعديل هذه المشاركة بواسطة apex في 14 مايو 2010 في 02:26

name : mohamedyosry

#4

لا تخلط ال LLVM و ال Clang ,, مزايا ال JIT و قوه ال Optimizer/CodeGen كلها من ال LLVM ,و يتمتع بها ال Clang لانه يرتكز عليه (فى النهايه ال Clang رغم ضخامته ,, فهو frontend لل LLVM )

اما ال Diags مثلا فهى من ال Clang

1
#5

قمت بتثبيت الheaderfile الخاصة بة ولكن فقدت الامل فى استعمالة لان الheader بها اخطاء فى الترجمة (ولعلها لا تتوافق مع اعدادات نظامى) .

name : mohamedyosry

#6

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

أولاً +1 على الموضوع الجميل.

ثانياً, المشروع برأيي سيغير نظرة العديد من المبرمجين حول ++C. ليس لأنه مترجم آخر, و لكن لأنه بني ليسمح للآخرين باستخدامه بطرق شتى, و عملية الترجمة نفسها تصبح إحدى الخدمات لا أكثر. الاعتماد على LLVM يعني أن التطور في الـ Backend سيكون متواصلاً في نفس الوقت الذي تتطور فيه الـ front-end التي لازالت تجريبية في حالة ++C. عموماً, إذا كنت تريد استخدامه لترجمة C, فسمعته لايعلى عليها, بينما لـ ++C, فإنهم حتى الآن يقولون أنهم نجحوا في ترجمة أجزاء كبيرة جداً من Boost وهي بلاشك مقياس لأي مترجم ++C إن صح التعبير. لذلك, أفضل الانتظار قليلاً, حتى يظهر لنا الإصدار النهائي, أعتقد أنه سيصبح مترجمي المفضل :)

تحياتي....

#7

ساحاول استخدامة فى الاصدارة النهائية .وفعلا يبدو ان يبلو حسنا حسب ما قرات فى تقرير عنة

http://llvm.org/pubs/2008-10-04-ACAT-LLVM-Intro.html

لكن اعتقد حتى الان ليس مستقر مع c++ فحتى مثالهم على موقعهم فشلت فى ترجمتة بعدد من الاخطاء

toy.cpp: In function ‘int main()’:
toy.cpp:582: error: no matching function for call to ‘llvm::FunctionPassManager::FunctionPassManager(llvm::Module*&)’
/usr/include/llvm/PassManager.h:75: note: candidates are: llvm::FunctionPassManager::FunctionPassManager(llvm::ModuleProvider*)
/usr/include/llvm/PassManager.h:71: note:                 llvm::FunctionPassManager::FunctionPassManager(const llvm::FunctionPassManager&)

لكن بالتاكيد سابداء باستخدامة (اذا لم ينقص شى من تكامل gcc مع باقى الادوات) مع الاصدارة النهائية .

name : mohamedyosry

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