زبان برنامه‌نویسی فورث

از ویکی‌پدیا، دانشنامهٔ آزاد
فورث
الگو برنامه‌نویسی برنامه‌نویسی رویه‌ای, پشته محور, پژواک, منسجم
طراحی شده توسطCharles H. Moore
ظهوریافته در۱۹۷۰؛ ۵۱ سال پیش (۱۹۷۰)
بدون نوع داده
.fs, .fth, .forth
پیاده‌سازی‌های بزرگ
SwiftForth (Forth, Inc.)
Gforth (نرم افزار آزاد)
VFX Forth (مهندسی ریزپردازنده)
متأثر از
Burroughs large systems, Lisp, APL
تأثیر گذاشته بر
Factor, Joy, PostScript, RPL, REBOL

فورث (انگلیسی: forth‎) یک زبان برنامه‌نویسی رایانه بر پایه برنامه‌نویسی ساخت یافته و ساختمان داده پشته است و در اصل توسط چاک مور طراحی شده‌است. از ویژگی‌های این زبان می توان به برنامه‌نویسی ساخت یافته، پژواک (توانایی بررسی و تغییر ساختار برنامه در حین اجرا)، برنامه‌نویسی متقابل (توابع این زبان با هم قرار گرفتن در کنار هم ترکیب شده‌اند) و قابلیت توسعه ماژولار (برنامه‌نویس می‌تواند دستور جدید ایجاد کند) اشاره کرد. اگرچه نام این زبان مخفف کلمه ای نیست، اما گاهی اوقات به دلیل استفاده زیاد در سال‌های اولیه نام آن با حروف بزرگ FORTH نوشته می‌شود.

Forth که یک زبان برنامه‌نویسی رویه ای و بدون بررسی نوع داده‌است، این زبان امکان اجرای تعاملی دستورها (ساختن یک شل مناسب برای سیستم‌هایی که فاقد سیستم عامل رسمی هستند) و توانایی کامپایل دستورات برای اجرای بعدی را فراهم می‌کند. در گذشته زبان فورث، روش استاندارد کامپایل کردن کد ریسه‌ای بود، اما پیاده‌سازی‌های مدرنی وجود دارد که مانند کامپایلرهای زبان‌های برنامه‌نویسی دیگر کد ماشین بهینه‌سازی شده را تولید می‌کند.

فورث در بوت لودر نرم‌افزار Open Firmware، در برنامه‌های فضایی[۱] مانند فضاپیمای Philae ,[۲][۳] و در سایر سامانه‌های تعبیه شده شده که تعامل با سخت‌افزار دارند، استفاده می‌شود. همچنین پرفروش‌ترین بازی رایانه ای سال 1986 Starflight، ساخته شرکت الکترونیک آرتس، توسط نسخه ای سفارشی شده از زبان فورث نوشته شده‌است.[۴]

پیاده‌سازی آزاد این زبان برنامه نویسی که Gforth نام دارد هنوز به شکل مستمر پشتیبانی می‌شود

بررسی اجمالی[ویرایش]

Forth یک زبان ساده و در عین حال قابل گسترش است. وجود قابلیت گسترش (ماژولار بودن) در این زبان اجازه نوشتن برنامه‌های مهم را می‌دهد.

محیط برنامه‌نویسی زبان فورث کامپایلر را با شل، که در کاربر زیرروالها که کلمات(words) نامیده می‌شوند را تعریف و اجرا می‌کند. کلمات بدون کامپایل یا راه اندازی مجدد کل برنامه می‌توانند به صورت تعاملی تعریف، آزمایش، تعریف مجدد و اشکال زدایی شوند. تمام دستور زبان برنامه (syntax)، از جمله متغیرها و عملگرهای اصلی، به عنوان کلمات (words) تعریف می‌شوند. در حالت عادی، اجرای برنامه اثری یکسان با دوباره وارد کردن دستی کد منبع و کامپایل آن دارند

فلسفه زبان فورث بر استفاده از کلمات ساده و کوچک تأکید دارد. کلمات مربوط به کارهای بزرگتر بسیاری از کلمات کوچکتر را فراخوانی می‌کنند که هرکدام یک کار فرعی مشخص را انجام می‌دهند. یک برنامه بزرگ نوشته شده با زبان فورث سلسله مراتبی از این کلمات است. این کلمات، ماژول‌های متمایزی هستند که به‌طور ضمنی از طریق مکانیزم پشته ارتباط برقرار می‌کنند (داده‌ها را منتقل می‌کنند) و می‌توانند به صورت مستقل، ساخته و آزمایش شوند. بالاترین سطح کد زبان فورث احتمالاً شبیه یک توصیف انگلیسی از برنامه باشد. Forth را "زبان فرا برنامه ای " خوانده‌اند: زبانی که می‌تواند برای ایجاد زبانهای خاص دامنه مورد استفاده قرار گیرد.[۵]

کاربردها[ویرایش]

فورث دارای کاربردهای نجومی و فضایی[۶] و همچنین دارای سابقه استفاده در سیستم‌های نهفته‌است. رام‌های راه اندازی Open Firmware که توسط اپل، IBM، Sun و OLPC XO-1 استفاده می‌شوند دارای از زبان Forth استفاده می‌کنند.

