كما يتم الإعلان عن أدوات جديدة ، والتي تستخدم في عملها التنسيقات الخاصة بها لوصف ملفات التكوين أو سلسلة من الأوامر المنفذة ، والتي تقاربها أيضًا إلى حد كبير إلى مفهوم "لغة البرمجة".
الغرض من هذه المقالة هو صياغة التوقعات والتنفيذ المحتمل للغة برمجة مجردة يمكن أن تصبح أداة عالمية للتواصل بين الكمبيوتر والشخص.
حول المبرمجين.
إذا بدأت من البداية ، فعندئذ ذات مرة سمعت عبارة معاد صياغتها ، "يجب على كل مبرمج كتابة قاعدة البيانات الخاصة به ومحرر النصوص ولغة البرمجة." وإذا كتبت أول شيئين منذ وقت طويل ، فإن لغة البرمجة لم تنجح بعد.
بعد كل شيء ، كيف يتم عادة إنشاء لغات البرمجة؟
يتمتع كل مبرمج دائمًا بنوع من الخبرة السابقة:
- معرفة لغة برمجة واحدة أو أكثر (كيف يمكن أن تكون بدونها)
- تجربة سلبية من استخدامها (وإلا ، إذا كان كل شيء يناسبك ، فلماذا تأتي بشيء جديد؟)
- الرغبة في الحصول على فرص جديدة (عندما يكون هناك شيء مفقود في اللغات الحالية).
وقبل وصف بناء الجملة ، واختيار الكلمات الأساسية وبدء العمل الرئيسي: lexer ، parser ، المكتبات الأساسية ، تحتاج إلى الإجابة على الأسئلة الأساسية:
- مترجم / مترجم / مترجم؟
- الكتابة الثابتة أو الديناميكية؟
- إدارة الذاكرة اليدوية أو التلقائي مع جامع القمامة؟
- نموذج البرمجة: OOP ، وظيفي ، هيكلي ، أم شيء جديد؟
- هل يُسمح بالإدخالات من لغات البرمجة الأخرى وما إلى ذلك؟
ربما ، مثل معظم القراء ، لدي خبرة في استخدام العديد من لغات البرمجة. لذلك ، لطالما كانت ممارسة أنه لحل مشكلة ما ، من الأفضل أن تأخذ لغة معروفة جيدًا أو حتى تعلم لغة جديدة ، بدلاً من البدء في كتابة لغتك الخاصة.
علاوة على ذلك ، لا أريد اختراع لغة أخرى فقط من أجل علامة التجزئة أو من أجل اللغة نفسها. أعتقد أن الغرض من إنشائه يجب أن يكون خارج احتياجات المطور نفسه.
ويبدو لي أننا تمكنا من تحديد المنطقة التي يمكن أن يكون تطوير لغة البرمجة أمرًا مطلوبًا فيها ، ويمكن أن تعود الجهود المبذولة عليها بفوائد حقيقية.
حول غير المبرمجين.
هذا المجال هو لغة البرمجة الطبيعية لغير المبرمجين. أضع الكلمتين "غير المبرمجين" و "طبيعي" بين علامتي اقتباس عمداً منذ ذلك الحين هذه الشروط مشروطة للغاية.
بعد كل شيء ، إذا لم يبدأ المبرمج في البرمجة ، فبدون إدراك ذلك ، يصبح تلقائيًا مبرمجًا ؛-). لا يمكن أن تكون لغة البرمجة "طبيعية" بحكم التعريف. بتعبير أدق ، بالنسبة لأجهزة الكمبيوتر ، من المرجح أن تكون لغة المجمع أو مجموعة تعليمات الآلة "طبيعية".
لذلك ، فإن الهدف هو الحد الأقصى - لتقريب لغة البرمجة إلى لغة الإنسان الطبيعية.
لن يجعل هذا قراءة نص البرنامج أكثر قابلية للفهم لغير المتخصصين فحسب ، بل سيسمح لك أيضًا بالبدء في تأليف البرامج ببساطة عن طريق إتقان الكلام المكتوب ، باستخدام الحد الأدنى من القواعد الأساسية.
لكن هناك مشكلة كبيرة في هذه الصياغة!
أي لغة برمجة دولية ، لأن تركيبها مستقل عن اللغة الطبيعية التي يتواصل بها المبرمج.
وإذا كان نص البرنامج بلغة "طبيعية" ، فسيصبح مفهومًا فقط لمن يعرف هذه اللغة ، بينما يصبح في نفس الوقت غير مفهوم للآخرين.
على سبيل التوضيح: مرة أو مرتين .
إذا كنت تتخيل رغبات مثل هذه اللغة ، فسترى المتطلبات والقيود التالية:
- ( ), , , , .
- / , «» , «» .
- أريد حقًا أن أرى
التسامحفي اللغة الجديدة ، والتسامح مع الارتباك. هذه "الميزة" موجودة في الكتابة بلغة طبيعية ، وعلى الرغم من وجود أخطاء مطبعية ، يتم الحفاظ على المعنى دائمًا تقريبًا. بطبيعة الحال ، في هذه الحالة ، لا ينبغي للمرء أن يذهب إلى حد التعصب. لا يقرأ المترجم العقل ولا يستطيع حقًا "فهم" ما يعنيه المستخدم ، ومع ذلك فمن الشائع جدًا تجاهل الأخطاء المطبعية في نص البرنامج بناءً على السياق (وإن كان ذلك مع رسائل التحذير).
ومع ذلك ، يجب أن تظل هذه اللغة مجرد لغة برمجة مع كل إمكانيات إنشاء برامج من أي مستوى من التعقيد ، بما في ذلك البرمجة الوظيفية والموجهة للكائنات وفهم لا لبس فيه لما تم كتابته.
حول لغة افتراضية
استنادًا إلى قواعد الكتابة ، قد تبدو الاصطلاحات الأساسية وعلامات الترقيم للغة جديدة كما يلي:
- أي نص يتكون من جمل وتعليقات. تتم معالجة الاقتراحات وتجاهل التعليقات.
- تتكون الجملة من سلسلة من المصطلحات والحرفية والرموز ، مفصولة بمسافات وعلامات ترقيم ، وتنتهي بحرف نهاية الجملة.
- المصطلح عبارة عن سلسلة مدمجة من الأحرف والأرقام والرموز ":" و "_".
- Literal - الثوابت المضمنة مباشرة في نص البرنامج ، ويتم تحديد نوعها بشكل فريد. هذه عبارة عن سلاسل أحرف في علامات الاقتباس والأعداد الصحيحة والأرقام الحقيقية وبعض التنسيقات الخاصة (الوقت والتاريخ).
- الرموز - كل الرموز الأخرى التي لا تنتمي إلى علامات الترقيم والمسافات البيضاء والأرقام والحروف.
- — , :
- «.»,«;»,«!»,«?»,«…» — .
- «=» — .
- "" () — .
- «()» — / .
- «[]» — .
- «{}» — .
- «$» — .
- «@» — .
- «,» () — .
- «:» () — .
إذا كان كل شيء يجب أن يكون أكثر أو أقل وضوحًا مع رمز التخصيص ، وعلامات الاقتباس ، والأقواس ، والأقواس المربعة ، لأن الغرض منها يتوافق مع ذلك في الغالبية العظمى من لغات البرمجة ، ثم يجب شرح الغرض من بقية الرموز (الأقواس المتعرجة ، والنقطتان ، والفاصلة ووظائف النظام / المتغير) قليلاً.
نظرًا لأن الهدف من لغة البرمجة الافتراضية لا يزال هو كتابة البرامج ، فمن الضروري توفير إمكانية إدخال رمز برنامج عادي دون مراعاة جميع الاحتمالات والغموض المتأصل في أي لغة طبيعية.
هذه القدرة مطلوبة أيضًا لتنفيذ وظائف منخفضة المستوى والتفاعل مع المكتبات الخارجية.
عند إنشاء مثل هذه الإدخالات ، يمكن استخدام الأقواس المتعرجة ، وسيتم إدراج كل النص الذي بينها في الملف النهائي مع معالجة قليلة أو بدون معالجة.
يتم استخدام الرموز "$" - متغير نظام و "@" - وظيفة نظام أيضًا لأغراض مماثلة. إذا تم وضع مثل هذا الرمز في بداية الكلمة ، فسيشير إلى كائن لغرض مماثل. على سبيل المثال ، ستعني "exit" دالة ، وستعني "$ var" متغيرًا بأسماء مناسبة ، وستصبح الكائنات نفسها متاحة في كل من التعليمات البرمجية العادية وفي الإدخالات البرمجية داخل الأقواس المتعرجة.
يتم تنظيم الوصول إلى الحقول / الأساليب الفردية للكائنات بطريقة مماثلة:
"object @ method" أو "object $ field".
يتم استخدام حرف الفاصلة "،" للإشارة إلى سلسلة من الكتل المنطقية المتساوية في جملة واحدة أو لإنشاء قوائم.
يتم استخدام حرف النقطتين ":" لإنشاء قوائم وللإشارة إلى علاقة منطقية بين جزأين من كلمة / نص ، بما في ذلك مسار الوحدة النمطية الكامل.
على سبيل المثال ، إنشاء قائمة: نتيجة / إشارة إلى علاقة: كما ترى ، فإن استخدام علامات الترقيم مأخوذ من غرضها المباشر ، المعتمد في الكتابة ، والذي يجب أن يوفر مفاضلة معينة بين بناء الجملة في لغات البرمجة القياسية والكتابة في اللغة الطبيعية.
_: 1, 2, .
_:
- 1;
- 2;
- .
module:calc // «calc», «module»
super:module:example$var // «$var» .
حول أجهزة الكمبيوتر
نظرًا لأننا نتحدث عن لغة برمجة ، فلا يمكننا الاستغناء عن الإنشاءات الخوارزمية القياسية: التعاقب والتفرع والحلقات.
يمكن وصف ما يلي بسهولة من خلال القواعد المعتادة لكتابة اللغة الطبيعية. في حالة التنفيذ المتسلسل في عبارة واحدة ، تتم كتابة العمليات واستدعاءات الوظائف بالتسلسل ، مفصولة بفواصل. إذا كانت موجودة في جمل مختلفة ، فإنها مكتوبة بنفس الطريقة واحدة تلو الأخرى. علاوة على ذلك ، فإن تنسيق الفقرة يخدم فقط لتحسين فهم النص والفصل المنطقي للأجزاء الفردية.
عند إنشاء هياكل تحكم شرطية وحلقة ، ستحتاج بالفعل إلى كلمات رئيسية. ولكن نظرًا لأنه وفقًا للرغبات الأصلية للغة ، من المستحيل الاحتفاظ بالمصطلحات المعتادة لكتابة الإنشاءات الخوارزمية ، يكفي الإشارة إلى رمز وظيفة النظام أمام الكلمات الرئيسية ، والتي ستميز المصطلح المعتاد عن الكلمة الرئيسية (التحكم).
بطبيعة الحال ، أثناء البرمجة ، يمكن استخدام هذه المصطلحات ، لكن هذا ليس ضروريًا على الإطلاق. نظرًا لأنه عند الإعداد للغة طبيعية معينة ، يجب تعيين مصطلحات محددة لوظائف النظام والكلمات الرئيسية واستخدامها بالفعل ، على سبيل المثال:
= @goto,
= @label,
= @continue,
=@break ..
والأخير بدوره ، ولكن ربما الأهم من حيث الجوهر ، البناء: تمرير المعلمات عند استدعاء الوظائف. إذا سعينا جاهدين من أجل بناء جملة طبيعي تمامًا ، فإننا نحصل على نفس اللغة الطبيعية التي يصعب تحليلها.
ومع ذلك ، يبدو لي أنه من الممكن الجمع بين النهجين من خلال إزالة الاستخدام الإلزامي للأقواس ، حيث يسمح بذلك بناء الجملة. لكن: بعبارة أخرى ، للترتيب الطبيعي للوسيطات ، يمكن حذف أقواس الوظائف والفاصلات بين المعلمات. على الرغم من أن استخدامها يجب أن يتم تحديده في المقام الأول من خلال اللغة الطبيعية المستهدفة ، وليس بناء الجملة.
: (1, 2(), 3=).
: 1 2 3=.
: ( 2() ).
: 2().
: (2 ).
حول الاعتراضات
أتوقع اعتراضات مبررة على استخدام مثل هذه اللغة من المبرمجين. سيتضح أن أي برنامج فيه مطول أكثر بكثير من استخدام البنية الرسمية الصارمة للغات الكمبيوتر العادية.
لذلك ، دعني أذكرك بخصائصه الإلزامية - القدرة على تحويل نص برنامج من لغة إلى أخرى. يتيح لك ذلك كتابة البرامج باستخدام صيغة رسمية تمامًا دون استخدام مصطلحات اللغة الطبيعية المعاد تعريفها ، وتحويل النص المصدر إلى لغة "طبيعية" لـ "غير المبرمج".