Фокал (Sktgl)

Перейти к навигации Перейти к поиску
Фокал
Семантика императивный
Класс языка язык программирования
Тип исполнения интерпретатор
Появился в 1968
Автор Ричард Мерилл (Richard Merrill)
Система типов один тип — вещественный
Основные реализации музейный FOCAL-81 для POSIX-систем
Диалекты FOCAL-69 («классический»), FOCAL 1971, FOCAL 11, FOCAL-81
Испытал влияние JOSS

Фокал (Focal, акроним от англ. formula calculator) — интерпретируемый язык программирования высокого уровня, переработка языка JOSS.

Наибольший вклад в разработку языка внёс Ричард Мерилл (англ. Richard Merrill), один из ключевых разработчиков DEC PDP-8, создавший изначальный (в 1968 году) и классический (FOCAL-69) интерпретаторы Фокала для PDP-8. Компания DEC позиционировала Фокал как «язык типа JOSS».

Как и ранние версии Бейсика (который появился через 7 лет), интерпретатор Фокала сам обеспечивал всё необходимое программное окружение и не нуждался в операционной системе.

Фокал крайне нетребователен к ресурсам. Так, он работал на самых простых вариантах PDP-8, в том числе на системах без устройств хранения. Многопользовательские варианты интерпретатора поддерживали одновременную работу до четырёх пользователей на телетайпных терминалах. Позднее были созданы реализации для PDP-7/9 и PDP-11.

Компания Coca-Cola использовала внутри фирмы доработанную версию Фокала под названием COKE.

Из советских компьютеров Фокал существовал на Электронике БК-0010/0011 и ДВК встроенный в ПЗУ (в поздних моделях БК — доступный на картридже). Имелись также доступны расширения Фокала для этих машин, написанные различными энтузиастами. Расширения содержали разнообразные дополнительные команды и функции для работы с графикой, звуком, запуска двоичных программ, обработки строк и ряд других.

Существенно расширенная версия языка использовалась в качестве включающего языка в ДИАСП — Диалоговой системе проектирования — специализированной САПР, предназначенной для целей микроэлектроники.

В 1990-е годы энтузиастами была предпринята попытка переноса Фокала на IBM PC (Turbo Focal), но она не вышла из стадии бета-версии, распространявшейся по каналам BBS.

Работоспособность публично доступной в исходных текстах версии Focal-81 была успешно протестирована на следующих платформах и компиляторах:

Из-за схожести синтаксиса Фокал часто сравнивался с Бейсиком. В целом язык уступает Бейсику по своим выразительным возможностям — так, в Фокале совершенно отсутствует строковый тип данных; все переменные на Фокале — числовые (как правило, дробные числа с плавающей запятой). Вместе с тем интерпретатор Фокала гораздо менее требователен к ресурсам (прежде всего к памяти), нежели Бейсик, что позволяло писать более сложные программы в системах с ограниченными ресурсами.

С конца 1980-х годов Фокал не развивается и практически не используется, вышеупомянутые порты Focal-81 были сделаны энтузиастами для развлечения.

Некоторые команды Фокала

[править | править код]
команда описание аналог в Бейсике
COMMENT комментарий (текст следом за командой игнорируется) REM
TYPE вывод на консоль значений констант и выражений PRINT
QUIT штатное завершение выполнения программы END
SET присваивание значения переменной (или элементу массива) LET
ASK ввод значений с консоли INPUT
GOTO безусловный переход GOTO
DO вызов подпрограммы GOSUB
RETURN возврат из подпрограммы RETURN
IF ветвление по значению выражения частично соответствует IF

Интерпретатор языка распознаёт команды по первой её букве, поэтому нет необходимости писать их полностью. Существовали также версии Фокала с ключевыми словами на европейских языках (поставляемые DEC).

Примеры программ

[править | править код]

Стандартный пример Hello World

1.05 C Программа выводит на экран тестовую строку
1.10 T "Hello World !" !
1.20 Q

Решение квадратного уравнения вида ax² + bx + c = 0

1.05 C **** Программа для решения квадратного уравнения вида ax^2 + bx + c = 0
1.10 T "Введите коэффициенты a, b, c для уравнения ax^2 + bx + c = 0" !
1.20 A "a = ", a ! "b = ", b ! "c = ", c
1.30 T ! "Решаем уравнение (", a, ")x2 + (", b, ")x + (", c, ") = 0" ! 
1.35 C **** Вычисляем дискриминант
1.40 S d = b^2 - 4*a*c
1.50 T ! "D = ", d !
1.55 C **** Выясняем количество корней
1.60 I (d) , 3, 4
1.65 С **** первая метка пропущена, поэтому при значении D
1.66 C **** меньшем нуля мы попадаем на следующую за IF строку
2.05 С **** Отрицательный дискриминант - корней нет
2.10 T "Уравнение не имеет действительных корней" !
2.20 Q
3.05 С **** Нулевой дискриминант - один корень
3.10 T "Уравнение имеет один корень" !
3.20 S s = 0
3.30 D 5
3.40 T "x = ", x !
3.90 Q
4.05 С **** Положительный дискриминант - два корня
4.10 T "Уравнение имеет два корня" !
4.20 S s = FSQT(d)
4.30 D 5
4.40 T "x1 = ", x !
4.50 S s = -s
4.60 D 5
4.70 T "x2 = ", x !
4.90 Q
5.05 C **** Подпрограмма вычисления корня, где s - корень дискриминанта со знаком
5.10 S x = (s - b) / (2*a)
5.90 R

Метки строк в Фокале имеют вид <номер_группы>.<номер_строки>. В командах GOTO, IF, DO может указываться как полная метка, так и номер группы без номера строки (вызывает переход на строку с наименьшим номером в этой группе).

Восклицательный знак («!») в командах ASK и TYPE (ввод-вывод с консоли) является (наравне с запятой) разделителем аргументов, и вызывает перевод строки перед вводом или выводом следующего элемента списка.

Команда IF вычисляет значение выражения и переходит по одной из трех меток из предоставленного списка в зависимости от результата — отрицательного, нулевого или положительного. Если метка опущена, то управление передается на следующую за IF строку.

Примечания

[править | править код]

Литература

[править | править код]
  • Абрамов В. А., Стрижков А. В., Федоров А. Р. Диалоговый язык ФОКАЛ. — М. : Высшая школа, 1991. — Кн. 4. — 79 с. — (Программное обеспечение МикроЭВМ). — ISBN 5-06-001785-0.
  • Фролов Г. И., Куправа Г. А., Чаиров Ю. Г. и др. Программирование на языке ФОКАЛ / Под редакцией Л. Н. Преснухина. — М. : Изд. МИЭТа, 1984.
  • Писаревский А. Н., Осетинский Л. Г., Осетинский М. Г. ФОКАЛ — диалоговый язык для миниЭВМ. — Л. : Машиностроение. Ленинградское отделение, 1985. — 195 с.
  • Писаревский А. Н., Осетинский Л. Г., Осетинский М. Г. ФОКАЛ для микро- и мини-компьютеров. — Л. : Машиностроение. Ленинградское отделение, 1988. — 303 с. — ББК 32.97 О75. — УДК 681.3.06(G). — ISBN 5-217-00323-5.
  • Фокал снаружи и изнутри. (пишется). Дата обращения: 30 ноября 2016. Архивировано 30 ноября 2016 года.