بسم الله الرحمن الرحيم، و السلام عليكم و رحمة الله تعالى و بركاته..
كما ذكر في العنوان، هذا الموضوع عن لغة برمجة عربية للويب. اللغة قواعدها لا تكتب بالعربية، و إنما هي موجهة خصوصًا للمواقع العربية، و شرحها الرسمي سيكون إن شاء الله بالعربية. اللغة موجودة فعلاً من فترة ليست بالقصيرة.. لكن فقط هذا تجديد و بناء كامل – إن شاء الله – للغة و الموقع و الشرح من الصفر!
أولاً: ما هي اللغة؟
لغة برمجة منشئ المواقع، أو SMPL، هي لغة برمجة عربية مفتوحة المصدر، و بسيطة تستخدم لإنشاء مواقع و صفحات الويب.
تم بناء لغة SMPL باستخدام PHP!! نعم، PHP، لماذا؟
1- أسهل في البناء و التطوير (و يمكن لعدد كبير من المطورين العرب التعديل عليها، أيًا كان مستوى المطور).
2- الـPHP حاليًا، هي لغة الويب! مجانية، مفتوحة المصدر؛ لذا موجودة على أغلب سيرفرات الويب. و أغلب الاستضافات، المجانية و المدفوعة تدعم آخر اصداراتها! لذا سيكون من السهل – إن شاء الله – تنصيب اللغة على أي موقع (للعلم، لا تحتاج لصلاحيات Root لتنصيب اللغة، أي موقع يدعم PHP5 و .htaccess حاليًا يمكنه تشغيل اللغة حتى في Safe Mode
3- كما بدأت PHP مكتوبة بـPerl، يمكن أن تتطور SMPL مستقبلاً، و الله أعلم، لـC أو غيرها، و إن كان هذا غير ضروري.
ثانيًا: لماذا SMPL؟
تظهر الفكرة الأساسية للغة SMPL - بالصدفة – في اسمها القريب من simple (التي تعني بسيط باللغة الانجليزية!)، ففكرة بساطة البرمجة، هي أساس هذه اللغة. و هذا سيظهر أكثر إن شاء الله عند كتابة شرح للإصدار المبني من الصفر.
ثالثًا: ما هذا الإصدار الجديد؟
الإصدار الجديد، الذي يذكر لأول مرة على الويب، هنا و الآن – و الذي لم ينشر حتى على الموقع الرسمي للغة الذي سيتم إعادة بناءه كذلك إن شاء الله من الصفر – هو الإصدار 0.1 نعم، يعتبر Alpha. هو إصدار جديد، يحمل بعض مفاهيم لغة SMPL الأصلية القديمة، و يترك بعض تلك المفاهيم.
لكن كيف تعمل لغة SMPL من الداخل باستخدام لغة PHP تلك اللغة الـWeak typed الـInterpreted؟
1- يتم إنشاء صفحة بامتداد .smpl على موقع يدعم اللغة.
2- يتم طلب الصفحة من المتصفح، مثال: http://example.com/index.smpl
3- يتم عمل إيصال الطلب لمترجم اللغة SMPL translator. ليس compiler و لا interpreter – و لو أنه أشبه بالـinterpreter لكنه يحول SMPL code إلى PHP code لذا فهو language translator بمراحل شبيهة إلى حد كبير بمراحل الـintepreters و الـcompilers
4- تأخذ اللغة، اسم الملف، و تتأكد من أن طالب الملف له صلاحية الوصول لهذا الملف (و لا يطلب ملف غير SMPL أو فوق SMPL root). و تحضر اللغة، محتوى هذا الملف.
5- تمرر اللغة محتوى الملف إلى SMPL Scanner & Lexer الذي يقرأ الملف حرف فالتالي (byte by byte/character by character)، ليخرج مجموعة من Tokens مع الاحتفاظ بالقيمة الأصلية لكل token و السطر الذي كان فيه (طبعًا في أي ملف).
6- يتم تمرير الـtokens و القيم الأصلية، و السطور و اسم الملف إلى SMPL Parser، الذي ليس parser بالشكل التقليدي، فقط يقرأ الـtokens و ترتيبها في الكود، و يخرج رسائل خطأ إذا وجد أن هناك أخطاء نحوية في Syntax الكود.
7- إذا لم يكن هناك أخطاء، يتم تمرير الـtokens و القيم و غيرهما إلى SMPL Code Generator الذي يحول كود SMPL عبر الـtokens و القيم الأصلية إلى PHP code مطابق في المعنى، و يخرج بعض الأخطاء مثل استخدام دالة غير موجودة و ما يشبه ذلك.
رابعًا: أكواد مكتوبة بالإصدار الجديد من اللغة (SMPL 0.1):
الكود الأول: كما في PHP بالضبط، يمكن أن يحتوي ملف SMPL على أكواد بأي لغات أخرى (مثل HTML و CSS مثلاً!):
<html> <head> <?smpl> page_title="الفريق العربي للبرمجة 2000 - لغة برمجة منشئ المواقع"; show "<title>".page_title."</title>"; // page_title هو اسم متغير، ليس فيه علامة $ الموجودة في البي اتش بي <!smpl?> </head>....
كما هو واضح في المثال، لغة SMPL تخلت عن علامة $ الموجودة قبل أسماء المتغيرات في PHP!
الكود الثاني: تم تقليل عدد الأقواس بشكل كبير عن الـPHP في لغة SMPL:
<?smpl>
included=array('1.smpl','login.smpl');
included[]='3.smpl';
count=array_elements_count(included); x=0;
while count > x:
include(included[x]);
/*
ماذا سيحدث لو نسيت x++
اللغة توقف التكرار بعد 1000 مرة، آلياً، و تظهر رسالة خطأ، و سيكون هناك
إن شاء الله إمكانية لتغيير الحد الأقصى للتكرار، عبر ملف إعدادات للغة
*/
x++;
end;
<!smpl?>الكود الثالث:
<?smpl> function add_5(value): return value + 5; end; show add_5(93.4); show_highlight=true; if show_highlight: show file_highlight(page_name_get()); end; <!smpl?>
خامسًا:
أحتاج من أعضاء هذا المنتدى الكرام الأفاضل، لما أعرف ما فيهم من خبراء، أن يوفوني بتعليقاتهم و نقدهم للغة، أو الموضوع، أتوقع، و لا مشكلة لدي في الخلاف، أن أجد ما لا يقل عن ثلث الردود – إن وجد ردود – تتحدث عن كون SMPL ليست لغة أو ما شابه ذلك. لا مشكلة، فقط أحتاج السبب. سميت لغة، لأن لها قواعد نحوية خاصة بها، فليست Framework إطلاقًا، و لا Template Engine بتاتًا! غير ذلك، ما هي المواصفات الأساسية لأي لغة أخرى؟ يتم تحويل SMPL بشكل أو بآخر كاللغات الأخرى، و لو أنها أبسط. هناك فرق بسيط، يساهم في تبسيط اللغة من الداخل، و تسريعها، و لا يسبب مشاكل إلى الآن، و يمكن تغييره مستقبلاً، إن كان هناك حاجة.. هي أن اللغة تعتمد على PHP في بعض الأشياء، كإدارة المتغيرات و أنواعها، و إجراء المسائل الحسابية، لكن هذا لا يؤثر إطلاقًا على اللغة بالسلب، و إنما يوفر الوقت و الجهد. و يترك على اللغة، تحويل الكود من و إلى وبناء الدوال، فقط!
و هناك أيضًا، بعض المشاكل البسيطة الكثيرة في PHP التي تحاول لغة SMPL حلها، و من تلك المشاكل (و هذا ليس bug في PHP لكنه عمومًا شيء سيئ!):
<?php echo "2+2=".2+2; ?>
هذا الكود لن يعمل، و سيخرج خطأ في PHP!
و هذا الكود:
<?php echo "2+2=" . 2+2; ?>
سيخرج "4" فقط! المنتظر منه أن يكتب 2+2=4 أليس كذلك؟ على الأقل بالنسبة لي هذا المطلوب. هذه مشكلة بسيطة حقًا، و يمكن حلها بشكل بسيط! لكن إذا كنا نريد السهولة و البساطة حقًا، لماذا لا تقدم اللغة المتوقع فعلاً للمستخدم؟ تم حل هذه المشكلة في SMPL و لله الحمد، و غيرها من المشاكل الكبير و الصغيرة. من المشاكل أيضًا، أسماء الدوال فتارة strpos و تارة str_replace، و ترتيب المدخلات (parameters/arguments) فأحيانًا النص المبحوث فيه أولاً، و أحيانًا النص المبحوث عنه اولاً! بشكل يظهر أنه عشوائي – حتى لو لم يكن كذلك! تم حل هذه أيضًا في SMPL.
حاولت قدر الإمكان أن أضع أقل امكانيات ممكنة في SMPL 0.1، ما فائدة امكانيات كثيرة ليس لها شرح مناسب أو لا تستخدم؟ مستقبلاً، بعد أن يكون هناك أكثر من شخص في فريق العمل، يمكن التطوير أكثر، و كتابة شرح لكل شيء دون مشاكل و بسرعة كبيرة. أما الآن فالمهم هو البدأ. لذا حرصت ألا يزيد عدد الدوال الـbuilt-in مع هذا الإصدار من اللغة عن 60 دالة، و أتمنى أن أكون اخترت الدوال الأهم فعلاً لوضعها. و سيتم إن شاء الله إضافة دعم قواعد بيانات MySQL في أوائل الاصدارات القادمة بالاضافة إلى قواعد بيانات أخرى تابعة للغة تحفظ عبر XML من أجل الأشياء البسيطة و الصغيرة.
اللغة حاليًا أبطأ من PHP بشكل كبير بالطبع (لكن بشكل لا يشعر به، سأحاول أن أقارن بين كودين (أحدهما بـSMPL و الآخر بـPHP)، و أرى فرق السرعة إن شاء الله)، لذا سيتم إجراء بعض التطويرات في الاصدارات القريبة القادمة إن شاء الله، فسيتم استبدال فكرة قراءة byte by byte ببعض الـregex إن شاء الله، و مقارنة سرعة كلاهما بالآخر. و تطويرات أخرى كثيرة إن شاء الله.
أخيرًا: تحميل الإصدار 0.1 من اللغة:
هذا حتى الآن أول رابط لتحميل هذا الإصدار على الويب كاملاً! يحتاج الاصدار ليعمل إلى PHP 5 و دعم لملفات .htaccess و .htaccess Rewrite Engine اعذروني بما أنه ليس هناك شرح حاليًا للغة. هناك ملف اسمه test.smpl فيه كود تجريبي مكتوب باللغة، لمعرفة هل تعمل اللغة أم لا يمكن فتح هذا الملف في المتصفح.
مجلد functions يحتوي على الدوال الـbuilt-in مع اللغة. مكتوبة بـPHP و تبدأ أسماء الدوال المتاحة في اللغة باسم smpl_ في PHP و للوصول لدالة PHP عبر SMPL يمكن كتابة php_....!
لتحميل اللغة:
اللغة تحتاج حاليًا، للاقتراحات و النقد، و كذلك المطورين، و المساهمين، و إلى محرر نصوص يدعم code highlighting للغة! هناك فعلاً دالة في اللغة، تستخدم لتلوين الكود في المتصفح (ربما أحاول كتابة مقابل لها بـjavascript ليكون المحرر مؤقتًا عبر الويب مثلاً! و يمكن كتابة محرر خاص للغة، أو حتى add-on لمحرر آخر!).
شكرًا، و معذرةً على طول الموضوع. و السلام عليكم و رحمة الله تعالى و بركاته.
