برمجة قائمة على الأدب

كتاب "البرمجة الأدبية" لدونالد كنوث هو الكتاب الأساسي في مجال البرمجة الأدبية.

البرمجة الأدبية ( LP ) هي نموذج برمجي قدمه دونالد كنوث عام 1984 ، حيث يُشرح برنامج الحاسوب بلغة طبيعية ، كالإنجليزية مثلاً، مع تضمين مقتطفات من وحدات الماكرو وشفرة المصدر التقليدية ، والتي يمكن من خلالها توليد شفرة مصدر قابلة للترجمة . [ 1 ] يُستخدم هذا النهج بشكل روتيني في الحوسبة العلمية وعلم البيانات لأغراض البحث القابل للتكرار والوصول المفتوح . [ 2 ] يستخدم ملايين المبرمجين اليوم أدوات البرمجة الأدبية. [ 3 ]

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

تُستخدم أدوات البرمجة الأدبية للحصول على تمثيلين من ملف المصدر: أحدهما مفهوم بواسطة المترجم أو المفسر ، وهو الكود "المتشابك"، والآخر لعرضه كوثائق منسقة ، ويُقال إنه "مُنسج" من المصدر الأدبي. [ 5 ] في حين أن الجيل الأول من أدوات البرمجة الأدبية كان خاصًا بلغة برمجة معينة ، فإن الأجيال اللاحقة مستقلة عن اللغة وتتجاوز لغات البرمجة الفردية.

التاريخ والفلسفة

طُرح مفهوم البرمجة الأدبية لأول مرة عام 1984 على يد دونالد كنوث، الذي قصد من خلاله إنشاء برامج تُحاكي الأدب البشري. وقد طبّقه في جامعة ستانفورد كجزء من بحثه حول الخوارزميات والطباعة الرقمية . سُمّي هذا التطبيق " WEB " لاعتقاده بأنه من الكلمات الإنجليزية القليلة المكونة من ثلاثة أحرف التي لم تُستخدم بعد في مجال الحوسبة. [ 6 ] ومع ذلك، فهو يُشبه الطبيعة المعقدة للبرمجيات المُجمّعة بدقة من مواد بسيطة. [ 1 ] شهدت ممارسة البرمجة الأدبية انتعاشًا ملحوظًا في العقد الثاني من الألفية الثانية مع استخدام دفاتر الحوسبة ، لا سيما في علم البيانات .

مفهوم

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

يُستخدم المعالج المسبق لاستبدال التسلسلات الهرمية العشوائية، أو بالأحرى "شبكات الماكرو المترابطة"، [ 7 ] لإنتاج شفرة المصدر القابلة للتجميع بأمر واحد ("tangle")، والوثائق بأمر آخر ("weave"). كما يوفر المعالج المسبق إمكانية كتابة محتوى الماكرو وإضافة محتوى إلى الماكرو الموجودة مسبقًا في أي مكان في نص ملف مصدر البرنامج، مما يُغني عن الحاجة إلى مراعاة القيود التي تفرضها لغات البرمجة التقليدية أو مقاطعة تدفق الأفكار.

المزايا

بحسب كنوت، [ 8 ] [ 9 ] تُنتج البرمجة الأدبية برامج عالية الجودة، لأنها تُجبر المبرمجين على توضيح الأفكار الكامنة وراء البرنامج، مما يجعل قرارات التصميم غير المدروسة جيدًا أكثر وضوحًا. ويزعم كنوت أيضًا أن البرمجة الأدبية توفر نظام توثيق ممتازًا، ليس إضافةً لاحقة، بل يتطور بشكل طبيعي أثناء عملية شرح الأفكار خلال إنشاء البرنامج. [ 10 ] يسمح التوثيق الناتج للمؤلف باستئناف عملية تفكيره في أي وقت لاحق، ويُمكّن المبرمجين الآخرين من فهم بنية البرنامج بسهولة أكبر. يختلف هذا عن التوثيق التقليدي، حيث يُعرض على المبرمج شفرة مصدرية تتبع ترتيبًا يفرضه المُترجم، وعليه فك شفرة عملية التفكير الكامنة وراء البرنامج من الشفرة والتعليقات المصاحبة لها. كما يُزعم أن إمكانيات اللغة الوصفية للبرمجة الأدبية تُسهّل التفكير، مما يُعطي نظرة شاملة للشفرة ويزيد من عدد المفاهيم التي يستطيع العقل استيعابها ومعالجتها بنجاح. وقد ثبتت إمكانية تطبيق هذا المفهوم على البرمجة على نطاق واسع، أي البرامج التجارية، من خلال إصدار من كود TeX كبرنامج قابل للقراءة. [ 8 ]

