ما الذي جعل ليسب مميزًا

«أعظم لغة برمجة تم إنشاؤها على الإطلاق«
- آلان كاي، "أون ليسب"

ما الذي جعل ليسب مميزًا

عندما طور مكارثي لغة Lisp في أواخر الخمسينيات، كانت مختلفة جذريًا عن اللغات الموجودة، ومن أهمها: فورتران.

قدم ليسب تسعة أفكار جديدة:

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

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

3. العودية. بالطبع، كان التكرار موجودًا كمفهوم رياضي قبل Lisp، لكن Lisp كانت أول لغة برمجة تدعمه. (ربما يكون هذا ضمنيًا في إنشاء وظائف ككائنات من الدرجة الأولى.)

4. مفهوم جديد للمتغيرات. في Lisp، جميع المتغيرات هي مؤشرات فعالة. القيم هي ما تمتلكه الأنواع، وليس المتغيرات، وتعيين المتغيرات أو ربطها يعني نسخ المؤشرات، وليس ما تشير إليه.

5. جمع القمامة.

6. برامج مكونة من التعابير. برامج Lisp عبارة عن أشجار من التعبيرات، يُرجع كل منها قيمة. (يمكن لبعض تعبيرات Lisp إرجاع قيم متعددة.) وهذا يتناقض مع لغة Fortran والعديد من اللغات الناجحة الأخرى التي تميز بين "التعبيرات" و"العبارات".

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

تم رفع القيود مع ظهور اللغات المبنية على كتل، ولكن بحلول ذلك الوقت كان الأوان قد فات. لقد تم بالفعل التمييز بين التعبيرات والبيانات. لقد مرت من فورتران إلى ألغول ثم إلى نسلهم.

عندما تتكون اللغة بالكامل من التعبيرات، يمكنك إنشاء التعبيرات بالطريقة التي تريدها. يمكنك الكتابة إما (باستخدام بناء الجملة لحام قوس)

(if foo (= x 1) (= x 2))

أو

(= x (if foo 1 2))

7. نوع الرمز. تختلف الأحرف عن السلاسل النصية، وفي هذه الحالة يمكنك التحقق من المساواة عن طريق مقارنة المؤشرات.

8. تدوين للكود باستخدام أشجار الرمز.

9. اللغة بأكملها متاحة دائمًا. لا يوجد فرق واضح بين وقت القراءة ووقت الترجمة ووقت التشغيل. يمكنك ترجمة التعليمات البرمجية أو تشغيلها أثناء القراءة، أو قراءة التعليمات البرمجية أو تشغيلها أثناء الترجمة، أو قراءة التعليمات البرمجية أو تجميعها أثناء تشغيلها.

يتيح تشغيل التعليمات البرمجية أثناء القراءة للمستخدمين إعادة برمجة بناء جملة Lisp؛ تشغيل التعليمات البرمجية في وقت الترجمة هو الأساس لوحدات الماكرو؛ يعتبر تجميع وقت التشغيل هو الأساس لاستخدام Lisp كلغة امتداد في برامج مثل Emacs؛ وأخيرًا، تتيح القراءة أثناء التشغيل للبرامج التواصل باستخدام تعبيرات s، وهي فكرة تم إعادة اختراعها مؤخرًا في لغة XML.

اختتام

عندما تم اختراع ليسب لأول مرة، كانت هذه الأفكار بعيدة كل البعد عن ممارسات البرمجة التقليدية التي أملتها الأجهزة المتوفرة في أواخر الخمسينيات.

بمرور الوقت، تطورت اللغة الافتراضية، التي تجسدها نجاح اللغات الشعبية، تدريجيًا نحو لغة Lisp. النقاط من 1 إلى 5 مقبولة الآن على نطاق واسع. بدأت النقطة 6 في الظهور في الاتجاه السائد. في بايثون، هناك فقرة 7 بشكل ما، على الرغم من عدم وجود بناء جملة مناسب. العنصر 8، الذي (مع العنصر 9) يجعل وحدات الماكرو ممكنة في Lisp، لا يزال موجودًا فقط في Lisp، ربما لأنه (أ) يتطلب تلك الأقواس أو شيئًا سيئًا بنفس الدرجة، و (ب) إذا أضفت هذه الزيادة الأخيرة في الطاقة، يمكنك لم يعد يدعي أنه اخترع لغة جديدة، ولكن فقط طور لهجة جديدة من اللثغة؛ -)

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

المصدر: www.habr.com

إضافة تعليق