Фокальная плоскость
- 1 year ago
- 0
- 0
Фокал ( Focal , акроним от англ. formula calculator ) — интерпретируемый язык программирования высокого уровня , переработка языка JOSS .
Наибольший вклад в разработку языка внёс ( англ. ), один из ключевых разработчиков 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
строку.