ويزعم كنوت أيضاً أن البرمجة الأدبية يمكن أن تؤدي إلى سهولة نقل البرامج إلى بيئات متعددة، بل ويستشهد بتطبيق TeX كمثال. [ 11 ]

على النقيض من إنشاء الوثائق

كثيرًا ما يُساء فهم البرمجة الأدبية [ 12 ] ، حيث يُظن أنها تشير فقط إلى التوثيق المنسق المُنتج من ملف مشترك يحتوي على كلٍ من شفرة المصدر والتعليقات - وهو ما يُسمى بشكل صحيح بتوليد التوثيق - أو إلى التعليقات المطولة المُضمنة مع الشفرة. وهذا عكس البرمجة الأدبية تمامًا: فالشفرة الموثقة جيدًا أو التوثيق المُستخرج منها يتبع بنية الشفرة، مع تضمين التوثيق فيها؛ بينما في البرمجة الأدبية، تكون الشفرة مُضمنة في التوثيق، وتتبع الشفرة بنية التوثيق.

أدى هذا المفهوم الخاطئ إلى ادعاءات بأن أدوات استخراج التعليقات، مثل نظامي Perl Plain Old Documentation و Java Javadoc ، هي "أدوات برمجة أدبية". مع ذلك، ولأن هذه الأدوات لا تُطبّق "شبكة المفاهيم المجردة" الكامنة وراء نظام وحدات الماكرو للغة الطبيعية، ولا تُتيح إمكانية تغيير ترتيب شفرة المصدر من تسلسل مفروض آليًا إلى تسلسل يُناسب العقل البشري، فلا يُمكن تسميتها أدوات برمجة أدبية بالمعنى الذي قصده كنوت. [ 12 ] [ 13 ]

سير العمل

يتكون تطبيق البرمجة القائمة على القراءة والكتابة من خطوتين:

  1. النسج: إنشاء وثيقة شاملة حول البرنامج وصيانته.
  2. التشابك: توليد كود قابل للتنفيذ بواسطة الآلة

يتم النسج والتشابك على نفس المصدر بحيث يكونان متسقين مع بعضهما البعض.

مثال

يُعدّ تطبيق برنامج عدّ الكلمات القياسي في نظام يونكس باستخدام أسلوب البرمجة الأدبية مثالًا كلاسيكيًا على هذا النوع من البرمجة wc. وقدّم كنوت نسخةً منه بلغة CWEB في الفصل الثاني عشر من كتابه "البرمجة الأدبية ". ثم أُعيدت كتابة المثال نفسه لاحقًا لأداة البرمجة الأدبية noweb . [ 14 ] يُقدّم هذا المثال توضيحًا جيدًا للعناصر الأساسية للبرمجة الأدبية.

إنشاء وحدات الماكرو

يوضح المقتطف التالي من wcالبرنامج المكتوب [ 14 ] كيفية استخدام عبارات وصفية عشوائية بلغة طبيعية في برنامج مكتوب لإنشاء وحدات ماكرو، تعمل كـ"عوامل" جديدة في لغة البرمجة المكتوبة، وتخفي أجزاءً من التعليمات البرمجية أو وحدات ماكرو أخرى. تتكون صيغة الترميز من أقواس زاوية مزدوجة ( ) تشير إلى وحدات الماكرو. يشير الرمز ، في ملف noweb، إلى بداية جزء من التوثيق. يرمز الرمز إلى "الجذر"، وهو العقدة العليا التي ستبدأ أداة البرمجة المكتوبة بتوسيع شبكة وحدات الماكرو منها. في الواقع، يمكن كتابة التعليمات البرمجية المصدرية الموسعة من أي قسم أو قسم فرعي (أي جزء من التعليمات البرمجية يُشار إليه بـ ، مع علامة المساواة)، لذا يمكن أن يحتوي ملف برنامج مكتوب واحد على عدة ملفات تحتوي على التعليمات البرمجية المصدرية.<<...>>@<<*>><<name of the chunk>>=

