مرحبا لغة البرمجة

بدءًا من هذه المقالة ، نبدأ في نشر مفهوم تطبيق لغة البرمجة الجديدة Hi.



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



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


لا تعض إصبعي ، انظر إلى حيث أشير إلى

وارن س.مكلوتش ، 1960s


البيان الأولي للمشكلة



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



بشكل عام ، مع بعض القيود ، تم حل هذه المهمة مرة أخرى في عام 2018 من خلال تطبيق Helius - المليء بالحياة ، والذي يمكن العثور عليه في متجر التطبيقات .



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



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



نظرًا لأنه من "الملائم" أيضًا لنظام فكري جيد التصميم إنشاء بناء جملة لأي لغة متسقة بأي شكل ، من أجل استخدام لغة الاتصال بين الذكاء "الاصطناعي" و "الطبيعي" ، فمن المنطقي استخدام الكود الخوارزمي التقليدي ، مما يجعله مناسبًا قدر الإمكان لأنماط التفكير البشري على دراية باللغات السائدة ، وكان سلفه ألغول. هم أحفاد على طول خط باسكال (Ada ، Modula) و C (C ++ ، Java ، Swift). ومع ذلك ، فإن مفهومنا لبناء التجريدات والاهتمام بالأقواس قريبان من روح المخطط (Lisp) ، وتكامل أوامر بيئة البرمجة في الوسائل التعبيرية للغة يتوافق مع أفكار لغات البرمجة النصية ، و BASIC القديم لأجهزة الكمبيوتر الصغيرة الأولى ومشروع أوبيرون - نظام Niklaus Wirth.



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



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



أهلاً بالعالم



قبل أن نناقش النقاط الرئيسية لبناء بناء الجملة للغة ، نقدم ثلاث مقتطفات قصيرة من التعليمات البرمجية. لنبدأ ببرنامج رسائل الترحيب التقليدي:



PRINT “Hello world!”


نرى أن لغتنا طابع نصي ، بافتراض سرعة التفسير ؛ يكون الأمر print بأحرف كبيرة ولا يتبع وسيطة الوظيفة المضمنة أقواس هنا.



دعنا نقدم مثالين أكثر إثارة للاهتمام: إيجاد القاسم المشترك الأكبر لعددين صحيحين بأسلوب الأمر واستخدام العودية:



FUN gcd
   INPUT a: INT
   INPUT b: INT
   WHILE a ~= b LOOP
      IF a > b THEN a -= b ELSE b -= a ENDIF
   REPEAT
   PRINT “gcd = “, a
RETURN

FUN gcd _ a: INT, _ b: INT -> INT
   IF b == 0 THEN RETURN a ENDIF
RETURN gcd b, (a % b)

PRINT gcd 6, 9 
#  3


مرحبًا بمتطلبات اللغة



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



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



لذا فإن هدفنا الرئيسي هو تبادل الأفكار باستخدام لغة رسمية. دعنا نقدم ثلاثة متطلبات رئيسية:



  1. يجب أن تكون اللغة سهلة التعلم لأي شخص
  2. يجب أن تكون اللغة موثوقة للاستخدام
  3. يجب أن تكون اللغة قادرة على تنظيم أنظمة برمجية معقدة للغاية.


دعنا نستكشف هذه المتطلبات الأساسية بمزيد من التفصيل.



يجب أن تكون اللغة سهلة التعلم



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



ومن ثم ، فإننا نستخدم تركيبات من النوع LOOP…REPEATبدلاً من {…}. كمكافأة لطيفة ، سنستخدم الأقواس المتعرجة مثل هذا:

s = {1, 2, 3}سنشير إلى تخصيص المتغير s لمجموعة من ثلاثة أعداد صحيحة.

a = [1, 2, 3]سنشير إلى إسناد المتغير a إلى مصفوفة من ثلاثة أعداد صحيحة.



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



2) بالنسبة للتعبيرات الحسابية ، نستخدم تدوينًا للصيغة: a + b + c، وليس (+ a b c)، كما هو الحال في عائلة LISP.



3) تتطلب طبيعة لغة البرمجة النصية لدينا مكتبة مدمجة بها جميع الوظائف الضرورية في بيئة اللغة دون الحاجة إلى أطر خارجية.



4) نستخدم الخوارزميات الأصلية لأنماط التفكير: لغة حتمية مع إمكانية الوظائف العودية وعناصر الحساب الوظيفي. نظرًا لأننا سننظر في استخدام أحد الأمثلة ، فإن أسلوب الأمر مناسب تمامًا لتطبيقات البرمجة استنادًا إلى بنية معالجة الأحداث بطريقة تعريفية ، مثل SwiftUI. وبعبارة أخرى ، فإن المصطلحين "حتمي" و "إعلاني" يعكسان بالأحرى موقف المراقب أكثر من الواقع المعطى لنا بمعنى ما.



5) نراقب عدم وجود التكرار في الهياكل النحوية وبيئة العمل لإدخال أحرف الكود. نستخدم سطرًا جديدًا كفاصل. ومع ذلك ، كما هو الحال في Swift ، يمكنك استخدام "؛" على سطر واحد كمحدد لتعبيرات متعددة. في الوقت نفسه ، يحتج تعليمنا الهندسي بشدة على إعطاء أهمية نحوية للمسافة البادئة في نص البرنامج ، كما تم استخدامه سابقًا في فورتران ، والآن في بايثون.



لغة موثوقة



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



foo, Foo, f_001, F1, F, for


أمثلة على المعرفات التي تحفظها اللغة:



FOO, FOR, HI, YES, EVERYRESTRICTIONMATTER


من أجل موثوقية الكود ، نستخدم الكتابة الثابتة مع القدرة على استنتاج الأنواع تلقائيًا من إعلانات النموذج:



LET x = 6  #  x   INT
VAR boolean = TRUE  #   boolean  BOOL


نحن نميز بين الثوابت والمتغيرات ليس لتحسين وقت تنفيذ الكود ، ولكن حتى يكون لدى المطور فهم جيد للغرض من الكائنات التي يتحكم فيها.



لغة لبناء أنظمة برمجية معقدة للغاية



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



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



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



محددات



من الناحية العملية ، كلما طبقنا أي متطلبات لتصميم الأنظمة ، فعلينا إما التضحية بشيء ما أو عدم الالتفات إلى شيء ما. بالنسبة لنا ، في بناء لغة Hi ، فهي ليست ذات أهمية أساسية:



  • توافق بناء الجملة الدقيق مع لغات البرمجة الأخرى
  • القدرة على استخدام مكتبات التعليمات البرمجية الخارجية الموجودة أو التكامل مع أنظمة البرامج الأخرى
  • c n-
  • /
  • — ,


في الختام ، دعنا نقول عن أصل الاسم المألوف للغة البرمجة HI أو Hi أو hi. فليكن H elius " ط nteractive برمجة لغة أو H أومان I ntelligence لغة برمجة. على عكس كل التركيبات في لغتنا ، فإن هذا هو المعرف الفوقي الوحيد الذي لا يحتوي على دلالات لا لبس فيها.



في المقالة التالية ، سنقدم وصفًا للغة البرمجة الأساسية Hi "في صفحة واحدة" ثم نحلل منطق بناء الجملة ، وفقًا لمتطلبات الأطروحات المقدمة أعلاه.



All Articles