شرارات لإنتاج لغة برمجة

logo-sharkنعم شرارة، شيء ما يشتعل فجأة داخل دماغك، يضيء بسرعة و يختفي مع أول تشتيت لانتباهك، كما بدأت بلفتة بسيطة تنتهي بابسط شاردة تمر بها، هذه اللمعة هي هذه الشرارة و هي قد تكون بداية حريق كبير.

كأي مبرمج (مبرمج قديم طبعا) مبتديء، بدأت حياتي البرمجية بلغة بيسك Basic، على أجهزتنا القديمة، كانت مجرد كتابة و إخراج النتائج كتابةً او رسوم، و قمة الروعة عندما ترى الحاسب يقوم بتنفيذ الاوامر بالتسلسل التي تعطيها له.

القرش

مع تقدمي في مجال البرمجة انتقلت إلى لغة التجميع (لغة الآلة) و منها استطعت قراءة البيوس Bios للجهاز و قراءة طريقة عمل لغة البرمجة Basic على نفس الجهاز، مع قراءتي لها كانت تخطر على بالي أفكار أكثر (ماذا لو كان) و (ماذا لو عملنا كذا) و هكذا وجدت نفسي بدأت بكتابة لغة برمجة جديدة تختلف عن البيسك و إن كانت أول الأمر متخلفة جدا عنها.

كانت لي أهداف فيها لتسهيل بعض الاعمال علي، مثلا اريد فيها عدم ترقيم الاسطر الاجباري كما هو معروف في البيسك في ذلك الوقت، و هذه الفكرة ليست من عندي اقتبستها من لغة التجميع لا اكثر، قمت بتسمية هذه اللغة بـ “القرش”، لا تستغرب من الاسم، نحن نتكلم عن مبرمج عمره 17 سنة.

كانت مجرد بداية و انتهت فورا عندما تعرفت على الاجهزة الأحدث و اكتشفت كماً هائلا من لغات البرمجة الموجودة مسبقاً لم أعرفها من قبل و لكن “القرش” كان سببا في اختياري لغة البرمجة التي تناسبني، عندما كان الخيار بين الـ Pascal و الـ C استقر رأي على لغة Pascal، و هكذا صار “القرش” الشرارة الاولى للرغبة في صنع لغة برمجة  وفي  اختيار لغة برمجة.

التعريب

مع دخول الانترنت اصبح الاطلاع على عمل الآخرين أسهل و خاصة مع المصادر المفتوحة، وقع ذلك الوقت بين يدينا أنا و صديقي في العمل(1) مصدراً للغة بيسك مكتوب بلغة الدلفي، كانت قراءة المصدر سهلة و بسيطة بحيث لمعت لنا فكرة تعريبها من باب المتعة، قمنا فقط باستبدال الكلمات الانكليزية إلى كلمات عربية و حرصنا على استخدام كلمات لا تحتاج إلى همزة أو تنوين مثل Print إلى “اطبع” بدون همزة، أو If إلى “اذا” و Then إلى “اذن” لتفريقها عن “إذا“، كان الهدف هو التبسيط ليس إلا.

استغرقنا العمل عليها نحن الاثنين عدة ساعات، و كنا نضحك من النتائج الممتعة التي وصلنا إليها، و عدنا للعمل في اليوم التالي فأصبحت طي النسيان، و حتى أني لا أذكر أين وضعت المصدر البرمجي، لكن ما لمع في ذهني ذلك الوقت هو لماذا يجب ان تكون عربية، لماذا لا تكون متعددة اللغات، يعني أن نستطيع كتابتها بالانكليزية و حفظها بشكل ثنائي Binary ثم استرجاعها باللغة العربية أو أي لغة بشرية تكون مدعومة بها، أي عبر عمل Compile ثم Decompile مثلاً.

فكرة تعدد اللغات البشرية و التحويل بينها ضمن لغة برمجية واحدة عبر ترجمتها Compile اولا ثم عمل Decompile، ادى إلى وجوب الاحتفاظ بالملاحظات ايضا، و لكن لن نستطيع ترجمة الملاحظات إذ ستبقى باللغة الاصلية التي كُتبت بها.