يُستخدم الأمر wc لحساب عدد الأسطر والكلمات والأحرف في قائمة من الملفات . عدد الأسطر في الملف هو ........ / مزيد من التوضيحات /إليكم ، إذن ، نظرة عامة على الملف wc.c الذي يُعرّفه برنامج noweb المسمى wc.nw : << * >> = << ملفات الرأس المراد تضمينها >> << التعريفات >> << المتغيرات العامة >> << الدوال >> << البرنامج الرئيسي >> @يجب تضمين تعريفات الإدخال / الإخراج القياسية ، لأننا نريد إرسال مخرجات منسقة إلى stdout و stderr . << ملفات الرأس المراد تضمينها >> = #include < stdio.h > @

يمكن فك أجزاء البرنامج في أي مكان في ملف نص البرنامج المكتوب، وليس بالضرورة بالترتيب الذي تم تسلسلها به في الجزء المحيط، ولكن كما هو مطلوب من المنطق المنعكس في النص التوضيحي الذي يغلف البرنامج بأكمله.

البرنامج كشبكة ويب

لا تُعدّ وحدات الماكرو مُرادفةً لـ"أسماء الأقسام" في التوثيق القياسي. تُخفي وحدات الماكرو في البرمجة الأدبية الشيفرة الحقيقية، ويمكن استخدامها داخل أي مُعاملات لغة الآلة منخفضة المستوى، وغالبًا داخل مُعاملات منطقية مثل ifأو while. caseيُمكن ملاحظة ذلك في wcالبرنامج الأدبي التالي. [ 14 ]

كانت هذه الوحدة ، التي تقوم بالعد ، من أبسط الوحدات كتابةً . ننظر إلى كل حرف ونغير حالته إذا بدأ كلمة أو أنهى كلمة .<< مسح الملف >> = while ( 1 ) { << املأ المخزن المؤقت إذا كان فارغًا ؛ توقف عند نهاية الملف >> c = * ptr ++ ; if ( c > ' ' && c < 0177 ) { / * رموز ASCII المرئية */ if ( ! in_word ) { word_count ++ ; in_word = 1 ; } continue ; } if ( c == '\n' ) line_count ++ ; else if ( c != ' ' && c != '\t' ) continue ; in_word = 0 ; /* c هو سطر جديد أو مسافة أو علامة جدولة */ } @

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

ترتيب المنطق البشري، وليس ترتيب المترجم

في برنامج مكتوب بلغة الويب، بالإضافة إلى حرية ترتيب عرضها، يمكن توسيع الأجزاء الموجودة خلف وحدات الماكرو، بمجرد إدخالها باستخدام ، لاحقًا في أي مكان في الملف ببساطة عن طريق كتابة وإضافة المزيد من المحتوى إليها، كما يوضح المقتطف التالي ( تمت إضافتها بواسطة منسق المستند لسهولة القراءة، وليست موجودة في الكود). [ 14 ]<<...>>=<<name of the chunk>>=+

يجب تهيئة المجاميع الكلية إلى الصفر في بداية البرنامج. إذا جعلنا هذه المتغيرات محلية للدالة الرئيسية، فسيتعين علينا القيام بعملية التهيئة هذه. بشكل صريح؛ ومع ذلك، يتم تصفير المتغيرات العامة في لغة C تلقائيًا. (أو بالأحرى، "بشكل ثابت"). تم تصفيرها. ( هل فهمت؟) << المتغيرات العامة >> + = longtot_word_count,tot_line_count, tot_char_count; /* total number of words, lines, chars */ @

سجل تسلسل الأفكار

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

