فورث (لغة برمجة)

ملف:Disambig.svgيوجه مقال FORTH إلى هنا. من أجل استخدامات أخرى ، انظر Forth (disambiguation).


Forth

التصنيف: Procedural, stack-oriented, reflective
ظهرت في: 1970s
صممها: Charles H. Moore
متأثرة بـ: Burroughs large systems, Lisp, APL
أثرت في: Factor, PostScript, RPL, REBOL


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

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

وعلى الرغم من أنها لا تتمتع بشعبية مثل غيرها من نظم البرمجة، تتمتع فورث بالدعم الكافي للإبقاء على العديد من بائعي ومتعهدي اللغة في العمل. وتستخدم فورث حاليا في محملات نظم التشغيل مثل البرمجيات الثابتة المفتوحة، وتطبيقات الفراغ الفاصل,[١] وغيرها من النظم المدمجة. ويمثل جي فورث، تطبيق من تطبيقات فورث من خلال مشروع جنو، وتتم صيانته بفعالية، بنسخته الحديثة الصادرة في ديسمبر 2008. وتخضع القياسية 1994 حاليا للمراجعة، وسميت مؤقتا بـ Forth 200x.[٢]

نظرة عامة

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

مكدسات

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

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

مداومة اللغة

تعد فورث لغة بسيطة ولكنها قابلة للتمديد؛ وتسمح نماذجها وقابلية امتدادها بكتابة برامج عالية المستوى مثل نظم الكاد CAD. ومع ذلك، تساعد قابلية امتدادها المبرمجين قليلي الخبرة في كتابة كود غير مفهوم، الأمر الذي أعطى فورث شهرة بأنها "لغة كتابة فقط". وتم استخدام فورث بنجاح في مشروعات كبيرة ومعقدة، بينما التطبيقات التي طورها المهنيون المتخصصون والمدربون قد أثبتت سهولة حفظها في منصات الأجهزة المتطورة طوال عقود من الاستخدام.[٣] ولفورث مجموعة في كل من التطبيقات الفلكية والفراغية.[٤] وما زالت فورث تستخدم حاليا في العديد من النظم المدمجة (أجهزة الحاسوب الصغيرة) وذلك نظرا لقابلية أن تكون محمولة، وللاستخدام الفعال للذاكرة، وزمن التطوير القصير، وسرعة التنفيذ السريعة. وقد تم تنفيذها بفاعلية على معالجات RISC الحديثة، كما تم إنتاج المعالجات التي تستخدم فورث كلغة آلة.[٥] وتشمل استخدامات أخرى لفورث ذاكرة القراءة فقط الخاصة بإقلاع البرامج الثابتة المفتوحة وتستخدمها أبل، وآي بي إم، وصن وOLPC XO-1، ومتحكم المرحلة الأولى للإقلاع الذي يقوم على لغة الأوامر المستوحاة من فورث (FICL) لنظام التشغيل FreeBSD.

تاريخ اللغة

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

وقد سميت فورث بذلك نظرا لأنه في عام 1968 " الملف الذي يحمل المترجم وضع عليه ملصق (FOURTH)، لبرمجيات الجيل (التالي) الرابع – ولكن حدد نظام التشغيل آي بي إم 1130 باقتصار أسماء الملفات على خمسة 5 حروف فقط.[٧] وكان مور يرى فورث على أنها خليفة (compile-link-go) الجيل الثالث من لغات البرمجة، أو برمجيات لأجهزة "جيل فورث"، وليس الجيل الرابع من لغات البرمجة حيث بدأ المصطلح في الاستخدام.

ولأن تشارلز مور قد تنقل مرات عديدة من وظيفة لأخرى في هذه المهنة، فكان الضغط المبكر على تطوير لغة عامل لتسهيل التحول إلى معماريات حاسوب مختلفة. ودائما ما كان يستخدم نظام فورث في تنشئة أجهزة جديدة. على سبيل المثال، كان فورث أول برنامج مقيم على شريحة إنتيل 8086 في عام 1978 كما كان ماكفورث أول نظام تطوير مقيم لأول آبل ماكنتوش في عام 1984.[٦]

تم تطوير ميكروفورث الخاص بشركة فورث من أجل المعالجات الدقيقة إنتل 8080، وموتورولا 6800 وزيلوج Z80 وذلك بداية من عام 1976. ثم استخدم ميكروفورث بعد ذلك هواة من أجل إنتاج نظم فورث لبنيات أخرى، مثل 6502 في عام 1978. وقد أدى الانتشار الواسع في النهاية إلى جعل اللغة قياسية. وقد تم تقنين الممارسة العامة في الموصفات العامة للمنتج التي تسمح له بالعمل بغض النظر عن المصنع (de facto standards)[٨] Forth-79 وForth-83[٩] في عامي 1979 و1983، على الترتيب. وقد تم توحيد تلك المعايير بواسطة المعهد الأمريكي للمواصفات الوطنية (ANSI) في عام 1994، ويشار إليها عموما بـ ANS Forth.[١٠]