هذا الاسلوب يتطلب الاستغناء عن اكبر قدر ممكن من الكتابة البشرية، مثل procedure و function و void و var أو حتى if، عندها بدأت بوضع القواعد عبر المزج بين لغة Pascal و C و لغات برمجية أخرى التي غالباً مشتقة من صيغ اللغة C.

البحث

منذ ذلك الوقت كل عدة اشهر ابحث عن هذه اللغة، ادعو ربي أن يقوم أحد المبرمجين الخارقين بكتابة ما يشبه ما ارغب به، و بنفس الوقت أضع لها شروط القبول بالنسبة لي، أول ما أنظر اليه هل يوجد void او function او var، إذا كانت موجودة في اللغة التي أقرأ عنها فستسقط من حساباتي.

تلك اللغة البرمجية التي في دماغي في بداية الامر أطلقت عليها اسم nop_code، ثم قررت إعطاءها اسما عربيا، هو ترجمتي لكلمة script لأني إذا كنت من سيصنعها فستكون مكتوبة بلغة باسكال و ستكون حتما لغة script كما هو الحال في php و اللغات المشابهة، اخترت اسم “سرد” أو “sard” كترجمة لكلمة script و في نفس الوقت بعيدة عن اللفظ الثقيل للقاريء الاجنبي.

التحدي

عند تعلمي لبرمجة اندرويد كان لابد لي من استعمال لغة جافا، صادفني مشاكل بفهم ال scope فيها وهو مختلف عن اسلوب اللغات Pascal و ال C.

دخلت إلى مجتمعهم عبر المحادثة Chat، فسألني احد المبرمجين اذا كانت اعجبتني لغة الجافا، فاخبرته بـ “لا”، اخبرته طالما وجدت “void” فهي لن تعجبني، و دخلنا في ذلك النقاش بأن هذا الامر غير ممكن منطقيا، كانت الاشكالية بالنسبة له هو التعارض بتفسير Parsing النص، و بما اني قادم من الباسكال لا من السي (وهذا ما اخبرته) فكان اعتقادي باننا اذا وضعنا تعريف المتحول او التابع (الدالة) بعد اسم المتحول و ليس قبلها فسوف تُحل المشكلة.

طبعا لم اجادل كثيرا إذ تعلمت مع الزمن “ما حك جلدك مثل ظفرك” اي انني لا استطيع اثبات اي شي إلا بيدي وأن اقبل التحدي.

الآلة الحاسبة

عند تعلمي لأي لغة برمجة جديدة تكون الآلة الحاسبة اول مشروع كامل اتدرب عليه من خلالها، و في كل مرة اكتب برنامج الآلة الحاسبة أكتب مكتبة صغيرة تتلقى الاوامر البسيطة (العمليات الحسابية) و تتلقى كذلك الكتابة (الارقام)، و في كل مرة أقول في نفسي مالفرق بينها و بين لغة البرمجة، كان الفرق بالنسبة لي هو المتحولات، و التوابع و عملية الإسناد فقط.

فقط كانت الفكرة بدلاً من إدخال الارقام و العمليات من لوحة الأزرار، أن نقوم بمسحها من نص موجود مسبقا و مناولته لهذه المكتبة، و ستكون النتائج بدلا من إظهارها على الشاشة، إبقائها في الذاكرة لاستعمالها مرة أخرى أو تمريرها لتوابع، او ربما إسنادها لمتحول.

كتابتي للآلة الحاسبة بسط لي كتابة لغة البرمجة و ربما خدعني و أعطاني أملاً زائفا، و لكنه كان جميلا جدا، هذا الامل كان حافزا لكتابة هذه اللغة.

الماضي

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

أخيرا

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

نشرت المصدر على github  تحت رخصة MIT لم اسمها لغة برمجة بعد حتى تكتمل، استثنيت المعلومات  التقنية في التدوينة لتسهيل القراءة، يمكن طرح المعلومات التقنية في التعليقات.

استمر في القراءة

Advertisements