فورث (لغة برمجة)
فورث هي لغة برمجة موجهة نحو المكدس وبيئة تطوير متكاملة تفاعلية، صممها تشارلز إتش. "تشاك" مور ، واستخدمها المبرمجون لأول مرة عام 1970. على الرغم من أنها ليست اختصارًا ، إلا أن اسم اللغة في سنواتها الأولى كان يُكتب غالبًا بأحرف كبيرة فقط ( FORTH) . أصبحت تطبيقات FORTH-79 وFORTH-83، التي لم يكتبها مور، معايير فعلية ، ونُشر معيار تقني رسمي للغة عام 1994 باسم ANS Forth. ظهرت مجموعة واسعة من مشتقات فورث قبل وبعد ANS Forth. يتم صيانة تطبيق Gforth المجاني والمفتوح المصدر بشكل فعال، وكذلك العديد من الأنظمة المدعومة تجاريًا .
تجمع لغة فورث عادةً بين مترجم وواجهة أوامر مدمجة، حيث يتفاعل المستخدم عبر إجراءات فرعية تسمى الكلمات . [ أ ]
يمكن تعريف الكلمات واختبارها وإعادة تعريفها وتصحيح أخطائها دون الحاجة إلى إعادة تجميع البرنامج أو إعادة تشغيله بالكامل. تُعرَّف جميع العناصر النحوية، بما في ذلك المتغيرات والمعاملات وتدفق التحكم، ككلمات. يُستخدم مكدس لتمرير المعاملات بين الكلمات، مما يؤدي إلى نمط تدوين بولندي معكوس .
طوال معظم تاريخ لغة فورث، كانت التقنية القياسية هي الترجمة إلى كود متعدد الخيوط ، والذي يمكن تفسيره بشكل أسرع من الكود الوسيط . من بين المزايا المبكرة للغة فورث صغر حجمها: إذ كان بالإمكان استيعاب بيئة تطوير كاملة - بما في ذلك المترجم والمحرر وبرامج المستخدم - في ذاكرة نظام 8 بت أو نظام محدود مماثل. أما الآن، وبعد زوال قيود المساحة، توجد تطبيقات حديثة تُولّد كود آلة مُحسَّنًا مثل مُترجمات اللغات الأخرى.
أدت سهولة إنشاء نظام فورث أساسي إلى ظهور العديد من النسخ الشخصية والخاصة، مثل نسخة فورث المخصصة المستخدمة في تنفيذ لعبة الفيديو الأكثر مبيعًا عام 1986، ستار فلايت، من إنتاج شركة إلكترونيك آرتس . [ 3 ] تُستخدم لغة فورث في برنامج الإقلاع Open Firmware ، وفي تطبيقات رحلات الفضاء [ 4 ] مثل مركبة فيلاي الفضائية ، [ 5 ] [ 6 ] وفي أنظمة مضمنة أخرى تتضمن التفاعل مع الأجهزة.
ابتداءً من أوائل ثمانينيات القرن العشرين، طوّر مور سلسلة من المعالجات الدقيقة لتنفيذ التعليمات البرمجية المترجمة الشبيهة بلغة فورث مباشرةً، وجرّب لغات أصغر حجماً مبنية على مفاهيم فورث، بما في ذلك cmForth و colorForth . وقد صُممت معظم هذه اللغات لدعم مشاريع مور الخاصة، مثل تصميم الرقائق الإلكترونية.
الاستخدامات
تتمتع لغة فورث بمكانة مميزة في التطبيقات الفلكية والفضائية [ 7 ]، فضلاً عن تاريخها في الأنظمة المدمجة . تحتوي ذاكرة القراءة فقط ( ROM) الخاصة بنظام التشغيل المفتوح (Open Firmware) المستخدمة من قبل شركات Apple و IBM و Sun و OLPC XO-1 على بيئة فورث.
كثيراً ما استُخدمت لغة فورث لتشغيل أجهزة جديدة. كانت فورث أول برنامج مقيم على شريحة إنتل 8086 الجديدة في عام 1978، وكان ماكفورث أول نظام تطوير مقيم لجهاز ماكنتوش 128K في عام 1984. [ 8 ]
في عام 1982 تقريبًا، استخدمت شركة أتاري عرضًا تجريبيًا متطورًا ذاتي التشغيل مكتوبًا بلغة فورث لعرض إمكانيات حواسيب أتاري ذات 8 بت في المتاجر الكبرى. [ 9 ] نشرت شركة إلكترونيك آرتس العديد من ألعاب الفيديو في ثمانينيات القرن العشرين مكتوبة بلغة فورث، بما في ذلك Worms? (1983)، [ 10 ] وAdventure Construction Set (1984)، [ 11 ] وAmnesia (1986)، [ 12 ] و Starflight (1986)، [ 3 ] و Lords of Conquest (1986). طُوّرت لعبة برمجة الروبوتات ChipWits (1984) بلغة MacFORTH لجهاز ماكنتوش 128K ، [ 13 ] بينما كُتبت نسخة كومودور 64 باستخدام SuperForth 64. [ 14 ] نُفّذ النموذج الأولي للعبة Boulder Dash (1984) بلغة فورث قبل إعادة كتابته بلغة التجميع 6502. [ 15 ]
تمت كتابة برنامج RapidFile (1986) من شركة Ashton-Tate ، وهو برنامج قاعدة بيانات ملفات مسطحة، وبرنامج VP-Planner [ 16 ] من شركة Paperback Software International (1983)، وهو برنامج جداول بيانات ينافس برنامج Lotus 1-2-3 ، بلغة Forth.
يستخدم جهاز Canon Cat (1987) لغة Forth لبرمجة نظامه.
أنتجت شركة روكويل أجهزة كمبيوتر صغيرة أحادية الشريحة مزودة بنوى فورث مدمجة: R65F11 و R65F12.
كان برنامج ASYST عبارة عن امتداد للغة فورث لقياس والتحكم على أجهزة الكمبيوتر الشخصية. [ 17 ]
تاريخ
تطورت لغة فورث من نظام البرمجة الشخصي لتشارلز إتش. مور ، الذي كان قيد التطوير المستمر منذ عام 1968. [ 8 ] [ 18 ] تعرف مبرمجون آخرون على لغة فورث لأول مرة في أوائل سبعينيات القرن العشرين، بدءًا من إليزابيث راذر في المرصد الوطني لعلم الفلك الراديوي بالولايات المتحدة (NRAO). [ 8 ] بعد عملهما في المرصد، أسس تشارلز مور وإليزابيث راذر شركة FORTH, Inc. في عام 1973، حيث قاما بتحسين أنظمة فورث ونقلها إلى عشرات المنصات الأخرى خلال العقد التالي.
رأى مور لغة فورث كخليفة للغات البرمجة من الجيل الثالث التي تعتمد على التجميع والربط والتنفيذ ، أو كبرمجيات لأجهزة "الجيل الرابع". ويتذكر كيف تم صياغة الاسم: [ 19 ]
في شركة موهاسكو (في أواخر الستينيات)، عملتُ أيضًا بشكل مباشر على جهاز IBM 1130 متصل بشاشة عرض رسومية IBM 2250. كان جهاز 1130 حاسوبًا بالغ الأهمية، إذ احتوى على أول قرص خرطوشة، بالإضافة إلى قارئ بطاقات، ومثقب بطاقات (كنسخة احتياطية للقرص)، وآلة كاتبة. أتاح جهاز 1130 للمبرمج، ولأول مرة، التحكم الكامل والتفاعلي في الحاسوب.
ظهرت لغة FORTH لأول مرة على جهاز 1130. وكان اسمها FORTH، وهو اختصار من خمسة أحرف لكلمة FOURTH، التي تعني لغة برمجة من الجيل الرابع. ربما تتذكرون ذلك اليوم الذي شهد ظهور حواسيب الجيل الثالث، وكنتُ أنوي الانتقال إلى الجيل التالي. ولكن لأن FORTH كانت تعمل على جهاز 1130 (الذي كان يسمح فقط بمعرفات من خمسة أحرف)، فقد تم اختصار الاسم.
طُوِّرت لغة البرمجة microFORTH من قِبل شركة FORTH، Inc. للمعالجات الدقيقة Intel 8080 و Motorola 6800 و Zilog Z80 و RCA 1802 ، بدءًا من عام 1976. لاحقًا، استخدم الهواة لغة microFORTH لإنشاء أنظمة Forth لبنى معمارية أخرى، مثل 6502 في عام 1978. تأسست مجموعة Forth Interest Group في عام 1978. [ 20 ] وقامت المجموعة بالترويج لتوزيع نسختها الخاصة من اللغة، FIG-Forth، لمعظم أنواع أجهزة الكمبيوتر المنزلية.
كانت لغة فورث شائعة في أوائل ثمانينيات القرن العشرين، [ 21 ] نظرًا لملاءمتها لذاكرة الحواسيب الصغيرة المحدودة . وقد أدى سهولة تطبيق اللغة إلى ظهور العديد من التطبيقات. [ 22 ] يحتوي نظام التشغيل المُثبَّت في ذاكرة القراءة فقط (ROM) لجهاز الكمبيوتر المنزلي جوبيتر إيس على لغة فورث . أما إنسوفت غرافورث فهي نسخة من فورث مزودة بامتدادات رسومية لجهاز أبل 2. [ 23 ]
تم تقنين الممارسات الشائعة في المعيارين الفعليين FORTH-79 [ 24 ] وFORTH-83 [ 25 ] في عامي 1979 و1983 على التوالي. وقد وحدت ANSI هذين المعيارين في عام 1994، ويُشار إليهما عادةً باسم ANS Forth. [ 26 ] [ 27 ]
اعتبارًا من عام 2018، تم استعادة مصدر الإصدار الأصلي من لغة FORTH 1130، ويجري الآن تحديثه ليعمل على نظام 1130 مستعاد أو محاكى. [ 28 ]
ملخص
تُركز لغة فورث على استخدام دوال صغيرة وبسيطة تُسمى الكلمات . تستدعي الكلمات الخاصة بالمهام الكبيرة العديد من الكلمات الأصغر، التي تُنجز كل منها مهمة فرعية مُحددة. يُشكل برنامج فورث الكبير تسلسلًا هرميًا من الكلمات. هذه الكلمات، كونها وحدات مُستقلة تتواصل ضمنيًا عبر آلية مكدس، يُمكن تصميم نماذجها الأولية وبناؤها واختبارها بشكل مُستقل. قد يُشبه أعلى مستوى من كود فورث وصفًا باللغة الإنجليزية للتطبيق. تُوصف فورث بأنها لغة تطبيقات شاملة : لغة يُمكن استخدامها لإنشاء لغات مُوجهة نحو حل المشكلات . [ 29 ]
تعتمد لغة فورث على استخدام ضمني لمكدس البيانات وصيغة الترميز البولندي العكسي (RPN) الشائعة في آلات حاسبة هيوليت-باكارد . في صيغة RPN، يُوضع المعامل بعد معاملاته، على عكس صيغة الترميز الوسطي الأكثر شيوعًا حيث يُوضع المعامل بين معاملاته. تُسهّل صيغة الترميز اللاحقة تحليل اللغة وتوسيعها؛ وتجعل مرونة فورث استخدام قواعد BNF الثابتة غير مناسب، كما أنها لا تمتلك مُصرّفًا متكاملًا. يتطلب توسيع المُصرّف كتابة كلمة جديدة فقط، بدلًا من تعديل القواعد وتغيير التنفيذ الأساسي.
باستخدام RPN، يمكن حساب قيمة التعبير الحسابي (25 × 10) + 50 بالطريقة التالية:
25 10 * 50 + CR . 300 موافق
أولاً، يتم وضع الرقمين 25 و 10 على الكومة.