نالت فورث شعبية كبيرة في الثمانينيات من القرن الماضي[١١] نظرا لأنها قد تم توفيقها على أجهزة الحاسوب الصغيرة في هذا الوقت، حيث أنها مدمجة ومحمولة. فقد كان حاسوب منزلي واحد على الأقل، الإنجليزي Jupiter ACE، يحتوي على فورث في نظام التشغيل المقيم لذاكرة القراءة فقط (ROM). كما استخدم Canon Cat فورث من أجل برمجة نظامه. كما أنتجت روكويل أجهزة الحاسوب الصغيرة ذات الشريحة الواحدة مع نواة فورث المقيمة، كل من R65F11 وR65F12. شجرة عائلة متكاملة في TU-Wien.

منظور البرنامج

تعتمد فورث بقدر كبير على الاستخدام الصريح لمكدس البيانات والتدوين البولندي العكسي (RPN أو تدوين المقطع الأخير)، ويشيع استخدامه في الحاسبات من باكارد-هيوليت. ففي التدوين البولندي العكس (RPN)، يوضع المشغل بعد الكميات المشغلة حسابيا الخاصة به، كمقابل لتدوين المقطع الأول الأكثر شيوعا حيث يوضع المشغل بين الكميات المشغلة حسابيا الخاصة به. ويجعل تدوين المقطع الأخير اللغة أكثر سهولة في التحليل والتمديد؛ ولا تستخدم فورث قواعد صيغة باكوس نور (BNF)، وليس لديها مترجم موحّد (منليثي). ويتطلب مد المترجم كتابة كلمة جديدة فقط، بدلا من تعديل القواعد اللغوية وتغيير التنفيذ الأساسي.

باستخدام صيغة باكوس نور (BNF)، يمكن الحصول على نتيجة التعبير الرياضي (25 * 10 + 50) بهذه الطريقة:

25 10 * 50 +. <cr> 300 ok
ملف:Stack1.svg

يضع سطر الأمر العددين 25 و10 أولا على المكدس المقدر.

ملف:Forthstack1 5.png


تضاعف الكلمة * العددين في أعلى المكدس وتستبدلهما بالناتج.

ملف:Forthstack2.PNG

ويوضع الرقم 50 على المكدس.

ملف:Forthstack3.PNG


تضيفه الكلمة+ إلى الناتج السابق. وفي النهاية، يطبع الأمر النتيجة للنهاية الطرفية للمستخدم.[١٢]

وحتى الخصائص البنائية لفورث تقوم على المكدس. على سبيل المثال:

: FLOOR5 (n -- n')   DUP 6 < IF DROP 5 ELSE 1 - THEN ;

يعرف هذا الكود كلمة جديدة (مرة أخرى، الكلمة عبارة عن لفظ يستخدم لروتين فرعي) ويطلق عليها FLOOR5 وتستخدم الأوامر التالية: "DUP " تضاعف العدد في المكدس؛ و6 تضع 6 بأعلى المكدس؛ < تقارن الرقمين العلويين بالمكدس (6 والمدخل DUPed)، وتستبدلهما بقيمة صحيحة أو خاطئة؛ في حالة اتخاذها قيمة صحيحة أو خاطئة بالمكدس؛ وTHEN تنهي الشرط. النص بين القوسين عبارة عن تعليق، ينصح بأن هذه الكلمة تتوقع عدد بالمكدس وسوف ترجع رقم يمكن أن يكون متغيرا. وتعادل الكلمة FLOOR5 هذه الوظيفة المكتوبة في لغة البرمجة سي باستخدام مشغل ثلاثي: <source lang="c"> int floor5(int v) {

 return (v < 6) ? 5 : (v - 1);

} </source>

ويمكن كتابتها بشكل أكثر إيجازا كالتالي:

: FLOOR5 (n -- n') 1- 5 MAX ;

ويمكنك تشغيل هذه الكلمة كما يلي:

1 FLOOR5. <cr> 5 ok
8 FLOOR5. <cr> 7 ok

يعمل المترجم أولا على دفع عدد (1 أو 8) إلى المكدس، ثم يستدعي FLOOR5، والذي يترك هذا العدد مرة أخرى ويدفع الناتج. وفي النهاية يستدعي "." التي تستخرج الناتج وتطبعه للنهاية الطرفية للمستخدم.

مرافق

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

يبدأ تعريف كلمة جديدة بالكلمة: (علامة النقطتان) ":" وينتهي بالكلمة (الفاصلة المنقوطة) "؛".

على سبيل المثال:

: X DUP 1+.. ;

سوف يترجم الكلمة X، ويجعل الاسم قابل للبحث عنه في القاموس. وعند تنفيذه من خلال كتابة 10 × في وحدة التحكم الطرفية (الكونسول) فسوف يطبع 11 10.[١٤]

تشتمل معظم نظم فورث على مجمع متخصص يقوم بإصدار كلمات قابلة للتنفيذ. والمجمع عبارة عن لهجة خاصة بالمترجم. وغالبا ما يستخدم مجمعو فورث القواعد البولندية العكسية والتي يكون فيها الباراميتر للتعليمة سابقا للتعليمة. ويتمثل التصميم المعتاد لمجمع فورث في بناء التعليمة في المكدس، ثم طباعتها في الذاكرة كخطوة أخيرة. ويمكن الإشارة إلى السجلات بالاسم الذي تستخدمه الشركة المصنعة، ورقمها (0 n، كما استخدمت في كود العملية الفعلي) أو تسمى لأغراضها في نظام فورث: مثال "S" للسجل المستخدم كمؤشر للمكدس..[١٥]

نظام التشغيل، والملفات والمتعدد المهمات

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

متعدد المهمات، الأكثر شيوعا جدولة راوند روبن التعاونية، نجده متاح عادة (على الرغم من أن الكلمات متعددة المهمات والدعم لا يغطيهما معايير المعهد الأمريكي للمواصفات الوطنية (ANSI) وتستخدم كلمة PAUSE "توقف" لحفظ سياق تنفيذ المهمة الحالية، ولتحديد موضع المهمة التالية، واستعادة سياق تنفيذها. ولكل مهمة مكدساتها الخاصة بها، والنسخ الخاصة لبعض متغيرات التحكم ومنطقة تسويد. وتعد مهام المقايضة بسيطة وفعالة؛ ونتيجة لذلك، تتوفر معددات مهمات فورث حتى على جميع المراقبات الصغيرة البسيطة مثل إنتيل 8051، وأتميل إي في آر، وتاي إم إس بي 430.[١٦]

وعلى العكس، تعمل بعض نظم فورث ضمن نظام تشغيل مضيف مثل ميكروسوفت ويندوز، أو لينكس أو نسخة من يونكس وتستخدم نظام ملف نظام التشغيل المضيف لملفات البيانات والمصدر؛ وتصف معايير فورث للمعهد الأمريكي للمعايير الوطنية الكلمات المستخدمة للمدخلات والمخرجات (I/O). وتشمل المرافق الغير قياسية آلية لإصدار أوامر استدعاء إلى مضيف نظام تشغيل أو نظم التزويد بشبابيك، ويزود العديد منها امتدادات توظف الجدولة التي يقدمها نظام تشغيل. ونموذجيا تتمتع بمجموعة مختلفة وأكبر من الكلمات من كلمة "توقف" PAUSE المنفصلة لفورث من أجل إنشاء المهمة، والتعليق والتدمير وتعديل الأولوية.

الترجمة الذاتية والترجمة على أنظمة مختلفة

وفيه سيقوم نظام فورث بكامل خصائصه بالكود المصدر بالكامل بترجمة ذاته، تقنية تدعى ترجمة-تالية "meta-compilation" من صنع مبرمجي فورث (بالرغم من أن المصطلح لا يتطابق تماما مع الترجمة-التالية كما تعرف عادة). والطريقة المعتادة عبارة عن إعادة تعريف حفنة الكلمات التي تضع البت المترجمة في الذاكرة. وتستخدم كلمات المترجم بشكل خاص النسخ المسماة من إحضار المعلومات وتخزينها التي يمكن إعادة توجيهها إلى منطقة وسيطة بالذاكرة. وتقوم المنطقة الوسيطة بمحاكاة أو الوصول إلى منطقة الذاكرة التي تبدأ بعنوان مختلف عن الكود الوسيط. وتعرف تلك المترجمات الكلمات من أجل الوصول إلى كل من ذاكرة الحاسب المستهدف، وذاكرة الحاسوب المضيف (القائم بالترجمة)..[١٧]

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

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

بنية اللغة

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

وتتألف الكلمات المعرفة عامة من رأس وجسد حيث تتألف الرأس من حقل الاسم (NF) وحقل الرابط (LF) وجسد يتألف من حقل الكود (CF) وحقل الباراميتر (PF).

وتتم معاملة رأس وجسد مدخل قاموس على نحو منفصل لأنهما يمكن أن يكونا غير متتاليين. على سبيل المثال، عندما تتم إعادة ترجمة برنامج فورث لمنصة جديدة، ربما يبقى الرأس على الحاسوب المترجم، بينما يذهب الجسد إلى منصة جديدة. وفي بعض البيئات (مثل النظم المدمجة) أن تشغل الرأس الذاكرة أمر غير لازم. ومع ذلك، يمكن أن تضع بعض المترجمات على نظم مختلفة رؤوس بالهدف في حالة كان الهدف ذاته متوقع أن يدعم فورث تفاعلية..[١٩]

مدخلات القاموس

لم يتم وصف تنسيق محدد لمدخل قاموس، كما تختلف أنماط التنفيذ. ومع ذلك، فهناك بعض العناصر الموجودة غالبا في جميع الأحوال، بالرغم من أن الحجم والترتيب المحددين يمكن أن يختلفا. وقد تم وصفه بالبنية، ويمكن أن يبدو مدخل القاموس على هذا النحو:[٢٠]

structure
  byte:       flag           \ 3bit flags + length of word's name
  char-array: name           \ name's runtime length isn't known at compile time
  address:    previous       \ link field, backward ptr to previous word
  address:    codeword       \ ptr to the code to execute this word
  any-array:  parameterfield \ unknown length of data, words, or opcodes
end-structure forthword

يبدأ حقل الاسم ببادئة تعطي طول اسم الكلمة (نمطيا يصل إلى 32 بايت)، والعديد من البت للرايات. ثم يلي البادئة تمثيل الحرف لاسم الكلمة. بناء على نمط تنفيذ خاص بفورث، يمكن أن يوجد بايت NUL (‘\0’) من أجل المحاذاة.

ويحتوي حقل الرابط على مؤشر إلى الكلمة المعرفة مسبقا. يمكن أن يكون المؤشر إزاحة ذات صلة أو عنوان ثابت يشير إلى الشقيق الأقدم التالي.

ومؤشر حقل الكود هو إما عنوان الكلمة الذي سينفذ الكود أو البيانات في حقل الباراميتر أو بداية كود الآلة التي سينفذ معالجها مباشرة. وبالنسبة للكلمات المعرفة بعلامة النقطتين، يشير مؤشر حقل الكود إلى الكلمة التي ستحفظ مؤشر تعليمة فورث الحالية (IP) على مكدس العودة، ويحمل IP مع العنوان الجديد ومنه ليواصل تنفيذ الكلمات. وهذا مثل ما تفعله تعليمات معالج الاستدعاء/ العودة.

بنية برنامج الترجمة

برنامج الترجمة أو المترجم في حد ذاته ليس برنامجا متآلفا، فهو يتألف من كلمات فورث المرئية للنظام، ويمكن أن يستخدمه المبرمج. وهذا يسمح للمبرمج بتغيير كلمات المترجم من أجل بعض الأغراض الخاصة.

يتم تعيين "زمن الترجمة" في اسم الحقل للكلمات ذات سلوك "زمن الترجمة". وتنفذ معظم الكلمات البسيطة نفس الكود سواء تمت كتابتها على سطر الأوامر، أو كانت جزءا من الكود. وعندما تتم ترجمة تلك الكلمات، يقوم المترجم بوضع كود أو مؤشر مرتبط بالكلمة.[١٤]

وتمثل بنيات التحكم الأمثلة الكلاسيكية على كلمات زمن–الترجمة، مثل IF وWHILE. وجميع بنيات التحكم الخاصة بفورث، وغالبا كل تلك الخاصة بمترجمه يتم تنفيذها علي أنها كلمات زمن-ترجمة. ويتم تنفيذ جميع كلمات تدفق أدوات التحكم الخاصة بفورث أثناء عملية الترجمة من أجل ترجمة تركيبات مختلفة من تفرع "BRANCH" الكلمات الأولية (تفرع غير مشروط)، وBRACH? (يدفع بقيمة خارج المكدس، ويتفرع إذا كانت خاطئة). وخلال عملية الترجمة، يستخدم مكدس البيانات من أجل دعم بنية التحكم، والتداخل والباكباتشينج لعناوين الفرع. وهذا المقطع: ... DUP 6 < IF DROP 5 ELSE 1 - THEN... يمكن ترجمته إلى التسلسل التالي داخل تعريف: ... DUP LIT 6 < ?BRANCH 5 DROP LIT 5 BRANCH 3 LIT 1 -...

تمثل الأرقام المبينة بعد التفرع BRANCH عناوين التغير ذات الصلة. LIT (الإنهاء في الوقت المناسب) وهو الكلمة الأولية لعملية دفع رقم "حرفي" إلى مكدس البيانات.

حالة الترجمة وحالة التفسير

تصنف الكلمات : (النقطتين) الاسم على أنه باراميتر، وتقوم بإنشاء مدخل قاموس، (تعريف للنقطتين) وتدخل حالة الترجمة. ويواصل المفسر قراءة الكلمات المحددة بمسافات (space delimited) التي تم إدخالها عن طريق جهاز الإدخال الخاص بالمستخدم. وإذا تم العثور على كلمة يقوم المفسر بتنفيذ دلالات الترجمة المرتبطة بالكلمة، بدلا من دلالات التفسير. وتهدف دلالات الترجمة الافتراضية لكلمة مل إلى إلحاق دلالات التفسير الخاصة بها بالتعريف الحالي.[١٤]

تنهي كلمة ؛ (الفاصلة المنقوطة) (semi colon) التعريف الحالي وتعود إلى حالة التفسير. وهي مثال على الكلمة التي تختلف دلالات ترجمتها عن الافتراضات الموضوعة لها. أما دلالات التفسير؛ (الفاصلة المنقوطة) (semi colon)، وأغلب كلمات تدفق التحكم، والعديد من الكلمات الأخرى لم يتم تعريفها في المعايير الوطنية الأمريكية لفورث ANS، وهذا يعني أنه يجب استخدامها داخل التعريفات فقط ولا تستخدم في سطر الأوامر التفاعلية.[١٤]

يمكن تغيير حالة المفسر يدويا من خلال الكلمات (left-bracket) (القوس - الأيسر) و(القوس - الأيمن) (right-bracket) والتي تقوم بإدخال حالة التفسير أو حالة الترجمة، على الترتيب. ويمكن استخدام هذه الكلمات مع كلمة (حرفي) (LITERAL) من أجل حساب قيمة أثناء الترجمة وإدخال القيمة المحسوبة إلى داخل التعريف الحالي لعلامة النقطتين colon. ولكلمة (حرفي) (LITERAL) دلالات ترجمة لأخذ عنصر من مكدس البيانات وإلحاق الدلالات بتعريف علامة النقطتين colon الحالي لوضع هذا العنصر في مكدس البيانات. وفي المعايير الوطنية الأمريكية لفورث ANS Forth، يمكن للمفسر قراءة الحالة الحالية من حالة الفلاج والذي يحتوي علي القيمة الصحيحة عندما يكون في حالة الترجمة وفي غير ذلك تكون غير صحيحة. وهذا يسمح بتنفيذ ما يسمى state-smart words (كلمات الحالة-الذكية) بسلوك يمكن أن يتغير بما يتوافق مع الحالة الحالية للمفسر.

الكلمات المباشرة

الكلمات الفوالتفسير يكون (فوري) IMMEDIATE أحدث تعريفات علامة النقطتين (colon) الحالية بأنها كلمة فورية، بالإحلال الفعال لدلالات الترجمة الخاصة بها بدلالات التفسير.[٢١] ويتم تنفيذ الكلمات الفورية عادة أثناء عملية الترجمة، ليست مترجمة ولكن هذه يمكن تجاوزها من قبل المبرمج، في أي من الحالتين؛ وهذا مثال على كلمة فورية. وفي المعايير الوطنية الأمريكية لفورث، تتخذ كلمة تأجيل (POSTPONE) اسم كبراميتر وتلحق دلالات الترجمة للكلمة المسماة بالتعريف الحالي حتى وإن تم تصنيف الكلمة علي أنها كلمة فورية. وعرفت فورث-83 الكلمات المنفصلة COMPILE و(COMPILE) للإجبار على ترجمة الكلمات الفورية والغير فورية، على الترتيب.

الكلمات الغير مسماة ورموز التنفيذ

في المعايير الوطنية الأمريكية لفورث، يمكن تعريف الكلمات الغير مسماة بكلمة: NONAME (بدون اسم) والتي تترجم الكلمات التالية حتى ؛ (الفاصلة المنقوطة) التالية ويترك رمز تنفيذ في مكدس البيانات. وتوفر رموز التنفيذ معالجة مبهمة للدلالات المترجمة، ومشابهة لمؤشرات الوظيفة للغة البرمجة C.

ويمكن تخزين رموز التنفيذ في متغيرات. وتتخذ كلمة تنفيذ EXECUTE رمز تنفيذ من مكدس البيانات وتقوم بعمل الدلالات المرتبطة بها. أما كلمة ترجمة (ترجمة- فاصلة) (complie-comma) فتتخذ رمز تنفيذ من مكدس البيانات وتلحق الدلالات المصاحبة بالتعريف الحالي.

تتخذ كلمة ‘(التفسير يكون اسم كلمة كبراميتر وتعيد رمز التنفيذ المرتبط بتلك الكلمة في مكدس البيانات. أما في حالة التفسير يكون "تنفيذ الكلمة العشوائي" RANDOM " يعادل كلمة عشوائي RANDOM-WORD.[٢٢]

التحليل اللغوي للكلمات والتعليقات

تعتبر كل من الكلمات (النقطتان) colon :، وتأجيل POSTPONE، و‘ علامة (tick)، وبدون اسم NONAME: أمثلة على التحليل اللغوي للكلمات والتي تتخذ موضوعاتها من جهاز الإدخال الخاص بالمستخدم بدلا من مكدس البيانات. ومثال آخر علي ذلك هو كلمة (paren) والتي تقرأ وتتجاهل الكلمات التالية وتتضمن القوس الأيمن التالي وتستخدم في وضع التعليقات في تعريف (النقطتان) colon. وبالمثل، كلالكلمة متغيرash) تستخدم من أجل التعليقات التي تستمر حتى نهاية السطر الحالي. ولكي يتم تحليلها بشكل صحيح يجب أن يتم فصل كلمة (backslash) \وكلمة قوس paren (من خلال الوايت سبيس من نص التعليق التالي.

بنية الشفرة

في معظم نظم فورث، يتألف هيكل الشفرة إما من لغة آلة، أو بعض من الشفرات المترابطة. أما فورث الأصلية التي تتبع معيار مجموعة اهتمام فورث (FIG) الغير رسمية، هي لغة مفسرة مرتبطة. وهذه تدعى أيضا شفرة مترابطة غير مباشرة، ولكن الشفرة المترابطة المباشرة والروتين الفرعي المترابط لفورث أصبح شائعا أيضا في العصر الحديث. وأسرع لغة الكلمة متغيرالحديثة تستخدم ربط الروتين الفرعي، والذي يقوم بإدخال كلمات بسيطة مثل وحدات الماكرو، ويقوم بتنفيذ تحسين (peephole optimization) أو غيرها من استراتيجيات التحسين من أجل جعل الشفرات أصغر وأسرع.[٢٣]

عناصر البيانات

عندما تكون الكلمة متغير أو عنصر بيانات آخر، فإن CF الذي يشير إلى كود زمن التشغيل يكون مصاحبا لكلمة التعريف التي قامت بإنشائها. وتحتوي كلمة التعريف علي "سلوك التعريف" مميز (يقوم بإنشاء مدخل قاموس بالقمة معلى إمكانية تخصيص وتهيئة مسافة ابتدائية للبيانات) كما يحدد سلوك مثال لفئة الكلمات التي أنشأتها كلمة التعريف. وتشمل الأمثلة:

المتغير أسماء غير مبدوءة، تقع في موضع من الذاكرة من خلية واحدة. ويعيد سلوك مثال لمتغير عنوانه في المكدس.

الثابت تسمي قيمة (محددة كحجة لكلمة ثابت). يعيد السلوك المثال القيمة.

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

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

أهداف البيانات التي تم تعريفها من خلال هذه الكلمات وكلمات مشابهة تعد في نفس النطاق. الوظيفة التي توفرها المتغيرات المحلية في لغات أخرى يتم توفيرها أيضا عن طريق مكدس البيانات في نظام فورث.(علي الرغم من فورث تحتوي أيضا علي المتغيرات المحلية الحقيقية). يستخدم أسلوب برمجة فورث عدد قليل للغاية من أهداف البيانات مقارنة باللغات الأخرى؛ ونمطيا فإن مثل هذه الأهداف للبيانات تستخدم لاحتواء بيانات مستخدمة من قبل عدد من الكلمات أو المهام (في عملية تنفيذ متعددة المهام).[٢٤]

لا تفرض فورث تماسك استخدام نوع البيانات؛ إنها مسؤولية المبرمج في استخدام المشغلات الملائمة من استخدامها لجلب وتخزين القيم أو تنفيذ العمليات الأخرى علي البيانات.


البرمجة

يتم ترجمة الكلمات المكتوبة في فورث في نموذج قابل للتنفيذ، حيث تقوم أنماط التنفيذ"المترابطة الغير مباشر" الكلاسيكية بترجمة قوائم عناوين الكلمات ليتم تنفيذها بالتعاقب؛ وتقوم العديد من الأنظمة الحديثة بتوليد لغة آلة حقيقية (بما في ذلك أوامر استدعاء لبعض الكلمات الخارجية وشفرة لأخرى امتدت في الموضع). تتمتع بعض النظم بمترجمات محسنة. وعموما، يتم حفظ برنامج فورث مثل صورة الذاكرة للبرنامج المترجم من خلال أمر واحد. (مثال: RUN تشغيل) والذي يتم تنفيذه عندما يتم تحميل النسخة المترجمة. وخلال عملية التطوير، يستخدم المبرمج المفسر من أجل تنفيذ واختبار كل قطعالقمة معما تم تطويرها. لذلك يفضل معظم المبرمجين تصميم حر من أعلى –لأسفل، وتطوير من القاع-إلى القمة مع الاختبار والدمج على نحو مستمر.[٢٥]

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

أمثلة على الكود

برنامج (مرحبا بالعالم) HELLO WORLD

من أجل الحصول علي شرح لتقليد البرمجة "مرحبا بالعالم" "Hello World”، انظر Hello world program.

أحد أنماط التنفيذ الممكنة

: HELLO  (--)  CR." Hello, world!" ; HELLO <cr>
Hello, world!

تسبب كلمة CR (Carriage Return) أن يتم عرض المخرج التالي على سطر جديد. ويقرأ تحليل الكلمة (dot-quote) نص اقتباس مزدوج محدد ويقوم بإلحاق الكود بالتعريف الحالي حتى يتم عرض النص الذي تم تحليله في التنفيذ. والمسافة التي تفصل الكلمة." من النص Hello, World! ليست متضمنة كجزء من النص. فهي لازمة حتى يتعرف المحلل على." ككلمة تنتمي إلى فورث.

كما أن نظام فورث القياسي هو مفسر أيضا، ويمكن الحصول على نفس المخرج من خلال كتابة مقطع الكود التالي في وحدة التحكم الطرفية (كونسول) بفورث:

CR.(Hello, world!)

dot-paren (نقطة-قوس).) هي كلمة فورية تقوم بتحليل نص محدد بأقواس وتعرضه. كما هو الحال مع كلمة." فالمسافة التي تفصل.) من Hello, world! ليست جزءا من النص. تأتي كلمة CR قبل النص للطباعة. وبالاتفاق، لا يقوم مفسر فورث بتشغيل المخرجات على سطر جديد. أيضا بالاتفاق، ينتظر المفسر المدخلات في نهاية السطر السابق، وبعد موافقة سريعة. لا يوجد عمل نقل بيانات من ذاكرة المؤقتة إلى الذاكرة الدائمة على القرص "flush-buffer" في CR لفورث، كما يحدث في بعض الأحيان في لغات البرمجة الأخرى.

الخلط بين حالة الترجمة وحالة التفسير

إليك بتعريف لكلمة EMIT-Q والتي عند تنفيذها تصدر الحرف المفرد Q:

: EMIT-Q   81 (the ASCII value for the character 'Q') EMIT ;

وهذا التعريف تمت كتابته حتى يستخدم قيمة الراموز الأمريكي القياسي لتبادل المعلومات ASCII للحرف Q (81) مباشرة. ويتم استخدام النص بين القوسين كتعليق يتم تجاهله بواسطة المترجم. وتتخذ الكلمة EMIT قيمة من مكدس البيانات وتعرض الحرف الموافق.

تستخدم إعادة التعريف التالية لـ EMIT-Q الكلمات الآتية: [ (left-bracket) (قوس- اليسار)، و(right-bracket), (قوس اليمين)، من أجل التحول مؤقتا إلى حالة المفسر، وحساب قيمة للراموز الأمريكي القياسي لتبادل المعلومات ASCII للحرف Q، والعودة إلى حالة الترجمة وإلحاق القيم المحسوبة بالتعريف الحالي لعلامة النقطتان colon:

: EMIT-Q   [ CHAR Q ]  LITERAL  EMIT ;

يتخذ [CHAR] هي CHAR كلمة محددة المسافة كبراميتر ويضع قيمة الحرف الأول منها بمكدس البيانات. كلمة [CHAR] هي نسخة فورية من CHAR. وباستخدام[CHAR]، يمكن كتابة تعريف المثال من أجل (EMIT-Q) كما يلي:

: EMIT-Q   [CHAR] Q  EMIT ; \ Emit the single character 'Q'

وهذا التعريف استخدم \(backslash) من أجل وص[CHAR] كماوكل من CHAR و[CHAR] قد تمت تعريفهما مسبقا م[CHAR] كمايير الوطنية الأمريكية لفورث. وباستخدام IMMEDIATE و POSTPONE، يمكن تعريف [CHAR] كما يلي:

: [CHAR]   CHAR  POSTPONE LITERAL ; IMMEDIATE

برنامج كتابة شفرة متكامل RC4

في عام 1987 طور رون ريف كتابتها وذلك الشفرة RC4 من أكتابتها وذلك لبيانات RSA Data Security, Inc. وهذه الشفرة بسيطة إلى أقصى حد ويستطيع معظم المبرمجين كتابتها وذلك من خلال الوصف.

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


تستخدم نسخة فورث القياسية التالية كلمتي الامتداد Core وCore فقط.

0 VALUE ii
0 VALUE jj
CREATE S[] 256 CHARS ALLOT
 : ARCFOUR  (c -- x)
	ii 1+ DUP TO ii 255 AND	 (-- i)
	S[] +  DUP C@		 (-- 'S[i] S[i]) 
	DUP jj +  255 AND DUP TO jj (-- 'S[i] S[i] j)
	S[] +  DUP C@ >R	 (-- 'S[i] S[i] 'S[j])
	OVER SWAP C!		 (-- 'S[i] S[i])
	R@ ROT C!		 (-- S[i])
	R> +			 (-- S[i]+S[j])
	255 AND S[] + C@	 (-- c x)
	XOR ;
: ARCFOUR-INIT (key len --)
	256 MIN LOCALS| len key |
	256 0 DO  I  S[] I + C!  LOOP
	0 TO jj 
	256 0  DO		 (key len --)
		  key I len MOD + C@  
		  S[] I  + C@  + jj + 255 AND TO jj
		  S[] I  + DUP C@  SWAP (c1 addr1)
		  S[] jj + DUP C@  (c1 addr1 addr2 c2) ROT C! C!
	     LOOP
	0 TO ii  0 TO jj ;

This is one of many tests to validate the code.

CREATE KEY: 64 CHARS ALLOT
: !KEY (c1 c2... cn n—store the specified key of length n)
	DUP 63 U> ABORT" key too long (<64)"
	DUP KEY: C! KEY: + KEY: 1+ SWAP ?DO  I C!  -1 +LOOP ;
 
	HEX  61 8A 63 D2 FB  5 !KEY
	KEY: COUNT ARCFOUR-INIT
	CR 
	   DC ARCFOUR 2.R SPACE
	   EE ARCFOUR 2.R SPACE
	   4C ARCFOUR 2.R SPACE
	   F9 ARCFOUR 2.R SPACE
	   2C ARCFOUR 2.R
	CR.(Should be: F1 38 29 C9 DE)

التطبيقات

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

  • جي فورث GFORTH - تطبيق محمول يلتزم بالمعايير الوطنية الأمريكية لفورث من مشروع جنو.
  • شركة فورث (FORTH Inc) - والتي أسسها منشئو لغة فورث، وتبيع سطح مكتب (SwiftForth) و(SwiftX) مدمج وفقا للمعايير الوطنية الأمريكية لفورث.
  • شركة MPE – المحدودة - تبيع سطح المكتب على درجة عالية من التطوير (VFX) وبرامج ترجمة مدمجمة وفقا للمعايير الوطنية الأمريكية لفورث.
  • البرمجيات الثابتة المفتوحة - Open Firmware – محمل الإقلاع وبيوس (نظام الإدخال والإخراج الأساسي) ويعتمد علي المعايير الوطنية الأمريكية لفورث.
  • جي فورثPforth
  • التطبيقات المتاحة مجانا
  • التطبيقات التجارية

وهناك أيضا فهرس أحدث لنظم فورث، والذي تم تنظيمه بالمنصة، ويحتوي على نظم فورث أيضا التي لا تلتزم بالمعايير الوطنية الأمريكية 94ANS.

أنظر أيضا

References

  1. ^ NASA applications of Forth
  2. ^ Forth 200x standards effort
  3. ^ Forth Success Stories. Retrieved 2006-06-09.
  4. ^ Space Related Applications of Forth. Retrieved 2007-09-04.
  5. ^ Forth Chips Page. pp. 54 Retrieved 2006-06-09.
  6. ^ أ ب ت The Evolution of Forth. ACM SIGPLAN Notices, Volume 28, No. 3. March, 1993. ACM SIGPLAN History of Programming Languages Conference
    (April 1993).
  7. ^ Moore، Charles H (1991). Forth - The Early Years. Retrieved 2006-06-03.
  8. ^ The Forth-79 Standard. (PDF)
  9. ^ The Forth-83 Standard.
  10. ^ Programming Languages: Forth. ANSI technical committee X3J14
    (24 March 1994). Retrieved 2006-06-03.
  11. ^ "The Forth Language", BYTE Magazine 5 (8), 1980 
  12. ^ Brodie, Leo (1987) (paperback). Starting Forth (Second ed.). Prentice-Hall. pp. 20. ISBN 0-13-843079-9. 
  13. ^ Brodie, Leo (1987) (paperback). Starting Forth (Second ed.). Prentice-Hall. pp. 14. ISBN 0-13-843079-9. 
  14. ^ أ ب ت ث Brodie, Leo (1987) (paperback). Starting Forth (Second ed.). Prentice-Hall. pp. 16. ISBN 0-13-843079-9. 
  15. ^ Rodriguez، Brad. B.Y.O.ASSEMBLER. Retrieved 2006-06-19.
  16. ^ Rodriguez، Brad. MULTITASKING 8051 CAMELFORTH. (PDF) Retrieved 2006-06-19.
  17. ^ Rodriguez، Brad (July 1995). MOVING FORTH. Retrieved 2006-06-19.
  18. ^ Shoebridge، Peter (1998-12-21). Motorola Background Debugging Mode Driver for Windows NT. Retrieved 2006-06-19.
  19. ^ Martin، Harold M. (March 1991). Developing a tethered Forth model. ACM Press. Retrieved 2006-06-19.
  20. ^ Brodie, Leo (1987) (paperback). Starting Forth (Second ed.). Prentice-Hall. pp. 200–202. ISBN 0-13-843079-9. 
  21. ^ Brodie, Leo (1987) (paperback). Starting Forth (Second ed.). Prentice-Hall. pp. 273. ISBN 0-13-843079-9. 
  22. ^ Brodie, Leo (1987) (paperback). Starting Forth (Second ed.). Prentice-Hall. pp. 199. ISBN 0-13-843079-9. 
  23. ^ Ertl، M. Anton; Gregg, David. Implementation Issues for Superinstructions in Gforth. (PDF) Retrieved 2006-06-19.
  24. ^ Brodie, Leo (1987). "Under The Hood" (paperback). Starting Forth (2nd ed.). Prentice-Hall. pp. 241. ISBN 0-13-843079-9. "To summarize, there are three kinds of variables: System variables contain values used by the entire Forth system. User variables contain values that are unique for each task, even though the definitions can be used by all tasks in the system. Regular variables can be accessible either system-wide or within a single task only, depending upon whether they are defined within OPERATOR or within a private task." 
  25. ^ Brodie, Leo (1984) (paperback). Thinking Forth. Prentice-Hall. ISBN 0-13-917568-7. 
  26. ^ The classic washing machine example describes the process of creating a vocabulary to naturally represent the problem domain in a readable way.

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

  • Biancuzzi, Federico; Shane Warden (2009). "Chapter Four [A conversation with Chuck Moore]" (paperback). Masterminds of Programming, Conversations with the Creators of Major Programming Languages. O'REILLY. ISBN 978-0-596-51517-1. 

وصلات خارجية

bg:Forth ca:Forth cs:Forth de:Forth (Informatik) el:Forth Forth (programming language)]] eo:Forth es:Forth fi:Forth (ohjelmointikieli) fr:Forth (langage) gl:Forth hr:Forth (programski jezik) hu:Forth it:Forth (linguaggio) ja:Forth ko:포스 (프로그래밍 언어) nl:Forth (programmeertaal) no:Forth (programmeringsspråk) pl:Forth pt:Forth ru:Форт (язык программирования) sl:FORTH sr:Форт (програмски језик) sv:Forth (programspråk) tg:Forth uk:Forth zh:Forth