أمثلة رائعة

  • TeX و METAFONT ، لغتا كنوت لتنسيق النصوص ووصف الخطوط على التوالي. كُتبتا بلغة WEB ، وكانتا بمثابة إثباتات لمفهوم البرمجة الأدبية.
  • يصف كتاب " الرسم القائم على الفيزياء " [ 16 ] النظرية الرياضية الكامنة وراء نظام الرسم الواقعي الحديث وتطبيقه العملي. وقد فاز هذا الكتاب بجائزة الأوسكار.
  • يُعدّ فهم ملفات MP3 [ 17 ] تطبيقًا كاملاً لتدفقات بتات MPEG، وهو أيضًا دليل تعليمي ممتاز. (انظر أيضًا برامج روكرت المكتوبة المتعلقة بـ HINT [ 18 ] ).
  • Principia Softwarica، [ 19 ] نسخة مكتوبة من Plan 9 من مختبرات Bell .
  • قاعدة بيانات ستانفورد للرسوم البيانية، [ 20 ] 30 مقالة قصيرة من مقالات CWEB من كنوت تحدد منصة الحوسبة التوافقية، وتصف أحدث الخوارزميات وهياكل البيانات، وتقدم أمثلة على استخدامها.
  • MMIXware، [ 21 ] برنامج Knuth لدعم برمجة MMIX وتشغيل عمليات المحاكاة على بنى مختلفة.
  • C Interfaces and Implementations, [ 22 ] a demo of the titleular design systematic method in 24 examples.
  • يصف [ 23 ] مترجم C القابل لإعادة الاستهداف، وهو مترجم C صغير الحجم LCC .
  • هياكل البيانات والخوارزميات في لغة C++: مقدمة موجزة، [ 24 ] جولة تعليمية موجزة.
  • إنفورم ، لغة ونظام لكتابة القصص التفاعلية. يُعد إنفورم أحد أكبر البرامج القائمة على القراءة والكتابة حتى الآن، وهو مكتوب بلغة إنويب [ 25 ] (وهو بحد ذاته مثال رائع).
  • أكسيوم ، وهو نظام متطور من سكراتش باد، وهو نظام جبر حاسوبي طورته شركة آي بي إم. ويتولى تطويره حاليًا تيم دالي، أحد مطوري سكراتش باد. أكسيوم مكتوب بالكامل كبرنامج قائم على القراءة والكتابة. [ 26 ] [ 27 ]

ممارسات البرمجة القائمة على القراءة والكتابة

كانت بيئة WEB أول بيئة برمجة أدبية منشورة ، وقد قدمها كنوت عام 1981 لنظام TeX الخاص به لطباعة النصوص؛ وتستخدم لغة باسكال كلغة برمجة أساسية، وTeX لطباعة الوثائق. نُشرت شفرة TeX المصدرية الكاملة مع التعليقات في كتاب كنوت "TeX: البرنامج" ، المجلد الثاني من كتابه "الحاسوب والطباعة" المكون من خمسة مجلدات . كان كنوت قد استخدم نظام برمجة أدبية خاصًا يُسمى DOC منذ عام 1979. وقد استلهم أفكاره من بيير أرنول دي مارنيف . [ 28 ] أما برنامج CWEB المجاني ، الذي كتبه كنوت وسيلفيو ليفي، فهو نسخة معدلة من WEB للغتين C و C++ ، ويعمل على معظم أنظمة التشغيل، ويمكنه إنتاج وثائق TeX و PDF .

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

اسماللغات المدعومةمكتوب فيلغة الترميزوحدات الماكرو والطلبات الخاصةالخلاياتعليقات
الويبباسكالباسكالTeXنعملاأول بيئة برمجة أدبية منشورة.
سي ويبلغة C++ ولغة CجTeXنعملاهل تم تكييف WEB للغة C و C++ ؟
لا ويبأيC و AWK و IconLaTeX و TeX و HTML و troffنعملاتشتهر ببساطتها وبقدرتها على السماح بتنسيق النصوص في لغة HTML بدلاً من المرور عبر نظام TeX.
وضع org في Emacsأيإيماكس ليسبنص عادييتطلب ذلك استخدام Babel، [ 29 ] الذي يسمح بتضمين أجزاء من شفرة المصدر من لغات برمجة متعددة [ 30 ] ضمن مستند نصي واحد. يمكن لأجزاء الشفرة مشاركة البيانات فيما بينها، وعرض الصور بشكل مضمن، أو تحليلها إلى شفرة مصدر خالصة باستخدام صيغة مرجع noweb . [ 31 ]
كوفي سكريبتكوفي سكريبتCoffeeScript ، JavaScriptتخفيض السعريدعم CoffeeScript وضع "الكتابة الأدبية"، الذي يمكّن من تجميع البرامج من مستند مصدر مكتوب بلغة Markdown مع كتل برمجية ذات مسافات بادئة. [ 32 ]
أوراق عمل القيقبمابل (برنامج)XMLتُعدّ أوراق عمل Maple بيئة برمجة تفاعلية مستقلة عن المنصة، تجمع بين النصوص والرسومات مع التعليمات البرمجية المباشرة لإجراء العمليات الحسابية الرمزية. "أوراق عمل Maple" . MapleSoft.com . تاريخ الاطلاع: 30 مايو 2020 .
دفاتر وولفراملغة وولفراملغة وولفرامتُعدّ دفاتر Wolfram طريقة برمجة قائمة على القراءة والكتابة، مستقلة عن المنصة، تجمع بين النصوص والرسومات مع التعليمات البرمجية الحية. [ 33 ] [ 34 ]
Jupyter Notebook ، المعروف سابقًا باسم IPython Notebookبايثون وأي برنامج آخر مزود بنواة Jupyterمواصفات تنسيق JSON لملفات ipynbلانعميعمل بتنسيق دفاتر الملاحظات، التي تجمع بين العناوين والنصوص (بما في ذلك LaTeX) والرسوم البيانية وما إلى ذلك مع الكود المكتوب.
nbdevبايثون ودفتر جوبيترnbdevهي مكتبة تسمح بتطوير مكتبة بايثون في دفاتر Jupyter، حيث يتم وضع جميع التعليمات البرمجية والاختبارات والوثائق في مكان واحد.
جولياPluto.jl هي بيئة دفتر ملاحظات تفاعلية تسمح بالترتيب المخصص. لكنها لا تدعم وحدات الماكرو الشبيهة بوحدات الويب.نعميدعم نمط تطوير iJulia الذي استُلهم من iPython.
أغدايدعم شكلاً محدوداً من البرمجة القائمة على القراءة والكتابة بشكل افتراضي. [ 35 ]
سويفRملف PDF[ 36 ] [ 37 ]
KnitrRLaTeX و PDF و LyX و HTML و Markdown و AsciiDoc و reStructuredText[ 38 ] [ 39 ]
متعلمأيدتخفيض السعرنعملايدعم معادلات TeX. متوافق مع Vim.

