FOCAL
FOCAL — это язык программирования высокого уровня, разработанный в 1968 году в Массачусетском технологическом институте (MIT) для использования в образовательных целях и на мини-ЭВМ. Название является акронимом от Formula Calculator (калькулятор формул). Язык был создан Ричардом Мерриллом и его коллегами для работы в интерактивном режиме с разделением времени на компьютерах PDP-8, PDP-11 и других системах Digital Equipment Corporation (DEC). FOCAL отличался простотой синтаксиса, малым потреблением памяти и возможностью быстрого написания программ для научных и инженерных расчётов.
История
Разработка и контекст
В конце 1960-х годов в MIT велись работы по созданию удобных инструментов для обучения программированию. Существовавший язык BASIC, разработанный в 1964 году, уже завоевал популярность, но требовал относительно больших ресурсов для интерпретации. FOCAL был задуман как более лёгкая альтернатива, оптимизированная для 12-битных машин PDP-8 с ограниченным объёмом оперативной памяти (часто 4–8 Кбайт). Первая версия была реализована в 1968 году, а в 1969 году вышла версия FOCAL-69, которая стала стандартом для DEC.
Распространение
FOCAL поставлялся в составе операционной системы OS/8 для PDP-8 и был предустановлен на многих машинах. Благодаря своей компактности (интерпретатор занимал всего 2–3 Кбайта) и интерактивности, язык быстро распространился в университетах, лабораториях и на промышленных предприятиях. В СССР FOCAL использовался на советских клонах PDP-8 — серии ЭВМ «Электроника» (например, «Электроника-60», «Электроника-100/25»), а также на некоторых моделях СМ ЭВМ. В 1970-е годы на базе FOCAL были созданы советские реализации, такие как «ФОКАЛ» (ФОрмульный КАЛькулятор), адаптированные для отечественной техники.
Упадок
С развитием микропроцессорной техники и появлением более мощных языков (Pascal, C, более современные версии BASIC) популярность FOCAL начала снижаться к концу 1970-х годов. DEC прекратила активную поддержку языка в 1980-х, сосредоточившись на других продуктах. Тем не менее, FOCAL оставался в использовании на старых системах до середины 1990-х годов, особенно в сфере управления технологическими процессами и в учебных заведениях, где эксплуатировалось устаревшее оборудование.
Синтаксис и особенности
Основные конструкции
FOCAL был интерпретируемым языком с минималистичным синтаксисом. Программа состояла из строк, каждая из которых начиналась с номера (от 1 до 255). Команды выполнялись последовательно, если не было операторов перехода. Основные команды:
- SET — присваивание значения переменной.
- IF — условный оператор (без ELSE, только с переходом по метке).
- GOTO — безусловный переход.
- FOR — цикл с заданным шагом.
- WRITE — вывод на экран или печать.
- READ — ввод с клавиатуры.
- DO — вызов подпрограммы (аналог GOSUB в BASIC).
- RETURN — возврат из подпрограммы.
Типы данных
FOCAL поддерживал только один тип данных — числа с плавающей запятой (обычно 6-7 значащих цифр). Строковые переменные отсутствовали; текст выводился только через кавычки в команде WRITE. Массивы были одномерными и задавались фиксированным размером (например, DIM A(10)). Имена переменных состояли из одной буквы (A–Z) или буквы с цифрой (A1, B2 и т.д.).
Пример программы
`` 01.10 SET A=5 01.20 FOR I=1,10,1; SET A=A*I; WRITE I,A 01.30 IF (A-1000) 1.20; WRITE "Достигнут предел" ``
Эта программа вычисляет факториал числа 5, умножая его на числа от 1 до 10, и выводит промежуточные результаты. Если результат превышает 1000, программа выводит сообщение.
Отличия от BASIC
- Компактность: FOCAL требовал меньше памяти, чем ранние версии BASIC.
- Отсутствие строковых операций: BASIC имел строковые функции, FOCAL — нет.
- Условный переход: IF в FOCAL не содержал блока THEN, а только номер строки для перехода.
- Циклы: FOR в FOCAL был более гибким — можно было задавать шаг и выполнять несколько команд в одной строке через точку с запятой.
- Работа с файлами: FOCAL имел встроенные команды для работы с магнитной лентой и дисками (OPEN, CLOSE), что было редкостью для интерпретаторов того времени.
Применение
Образование
FOCAL широко использовался в школах и вузах для обучения основам программирования и численным методам. Благодаря простоте синтаксиса, студенты могли быстро освоить базовые концепции (переменные, циклы, условные операторы) без изучения сложных структур. В СССР на базе FOCAL были созданы учебные пособия и курсы для средних специальных учебных заведений.
Научные и инженерные расчёты
Язык применялся для решения задач математического моделирования, обработки экспериментальных данных, расчёта траекторий, статистического анализа. На PDP-8 с FOCAL работали лаборатории физики, химии, биологии, а также конструкторские бюро. Например, в 1970-е годы на заводе «Электроника» в Воронеже FOCAL использовался для расчёта параметров электронных схем.
Управление оборудованием
FOCAL мог взаимодействовать с внешними устройствами через порты ввода-вывода. Это позволяло использовать его для управления станками, измерительными приборами, роботами. В СССР на базе «Электроники-60» с FOCAL создавались системы управления технологическими процессами на заводах.
Разработка игр
Несмотря на отсутствие графики, на FOCAL писались текстовые игры и симуляторы. Одной из известных игр была «Lunar Lander» (посадка на Луну), портированная с BASIC. В СССР на FOCAL создавались учебные игры по математике и физике.
Реализации
Оригинальные версии DEC
- FOCAL-69 — первая стабильная версия для PDP-8.
- FOCAL-71 — улучшенная версия с поддержкой файлов и подпрограмм.
- FOCAL-11 — версия для PDP-11 (1972 год), работавшая под управлением RT-11.
- FOCAL-16 — адаптация для 16-битных машин.
Советские реализации
- ФОКАЛ — точный клон FOCAL-69 для ЭВМ «Электроника-60», «Электроника-100/25», «Электроника-НЦ».
- ФОКАЛ-М — модификация для СМ ЭВМ (серия «СМ-1», «СМ-2»), разработанная в НИИ «Дельта» (Москва).
- ФОКАЛ-Д — версия с расширенными возможностями для диалогового режима, созданная в МГУ.
Эмуляторы и современные версии
В настоящее время FOCAL можно запустить на эмуляторах PDP-8 (например, SIMH) или на современных компьютерах через интерпретаторы, написанные на C/C++ (проект FOCAL на GitHub). Существуют также порты для Windows, Linux и macOS, поддерживающие основные команды языка.
Критика
FOCAL подвергался критике за следующие недостатки:
- Ограниченные типы данных — отсутствие строк и массивов с несколькими измерениями усложняло обработку текста и сложных структур.
- Отсутствие структурного программирования — язык не поддерживал процедуры, функции, локальные переменные, что приводило к «спагетти-коду» при больших программах.
- Слабая отладка — сообщения об ошибках были краткими и не всегда понятными.
- Зависимость от оборудования — FOCAL был тесно привязан к архитектуре PDP-8 и не переносился на другие платформы без значительных изменений.
Тем не менее, для своего времени FOCAL был эффективным инструментом, особенно в условиях ограниченных ресурсов.
Интересные факты
- FOCAL был одним из первых языков, реализовавших интерпретатор в ПЗУ (на микросхемах памяти), что позволяло загружать его мгновенно при включении компьютера.
- В СССР на базе FOCAL была разработана система автоматизированного обучения «АОС-ФОКАЛ», использовавшаяся в ряде техникумов.
- Название языка иногда путают с термином «фокальное расстояние» (focal length), но это не связано.
- В 1975 году в журнале «Byte» была опубликована статья, в которой FOCAL сравнивался с BASIC и признавался более удобным для малых машин.
Источники
- Р. Меррилл, «FOCAL: A Language for the PDP-8», Digital Equipment Corporation, 1969.
- С. В. Зеленко, «Язык ФОКАЛ и его применение», Москва, «Радио и связь», 1983.
- Документация DEC: «FOCAL-69 Programming Manual», 1970.
- Журнал «Byte», № 1, 1975, статья «FOCAL vs. BASIC».
- Архив эмулятора SIMH: документация по PDP-8 и FOCAL.
- Статья «FOCAL (язык программирования)» в Википедии (русская версия), 2023.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →