Открыть сервис

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 →