Мова програмування Форт

Перша реакція у багатьох людей, з якими мені доводилося говорити про Форту: «Це, напевно, різновид Фортрана?». На жаль, рівень обізнаності навколокомпьютерного співтовариства щодо цього абсолютно несхожого на інші мови програмування досить низький. У цій статті ми спробуємо розібратися з тим, що являє собою Форт, і чому ця мова програмування не використовується повсюдно.

Зануримося в історію Форту (Forth). На початку 1970х років Чарльз Мур зайнявся розробкою програмного забезпечення для мікроЕВМ, що управляє роботою радіотелескопа. Оскільки програмування на Ассемблері призвело до некерованості розробки досить складної програми, а для мікроЕМ, що використовується, через апаратні обмеження не було мови високого рівня, Чарльз Мур приступив до створення компактної і потужної мови програмування, що дозволило з блиском вирішити поставлені перед ним завдання. Успіх нової мови програмування визначився тим, що на обмежених ресурсах пристрою була створена швидка і функціональна програма, що дозволила робити набагато більше, ніж спочатку планувалося в технічному завданні.

Форт (від англ. forth - вперед, що вийшло через необхідність скоротити слово fourth - четвертий, до п'яти букв через обмеження операційної системи на довжину імені файлу) в 1976 році став стандартною мовою для програмування для американського астрономічного суспільства. Завдяки високому ступеня переносимості і компактності, а також швидкодії, Форт до 1990х активно застосовувався у безлічі приладів з мікроконтролерним керуванням (спектрограф на Шаттлі, мікромодулі управління штучними супутниками Землі, для системи управління в аеропорту Ер-Ріяда, системах комп'ютерного зору, автоматизації аналізу крові та карманних перекладачах). Форт виступає прабатьком такої широко відомої мови управління друком як PostScript.

За своєю структурою Форт являє собою набір примітивів - слів, які беруть участь у визначенні інших слів. Важлива особливість Форту - використання стека для передачі параметрів між словами, така конструкція дозволяє дуже гнучко і просто реалізовувати складні концепції. Набори слів, що стосуються певної області, можуть бути виділені у словнику. Ієрархічна структура словників дозволяє природно організовувати спадкування слів від словника-батька. Базовий словник форту становить менше чотирьох десятків слів, і вже він дозволяє отримувати повноцінні програми розширенням вихідного словника.

Форт сам для себе є метасистемою - в ньому об'єднані функції компілятора та інтерпретатора, Форт може використовуватися без підтримки з боку операційної системи і використовуватися для того, щоб компілювати самого себе, в тому числі і на інші платформи.

На відміну від більшості мов програмування, які мають жорстку структуру, що не дозволяє змінювати синтаксис і багато базових елементів мови, ніщо не заважає на Форті написати модифікацію системи, що розуміє синтаксис тієї предметної області, для якої пишеться програма. Яскравим прикладом є написання Форт-асемблера для конкретного процесора, що виконується за один робочий день кваліфікованим фортером. Мало того, такий асемблер підтримує структурне програмування і прозору вставку в асемблерний код слів зі словника самого Форту. Таким же чином реалізується підтримка об'єктно-орієнтованого програмування.

Досі популярна тема створення Форт-процесорів, система команд яких є машинним уявленням найбільш часто використовуваних слів-примітивів. Завдяки мінімалізму базової Форт-системи це легко реалізовано, тим більше що програмовані матриці логічних елементів зараз досягли таких розмірів, що Форт-процесор інтегрується на решту після програмування основної логіки 10% вентилів як бонус. Це щось із розряду такого: «А в кутку нашої маленької і затишної дитячої кімнатки непомітно розташувався акваріум з бегемотом».

Легкість написання Форт-систем призвела до величезної різноманітності існуючих реалізацій - не писав свій Форт тільки ледачий фортер. Велика кількість систем, досить погано сумісних, оскільки є три стандарти Форту: Форт-79, Форт-83 і ANSI-Форт-94. Стандарти, хоча і описують необхідний мінімум слів для реалізації, але дають величезний простір для самостійних змін, що повсюдно і відбувається. Існують реалізації Форту написані на Ассемблері, Сі, Пітоні, Паскалі, Яві, а також створені за допомогою цільових компіляторів інших Форт-систем.

Як не хотілося б радісно заявляти, що Форт живе повноцінним життям мови програмування, проте це не зовсім так. Форт міцно зайняв нішу як мову програмування мікроконтролерів, для яких треба організувати досить складну схему функціонування при мінімумі ресурсів. Однак, приклади написання в сучасних умовах великих програм нечисленні, оскільки швидкість розробки на системах RAD перевищує можливості Форт-систем.

Таким чином, за частотою використання, високорівнева мова програмування Форт знаходиться навіть нижче рівня Ассемблера. При вирішенні проблем, що вимагають написання ассемблерного коду Форт має багато переваг: компактність коду, структурний асемблер, що дозволяє легко впроваджувати в тіло ассемблерних слів високорівневі визначення. Для тих, хто хоче вивчати і використовувати Ассемблер, я б порекомендував почати це з вивчення Форту, як я свого часу і зробив. Результатом такого методу навчання буде набагато більш швидке і якісне освоєння Ассемблера, тим більше, що після вивчення основ вам обов'язково захочеться зробити свою Форт-систему (як не кажи, практика - кузня вміння).

Для мене Форт дав багато - після освоєння мови я став помічати, що код в Дельфі став більш коротким і зрозумілим, з'явилася звичка документувати основні методи і поля об'єктів (оскільки в Форті дуже бажано описувати склові діаграми для кожного слова).

Завдяки вивченню книги «Проектування та програмна реалізація експертних систем на персональних ЕВМ» Таусенда і Фохта, я почерпнув багато інформації про внутрішню логіку роботи таких мов як Лісп і Пролог. Книга Келлі і Спайса «Мова програмування ФОРТ» привела мене до чіткого розуміння того, як можна написати свою мову програмування і що таке Форт-асемблер. Для вдосконалення стилю програмування виявилася абсолютно неоціненною за впливом на мене книга Лео Броуді «Спосіб мислення - Форт».

Форт може дати програмісту багато корисного, навіть якщо він буде надалі програмувати іншою мовою. Форт дає те поняття дисципліни програмування, яке необхідне для створення робочої і легко супроводжуваної програми. Поганому програмісту Форт не прощає помилок, а хорошого стимулює до того, щоб стати великим.

Дмитро Спіцин

Корисні посилання на тему

  • http://www.forth.org.ru/- Russian FORTH Interest Group - на сайті розміщена велика добірка книг і статей по Форту, багато посилань на існуючі Форт-системи, які цікавляться дуже рекомендується відвідати

http:/ /www.nncron.ru/index_ru.shtml - просунутий планувальник завдань під Windows, приклад комерційно успішної програми мовою Форт

http://winglion.ru/- саморобний Форт-процесор, сайт містить досить розумний форум щодо Форту

http://www.msyst.ru/quark.htm - Форт-система з підтримкою OpenGL у вигляді .dll

http://ronware.org/- кроссплатформенний Форт Windows 32bit (x86) - Linux 32bit (x86) - WinCE (ARM)

http://forth.gsfc.nasa.gov/- список систем NASA, керованих Фортом