бс (язык программирования)
Разработано | Ричард С. Хейт |
---|---|
Впервые появился | 1980 год |
ТЫ | Юникс |
Под влиянием | |
БЕЙСИК , СНОБОЛ4 , С |
bs — это язык программирования и компилятор/интерпретатор программ небольшого размера в системах UNIX . [1] bs Команда может быть вызвана либо для интерактивного программирования, либо с файлом, содержащим программу, опционально с аргументами, через оболочку Unix , например, с использованием Shebang (Unix). #!/usr/bin/bs.
На ранней странице руководства говорится: «[ bs] является дальним потомком Basic [sic] и SNOBOL4 небольшого количества C ». с добавлением [1]
История
[ редактировать ]The bs Команда появляется в UNIX System III Release 3.0 (1980), впервые выпущенной за пределами Bell Labs в 1982 году. [1] Он был написан Диком Хейтом (Ричард К. Хейт) примерно в 1978 году, который пересказывает его следующим образом: [2]
Я написал bs в то время Unix (V 3?) и все команды конвертировались из ассемблера в C. Итак, [ Кен Томпсон ] bas стал моим bs — типа того.
В руководстве по версии 3.0 упоминается bs на стр. 9 (выделено автором): [3]
Написание программы. Чтобы ввести текст исходной программы в файл UNIX, используйте ed(1). Четыре основных языка, доступных в UNIX, — это C (см. cc(1)), Фортран (см. f77(1)), bs (компилятор/интерпретатор в духе Basic, см. bs(1)) и язык ассемблера (см. as(1)).
Хотя он и не выпускался наружу до Системы III, bs команда присутствовала внутри UNIX/TS 1.0 (ноябрь 1978 г.), [4] PWB/UNIX 2.0 (июнь 1979 г.), [4] и CB UNIX версии 2.1 (ноябрь 1979 г.) [5] [6] и 2.3 (1981). [7] bs команда не появляется в некоторых более ранних внутренних выпусках, например, в выпуске группы поддержки UNIX от марта 1977 года, [4] ни руководство PWB/UNIX от мая 1977 г., [8] предполагая его создание примерно в 1978 году. Он не появляется ни в одной версии Research Unix , ни в Berkeley Software Distribution .
Впоследствии и в 1990-е гг. bs был включен во множество коммерческих операционных систем, производных от System III или System V, включая, помимо прочего: PC / IX ; [9] UNIX System V выпусков 2 и 3: SVR2 , [10] СВР3 , СВР3.2 (1986 г.); [11] HP-UX ; [12] ЭКС ; [13] и А/UX . [14] (В Руководстве пользователя для ПК AT&T UNIX (3B1) особо упоминается, что bs команда недоступна, но она доступна в SVR3.2. [10] )
Изредка, bs рекламировался как один из основных языков программирования для разработки под UNIX. [3] [9] [15] Однако, bs не включен ни в команды и утилиты POSIX.1 (стандартный список команд Unix ), ни в единую спецификацию UNIX и не поставляется с большинством современных операционных систем. Например, в Linux аналогичный синтаксис и функциональность обеспечиваются оболочками bc , Perl и POSIX .
В 21 веке, bs присутствует, по крайней мере, в HP-UX Release 11i (2000 г.), [12] а также AIX версии 6.1 (2007 г.) [13] и 7.2 (2018 г.), [16] вероятно, из-за их UNIX System V. наследия
Дизайн и особенности
[ редактировать ]The bs[1] man-страница , якобы единственная спецификация языка программирования, характеризует его следующим образом:
Bs предназначен для задач программирования, где время разработки программы так же важно, как и конечная скорость выполнения. Формальности объявления данных и манипулирования файлами/процессами сведены к минимуму. Построчная отладка, trace и dump Операторы и полезные сообщения об ошибках во время выполнения упрощают тестирование программы. Более того, неполные программы можно отлаживать; внутренние функции можно протестировать до того, как будут написаны внешние функции, и наоборот.
А bs Программа компилируется и выполняется иначе, чем программы, написанные на других основных языках программирования Unix того времени: C , FORTRAN и языке ассемблера , чьи соответствующие команды компилируют исходный код программы в исполняемый вывод ассемблера ( a.out ). Вместо этого bs программа сначала конвертируется bs команду во внутреннее обратной полировки ( RPN ) промежуточное представление команды , а затем выполняется внутренней машиной виртуального стека . [17] bs язык, таким образом, представляет собой гибрид интерпретатора и компилятора и отличается от программирования Unix от Древней Unix .
The bs язык имеет некоторые общие функции и синтаксис с BASIC , SNOBOL и C , причем первые два, по-видимому, послужили источником его названия. Как и BASIC, его можно использовать в интерактивном режиме, либо немедленно выполняя операторы, либо собирая их в программу для последующего выполнения. Как и в SNOBOL4, оператор присваивания ( =) используется для ввода/вывода и bs может выполнять код в строках, используя свою eval функцию . Он также включает в себя оператор опроса SNOBOL ( ?) используется для проверки того, успешна ли оценка выражения или нет. Встроенный format функция, ограниченная одним аргументом, поддерживает подмножество C printf спецификаторы преобразования формата, например, «%f».
В языке есть некоторые заметные элементы. Например, его программные функции определяются с помощью fun ... nuf синтаксис и его функции могут иметь локальные переменные. Также, bs может работать в двух режимах: либо интерпретировать (и выполнять) операторы и программы, либо их компилировать и переключаться между ними с помощью compile и stop. В противном случае его функциональность уникальна только в совокупности (на одном языке), поскольку отдельные функции избыточны с функциями сосуществующих инструментов, таких как Unix Shell , например, файловый ввод-вывод и циклы, и AWK , например, ассоциативные массивы и регулярные выражения. соответствие.
The bs язык предназначался для удобной разработки и отладки небольших модульных программ. Он имеет набор синтаксиса и функций из предыдущих популярных языков, но в отличие от сценария Shell он компилируется внутренне . Таким образом, по назначению, дизайну и функциям, bs является малоизвестным и скромным предшественником гибридных интерпретируемых/компилируемых языков, таких как Perl и Python .
Примеры синтаксиса
[ редактировать ]Следующие примеры взяты из A/UX. bs(1) справочная страница . [18]
В этом примере используется bs как калькулятор:
$ bs # Distance (inches) light travels in a nanosecond. 186000 * 5280 * 12 / 1e9 11.78496 ... # Compound interest # (6% for 5 years on $1,000). int = .06 / 4 bal = 1000 for i = 1 5*4 bal = bal + bal*int bal - 1000 346.855007 ... exit
Этот пример представляет собой схему типичного bs программа:
# initialize things: var1 = 1 open("read", "infile", "r") ... # compute: while ?(str = read) ... next # clean up: close("read") ... # last statement executed (exit or stop): exit # last input line: run
Этот пример демонстрирует ввод-вывод:
# Copy "oldfile" to "newfile". open("read", "oldfile", "r") open("write", "newfile", "w") ... while ?(write = read) ... # close "read" and "write": close("read") close("write") # Pipe between commands. open("ls", "!ls *", "r") open("pr", "!pr -2 -h ’List’", "w") while ?(pr = ls) ... ... # be sure to close (wait for) these: close("ls") close("pr")
Пример программы
[ редактировать ]Ниже приведен образец bs программа, которая генерирует слова песни «99 бутылок пива» , используя /usr/bin/bs. [19]
fun sing(n, end) s s = ("s", "")[ match(n, "^1$") ] put = format(format(format("%s bottle%%s of beer%%%%s", n), s), end) nuf for n = 99, n, put = "" sing(format("%-0.0f", n), " on the wall,") sing(format("%-0.0f", n), ",") put = "take one down, pass it around," --n sing((format("%-0.0f", n), "no")[ 0 == n ], " on the wall.") next
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Перейти обратно: а б с д Руководство пользователя UNIX (выпуск 3.0 изд.). Bell Telephone Laboratories, Incorporated. 1980. с. 95.
- ↑ Личное сообщение Дика Хейта, 10 сентября 2019 г.
- ^ Перейти обратно: а б Руководство пользователя UNIX (PDF) (выпуск 3.0 изд.). Bell Telephone Laboratories, Incorporated. 1980. с. 9.
- ^ Перейти обратно: а б с Личный разговор с Джоном Р. Мэши , 9 сентября 2019 г.
- ^ «CB/UNIX man 7» , Общество наследия Unix , ноябрь 1979 г. Проверено 9 сентября 2019 г.
- ^ «CB/UNIX man 1» , Общество наследия Unix , ноябрь 1979 г. Проверено 9 сентября 2019 г.
- ^ Дж. Д. Доан, изд. (май 1981 г.). Руководство программиста CB-UNIX, издание 2.3 (PDF) . Колумбус, Огайо: Bell Telephone Laboratories. п. iii.
- ^ Т. А. Долотта; РЦ Хейт; Э. М. Пискорик, ред. (май 1977 г.). «Раздел 1». Руководство программиста PWB UNIX, издание 1 . Пискатауэй, Нью-Джерси: Bell Telephone Laboratories.
- ^ Перейти обратно: а б «IBM переходит на UNIX». Журнал ПК . 12 июня 1984 г. с. 218.
- ^ Перейти обратно: а б «Том 1». Руководство пользователя AT&T UNIX PC UNIX System V (PDF) . АТ&Т. 1986. с. 8.
- ^ «Том 1 Команды и утилиты». Руководство программиста UNIX (PDF) . АТ&Т. 1986. с. 41.
- ^ Перейти обратно: а б «Раздел 1 (АМ)». Справочник по пользовательским командам HP-UX, выпуск 11i (PDF) (1-е изд.). Компания Хьюлетт-Паккард. 2000. с. 93.
- ^ Перейти обратно: а б «Раздел 1 (ас)». Справочник команд AIX версии 6.1 (PDF) (первое издание). Международная корпорация бизнес-машин. 2007. с. 251.
- ^ «Раздел 1 (АЛ)». Справочник по командам A/UX (PDF) (изд. 2.0). Apple Computer, Inc. 1990. с. 93.
- ^ «A/UX: Инструменты разработки» , Apple, Inc , 18 февраля 2012 г. Проверено 9 сентября 2019 г.
- ^ «Раздел 1 (ас)». Справочник команд AIX версии 7.2 . Корпорация IBM. 2018. с. 282.
- ↑ Личный разговор с Диком Хейтом, 12 сентября 2019 г.
- ^ /FILES файл, установочный носитель A/UX 3.0.1, Apple Inc. (1993 г.)
- ^ "Language BS" , 99 бутылок пива , 8 августа 1996 г. Проверено 9 сентября 2019 г.