دو بازی رایانه ای که الکترونیک آرتس، در دهه ۱۹۸۰ منتشر کرده‌است، Worms (1983)[۷] و Starflight (1986). توسط این زبان نوشته شده‌اند[۸] شرکت آتاری برای نمایش توانایی‌های رایانه‌های خانواده ۸ بیتی آتاری در فروشگاه‌ها از یک نسخهٔ نمایشی که توسط زبان Forth نوشته شده بود استفاده کرد.[۹]

مثال برنامه‌نویسی[ویرایش]

فورث از ساختمان داده پشته و نشانه گذاری معکوس لهستانی (نشانه گذاری پیش وندی) استفاده می‌کند که معمولاً در ماشین حساب‌های شرکت هیولت پاکارد (HP) استفاده می‌شود. در این نشانه گذاری، عملگر بعد از عملوندهای آن قرار می‌گیرد، در مقابل نشانه گذاری میانوندی متداول که عملگر بین عملوندها قرار می‌گیرد، قرار می‌گیرد. این روش نشانه گذاری، تجزیه و گسترش یک زبان را آسان‌تر می‌کند. انعطاف‌پذیری فورث، یک دستور زبان BNF را تولید می‌کند و یک کامپایلر یکپارچه ندارد. گسترش کامپایلر، به جای اصلاح دستور زبان و تغییر در عملکرد اصلی آن فقط به نوشتن یک کلمه (word)جدید نیاز دارد

با استفاده از نشانه گذاری معکوس لهستانی می‌توان نتیجه عبارت ریاضی (25 * 10 + 50) این طریق بدست آورید:

 25 10 * 50 + CR .
 300 ok
Stack1.svg

ابتدا اعداد ۲۵ و سپس ۱۰ را داخل داده ساختار پشته قرار می‌دهیم.

Forthstack1 5.svg

خواندن کلمه * از ورودی دو عدد بالا را از پشته خارج می‌کند، آنها را ضرب می‌کند و نتیجه ضرب را دوباره داخل پشته قرار می‌دهد.

Forthstack2.svg

سپس عدد ۵۰ از ورودی خوانده شده و داخل پشته قرار می‌گیرد.

Forthstack3.svg

سپس کلمه + از ورودی خوانده می‌شود دو مقدار بالا را از پشته خارج می‌شوند و جمع آنها محاسبه می‌شود دهد. CR (بازگشت) به اول خط بعدی رفته در نهایت، . نتیجه را چاپ می‌کند. هنگامی که همه چیز به‌طور کامل انحام می‌شود زبان فورث عبارت OK را چاپ می‌کند.

حتی سایر ساختارهای این زبان نیز از ویژگی‌های داده ساختار پشته استفاده می‌کنند. برای مثال :

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

علامت : بیانگر شروع یک تعریف جدید است در اینجا یک کلمه (اصطلاحی که برای یک زیرروال در این برنامه به کار می‌رود) جدید به اسم FLOOR5تعریف می‌کنیم متنی که داخل پرانتز قرار گرفته یک کامنت است که بیان می‌کند این کلمه یک عدد را می‌گیرد و داخل پشته قرار داده و سپس عددی تغییر یافته را بازمی‌گرداند.

زیر روال دستورات زیر را انجام می‌دهد:

DUPعدد داخل پشته را تکرار می‌کند 6 عدد ۶ را به بالای پشته اضافه می‌کند. > دو عدد بالای پشته را با هم مقایسه می‌کند (عدد ۶ و عددی که DUP شده‌است)

و آنرا با یک عبارت درست یا غلط (true or false) جایگزین می‌کند. سپس در صورت درست بودن گزاره قبلی شرط IFاجرا شده DROP تمامی مقادیر داخل پشته را نادیده گرفته و ۵ عدد ۵ را به بالای پشته اضافه می‌کند در صورت غلط بودن شرط قسمت ELSEاجرا می‌شود و مقدار بالای پشته را یک واحد کم می‌کند THEN;به معنای پایان کلمه است اگر بخواهیم مشابه کلمه FLOOR5در زبان برنامه‌نویسی سی یک تابع تعریف کنیم به شکل زیر آنرا می‌نویسیم:

int floor5(int v) {
  return (v < 6) ? 5 : (v - 1);
}

منابع[ویرایش]

  1. NASA applications of Forth (original NASA server no longer running, copy from archive.org)
  2. "Intersil's RTX processors and Forth software controlled the successful Philae landing" (PDF). MicroProcessor Engineering Limited. October 13, 2014.
  3. "Here comes Philae! Powered by an RTX2010". The CPU Shack Museum. October 12, 2014. Retrieved May 23, 2017.
  4. Maher, Jimmy (October 28, 2014). "Starflight". The Digital Antiquarian. Retrieved May 23, 2017.
  5. Brodie, Leo. "Starting Forth". Forth dot com. Forth, Inc. Retrieved July 14, 2020.
  6. "Space Related Applications of Forth". Archived from the original on 2010-10-24. Retrieved 2007-09-04.
  7. Maynard, David S. "David Maynard: Software Artist".
  8. Maher, Jimmy (October 28, 2014). "Starflight". The Digital Antiquarian. Retrieved May 23, 2017.Maher, Jimmy (October 28, 2014). "Starflight". The Digital Antiquarian. Retrieved May 23, 2017.
  9. "Atari In-Store Demonstration Program". Atari Mania.