ومن الأدوات المفيدة الأخرى ما يلي:

  • محرر النصوص ليو هو محرر تخطيطي يدعم ترميز noweb وCWEB الاختياري. يمزج مطور ليو بين منهجين مختلفين: أولًا، ليو محرر تخطيطي يُسهّل إدارة النصوص الكبيرة؛ ثانيًا، يدمج ليو بعض أفكار البرمجة الأدبية، والتي لا يُمكن تطبيقها بشكلها النقي (أي بالطريقة التي تستخدمها أداة Knuth Web أو أدوات مثل "noweb") إلا بقدر من الإبداع واستخدام المحرر بطريقة لم يتصورها مطوره تمامًا (في عُقد @root مُعدّلة). مع ذلك، فإن هذا الامتداد وغيره (عُقد @file) يجعل البرمجة التخطيطية وإدارة النصوص ناجحة وسهلة، وتُشبه البرمجة الأدبية في بعض النواحي. [ 40 ]
  • تدعم لغة هاسكل البرمجة شبه الأدبية بشكلٍ أصيل. يدعم المترجم والمفسر امتدادين لأسماء الملفات: .haskell و .haskell.com ؛ حيث يشير الأخير إلى هاسكل الأدبية. يمكن أن تكون النصوص الأدبية نصوصًا مصدرية كاملة بتنسيق LaTeX، وفي الوقت نفسه يمكن تجميعها دون أي تغييرات، لأن المفسر يقوم فقط بتجميع النص في بيئة برمجية، على سبيل المثال: .hs.lhs
    % هنا نص يصف الدالة: \begin { code } fact 0 = 1 fact ( n + 1 ) = ( n + 1 ) * fact n \end { code } هنا المزيد من النصوص 

    يمكن أيضًا وضع علامات على الكود بأسلوب ريتشارد بيرد، بدءًا من كل سطر برمز أكبر من ومسافة، مع وضع أسطر فارغة قبل وبعد جزء الكود.

    listingsتوفر حزمة LaTeX lstlistingبيئةً يمكن استخدامها لتزيين شفرة المصدر. ويمكن استخدامها لتعريف codeبيئة لاستخدامها داخل لغة Haskell لطباعة الرموز بالطريقة التالية:

    \newenvironment { code }{ \lstlistings [language=Haskell] }{ \endlstlistings }\begin { code } comp :: ( beta -> gamma ) -> ( alpha -> beta ) -> ( alpha -> gamma ) ( g ` comp ` f ) x = g ( f x ) \end { code }

    والتي يمكن تهيئتها لإنتاج:

    جoمص::(βγ)(αβ)(αγ)(زكمبيوترو)x=ز(وx){\displaystyle {\begin{aligned}&comp::(\beta \to \gamma )\to (\alpha \to \beta )\to (\alpha \to \gamma )\\&(g\operatorname {comp} f)x=g(fx)\end{aligned}}}
    على الرغم من أن الحزمة لا توفر أي وسيلة لتنظيم أجزاء التعليمات البرمجية، إلا أنه يمكن تقسيم التعليمات البرمجية المصدرية لـ LaTeX إلى ملفات مختلفة. [ 41 ]
  • استخدم نظام البرمجة الأدبية Web 68 لغة ALGOL 68 كلغة أساسية، على الرغم من عدم وجود ما يفرض هذا الاستخدام في معالج ما قبل المعالجة. [ 42 ]
  • تتيح آلية التخصيص في مبادرة ترميز النصوص (TEI)، التي تمكّن من تقييد مخطط TEI أو تعديله أو توسيعه، دمجَ الوثائق النثرية مع أجزاء من مواصفات المخطط في صيغة " وثيقة واحدة شاملة" . ومن هذه الوثائق النثرية، يمكن إنشاء المخططات ومسارات معالجة النماذج، ويُستشهد بنموذج البرمجة الأدبية لكنوت كمصدر إلهام لهذه الطريقة في العمل. [ 43 ]

