Фокал
Семантика: | |
---|---|
Тип исполнения: | |
Появился в: |
1968 |
Автор: |
Ричард Мерилл (Richard Merrill) |
Система типов: |
один тип — вещественный |
Основные реализации: |
музейный FOCAL-81 для POSIX-систем |
Диалекты: |
FOCAL-69 («классический»), FOCAL 1971, FOCAL 11, FOCAL-81 |
Испытал влияние: |
Фокал (Focal, акроним от англ. formula calculator) — интерпретируемый язык программирования высокого уровня, переработка языка JOSS.
Наибольший вклад в разработку языка внёс Ричард Мерилл (англ. Richard Merrill), один из ключевых разработчиков DEC PDP-8, создавший изначальный (в 1968 году) и классический (FOCAL-69) интерпретаторы Фокала для PDP-8. Компания DEC позиционировала Фокал как «язык типа JOSS».
Как и ранние версии Бейсика, интерпретатор Фокала сам обеспечивал всё необходимое программное окружение и не нуждался в операционной системе.
Фокал крайне нетребователен к ресурсам. Так, он работал на самых простых вариантах PDP-8 (в том числе на системах без устройств хранения). Многопользовательские варианты интерпретатора поддерживали одновременную работу до четырёх пользователей на телетайпных терминалах. Позднее были созданы реализации для PDP-7/9 и PDP-11.
Компания Coca-Cola использовала внутри фирмы доработанную версию Фокала, под названием COKE.
Из советских компьютеров Фокал существовал на Электронике БК-0010/0011 и ДВК встроенный в ПЗУ (в поздних моделях БК — доступный на картридже). Были также доступны расширения Фокала для этих машин, написанные различными энтузиастами. Расширения содержали разнообразные дополнительные команды и функции для работы с графикой, звуком, запуска двоичных программ, обработки строк и пр.
Существенно расширенная версия языка использовалась в качестве включающего языка в ДИАСП — Диалоговой системе проектирования — специализированной САПР, предназначенной для целей микроэлектроники.
В 1990-е годы энтузиастами была предпринята попытка переноса Фокала на IBM PC (Turbo Focal), но она не вышла из стадии бета-версии, которая распространялась по каналам BBS.
Работоспособность публично доступной в исходных текстах версии Focal-81 была успешно протестирована на следующих платформах и компиляторах:
- Sun SPARC
- HP (9000 модель 720)
- gcc 2.5.8 (ANSI C) и HP cc (ANSI C) под HP-UX 8.05
- x86
- MS C (ANSI C) и LSI C-86 (близко к ANSI C) под MS-DOS
- MS Visual C++ под Win32 (не тестировалась)
Из-за схожести синтаксиса Фокал часто сравнивался с Бейсиком. В целом, язык уступает Бейсику по своим выразительным возможностям, например, в Фокале совершенно отсутствует строковый тип данных, все переменные на Фокале — числовые (как правило, дробные числа с плавающей запятой). Вместе с тем, интерпретатор Фокала гораздо менее требователен к ресурсам (прежде всего к памяти), нежели Бейсик, что позволяет делать более сложные программы на урезанных по ресурсам системах.
С конца 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. ISBN 5-06-001785-0
- Г. И. Фролов, Г. А. Куправа, Ю. Г. Чаиров и др.; Под редакцией Л. Н. Преснухина; «Программирование на языке ФОКАЛ». М.Изд-МИЭТа, 1984
- А. Н. Писаревский, Л. Г. Осетинский, М. Г. Осетинский; «ФОКАЛ — диалоговый язык для миниЭВМ». Л."Машиностроение". Ленинградское отделение. 1985
Ссылки
- [www.catb.org/retro/ The Retrocomputing Museum] — интерпретатор FOCAL-81 для POSIX систем.
- [simh.trailing-edge.com/ Эмулятор различных ЭВМ], на котором можно запускать [simh.trailing-edge.com/software.html Фокал]
- [www.cs.uiowa.edu/~jones/pdp8/focal/ DEC’s FOCAL 1969 Promotional Booklet] (англ.)
- [home.tiscali.be/be042720/44/focal.htm Focal-81 в исходниках]
Отрывок, характеризующий Фокал
– Это ужасно! Нет, это ужасно, ужасно! – вдруг заговорила Наташа и опять зарыдала. – Я умру, дожидаясь года: это нельзя, это ужасно. – Она взглянула в лицо своего жениха и увидала на нем выражение сострадания и недоумения.– Нет, нет, я всё сделаю, – сказала она, вдруг остановив слезы, – я так счастлива! – Отец и мать вошли в комнату и благословили жениха и невесту.
С этого дня князь Андрей женихом стал ездить к Ростовым.
Обручения не было и никому не было объявлено о помолвке Болконского с Наташей; на этом настоял князь Андрей. Он говорил, что так как он причиной отсрочки, то он и должен нести всю тяжесть ее. Он говорил, что он навеки связал себя своим словом, но что он не хочет связывать Наташу и предоставляет ей полную свободу. Ежели она через полгода почувствует, что она не любит его, она будет в своем праве, ежели откажет ему. Само собою разумеется, что ни родители, ни Наташа не хотели слышать об этом; но князь Андрей настаивал на своем. Князь Андрей бывал каждый день у Ростовых, но не как жених обращался с Наташей: он говорил ей вы и целовал только ее руку. Между князем Андреем и Наташей после дня предложения установились совсем другие чем прежде, близкие, простые отношения. Они как будто до сих пор не знали друг друга. И он и она любили вспоминать о том, как они смотрели друг на друга, когда были еще ничем , теперь оба они чувствовали себя совсем другими существами: тогда притворными, теперь простыми и искренними. Сначала в семействе чувствовалась неловкость в обращении с князем Андреем; он казался человеком из чуждого мира, и Наташа долго приучала домашних к князю Андрею и с гордостью уверяла всех, что он только кажется таким особенным, а что он такой же, как и все, и что она его не боится и что никто не должен бояться его. После нескольких дней, в семействе к нему привыкли и не стесняясь вели при нем прежний образ жизни, в котором он принимал участие. Он про хозяйство умел говорить с графом и про наряды с графиней и Наташей, и про альбомы и канву с Соней. Иногда домашние Ростовы между собою и при князе Андрее удивлялись тому, как всё это случилось и как очевидны были предзнаменования этого: и приезд князя Андрея в Отрадное, и их приезд в Петербург, и сходство между Наташей и князем Андреем, которое заметила няня в первый приезд князя Андрея, и столкновение в 1805 м году между Андреем и Николаем, и еще много других предзнаменований того, что случилось, было замечено домашними.
В доме царствовала та поэтическая скука и молчаливость, которая всегда сопутствует присутствию жениха и невесты. Часто сидя вместе, все молчали. Иногда вставали и уходили, и жених с невестой, оставаясь одни, всё также молчали. Редко они говорили о будущей своей жизни. Князю Андрею страшно и совестно было говорить об этом. Наташа разделяла это чувство, как и все его чувства, которые она постоянно угадывала. Один раз Наташа стала расспрашивать про его сына. Князь Андрей покраснел, что с ним часто случалось теперь и что особенно любила Наташа, и сказал, что сын его не будет жить с ними.
– Отчего? – испуганно сказала Наташа.
– Я не могу отнять его у деда и потом…
– Как бы я его любила! – сказала Наташа, тотчас же угадав его мысль; но я знаю, вы хотите, чтобы не было предлогов обвинять вас и меня.
Старый граф иногда подходил к князю Андрею, целовал его, спрашивал у него совета на счет воспитания Пети или службы Николая. Старая графиня вздыхала, глядя на них. Соня боялась всякую минуту быть лишней и старалась находить предлоги оставлять их одних, когда им этого и не нужно было. Когда князь Андрей говорил (он очень хорошо рассказывал), Наташа с гордостью слушала его; когда она говорила, то со страхом и радостью замечала, что он внимательно и испытующе смотрит на нее. Она с недоумением спрашивала себя: «Что он ищет во мне? Чего то он добивается своим взглядом! Что, как нет во мне того, что он ищет этим взглядом?» Иногда она входила в свойственное ей безумно веселое расположение духа, и тогда она особенно любила слушать и смотреть, как князь Андрей смеялся. Он редко смеялся, но зато, когда он смеялся, то отдавался весь своему смеху, и всякий раз после этого смеха она чувствовала себя ближе к нему. Наташа была бы совершенно счастлива, ежели бы мысль о предстоящей и приближающейся разлуке не пугала ее, так как и он бледнел и холодел при одной мысли о том.
Накануне своего отъезда из Петербурга, князь Андрей привез с собой Пьера, со времени бала ни разу не бывшего у Ростовых. Пьер казался растерянным и смущенным. Он разговаривал с матерью. Наташа села с Соней у шахматного столика, приглашая этим к себе князя Андрея. Он подошел к ним.
– Вы ведь давно знаете Безухого? – спросил он. – Вы любите его?
– Да, он славный, но смешной очень.
И она, как всегда говоря о Пьере, стала рассказывать анекдоты о его рассеянности, анекдоты, которые даже выдумывали на него.
– Вы знаете, я поверил ему нашу тайну, – сказал князь Андрей. – Я знаю его с детства. Это золотое сердце. Я вас прошу, Натали, – сказал он вдруг серьезно; – я уеду, Бог знает, что может случиться. Вы можете разлю… Ну, знаю, что я не должен говорить об этом. Одно, – чтобы ни случилось с вами, когда меня не будет…
– Что ж случится?…
– Какое бы горе ни было, – продолжал князь Андрей, – я вас прошу, m lle Sophie, что бы ни случилось, обратитесь к нему одному за советом и помощью. Это самый рассеянный и смешной человек, но самое золотое сердце.
Ни отец и мать, ни Соня, ни сам князь Андрей не могли предвидеть того, как подействует на Наташу расставанье с ее женихом. Красная и взволнованная, с сухими глазами, она ходила этот день по дому, занимаясь самыми ничтожными делами, как будто не понимая того, что ожидает ее. Она не плакала и в ту минуту, как он, прощаясь, последний раз поцеловал ее руку. – Не уезжайте! – только проговорила она ему таким голосом, который заставил его задуматься о том, не нужно ли ему действительно остаться и который он долго помнил после этого. Когда он уехал, она тоже не плакала; но несколько дней она не плача сидела в своей комнате, не интересовалась ничем и только говорила иногда: – Ах, зачем он уехал!
Но через две недели после его отъезда, она так же неожиданно для окружающих ее, очнулась от своей нравственной болезни, стала такая же как прежде, но только с измененной нравственной физиогномией, как дети с другим лицом встают с постели после продолжительной болезни.