تطوير لغة برمجة مبنية على اطار العمل LLVM
- aseer alsamt
- 2015-03-16T17:15:21+00:00
السلام عليكم،
بعون الله، اقوم بعمل لغة برمجة تدعم Meta programming,OOP...etc مبنية على اطار LLVM كباك اند (back end) ، مازال العمل في بدايته، ولكن باذن الله سيتم :)
اود معرفة ما اذا كان هنالك من يهتم بالموضوع، او يود المساهة في التطوير، فبوجود ايادي اكثر ، نستطيع ان نصل للهدف اسرع ان شاء الله.
و شكرا.
ما الغاية من إنشاء هذه اللغة ... أهي غاية تعليمية أم عملية؟
وأقصد بالعملية، هل تفكر في بناء عملٍ عليها (business) وهذا يعني أن تحدد طبيعة البرامج التي تريد أن تبنيها،
هل ستكون للأنظمة Systems أم للتطبيقات Applications؟
هل ستكون إجرائية Imperative أم وظيفية Functional؟
هل ستتوجه إلى فئة الشركات Enterprises أم الويب والمستقلين والعلماء؟
على جميع الحالات، أسأل الله لك التوفيق، بالنسبة لي لا أملك وقتاً للمشاركة بمشاريع جانبية، ولكن سيكون من المفيد أن نرى خطوات عملها والمشاكل التي تواجهك أثناء العمل عليها، والأسس الفكرية التي تستند عليها لوضع قواعد اللغة .. فيا حبذا لو تكتب مدونة عن هذا الأمر.
البارحة تعرقلت (stumbled upon) بموقع يتحدث عن التفاصيل الداخلية للغة بايثون، فمن الجيد أن نرى مثلها باللغة العربية للغتك المستقبلية.
بالتوفيق
اشكرك اخ خالد على مرورك
بالنسبة للاسئلتك.
ما الغاية من إنشاء هذه اللغة ... أهي غاية تعليمية أم عملية؟
اهداف اللغة هي :
- الاستفادة من اطار LLVM لبناء لغة عامة الاغراض ، متعددة المنصات ، سهلة التعلم، عالية الاداء تصلح لبرمجة الانظمة (المكتبية،و الويب) مثل ما عملت Apple في swift و مجموعة المطويرين في MIT في Julia ،و كما تريد فعل ذلك ايضا dropbox في مترجم لغة البايثون عالى الاداء الخاص بها (pytron)، و حتى اواكل تنوي الاستفادة من هذه البنية التحتية، يمكنك الاطلاع عليه من هنا
- تطوير لغة تدعم اللغة العربية،(لكن يمكن ان تستعمل باللغة الانجليزية) سهلة الاستخدام لكي تصلح ان تكون ضمن المناهج التدريسية في الوطن العربي، و عندما اقول تدعم اللغة العربي لا اعني ان يتم ترجمة الكلمات المحجوزة و في شكل قاموس و استبدالها وقت التنفيذ بالكلمات الاصلية كما تقوم معظم اللغات العربية الحالية.
في الوصف الحالي للغة سيكون الاختلاف الوحيد بين النسخة العربية و الانجليزية هو المحلل المعجمي (lexer) مما يمكن سهول التطوير و عدم الحاجة الى اعادة برمجة الكومبايلر من جديد.
بذر بذرة لتنمية المجتمع العربي من ناجية البرامجة المفتوحة المصدر و العمل الجماعي، و ستكون اللغة مرخصة بترخيص يصلح لان تستعمل في برامج مفتوحة او مغلقة ، تجارية او علمية دون قيود، مما يشجع التطوير.
هنالك الكثير الاهداف الاخرى، ستذكر في وقتها.
هل ستكون للأنظمة Systems أم للتطبيقات Applications؟ هل ستتوجه إلى فئة الشركات Enterprises أم الويب والمستقلين والعلماء؟
في نظري، يمكن للغة ان تصلح في اغلب المجالات لكن بوجود الاطار المناسب ، مثلا python لم تكن لتصلح لبرمجة الويب لولا وجود اطار django,tornado,...etc و غيره من الاطارات . وم تكن لتصلح للواجهات لولا وجود منافذ لمكتبات الواجهات الرسومية مثل Qt,GTK .
ما اود قوله هو انني ساقوم ببناء المترجم الاساسي للغة (فعليا front-end) مع الاخذ في الاعتبار القابلية العكسية (compatibility ) للغات الاخرى مثل C,python,Juila,...etc و توفر بنية LLVM هذه الميزة دون تعب كبير، كما تم عمله في Julia . و بعد الانتهاء من ذلك ستكون مرحلة الاستفادة من المكتبات الموجودة مستبقا على حسب الحاجة على سبيل المثال libuv التي استخدمت في اطار nodejs,julia و و التي تتيح Asynchronous I/O فلن تواجهك مشاكل باستخدامها اذا تم عمل خاصية التوافقية بصورة جيدة .
هل ستكون إجرائية Imperative أم وظيفية Functional؟
ستتيح اللغة اغلب انماط البرمجة المعروفة ، فكما قال صانع لغة السي بلس بلس :" كل مشكلة يوجد نمط انسب لحلها "، مبدئيا ستدعم اللغة النماط :functional programming,OOP,meta programming.
عموما الكثير منا لا يملك الوقت الكافي فعلا للمشاريع الجانبية، و لذالك احببت ان يكون العمل جماعي، حتى اذا لم يشارك البعض في التطوير يستطيع ان يشارك في الاختبار و الاستخدام . و لا اظن انها ستستغرق وقتا طويلا للخروج بنسخة اولية متكاملة (للكومبايلر لا اقصد جميع المكتبات) .فجل ما سيكون تركيزنا عليه اللغة و المكتبات نفسها، اذ توفر البنية التحتية قضايا الهاريدوير المختلفة و ما شابهها دون تتدخل منا . فعليا سيتم التطوير من lexer->parser->semantic/AST->intermediate code generator و في المرحلة الاخيرة ستكون البينة ايضا في صالحنا بما يوفره من اصناف لترجمة الAST الى تمثيل وسيط (Intermediate representation) مثل IRbuilder,Module,...etc.
بالنسبة للرابط فاشكرك مجددا لتفاعك معي اخ خالد، سبق ان اطلعت على التوصيف () الخاص بلغة البايثون، و السي بلس بلس،و الD و جافا، كما اطلعت على الشفرة المصدرية لClang
وفق الله الجميع لما يحب و يرضى .
باذن الله سافعل :)
بالنسبة للمصادر فهذه اهم المصادر :
/tutorial/index.html
و هذا تدريب لكيفية عمل لغة بسيطة باستخدام اللLLVM
/tutorial/LangImpl1.html
و هذا فيه مواضيع في غاية الاهمية
كما انصح بالاطلاع على الشفرة المصدرية لهذا المشروع البسيط(عمل front-end للغة بسيطة)
طبعا لا احتاج لذكر الاطلاع على بعض مواضيع او كتب في كيفية كتابة مترجم، لتعلم الاساسيات منه
;)
اقصد بالتوصيف ، الspecification الخاصة بالغة من الموقع الاصلى لها.
اشكرك اخ Houssamus و khaledez لتفاعلكم مع المشروع.
باذن الله ساقوم بوضع الخطة في اقرب وقت و بدء الكود المصدري على الاقل للlexer و الparser ثم اقوم برفع المصدر على bitbucket (نسبة لانه سيكون سريا اولا ) عندها سيكون واضحا لمن يريد المساعدة كيف سيساعد.
اترككم في رعاية الله.
السلام عليكم ورحمة الله،
أخ أحمد، نحن فريق نقوم بالضبط بعمل ما تنوي القيام به فنصيحتي لك أن تنضم إلينا بدل البدء من الصفر وتكرار ما سبقناك إليه. أنت تعمل بمفردك، أما نحن ففريق من ثلاثة أشخاص الآن. أنت ما زلت في البداية ونحن أطلقنا إصداراً واقتربنا من إطلاق الإصدار الثاني. وإذا انضممت إلينا فستستطيع التفرّغ للعمل التقني بدل الانشغال بأمور جانبية مثل تطوير الموقع وكتابة الوثائق وما شابه. اطلّع على موقعنا وتمعّن بكمية الأعمال الجانبية التي ستشغلك عن التركيز في تطوير المترجم إذا ما بدأت منفرداً. مشروعنا الذي أتكلّم عنه هو لغة الأسُس. راجع الموقع الرسمي "الأسس.موقع" أو بالإنجليزية "alusus.net"
لغة الأسُس أيضاً مبنية على LLVM والإصدار الجديد الذي سنطلقه خلال أسابيع بإذن الله يدعم العربية أيضاً. أعلم أنه من الصعب أحياناً التخلي عن مشروع بدأت به بنفسك والانتقال لمشروع بدأه غيرك، لكن فكّر بمنطق وليس بعاطفتك. والمنطق يقول أنك إن انضممت ألينا تكون قد تقدمت بفكرتك 28000 سطر برمجي وكسبت 3 أعضاء في فريقك :) ونحن بأمس الحاجة لمن يجيد العمل على LLVM.
تحياتي
ما شاء الله عمل ممتاز ،
بالنسبة لي ساشارك معكم ان شاء الله، بالرغم من انني ساواصل في لغتي الخاصة ، نسبة لاختلاف التركيب و الطريقة و المفاهيم التي تعمل بها لغتي، و لكن بلا شك ستستفيدون مني ، و نتشارك المعرفة ان شاء الله :) :)
اسررني مشروعكم :) ارجو لنا التوفيق.
على فكرة، يمكنني مسابقتكم :p ، لانني بالفعل بدأت في لغتي .
بالنسبة للغة اسس هل توجد نسخة انجيزية للتصميم ؟ الموجود هنا
لانني بصراحة ، تعودت على المصطلحات الانجليزية و لم استطع فهم التصميم .
و شكرا لك اخ سرمد بثثت في روحي النشاط مجددا.
ان شاء الله اقوم بدراسة التصميم ، و حينها ابدا بالمشاركة ان شاء الله
على بركة الله
وحدت النسخة الانجليزية :)
بسم الله ابدأ
يبدو انه لا يوجد من لديه الرغبة في التطوير :-\
الفكرة رائعة لكن مشكلة الوقت من أكثر العوائق لدي من يملكون خبرة جيدة أو قد تعاملو من قبل مع اطار llvm أما بالنسبة لمن يريد أن يبدأ من الصفر ويطلع على مواضيع ويقرأ كتب في هذا المجال سوف يواجه مشكلة الوقت أثناء التعلم ومشكلة الوقت أثناء العمل على المشروع، لا أضع عراقيل لمن يريد التعلم والمشاركة في المشروع ولكن بل أظنها ستكون أغلب المشاكل لدي الكثيرين، ومن جهتي لا املك اي خبر في هذا المجال ولم أتعامل مع llvm من قبل لكن أستطيع المساعدة وسأكون معكم فقط إذا وجد عدد جيد لنبدأ تطوير المشروع
اوافقك الرأي في ان عامل الوقت سيكون مشكلة في اغلب الاحيان، بالنسبة لمن ليس لهم دراية بهذا المجال و ليس لديهم الوقت (او الرغبة) في الدخول فيه ، فالانسب هو مشاركتنا بارائهم،و مقترحاتهم، اما من لديه القليل من الخبرة في المجال، فتعلم امكانيات LLVM لن تكون صعبة ابدا (فهو في النهاية اطار سوف تحتاج لبعض خصائصة و ليس كلها)، و بالرغم من اننا سنحتاج اليها في مرحلة تولويد الشفرة الوسيطة فقط (intermediate code generation)، و ليس شرطا ان تكون اول نسخة "مثالية" ، بل بالاخطاء يتعلم الفرد و يطور من امكانياته ، اما البقية فلا حاجة لذلك، و يمكن ان يتم في شهر او شهرين.
الفكرة من طرح الموضوع ليس فقط طلب مساعدة في التطوير ، فالتطوير ليس مشكلة، فنحن نحتاج مثلا لمن يختبر اللغة ، و يوجد فيها الاخطاء . الفكرة في تعاون الجميع بحسب خبراتهم المختلفة لعمل مشروع واحد.
ارجو ممن لديه الرغبة في المشاركة في التطوير ان يراسلني
اشكرك للتشجيع، وفقك الله في جميع حياتك.
مجتمع للمبرمجين من جميع المستويات لتبادل المعرفة والخبرات. ناقش لغات البرمجة المختلفة، الحلول البرمجية، والمشاريع.