انظر أيضاً

مراجع

  1. 1 2 3 v w x y z كنوت، دونالد إي. (1984). "البرمجة الأدبية" (ملف PDF) . مجلة الحاسوب . 27 (2). الجمعية البريطانية للحاسوب : 97-111 . doi : 10.1093/comjnl/27.2.97 . تاريخ الاسترجاع: 4 يناير 2009 .
  2. شولت، إريك (2012). "بيئة حوسبة متعددة اللغات للبرمجة القائمة على الأدبيات والبحوث القابلة للتكرار" (ملف PDF) . مجلة البرمجيات الإحصائية . 46 (3). doi : 10.18637/jss.v046.i03 . مؤرشف (ملف PDF) من الأصل في 9 نوفمبر 2014. تم الاطلاع عليه في 30 مايو 2020 .
  3. كيري، ماري بيث (أبريل 2018). "القصة في دفتر الملاحظات: علم البيانات الاستكشافي باستخدام أداة برمجة قائمة على الأدبيات". CHI '18: وقائع مؤتمر CHI لعام 2018 حول العوامل البشرية في أنظمة الحوسبة . رابطة آلات الحوسبة . الصفحات 1-11 . doi : 10.1145/3173574.3173748 . 
  4. كنتُ أظن أن منهجية البرمجة من أعلى إلى أسفل ومن أسفل إلى أعلى متناقضة: إحداهما أنسب لعرض البرامج والأخرى أنسب لإنشائها. لكن بعد اكتساب الخبرة في برمجة الويب، أدركتُ أنه لا داعي للاختيار بينهما بشكل نهائي، لأن البرنامج يُنظر إليه على أنه شبكة لا شجرة. صحيح أن هناك بنية هرمية، لكن الأهم في البرنامج هو علاقاته البنيوية. يتكون البرنامج المعقد من أجزاء بسيطة وعلاقات بسيطة بينها؛ ومهمة المبرمج هي توضيح هذه الأجزاء وهذه العلاقات، بأي ترتيب يُسهّل فهمها، وليس بترتيب مُحدد بشكل صارم كما في البرمجة من أعلى إلى أسفل أو من أسفل إلى أعلى.

    دونالد إي. كنوث ، البرمجة الأدبية [1]

  5. إذا تذكرنا أن الإصدار الأول من الأداة كان يُسمى WEB، فإن الإشارة الأدبية الطريفة التي أخفاها كنوت في هذه الأسماء تصبح واضحة: "يا له من نسيج متشابك ننسجه عندما نبدأ في ممارسة الخداع" - السير والتر سكوت ، في النشيد السادس، المقطع 17 من مارميون (1808)، وهي قصيدة ملحمية عن معركة فلودين عام 1513. - ظهر الاقتباس الفعلي كإهداء في مقال نُشر في مايو 1986 بقلم جون بنتلي ودونالد كنوت في إحدى أعمدة "لآلئ البرمجة" الكلاسيكية في مجلة اتصالات ACM ، المجلد 29، العدد 5، صفحة 365.
  6. "البرمجة الأدبية" (ملف PDF) . Archive.ComputerHistory.org . تم الاطلاع عليه في 3 يونيو 2019 .
  7. يُسمح لوحدات الماكرو في WEB باحتواء مُعامل واحد على الأكثر. وقد فعلتُ ذلك تبسيطًا للأمر، إذ لاحظتُ أن معظم التطبيقات التي تتطلب مُعاملات متعددة يُمكن اختصارها إلى حالة المُعامل الواحد. على سبيل المثال، لنفترض أنك تُريد تعريف شيء مثل [تم حذف المثال]  ... بعبارة أخرى، يُمكن أن يكون اسم ماكرو مُعاملًا لماكرو آخر.

    دونالد إي. كنوث ، البرمجة الأدبية [1]

  8. 1 2 كنوت، دونالد إي .؛ بينستوك، أندرو (25 أبريل 2008). "مقابلة مع دونالد كنوت" . تم الاطلاع عليه في 4 يناير 2009. ومع ذلك ، بالنسبة لي، فإن البرمجة الأدبية هي بالتأكيد أهم ما نتج عن مشروع TeX . لم تُمكنني فقط من كتابة البرامج وصيانتها بشكل أسرع وأكثر موثوقية من أي وقت مضى، وكانت أحد أعظم مصادر سعادتي منذ ثمانينيات القرن الماضي، بل كانت في الواقع لا غنى عنها في بعض الأحيان. بعض برامجي الرئيسية، مثل برنامج المحاكاة الفائق MMIX ، لم يكن من الممكن كتابتها بأي منهجية أخرى سمعت بها على الإطلاق. كان التعقيد ببساطة أكبر من أن يستوعبه عقلي المحدود؛ بدون البرمجة الأدبية، كان المشروع بأكمله سيفشل فشلاً ذريعاً. ... البرمجة الأدبية هي ما تحتاجه للارتقاء فوق مستوى الإنجاز العادي. 
  9. من الأمور الأخرى التي فاجأتني أثناء استخدام WEB أن لغات البرمجة التقليدية كانت تدفعني لكتابة برامج رديئة، رغم أنني لم أكن أدرك ذلك. كانت فكرتي الأصلية أن WEB ستكون مجرد أداة للتوثيق، لكنني وجدت في الواقع أن برامجي المكتوبة بلغة WEB كانت أفضل من البرامج التي كنت أكتبها بلغات أخرى.

    دونالد إي. كنوث ، البرمجة الأدبية [1]

  10. Thus the WEB language allows a person to express programs in a "stream of consciousness" order. TANGLE is able to scramble everything up into the arrangement that a PASCAL compiler demands. This feature of WEB is perhaps its greatest asset; it makes a WEB-written program much more readable than the same program written purely in PASCAL, even if the latter program is well commented. And the fact that there's no need to be hung up on the question of top-down versus bottom-up, since a programmer can now view a large program as a web, to be explored in a psychologically correct order is perhaps the greatest lesson I have learned from my recent experiences.

    Donald E. Knuth, Literate Programming[1]

  11. ""Oral History of Donald Knuth"- an Interview with Ed Feigenbaum"(PDF). Archive.ComputerHistory.org. Retrieved December 7, 2018.
  12. 12Dominus, Mark-Jason (March 20, 2000). "POD is not Literate Programming". Perl.com. Archived from the original on January 2, 2009.
  13. I chose the name WEB partly because it was one of the few three-letter words of English that hadn't already been applied to computers. But as time went on, I've become extremely pleased with the name, because I think that a complex piece of software is, indeed, best regarded as a web that has been delicately pieced together from simple materials. We understand a complicated system by understanding its simple parts, and by understanding the simple relations between those parts and their immediate neighbors. If we express a program as a web of ideas, we can emphasize its structural properties in a natural and satisfying way.

    Donald E. Knuth, Literate Programming[1]

  14. 1234Ramsey, Norman (May 13, 2008). "An Example of noweb". Retrieved January 4, 2009.
  15. The game, also known as ADVENT, was originally written by Crowther in about 700 lines of FORTRAN code; Knuth recast it into the WEB idiom. It is available at literateprogramming.com or on Knuth's websiteArchived August 20, 2008, at the Wayback Machine.
  16. "Physically Based Rendering: From Theory to Implementation". pbr-book.org. Retrieved July 3, 2026.
  17. "Homepage of Understanding MP3". hint.userweb.mwn.de. Retrieved July 3, 2026.
  18. ^ "الأستاذ الدكتور مارتن روكرت - الصفحة الرئيسية" . تلميح.userweb.mwn.de . تم الاسترجاع في 3 يوليو، 2026 .
  19. "مبادئ البرمجيات" . principia-softwarica.org . تم الاطلاع عليه في 3 يوليو 2026 .
  20. "Knuth: The Stanford GraphBase" . cs.stanford.edu . تم الاطلاع عليه في 3 يوليو 2026 .
  21. "الصفحة الرئيسية لـ MMIX" . mmix.cs.hm.edu . تم الاطلاع عليه في 3 يوليو 2026 .
  22. "واجهات وتطبيقات لغة C" . drh.github.io . تم ​​الاطلاع عليه في 3 يوليو 2026 .
  23. "lcc، مُصرّف قابل لإعادة الاستهداف للغة ANSI C" . drh.github.io . تم ​​الاطلاع عليه في 3 يوليو 2026 .
  24. "هياكل البيانات والخوارزميات : دليل مبسط" . Amazon.com . تم الاطلاع عليه في 4 يوليو 2026 . 
  25. "مرحباً بكم في مصدر الإنترنت" .
  26. بيج، ويليام س. (سبتمبر 2007). "أكسيوم: نظام جبر حاسوبي مفتوح المصدر" . مجلة ACM للاتصالات في الجبر الحاسوبي . 41 (3): 114. doi : 10.1145/1358190.1358206 . ISSN 1932-2240 . 
  27. جينكس، ريتشارد د.؛ سوتور، روبرت س. (1992). أكسيوم: نظام الحوسبة العلمية . نيويورك : داونرز غروف، إلينوي، الولايات المتحدة الأمريكية: سبرينغر-فيرلاغ؛ تسويق وتوزيع مجموعة الخوارزميات العددية. ISBN  978-0-387-97855-0.
  28. ^ دي مارنيف، بيير أرنول (ديسمبر 1973). برمجة حولون – مسح (تقرير). جامعة لييج ، خدمة المعلومات. ص. 135 عبر جيثب . 
  29. "مقدمة إلى بابل" . Orgmode.org . تم الاطلاع عليه في 4 يوليو 2026 .
  30. "لغات بابل: إعادة توجيه" . OrgMode.org .
  31. "مقدمة إلى بابل" . Orgmode.org . تم الاطلاع عليه في 4 يوليو 2026 .
  32. أشكيناس، جيريمي. "Literate CoffeeScript" . تم الاطلاع عليه بتاريخ 13 نوفمبر 2014 .
  33. معالم بارزة في علوم الحاسوب وتكنولوجيا المعلومات بقلم إدوين د. رايلي، ص 157.
  34. "دفاتر وولفرام" . Wolfram.com . تم الاطلاع عليه بتاريخ 28 نوفمبر 2018 .
  35. ^ "أجدا القراءة والكتابة" . أجدا ويكي . تم الاسترجاع في 26 مارس 2017 .
  36. ليش، فريدريش (2002). "سويف، الجزء الأول: دمج لغة R و LaTeX: مقدمة موجزة لتنسيق ملف سويف ووظائف R المقابلة" (ملف PDF) . أخبار R. 2 ( 3): 28-31 . تم الاطلاع عليه بتاريخ 22 يناير 2012 .
  37. بينيدا-كرش، ماريو (17 يناير 2011). "متعة سويف - دليل المبتدئين للبحث القابل للتكرار باستخدام سويف" (ملف PDF) . تم الاطلاع عليه في 22 يناير 2012 .
  38. شي، ييهوي (2015). المستندات الديناميكية باستخدام لغة R و knitr، الطبعة الثانية . تشابمان آند هول/سي آر سي. رقم ISBN 9781498716963.
  39. Xie, Yihui. "knitr: أداة عامة الأغراض لإنشاء التقارير الديناميكية في R" (PDF) عبر GitHub .
  40. ريم، إدوارد ك. (2 سبتمبر 2008). "الصفحة الرئيسية لليو" . تم الاطلاع عليه في 3 أبريل 2015 .
  41. راجع دليل القوائم للاطلاع على نظرة عامة.
  42. ماونتباتن، سيان. "الويب 68: البرمجة الأدبية باستخدام ALGOL 68" . مؤرشف من الأصل في 20 يناير 2013. تم الاطلاع عليه في 1 يناير 2013 .
  43. "إرشادات مبادرة تقييم التكنولوجيا" . TEI-C.org . اتحاد مبادرة تقييم التكنولوجيا. مؤرشف من الأصل بتاريخ 22 أغسطس 2018. تم الاطلاع عليه بتاريخ 23 أغسطس 2018 .

للمزيد من القراءة