تأخذ الكلمة *الرقمين العلويين من المجموعة، وتضربهما، ثم تعيد الناتج إلى المجموعة.

ثم يتم وضع الرقم 50 على الكومة.

تأخذ الكلمة +أول رقمين من المكدس، وتجمعهما، ثم تعيد المجموع إلى المكدس. CR( يبدأ إرجاع المؤشر ) الإخراج في سطر جديد. وأخيرًا، .تطبع النتيجة. بما أن كل شيء قد اكتمل بنجاح، يطبع نظام فورث OK. [ 30 ]
حتى السمات الهيكلية للغة فورث تعتمد على التراص. على سبيل المثال:
: FLOOR5 ( n -- n' ) DUP 6 < IF DROP 5 ELSE 1 - THEN ;تشير النقطتان الرأسيتان إلى بداية تعريف جديد، وفي هذه الحالة كلمة جديدة (مرة أخرى، الكلمة هي المصطلح المستخدم للإشارة إلى روتين فرعي) تُسمى FLOOR5. النص الموجود بين قوسين هو تعليق، يُشير إلى أن هذه الكلمة تتوقع رقمًا على المكدس وستُعيد رقمًا قد يكون قد تغير (على المكدس).
يستخدم الروتين الفرعي الأوامر التالية: DUPيكرر الرقم الموجود على المكدس؛ 6يدفع الرقم 6 أعلى المكدس؛ <يقارن الرقمين العلويين على المكدس (6 والمدخل DUPed)، ويستبدلهما بقيمة صحيحة أو خاطئة؛ IFيأخذ قيمة صحيحة أو خاطئة ويختار تنفيذ الأوامر التي تليها مباشرة أو تخطيها إلى ELSE؛ DROPيتجاهل القيمة الموجودة على المكدس؛ 5يدفع الرقم 5 أعلى المكدس؛ THENوينهي الشرط.
هذه FLOOR5الكلمة تعادل هذه الدالة المكتوبة بلغة البرمجة C باستخدام عامل الشرط '?:'
دالة `floor5` ( عدد صحيح `v` ) { إرجاع ( v < 6 ) ؟ 5 : ( v - 1 ); }تُكتب هذه الدالة بشكل أكثر إيجازًا على النحو التالي:
: الطابق الخامس ( ن -- ن' ) 1- 5 الحد الأقصى ؛يمكن تشغيل هذا على النحو التالي:
الطابق الأول، 5 غرف نوم، 5 غرف نوم ، تمام . الطابق الثامن، 5 غرف نوم، 7 غرف نوم، تمام .أولاً، يُضاف رقم (1 أو 8) إلى المكدس، ثم FLOOR5تُستدعى دالةٌ تُزيل الرقم وتُضيف النتيجة. CRثم يُنقل الناتج إلى سطر جديد (هذا فقط لتسهيل القراءة). وأخيراً، تُستدعى دالةٌ أخرى لإزالة .النتيجة وطباعتها.
مرافق
لا توجد مواصفات رسمية لقواعد لغة فورث ، بل تُعرَّف بخوارزمية بسيطة. يقرأ المفسر سطرًا من المدخلات من جهاز إدخال المستخدم، ثم يُحلله بحثًا عن كلمة باستخدام المسافات كفاصل ؛ وتتعرف بعض الأنظمة على أحرف المسافات البيضاء الإضافية . عندما يعثر المفسر على كلمة، يبحث عنها في القاموس . إذا وُجدت الكلمة، يُنفذ المفسر الكود المرتبط بها، ثم يعود لتحليل باقي دفق الإدخال. إذا لم تُعثر على الكلمة، يُفترض أنها رقم، وتُجرى محاولة لتحويلها إلى رقم وإضافتها إلى المكدس؛ إذا نجحت المحاولة، يواصل المفسر تحليل دفق الإدخال. أما إذا فشلت كل من عملية البحث وتحويل الرقم، يطبع المفسر الكلمة متبوعة برسالة خطأ تُشير إلى عدم التعرف على الكلمة، ثم يُفرغ دفق الإدخال، وينتظر إدخالًا جديدًا من المستخدم. [ 31 ]
يبدأ تعريف الكلمة الجديدة بكلمة :(نقطتان رأسيتان) وينتهي بكلمة ;(فاصلة منقوطة). على سبيل المثال،
: X DUP 1+ . . ;سيقوم بتجميع الكلمة X، ويجعل الاسم قابلاً للبحث في القاموس. عند تنفيذه عن طريق الكتابة 10 Xفي وحدة التحكم، سيتم طباعة 11 10. [ 32 ]
تتضمن معظم أنظمة فورث مُجمِّعًا لكتابة الكلمات باستخدام إمكانيات المعالج. غالبًا ما تستخدم مُجمِّعات فورث صيغةً بولنديةً معكوسةً، حيث تسبق مُعاملات التعليمة التعليمة نفسها. يقوم مُجمِّع النموذج البولندي المعكوس بتحضير المُعاملات على المكدس، ثم يقوم الاختصار بنسخ التعليمة كاملةً إلى الذاكرة كخطوة أخيرة. مُجمِّع فورث هو بطبيعته مُجمِّع ماكرو، مما يُسهِّل تعريف اسم بديل للسجلات وفقًا لدورها في نظام فورث: على سبيل المثال، "dsp" للسجل المُستخدم كمؤشر لمكدس البيانات. [ 33 ]
نظام التشغيل والملفات وتعدد المهام
تعمل معظم أنظمة فورث ضمن نظام تشغيل مضيف مثل مايكروسوفت ويندوز أو لينكس أو أحد إصدارات يونكس ، وتستخدم نظام ملفات نظام التشغيل المضيف لملفات المصدر والبيانات؛ ويصف معيار فورث الصادر عن الجمعية الفرنسية للأنظمة (ANS) المصطلحات المستخدمة في عمليات الإدخال والإخراج. تستخدم جميع أنظمة فورث الحديثة ملفات نصية عادية للمصدر، حتى وإن كانت مضمنة. يحصل النظام المضمن المزود بمترجم داخلي على مصدره عبر منفذ تسلسلي.
لا تستخدم أنظمة فورث الكلاسيكية تقليديًا نظام تشغيل ولا نظام ملفات . فبدلًا من تخزين الشفرة في ملفات، تُخزَّن الشفرة المصدرية في كتل قرصية تُكتب إلى عناوين قرصية فعلية. BLOCKتُستخدم كلمة "الكتلة" لترجمة رقم كتلة بحجم 1 كيلوبايت من مساحة القرص إلى عنوان مخزن مؤقت يحتوي على البيانات، والذي يُدار تلقائيًا بواسطة نظام فورث. أصبح استخدام الكتل نادرًا منذ منتصف التسعينيات. في النظام المُستضاف، تُخصَّص هذه الكتل أيضًا في ملف عادي على أي حال.
تتوفر عادةً ميزة تعدد المهام ، وأكثرها شيوعًا جدولة التناوب التعاونية (على الرغم من أن معيار ANS Forth لا يغطي كلمات تعدد المهام ودعمها). تُستخدم هذه الكلمة لحفظ سياق تنفيذ المهمة الحالية، وتحديد موقع المهمة التالية، واستعادة سياق تنفيذها. لكل مهمة مكدساتها الخاصة، ونسخ خاصة من بعض متغيرات التحكم، ومنطقة مؤقتة. يُعد تبديل المهام بسيطًا وفعالًا؛ ونتيجةً لذلك، تتوفر ميزة تعدد المهام في لغة Forth حتى على وحدات التحكم الدقيقة البسيطة جدًا ، مثل Intel 8051 و Atmel AVR و TI MSP430 . [ 34 ]PAUSE
تشمل الميزات غير القياسية الأخرى آلية لإرسال استدعاءات إلى نظام التشغيل المضيف أو أنظمة النوافذ ، ويُوفر العديد منها امتدادات تستخدم جدولة المهام التي يُوفرها نظام التشغيل. وعادةً ما تحتوي هذه الميزات على مجموعة أكبر ومختلفة من المصطلحات عن مصطلحات لغة فورث المستقلة PAUSEلإنشاء المهام وتعليقها وتدميرها وتعديل أولويتها.
التجميع الذاتي والتجميع المتبادل
يقوم نظام فورث كامل الميزات، الذي يحتوي على جميع شفرة المصدر، بتجميع نفسه تلقائيًا، وهي تقنية تُعرف عادةً باسم التجميع الفائق أو الاستضافة الذاتية ، من قِبل مبرمجي فورث (مع أن هذا المصطلح لا يتطابق تمامًا مع تعريف التجميع الفائق كما هو شائع). وتتمثل الطريقة المعتادة في إعادة تعريف مجموعة الكلمات التي تضع البتات المُجمّعة في الذاكرة. تستخدم كلمات المُجمِّع نسخًا مُسمّاة خصيصًا من دالتي جلب وتخزين البيانات، والتي يمكن إعادة توجيهها إلى منطقة تخزين مؤقتة في الذاكرة. تُحاكي منطقة التخزين المؤقتة منطقة ذاكرة تبدأ من عنوان مختلف عن عنوان مخزن الشفرة، أو تصل إليها. تُعرّف هذه المُجمِّعات كلمات للوصول إلى ذاكرة كلٍّ من الحاسوب المُستهدف وذاكرة الحاسوب المُضيف (الذي يقوم بالتجميع). [ 35 ]
بعد إعادة تعريف عمليات جلب وتخزين البيانات في مساحة الكود، يُعاد تجميع المُصرّف والمُجمّع، وما إلى ذلك، باستخدام التعريفات الجديدة لعمليتي الجلب والتخزين. وهذا يُعيد استخدام جميع بيانات المُصرّف والمُفسّر. ثم يُجمّع كود نظام فورث، ولكن تُخزّن هذه النسخة في المخزن المؤقت. يُكتب المخزن المؤقت الموجود في الذاكرة إلى القرص، وتُوفّر طرق لتحميله مؤقتًا إلى الذاكرة لأغراض الاختبار. وعندما يبدو أن النسخة الجديدة تعمل بشكل صحيح، تُستبدل بالنسخة السابقة.
توجد العديد من أنواع هذه المترجمات البرمجية لتناسب بيئات مختلفة. بالنسبة للأنظمة المدمجة ، يمكن كتابة الكود إلى حاسوب آخر، وهي تقنية تُعرف بالترجمة المتقاطعة ، عبر منفذ تسلسلي أو حتى بت TTL واحد ، مع الاحتفاظ بأسماء الكلمات والأجزاء الأخرى غير القابلة للتنفيذ من القاموس في الحاسوب الأصلي الذي قام بالترجمة. الحد الأدنى من متطلبات مترجم فورث هو الكلمات التي تجلب وتخزن بايتًا، والكلمة التي تأمر بتنفيذ كلمة فورث. غالبًا ما يكون الجزء الأكثر استهلاكًا للوقت في كتابة منفذ بعيد هو بناء البرنامج الأولي لتنفيذ عمليات الجلب والتخزين والتنفيذ، ولكن العديد من المعالجات الدقيقة الحديثة تتضمن ميزات تصحيح أخطاء مدمجة (مثل معالج Motorola CPU32 ) تُغني عن هذه المهمة. [ 36 ]
بنية اللغة
تُعدّ "القاموس" البنية الأساسية لبيانات لغة فورث، حيث يربط "الكلمات" بشفرة قابلة للتنفيذ أو هياكل بيانات مُسماة. يُخزّن القاموس في الذاكرة على شكل شجرة من القوائم المتصلة ، حيث تبدأ الروابط من أحدث كلمة مُعرّفة (الكلمة الأحدث) إلى أقدمها، حتى يتم العثور على قيمة مرجعية ، عادةً ما تكون مؤشرًا فارغًا (NULL). يؤدي تبديل السياق إلى بدء البحث في القائمة من ورقة مختلفة. يستمر البحث في القائمة المتصلة مع اندماج الفرع في الجذع الرئيسي، وصولًا في النهاية إلى القيمة المرجعية، أي الجذر. يمكن أن يوجد عدة قواميس. في حالات نادرة، مثل التجميع الفائق، قد يكون القاموس معزولًا ومستقلًا. يُشبه هذا التأثير تأثير تداخل مساحات الأسماء، ويمكن أن يُحمّل الكلمات المفتاحية بشكل زائد اعتمادًا على السياق.
تتكون الكلمة المحددة بشكل عام من رأس وجسم ، حيث يتكون الرأس من حقل الاسم (NF) وحقل الرابط (LF)، ويتكون الجسم من حقل الرمز (CF) وحقل المعلمة (PF).
يُعامل رأس وجسم مدخل القاموس بشكل منفصل لأنهما قد لا يكونان متجاورين. على سبيل المثال، عند إعادة ترجمة برنامج فورث لمنصة جديدة، قد يبقى الرأس على جهاز الترجمة، بينما ينتقل الجسم إلى المنصة الجديدة. في بعض البيئات (مثل الأنظمة المدمجة )، يشغل الرأس مساحةً من الذاكرة دون داعٍ. مع ذلك، قد تضع بعض المترجمات المتقاطعة الرأس في النظام المستهدف إذا كان من المتوقع أن يدعم النظام المستهدف نفسه لغة فورث تفاعلية. [ 37 ]
لا يوجد تنسيق محدد لإدخال القاموس، وتختلف التطبيقات.
بنية المترجم
لا يُعدّ المُصرّف برنامجًا متكاملًا. فهو يتألف من كلمات فورث مرئية للنظام، وقابلة للاستخدام من قِبل المُبرمج. وهذا يُتيح للمُبرمج تغيير كلمات المُصرّف لأغراض مُحددة. تُعتبر عملية التجميع في أنظمة فورث التقليدية بسيطة ولا تتضمن بناء وتحسين تمثيل مُجرّد للشيفرة. (تستخدم بعض مُصرّفات فورث الأحدث أساليب تجميع أكثر تعقيدًا، كما هو شائع في لغات البرمجة الأخرى).
يتم ضبط علامة "وقت الترجمة" في حقل الاسم للكلمات التي لها سلوك "وقت الترجمة". تُنفّذ معظم الكلمات البسيطة نفس التعليمات البرمجية سواءً كُتبت في سطر الأوامر أو أُدرجت في التعليمات البرمجية. عند ترجمة هذه الكلمات، يضع المُترجم ببساطة التعليمات البرمجية أو مؤشرًا مُرتبطًا بالخيط إلى الكلمة. [ 32 ]
من الأمثلة الكلاسيكية على كلمات وقت الترجمة هياكل التحكم مثل ` IFand` و` WHILE. تُنفَّذ جميع هياكل التحكم في لغة فورث تقريبًا، وكذلك جميع مُترجماتها، ككلمات وقت الترجمة. باستثناء بعض كلمات التحكم في التدفق النادرة الاستخدام والموجودة في عدد قليل من التطبيقات، مثل كلمة الإرجاع الشرطية ?EXITالمستخدمة في لغة preForth لأولريش هوفمان، تُنفَّذ جميع كلمات التحكم في التدفق في فورث أثناء الترجمة لتجميع تركيبات مختلفة من الكلمات الأولية مع عناوين التفرع الخاصة بها. [ 1 ] [ 2 ]
على سبيل المثال، IFتُستخدم WHILEالكلمات التي تُطابقها لإنشاء BRANCH(تفرع غير مشروط) و ?BRANCH(سحب قيمة من المكدس، والتفرع إذا كانت خاطئة). تعمل كلمات التحكم في تدفق الحلقة المعدودة بشكل مشابه، ولكنها تُنشئ مجموعات من الكلمات الأولية التي تعمل مع عداد، وهكذا. أثناء الترجمة، يُستخدم مكدس البيانات لدعم موازنة بنية التحكم، والتداخل، وتعديل عناوين التفرع. المقتطف:
... DUP 6 < IF DROP 5 ELSE 1 - THEN ...غالباً ما يتم تجميعها إلى التسلسل التالي داخل التعريف:
... DUP LIT 6 < ?BRANCH 5 DROP LIT 5 BRANCH 3 LIT 1 - ...تمثل الأرقام التي تليها BRANCHعناوين القفز النسبية. LITهي الكلمة الأساسية لدفع رقم "حرفي" إلى مكدس البيانات. (سيتم تجميع التعليمات البرمجية الأسرع والأقصر باستخدام مؤشرات إلى ثوابت بدلاً من LITالبيانات المضمنة، إذا تم تعريف أي من الأرقام المعنية بشكل منفصل كثوابت. ستكون هناك تغييرات مماثلة إذا تم استخدام كلمات أخرى بدلاً من الثوابت، وهكذا.)
حالة التجميع وحالة التفسير
تقوم الكلمة :(النقطتان) بتحليل اسم كمعامل، وإنشاء مدخل في القاموس ( تعريف النقطتين )، ثم تدخل في حالة الترجمة. يستمر المفسر في قراءة الكلمات المفصولة بمسافات من جهاز إدخال المستخدم. إذا تم العثور على كلمة، يقوم المفسر بتنفيذ دلالات الترجمة المرتبطة بها، بدلاً من دلالات التفسير . تتمثل دلالات الترجمة الافتراضية للكلمة في إلحاق دلالات تفسيرها بالتعريف الحالي. [ 32 ]
تُنهي كلمة ;(الفاصلة المنقوطة) التعريف الحالي وتعود إلى حالة التفسير. وهي مثال على كلمة تختلف دلالاتها في الترجمة عن الدلالات الافتراضية. دلالات تفسير ;(الفاصلة المنقوطة)، ومعظم كلمات التحكم في التدفق، والعديد من الكلمات الأخرى غير مُعرَّفة في لغة ANS Forth، مما يعني أنه يجب استخدامها داخل التعريفات فقط وليس في سطر الأوامر التفاعلي. [ 32 ]
يمكن تغيير حالة المفسر يدويًا باستخدام الكلمتين [(قوس مفتوح) و ](قوس مغلق)، اللتين تُدخلان حالة التفسير أو حالة الترجمة، على التوالي. يمكن استخدام هاتين الكلمتين مع الكلمة LITERALلحساب قيمة أثناء الترجمة وإدراج القيمة المحسوبة في تعريف النقطتين الحالي. LITERALتمتلك الكلمة دلالات الترجمة لأخذ كائن من مكدس البيانات وإضافة دلالات إلى تعريف النقطتين الحالي لوضع هذا الكائن في مكدس البيانات.
في لغة ANS Forth، يمكن قراءة الحالة الحالية للمفسر من خلال علامةSTATE تحمل القيمة "صحيح" عند وجوده في حالة الترجمة، و"خطأ" في غير ذلك. يتيح هذا تنفيذ ما يُسمى بالكلمات الذكية للحالة، والتي يتغير سلوكها وفقًا للحالة الحالية للمفسر.
كلمات فورية
تُشير هذه الكلمة IMMEDIATEإلى أحدث تعريف للنقطتين ككلمة فورية ، ما يُبدّل دلالات الترجمة الخاصة بها بدلالات تفسيرها. [ 38 ] تُنفَّذ الكلمات الفورية عادةً أثناء الترجمة، لا أثناء الترجمة نفسها، ولكن يُمكن للمبرمج تجاوز ذلك في أيٍّ من الحالتين. ;مثال على كلمة فورية. في لغة ANS Forth، تأخذ هذه الكلمة POSTPONEاسمًا كمعامل وتُلحق دلالات ترجمة الكلمة المُسماة بالتعريف الحالي حتى لو كانت الكلمة مُعلَّمة بأنها فورية. وقد عرّفت لغة Forth-83 كلمتين منفصلتين COMPILEلفرض [COMPILE]ترجمة الكلمات غير الفورية والفورية على التوالي.
بدلاً من حجز مساحة لعلامة فورية في كل تعريف، تستخدم بعض تطبيقات Forth قاموسًا فوريًا يتم فحصه أولاً عند وضع التجميع.
كلمات غير مسماة ورموز إعدام
في لغة ANS Forth، يمكن تعريف الكلمات غير المسماة باستخدام كلمة :NONAMEتُجمّع الكلمات التالية حتى الكلمة التالية ;(فاصلة منقوطة) وتترك رمز تنفيذ على مكدس البيانات. يوفر رمز التنفيذ مؤشرًا مبهمًا للدلالات المُجمّعة، على غرار مؤشرات الدوال في لغة البرمجة C.
يمكن تخزين رموز التنفيذ في متغيرات. تأخذ الكلمة EXECUTEرمز تنفيذ من مكدس البيانات وتنفذ الدلالات المرتبطة به. COMPILE,تأخذ الكلمة (compile-comma) رمز تنفيذ من مكدس البيانات وتلحق الدلالات المرتبطة به بالتعريف الحالي.
تأخذ الكلمة '(tick) اسم كلمة كمعامل، وتعيد رمز التنفيذ المرتبط بتلك الكلمة في مكدس البيانات. في حالة التفسير، ' RANDOM-WORD EXECUTEيكون ذلك مكافئًا لـ [ 39 ]RANDOM-WORD .
تحليل الكلمات والتعليقات
تُعدّ الكلمات :(نقطتان رأسيتان)، و(علامة صح) POSTPONE، و '(علامة صح) أمثلةً على الكلمات التي تُحلَّل باستخدام وسيطات من جهاز إدخال المستخدم بدلاً من مكدس البيانات. مثال آخر هو الكلمة ((قوس) التي تقرأ الكلمات التالية وتتجاهلها حتى القوس الأيمن التالي، وتُستخدم لوضع التعليقات في تعريف النقطتين الرأسيتين. وبالمثل، \تُستخدم الكلمة (شرطة مائلة عكسية) للتعليقات التي تستمر حتى نهاية السطر الحالي. لكي يتم تحليلها بشكل صحيح، يجب فصل ((قوس) و \(شرطة مائلة عكسية) بمسافة بيضاء عن نص التعليق التالي.
بنية الكود
في معظم أنظمة فورث، يتألف نص تعريف الكود إما من لغة الآلة أو من شكل من أشكال الكود متعدد الخيوط . فورث الأصلية، التي تتبع معيار FIG (مجموعة فورث المهتمة) غير الرسمي، هي لغة تفسيرية متعددة الخيوط (TIL). يُطلق عليها أيضًا اسم الكود متعدد الخيوط غير المباشر، ولكن فورث متعدد الخيوط المباشر وفورث متعدد الخيوط الفرعي أصبحت شائعة أيضًا في العصر الحديث. تقوم أسرع لغات فورث الحديثة، مثل SwiftForth وVFX Forth وiForth، بتحويل فورث إلى كود آلة أصلي.
كائنات البيانات
عندما تكون الكلمة متغيرًا أو كائن بيانات آخر، يشير CF إلى كود وقت التشغيل المرتبط بالكلمة المُعرِّفة التي أنشأتها. تتميز الكلمة المُعرِّفة بسلوك تعريفي خاص (إنشاء مدخل في القاموس، بالإضافة إلى إمكانية تخصيص مساحة بيانات وتهيئتها)، كما تُحدد سلوك مثيل فئة الكلمات التي أنشأتها هذه الكلمة المُعرِّفة. ومن الأمثلة على ذلك:
VARIABLE- يُشير إلى موقع ذاكرة غير مُهيأ، يتكون من خلية واحدة. سلوك الكائن
VARIABLEيُعيد عنوانه على المكدس. CONSTANT- يُحدد قيمة (مُحددة كوسيط لـ
CONSTANT). سلوك المثيل يُعيد القيمة. CREATE- يُحدد هذا الموقع مكانًا؛ ويمكن تخصيص مساحة فيه، أو يمكن ضبطه ليحتوي على سلسلة نصية أو قيمة مُهيأة أخرى. يُعيد سلوك الكائن عنوان بداية هذه المساحة.
توفر لغة فورث أيضًا ميزةً تمكّن المبرمج من تعريف كلمات تعريفية جديدة خاصة بالتطبيق، وتحديد كلٍّ من سلوك التعريف المخصص وسلوك الكائن. ومن الأمثلة على ذلك المخازن المؤقتة الدائرية، والبتات المسماة على منفذ الإدخال/الإخراج، والمصفوفات المفهرسة تلقائيًا.
تكون كائنات البيانات المُعرَّفة بهذه الكلمات وما شابهها ذات نطاق عام. وتُوفَّر الوظيفة التي تُقدِّمها المتغيرات المحلية في لغات البرمجة الأخرى بواسطة مكدس البيانات في لغة فورث (مع أن فورث تحتوي أيضًا على متغيرات محلية حقيقية). يستخدم أسلوب برمجة فورث عددًا قليلًا جدًا من كائنات البيانات المُسماة مقارنةً بلغات البرمجة الأخرى؛ وعادةً ما تُستخدم هذه الكائنات لاحتواء البيانات التي تستخدمها عدة كلمات أو مهام (في تطبيق متعدد المهام). [ 40 ]
لا تفرض لغة فورث اتساق استخدام أنواع البيانات ؛ تقع مسؤولية استخدام عوامل التشغيل المناسبة لجلب وتخزين القيم أو إجراء عمليات أخرى على البيانات على عاتق المبرمج.
أمثلة
"مرحبا بالعالم!"
: مرحباً ( -- ) CR ." مرحباً بالعالم! " ;مرحباً < cr > مرحباً بالعالم!
تؤدي كلمة (إرجاع السطر) إلى عرض CRالناتج التالي في سطر جديد. تقرأ كلمة التحليل (علامة اقتباس مزدوجة) سلسلة نصية مفصولة بعلامتي اقتباس مزدوجتين، وتضيف شيفرة برمجية إلى التعريف الحالي بحيث تُعرض السلسلة المُحللة عند التنفيذ. لا تُضمَّن مسافة الفصل بين الكلمة والسلسلة النصية ضمن السلسلة، وهي ضرورية لكي يتعرف عليها المُحلل ككلمة من لغة فورث.CR."."Hello, World!."
يُعد نظام Forth القياسي أيضًا مترجمًا، ويمكن الحصول على نفس الناتج عن طريق كتابة جزء الكود التالي في وحدة تحكم Forth:
CR . (مرحباً بالعالم!).((dot-paren) هي كلمة فورية تقوم بتحليل سلسلة نصية مفصولة بأقواس وعرضها. وكما هو الحال مع الكلمة، فإن ."حرف المسافة الذي يفصل .(بينها Hello, World!ليس جزءًا من السلسلة النصية.
تأتي الكلمة CRقبل النص المراد طباعته. وبحسب الاصطلاح، لا يبدأ مُفسِّر لغة فورث الإخراج في سطر جديد. كما أنه، بحسب الاصطلاح أيضاً، ينتظر إدخالاً في نهاية السطر السابق، بعد ظهور okموجه الأوامر. لا يوجد في لغة فورث ما يُعرف بـ "تفريغ المخزن المؤقت" CR، كما هو الحال أحياناً في لغات برمجة أخرى.
مزج حالات التجميع والتفسير
إليك تعريف الكلمة EMIT-Qالتي عند تنفيذها تُصدر حرفًا واحدًا Q:
: EMIT-Q 81 (قيمة ASCII للحرف 'Q') EMIT ;كُتب هذا التعريف لاستخدام قيمة ASCII للحرف Q(81) مباشرةً. النص الموجود بين القوسين هو تعليق ويتجاهله المُصرّف. EMITتأخذ الكلمة قيمة من مكدس البيانات وتعرض الحرف المقابل.
يستخدم التعريف التالي EMIT-Qالكلمات [(قوس مفتوح)، ](قوس مغلق)، CHARو LITERALللتبديل مؤقتًا إلى حالة المفسر، وحساب قيمة ASCII للحرف Q، والعودة إلى حالة التجميع، وإلحاق القيمة المحسوبة بتعريف النقطتين الحالي:
: EMIT-Q [ CHAR Q ] LITERAL EMIT ;تأخذ دالة تحليل الكلمة CHARكلمة مفصولة بمسافات كمعامل، وتضع قيمة حرفها الأول في مكدس البيانات. الكلمة [CHAR]هي نسخة مباشرة من CHAR. باستخدام ، يمكن إعادة كتابة [CHAR]تعريف المثال لـ على النحو التالي:EMIT-Q
: EMIT-Q [CHAR] Q EMIT ; \ إصدار الحرف 'Q'تم استخدام (الشرطة المائلة العكسية) في هذا التعريف \لوصف التعليق.
كلا المتغيرين CHARو [CHAR]معرفان مسبقًا في لغة ANS Forth. باستخدام IMMEDIATEو POSTPONE، [CHAR]كان من الممكن تعريف على النحو التالي:
[ شخصية ] تأجيل حرفي ؛ فوريبرنامج تشفير RC4
في عام 1987، قام رون ريفست بتطوير نظام التشفير RC4 لشركة RSA Data Security, Inc. وفيما يلي وصفه:
لدينا مصفوفة من 256 بايت، جميعها مختلفة. في كل مرة تُستخدم فيها المصفوفة، تتغير قيمتها بتبديل بايتين. يتم التحكم في عمليات التبديل بواسطة عدادين i و j ، قيمتهما الابتدائية 0. للحصول على قيمة جديدة لـ i ، أضف 1. وللحصول على قيمة جديدة لـ j ، أضف بايت المصفوفة الموجود في قيمة i الجديدة . ثم بدّل بايتات المصفوفة في i و j . الشفرة هي بايت المصفوفة الموجود في مجموع بايتات المصفوفة في i و j . يتم إجراء عملية XOR بين هذا المجموع وبايت من النص الأصلي المراد تشفيره، أو النص المشفر المراد فك تشفيره. تُهيأ المصفوفة أولاً بتعيين قيمها من 0 إلى 255. ثم نمر عليها باستخدام i و j ، ونحصل على قيمة j الجديدة بإضافة بايت المصفوفة الموجود في i وبايت المفتاح، ثم نبدّل بايتات المصفوفة في i و j . وأخيرًا، تُعيّن قيمتا i و j إلى 0. جميع عمليات الجمع تتم بتردد 256.
يستخدم الإصدار القياسي التالي من لغة فورث الكلمات الأساسية وكلمات الامتداد الأساسية فقط.
0 value ii 0 value jj 0 value KeyAddr 0 value KeyLen إنشاء SArray 256 allot \state array من 256 بايت : KeyArray KeyLen mod KeyAddr ;: get_byte + c@ ; : set_byte + c! ; : as_byte 255 and ; : reset_ij 0 TO ii 0 TO jj ; : i_update 1 + as_byte TO ii ; : j_update ii SArray get_byte + as_byte TO jj ; : swap_s_ij jj SArray get_byte ii SArray get_byte jj SArray set_byte ii SArray set_byte ;: rc4_init ( KeyAddr KeyLen -- ) 256 min TO KeyLen TO KeyAddr 256 0 DO i i SArray set_byte LOOP reset_ij BEGIN ii KeyArray get_byte jj + j_update swap_s_ij ii 255 < WHILE ii i_update REPEAT reset_ij ; : rc4_byte ii i_update jj j_update swap_s_ij ii SArray get_byte jj SArray get_byte + as_byte SArray get_byte xor ;هذه إحدى طرق اختبار الكود:
hex create AKey 61 c, 8 A c, 63 c, D2 c, FB c, : test cr 0 DO rc4_byte . LOOP cr ; AKey 5 rc4_init 2 C F9 4 C EE DC 5 test \ يجب أن يكون الناتج: F1 38 29 C9 DEمحركات فور
يُطلق على المعالج المصمم لدعم لغة برمجة معينة اسم "محرك اللغة". [ 41 ]
محركات فورث هي منصات أجهزة مصممة خصيصًا لدعم تطوير وتشغيل البرامج المكتوبة بلغة فورث. (وبالمثل، صُممت أجهزة ليسب خصيصًا لدعم تطوير وتشغيل البرامج المكتوبة بلغة ليسب، وصُمم محرك باسكال المصغر خصيصًا لدعم تطوير وتشغيل البرامج المكتوبة بلغة باسكال، وما إلى ذلك).
كان أول محرك فورث أحادي الشريحة متاح تجاريًا هو Rockwell R65F11، [ 41 ] وهي شريحة تتضمن نواة فورث في ذاكرة القراءة فقط (ROM)، ومعالج 6502 مُحسَّن ، وذاكرة SRAM، ودوائر واجهة متنوعة كانت تتطلب سابقًا شرائح طرفية. [ 41 ] [ 42 ] [ 43 ] [ 44 ] [ 45 ]
صُممت العديد من وحدات المعالجة المركزية التجارية الأخرى (مثل Harris RTX-2000 وNovix NC4016 وF21 وMARC4 وKimKlone وغيرها) والعديد من وحدات المعالجة المركزية المصممة محليًا (مثل My4TH وJ1 وH2 وMark 1 FORTH Computer وغيرها) خصيصًا لتشغيل لغة فورث. وعادةً ما تُنفذ هذه الوحدات وظائف فورث الأساسية الشائعة، مثل "Forth NEXT"، كتعليمات منفردة.
التطبيقات
نظرًا لسهولة تطبيق لغة فورث وعدم وجود تطبيق مرجعي قياسي لها، توجد إصدارات عديدة منها. فضلًا عن دعمها لأنظمة الحواسيب المكتبية القياسية ( POSIX ، مايكروسوفت ويندوز ، ماك أو إس )، تستهدف العديد من أنظمة فورث هذه أيضًا مجموعة متنوعة من الأنظمة المدمجة . فيما يلي بعض الأنظمة المتوافقة مع معيار ANS فورث لعام 1994.
- ASYST، وهو نظام يشبه لغة Forth لجمع البيانات وتحليلها [ 46 ] [ 17 ]
- Gforth ، وهو تطبيق محمول للغة ANS Forth من مشروع GNU
- noForth ، وهو تطبيق ANS Forth (بقدر الإمكان) لوحدات التحكم الدقيقة Flash (MSP430 و RISC-V و RP2040).
- Open Firmware ، وهو معيار لبرنامج الإقلاع والبرامج الثابتة يعتمد على ANS Forth
- pForth ، لغة فورث المحمولة المكتوبة بلغة سي
- SP-Forth، تطبيق ANS Forth من مجموعة الاهتمام الروسية بلغة Forth (RuFIG)
- Swift Forth، تطبيق لتوليد لغة الآلة من شركة Forth, Inc.
- VFX Forth، تحسين الكود الأصلي Forth
- فيرث ، وهي نسخة معدلة من لغة فورث لجهاز الكمبيوتر ليتل مان ستاك ماشين
- Shi ، وهو تطبيق Forth سريع وصغير الحجم وقابل للتضمين مكتوب لـ Thumb-2 ISA (ARMv7-M والإصدارات الأحدث).
انظر أيضاً
- ألعاب فيديو مكتوبة بلغة فورث
- RTX2010 ، معالج مركزي يدعم تشغيل لغة فورث بشكل أصلي
ملحوظات
مراجع
- 1 2 "شرائح أولريش هوفمان التمهيدية لـ Forth" (PDF) .
- 1 2 "مقدمة أولريش هوفمان" (PDF) .
- 1 2 ماهر، جيمي (28 أكتوبر 2014). "رحلة النجوم" . الأرشيف الرقمي . تم الاسترجاع في 29 أبريل 2023 .
- ↑ تطبيقات ناسا للغة فورث (خادم ناسا الأصلي لم يعد يعمل، نسخة من archive.org)
- ↑ «معالجات RTX من شركة Intersil وبرنامج Forth تحكما في هبوط مركبة Philae بنجاح» (ملف PDF) . شركة MicroProcessor Engineering Limited . ١٣ أكتوبر ٢٠١٤. مؤرشف من الأصل (ملف PDF) في ٢٩ أبريل ٢٠٢٣. تم الاطلاع عليه في ٢٩ أبريل ٢٠٢٣ .
- ↑ "ها هي فيلاي قادمة! مدعومة ببطاقة رسومات RTX2010" . متحف CPU Shack . 12 أكتوبر 2014. تم الاطلاع عليه بتاريخ 29 أبريل 2023 .
- ↑ "تطبيقات فورث المتعلقة بالفضاء" . مؤرشف من الأصل بتاريخ 24-10-2010 . تم الاطلاع عليه بتاريخ 04-09-2007 .
- 1 2 3 راذر، إليزابيث د.؛ كولبورن، دونالد ر.؛ مور، تشارلز هـ. (1996) [1993]. "تطور لغة فورث" . في بيرجين، توماس ج.؛ جيبسون، ريتشارد ج. (محرران). تاريخ لغات البرمجة - الجزء الثاني . رابطة آلات الحوسبة. ص 625-670 . doi : 10.1145/234286.1057832 . ISBN 0201895021.
- ↑ "برنامج عرض أتاري داخل المتجر" . هوس أتاري .
- ↑ ماينارد، ديفيد س. "ديفيد ماينارد: فنان البرمجيات" .
- ↑ جون روميرو (23 سبتمبر 2020). "التشوه الزمني: الحلقة 9 - ستيوارت سميث" (بودكاست). يبدأ الحدث عند الدقيقة 29:02.
- ↑ أيكوك، جون (2023). فقدان الذاكرة المُتذكر: الهندسة العكسية لقطعة أثرية رقمية . دار بيرغاهن للنشر. ص 79. ISBN 978-1800738676.
- ↑ شارب، دوغ (8 أبريل 2023). "لغة برمجة فورث (الذهاب إلى فورث)" .
- ↑ روشات، جان (6 فبراير 2025). "العودة إلى عام 1985: كيف أعدنا صنع ChipWits لجهاز C64" .
- ↑ "المقابلة رقم 66 - بيتر ليبا، بولدر داش" . بودكاست ANTIC لألعاب أتاري 8 بت . 16 يونيو 2015.
- ↑ "فورث تحصل على مجموعة مصالح خاصة بها" . مرصد التكنولوجيا . 6 فبراير 1989.
- 1 2 كامبل وآخرون، "التشغيل والبدء باستخدام Asyst 2.0"، شركة ماكميلان للبرمجيات، 1987
- ↑ مور، تشارلز هـ. (1991). "فورث - السنوات الأولى" . مؤرشف من الأصل بتاريخ 15-06-2006 . تم الاطلاع عليه بتاريخ 03-06-2006 .
- ↑ مور، تشارلز هـ. (أغسطس 1980). "تطور لغة فورث، وهي لغة غير عادية" . مجلة بايت . 5 (8): 82.
- ↑ "مواصفات ANS 1994، الملحق ج ("منظور")" . taygeta.com .
- ↑ "اللغة الرابعة" ، مجلة بايت ، 5 (8)، 1980
- ↑ م. أنطون إرتل. "شجرة عائلة فورث والجدول الزمني" .
- ^ لوتس، بول (1982). "دليل لغة جرافورث" . archive.org . إنسوفت.
- ↑ "معيار فورث-79" (ملف PDF) . تم الاطلاع عليه بتاريخ 29-04-2023 .
- ↑ "معيار فورث-83" . مؤرشف من الأصل بتاريخ 2023-04-05 . تم الاطلاع عليه بتاريخ 2023-04-29 .
- ↑ "لغات البرمجة: فورث" . اللجنة الفنية X3J14 التابعة للمعهد الوطني الأمريكي للمعايير. 24 مارس 1994. تم الاطلاع عليه بتاريخ 3 يونيو 2006 .
- ↑ "مرجع لغة فورث القياسية (ANSI INCITS 215-1994)" (ملف PDF) . برنامج Quartus للأجهزة المحمولة. 13 سبتمبر 2005. تاريخ الاسترجاع: 29 أبريل 2023 .
- ↑ كلاونش، كارل (2018-03-02). "استعادة الشفرة المصدرية الأصلية للغة فورث على جهاز IBM 1130" . rescue1130 . تم الاطلاع عليه في 30 يوليو 2018 .
- ↑ برودي، ليو (1987). الانطلاق ( الطبعة الثانية). برنتيس هول. ISBN 978-0-13-843079-5أُرشف من المصدر الأصلي بتاريخ 2016-04-03 . تم الاطلاع عليه بتاريخ 2023-04-29 .
- ↑ برودي 1987 ، ص 20
- ↑ برودي 1987 ، ص 14
- 1 2 3 4 برودي 1987 ، ص 16
- ↑ رودريغيز، براد. "اصنع جهاز التجميع الخاص بك، الجزء 2: جهاز تجميع 6809 فورث" . تم الاسترجاع في 29-04-2023 .
- ↑ رودريغيز، براد. "تعدد المهام 8051 كاميلفورث" (ملف PDF) . تم الاطلاع عليه بتاريخ 29-04-2023 .
- ↑ رودريغيز، براد (يوليو-أغسطس 1995). "المضي قدمًا، الجزء 8: كاميلفورث للخط 6809" . تم الاسترجاع في 29 أبريل 2023 .
- ↑ شوبريدج، بيتر (21 ديسمبر 1998). "برنامج تشغيل وضع تصحيح الأخطاء في الخلفية من موتورولا لنظام التشغيل ويندوز إن تي" . مؤرشف من الأصل بتاريخ 6 يونيو 2007. تم الاطلاع عليه بتاريخ 19 يونيو 2006 .
- ↑ مارتن، هارولد م. (مارس 1991). "تطوير نموذج فورث مقيد" . نشرة ACM SIGFORTH . 2 (3). مطبعة ACM: 17-19 . doi : 10.1145/122089.122091 . S2CID 26362015 .
- ↑ برودي 1987 ، ص 273
- ↑ برودي 1987 ، ص 199
- ↑ "تحت الغطاء". برودي 1987 ، ص 241.
باختصار، هناك ثلاثة أنواع من المتغيرات: متغيرات النظام، التي تحتوي على قيم يستخدمها نظام فورث بأكمله. متغيرات المستخدم، التي تحتوي على قيم فريدة لكل مهمة، على الرغم من إمكانية استخدام تعريفاتها من قبل جميع المهام في النظام. المتغيرات العادية، التي يمكن الوصول إليها إما على مستوى النظام ككل أو ضمن مهمة واحدة فقط، وذلك بحسب ما إذا كانت مُعرَّفة ضمن
مهمة واحدة أو ضمن مهمة خاصة.
OPERATOR - 1 2 3 راندي إم. دومسي. "أجهزة الكمبيوتر أحادية الشريحة R65F11 و F68K بتقنية فورث". تمت أرشفة هذا المحتوى بتاريخ 2014-12-02 في موقع Wayback Machine عام 1984.
- ^ إد شموخ. "نظام مراقبة التآكل المحوسب" . 1986.
- ↑ لورانس ب. فورسلي. "الأنظمة المدمجة: مؤتمر روتشستر الرابع لعام 1990: 12-16 يونيو 1990، جامعة روتشستر". مؤرشف بتاريخ 25-03-2015 في Wayback Machine . ص 51.
- ↑ روكويل. "دليل مستخدم RSC-Forth" مؤرشف بتاريخ 2013-12-07 في Wayback Machine . 1983.
- ↑ "الحواسيب الصغيرة القائمة على لغة فورث من روكويل R65F11 وR65F12" (ملف PDF) . يونيو 1987. مؤرشف (ملف PDF) من الأصل في 4 أغسطس 2020. تم الاطلاع عليه في 28 أبريل 2020 .
- ↑ هاري، ديفيد؛ أوشيو، كويتشي؛ فلانغان، ستيفن د . (1987). "برنامج ASYST للحوسبة العلمية". مجلة ساينس . 236 (4805): 1128-1132 . Bibcode : 1987Sci...236.1128H . doi : 10.1126/science.236.4805.1128 . JSTOR 1699106. PMID 17799670. S2CID 30463062 .
روابط خارجية
- الموقع الرسمي لمعيار فورث 2012
- برمجة لغة موجهة نحو حل المشكلات. مؤرشف بتاريخ 27-09-2025 في Wayback Machine. كتاب غير منشور من تأليف تشارلز إتش. مور (1970).
- المؤتمر الأوروبي السنوي الرابع 1985–حتى الآن
- البحث الرابع في Institut für Computersprachen
- عائلة لغات البرمجة فورث
- لغات البرمجة التجميعية
- الآلات الافتراضية القائمة على المكدس
- لغات برمجة الأنظمة
- لغات البرمجة التي تم ابتكارها عام 1970
- لغات برمجة ذات بنية قابلة للتوسيع
- لغات البرمجة ذات معيار ISO
- لغات البرمجة
- برامج عام 1970
