السلام عليكم ..
أثناء قراءة أحد المقالات عن أفكار لغة LISP التي جددت مفهوم البرمجة بشكل كبير ...
(لغة LISP من أوائل لغات البرمجة جاءت بعد Fortran وهي من اختراع john McCarthy ..1950..شكلت ثورة في عالم البرمجة
ولا يزال تطويرها قائما حتى الآن ...(تجاوزت 9 نسخ حتى وصلت إلى أقل قدر ممكن من تعقيد التركيب النحوي)
حتى أنه يقال على سبيل التقدير للغة :
لم يعد هناك داع لتطالب بلغة برمجة جديدة ... اطلب لهجة جديدة من لغة LISP )
رأيت أن إدراجها هنا ومناقشتها فيه فائدة ...
أفكار McCarthy التي غيرت البرمجة يمكن تلخيصها في 9 أفكار
فيما يلي تعدادها مع تلخيص بسيط جدا لها ..
1. Conditionals
أول من أدخل الجمل الشرطية إلى البرمجة حيث كانت FORTRANقبلها لا تحوي إلا علىgoto للتحكم بسير البرنامج
2. A function type.
صار التابع يعتبر نوعاً يمكن التعامل معه كباقي الأنواع وهذا ما نعبر عنه حاليا
بالمؤشر إلى تابع ...
3. Recursion.
مفهوم العودية برمجياً ...(طبعا كان موجود رياضيا قبل ذلك )
4. A new concept of variables.
كل المتغيرات هي مؤشرات ..فمثلا عملية الإسناد ليست نسخ المحتوى من متحول آخر
بل نسخ عنوان القيمة من مؤشر لآخر
فصار المتحول اسمه place بصفته ال يهمنا الا المكان الذي يشير اليه
5. Garbage-collection.
طالما تحدثنا عن المؤشرات يجب التحدث عن الذاكرة وإدارة الذاكرة دون اقحام المبرمج في الأمر
6. Programs composed of expressions.
هل تظن أن المعامل الشرطي الثلاثي صناعة محلية ؟
إنه من اختراع McCarthy بجدارة منقطعة النظير
(x?1:2)
العبارة السابقة كان يعبر عنها ب:
(if x 1 2)
البرنامج مبني كشجرة من العبارات الرياضية والمkنطقية ..كل عبارة تعوض بناتجها ...
مثلا
للتعبير عن الشرط التالي :
(foo?x==1:x==2)
يمكننا كتابته كما يلي
(if foo (= x 1) (= x 2))
لاحظ الآن اخراج الشرط كعامل مشترك
ويمكن التعبير عنه كما يلي
(= x (if foo 1 2))
والتي تكافئ بالنسبة لنا :
(x==(foo?1:2))
أليست رائعة
7. A symbol type
اي وجود نوع خاص للسلاسل النصية
وهذه السلاسل يمكن أن تتضمن أي شيء بدئا من ثوابت رياضية مثل PI أو e وانتهاءا بأسماء الأشخاص
8. A notation for code.
ترميز الكود وطريقة كتابته تعتمد على شجرة العمليات وليست كتابة كلمات انكليزية كمافي سابقاتها
نصل إلى الفكرة الأخيرة
9. The whole language always available.
أترك لكم قراءتها من النص الأصلي ...كوني لم أستطع شرحها![]()
..وننتظر شرحها من أحد الأعضاء مشكوراً لمناقشتها
اقتباس9. The whole language always available.
There is no real distinction between read-time, compile-time, and runtime.
You can compile or run code while reading,
read or run code while compiling,
and read or compile code at runtime.
Running code at read-time lets users reprogram Lisp's syntax;
running code at compile-time is the basis of macros;
compiling at runtime is the basis of Lisp's use as an extension language in programs like Emacs;
and reading at runtime enables programs to communicate using s-expressions,an idea recently reinvented as XML.
والله ولي التوفيق
