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

**فورث** () یک زبان برنامه‌نویسی رایانه بر پایه برنامه‌نویسی ساخت یافته و ساختمان داده پشته است و در اصل توسط چاک مور طراحی شده‌است. از ویژگی‌های این زبان می توان به برنامه‌نویسی ساخت یافته، پژواک (توانایی بررسی و تغییر ساختار برنامه در حین اجرا)، برنامه‌نویسی متقابل (توابع این زبان با هم قرار گرفتن در کنار هم ترکیب شده‌اند) و قابلیت توسعه ماژولار (برنامه‌نویس می‌تواند دستور جدید ایجاد کند) اشاره کرد. اگرچه نام این زبان مخفف کلمه ای نیست، اما گاهی اوقات به دلیل استفاده زیاد در سال‌های اولیه نام آن با حروف بزرگ 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)` این طریق بدست آورید: 
```forth
25 10 * 50 + CR .
 300 ok
```

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

خواندن کلمه  `*` از ورودی دو عدد بالا را از پشته خارج می‌کند، آنها را ضرب می‌کند و نتیجه ضرب را دوباره داخل پشته قرار می‌دهد.
راست|150x150پیکسل
سپس عدد ۵۰ از ورودی خوانده شده و داخل پشته قرار می‌گیرد.
راست|150x150پیکسل

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

حتی سایر ساختارهای این زبان نیز از ویژگی‌های داده ساختار پشته استفاده می‌کنند. برای مثال : 
```forth
: FLOOR5 ( n -- n' )   DUP 6 < IF DROP 5 ELSE 1 - THEN ;
```
علامت `:` بیانگر شروع یک تعریف جدید است در اینجا یک کلمه (اصطلاحی که برای یک زیرروال در این برنامه به کار می‌رود) جدید به اسم `FLOOR5`تعریف می‌کنیم متنی که داخل پرانتز قرار گرفته یک کامنت است که بیان می‌کند این کلمه یک عدد را می‌گیرد و داخل پشته قرار داده و سپس عددی تغییر یافته را بازمی‌گرداند.

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

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

و آنرا با یک عبارت درست یا غلط (true or false) جایگزین می‌کند. سپس در صورت درست بودن گزاره قبلی شرط `IF`اجرا شده DROP تمامی مقادیر داخل پشته را نادیده گرفته و ۵ عدد ۵ را به بالای پشته اضافه می‌کند در صورت غلط بودن شرط قسمت  `ELSE`اجرا می‌شود و مقدار بالای پشته را یک واحد کم می‌کند THEN;به معنای پایان کلمه است اگر بخواهیم مشابه کلمه   `FLOOR5`در زبان برنامه‌نویسی سی یک تابع تعریف کنیم به شکل زیر آنرا می‌نویسیم:
```c
int floor5(int v) {
  return (v < 6) ? 5 : (v - 1);
}
```


## منابع

رده:نرم‌افزارهای ۱۹۷۰ (میلادی)
رده:زبان‌های برنامه‌نویسی
رده:زبان‌های برنامه‌نویسی دارای استاندارد ایزو
رده:زبان‌های برنامه‌نویسی با نحو گسترش‌پذیر
رده:زبان‌های برنامه‌نویسی ساخته‌شده در ۱۹۷۰ (میلادی)
رده:زبان‌های برنامه‌نویسی سیستمی