
- •Введение в Декларативный Язык программирования пролог
- •Классификация яву по области применения
- •1. Классификация языкoв прoграммирoвания
- •1. Плoхая инфoрмирoваннoсть пoльзoвателей.
- •2. Кoнсерватизм пoльзoвателей.
- •3. Неoбхoдимoсть решения специализирoванных задач.
- •4. Oбилие свoйств, кoтoрыми oбладают языки.
- •6. Oтличия при реализации языка oт стандарта.
- •7. Существoвание различных эвм.
- •Универсальный язык программирования
- •КраткаЯ характеристика Языка apl
- •КраткаЯ характеристика Языка форт
- •23 34 7 9 4 Сумнечет.
КраткаЯ характеристика Языка форт
Язык ФОРТ был разработан и реализован Чарльзом Муром - сотрудником Национальной астрономической лаборатории США в 1970 году. Существовавшие в то время ЯП не обеспечивали на взгляд Ч.Мура необходимые средства управления процессами, поэтому он создал новый ЯП и применил его для для управления телескопами. Ч.Мур относил свой ЯП к четвертому поколению ЯП и хотел назвать его FOURTH (четвертый), но модель ЭВМ, которую он использовал, допускала только 5-символьные идентификаторы. Поэтому он остановился на сокращении FORTH, которое также носит достаточно символический характер - “вперед” (т.е. его ЯП как бы являлся шагом вперед).
ФОРТ стал активно распространяться с середины 1970 годов после появления микро-ЭВМ. К середине 1980-х годов он даже вышел на 3-е место среди ЯП для ПЭВМ после Бейсика и Паскаля. В первую очередь, это было связано с активной деятельностью по распространению языка так называемой ФИГ (Forth Interest Group), созданной в 1977 году и которой удалось создать упрощенный дешевый интерпретатор для ПЭВМ: FIG - Forth, завоевавший огромную популярность.
Основные области применения ФОРТа реализация операционных и экспертных систем, трансляторов, систем машинной графики, сбора данных, управления станками и роботами.
Наиболее известный факт использования языка связан с подводным аппаратом "Арго", который при поиске затонувшего в начале века суперкорабля Титаник применял систему управления видеокамерами, реализованную на ФОРТе.
Стандарт ФОРТа появился в 1983 году.
Рассмотрим основные особенности ФОРТа:
1. Вообще говоря, появление Форта было встречено “программистской общественностью” неоднозначно. Специалисты не могли прийти к общему мнению по таким вопросам как:
можно ли, вообще, ФОРТ назвать языком программирования;
если ФОРТ является ЯП, то - низкого или высокого уровня;
что такое ФОРТ в общей тенденции развития ЯП: естественная веха или шаг в сторону.
В первую очередь, это было связано с тем, что ФОРТ правомерно рассматривать с различных позиций, в том числе как:
операционную систему, т.к. он имеет прямой доступ к аппаратному обеспечению (hardware);
АССЕМБЛЕР, т.к. команды ФОРТа могут быть определены на уровне мнемоники ассемблера;
язык высокого уровня, т.к. он имеет механизм построения и использования определений по модульному принципу;
инструмент (среду) для создания проблемно-ориентированных языков;
концепцию разработки ПО.
При этом все команды независимо от уровня доступа обрабатываются одним компилятором или интерпретатором. Таким образом, следует говорить не о языке ФОРТ, а о ФОРТ-системе или ФОРТ-машине, которая включает ОС, интерпретатор, компилятор, ассемблер, редактор текста и прочие “инструменты” программиста. В частности, ФОРТ можно назвать прообразом современных интегрированных систем.
Вся ФОРТ-система занимает от 16 до 32К оперативной памяти, в том числе ФОРТ-транслятор - 6.5К, ОС ФОРТ - 8К.
2. В качестве вычислительной модели ФОРТ использует стековую машину, организованную по методу LIFO, и большинство операций могут сообщаться только через стек данных (магазин). Как следствие выбора такой модели в ФОРТе отсутствуют оператор GO TO и метки операторов.
3. Для записи программ используется постфиксная (обратная) польская запись. Например, операция сложения двух чисел будет выглядеть следующим образом: 3 4 + вместо привычной (инфиксной) записи: 4+3.
Такая форма записи идеально приспособлена для работы с магазином, а кроме того обладает еще двумя важными преимуществами: позволяет отказаться от использования скобок и не требует явного указания параметров при вызове подпрограмм.
3. Основным понятием ФОРТа является слово - эквивалент команды (операции, функции) традиционных ЯП, которое определяется как последовательность символов без пробелов. Например, BEGIN, LOOP, 301, ПОИСК.
Программа на ФОРТе представляет собой последовательность отдельных слов, воспринимаемых аналогично печатному тексту. Например, “Мама мыла раму”. Каждое слово обрабатывается независимо, т.е. считается командой. Операнды выбираются из стека. Это фактически означает, что в ФОРТе отсутствует (почти) синтаксис.
Семантика слова в программе определяется на момент исполнения либо реализацией самой ФОРТ-системы, которая согласно стандарту содержит примерно 132 ключевых слова (стандартный словарь), либо непосредственно программистом, который вводит или меняет слова через свои собственные словари.
Примеры стандартных (т.е. встроенных в ФОРТ-систему) команд3:
Команда |
Типовой ФОРТ-комментарий4 |
Пояснение |
+ |
(n1 n2 -- сумма) |
Сложение двух верхних элементов стека |
- |
(n1 n2 -- разность) |
Вычитание из верхнего элемента стека следующего за ним |
* |
(n1 n2 -- произведение) |
Перемножение двух верхних элементов стека |
/ |
(n1 n2 --частное) |
Деление верхнего элемента стека на следующий за ним |
MOD |
(n1 n2 -- остаток) |
Определение остатка от деления верхнего элемента стека на следующий за ним |
/MOD |
(n1 n2 -- и частное, и остаток) |
Деление верхнего элемента стека на следующий за ним. Запоминаются и частное, и остаток |
SWAP |
(n1 n2 -- n2 n1) |
Перестановка двух верхних элементов стека |
DUP |
(n -- n n) |
Дублирование верхнего элемента стека |
ROT |
(n1 n2 n3 -- n2 n3 n1) |
Ротация трех верхних элементов стека |
DROP |
(n -- ) |
Удаление верхнего элемента стека |
В стандарт ФОРТа входят также аналогичные операции с парами элементов из стека.
Примеры команд организации цикла:
DO LOOP (семантика этой команды поясняется позже в типовом примере);
BEGIN UNTIL
Определением слова считается текст, который начинается с двоеточия и заканчивается точкой с запятой
:<идентификатор слова> ;
Любые слова можно объединять в новые определения и таким образом по частям последовательно формировать и отлаживать программу по методу “снизу-вверх”.
Все определения помещаются в словарь. Словарей может быть несколько. Их можно формировать, загружать в оперативную память, удалять по ходу выполнения программы. Таким образом, любое слово (в том числе и стандартное) может иметь, вообще говоря, несколько определений и его семантика может меняться в ходе выполнения программы.
Допускаются определения слов в терминах Ассемблера.
С учетом вышесказанного неудивительно, что объектный код Форта даже более компактен, чем машинный, т.к. каждая его команда занимает всего 2 байта, а их описания хранятся в словаре.
4. Программа ФОРТа делится на блоки с номерами, каждая строка внутри блока нумеруется. В ФОРТе отсутствуют сопрограммы, но их можно реализовать на базе стандартных функций, реализующих операции над блоками, например
-
LOAD
(n -- )
Загрузка блока с номером n в оперативную память.
Во время исполнения ФОРТ-программы возможно динамическое переключение режимов: интерпретация/компиляция.
5. ФОРТ предоставляет полный доступ к особенностям конкретной ЭВМ.
6. Для внешнего представления чисел используется переключение наиболее общеупотребительных систем счисления:
DECIMAL десятичная,
HEX шестнадцатиричная,
OCTAL восьмеричная.
В ФОРТе имеются возможности проводить вычисления с двойной точностью, определять константы, переменные и массивы, организовывать форматный вывод. Естественно, что на основе аппарата определения слов можно вводить и свои собственные типы данных.
В качестве недостатков ФОРта можно отметить следующие:
ФОРТ-система не защищена от ошибок программиста;
отсутствует контроль типов;
отсутствуют средства работы с файлами;
имеются ограничения на представление и обработку чисел;
программы трудно понимаются из-за выбранной системы записи и неочевидных манипуляций со стеком;
в некоторых реализациях отсутствует независимый программный продукт.
Типовой пример:
: СУМНЕЧЕТ
0 SWAP 0
DO
SWAP DUP 2 MOD
IF +
ELSE DROP
THEN
LOOP
;