stringtranslate.com

бс (язык программирования)

bs— это язык программирования и компилятор/интерпретатор программ небольшого размера в системах UNIX . [1] Команда bsможет быть вызвана либо для интерактивного программирования, либо с файлом, содержащим программу, опционально с аргументами, через оболочку Unix , например, с использованием Shebang (Unix) #!/usr/bin/bs .

На ранней странице руководства говорится: «[ bs] является отдаленным потомком Basic [sic] и SNOBOL4 с добавлением небольшого количества C ». [1]

История

Команда bsпоявляется в UNIX System III Release 3.0 (1980), впервые выпущенной за пределами Bell Labs в 1982 году. [1] Она была написана Диком Хейтом (Ричард К. Хейт) примерно в 1978 году, который описывает ее следующим образом: [2]

В то время я писал bsUnix (V 3?), и все команды конвертировались из ассемблера в C. Так что команда [ Кена Томпсона ] basстала моей bs— своего рода.

В руководстве по версии 3.0 bsна странице 9 заметно упоминается (выделено автором): [3]

Написание программы. Чтобы ввести текст исходной программы в файл UNIX, используйте ed(1). Четыре основных языка, доступных в UNIX, — это C (см. cc(1)), Fortran (см. f77(1)), bs (компилятор/интерпретатор в духе Basic, см. bs(1)) и язык ассемблера (см as(1).).

Хотя команда не выпускалась снаружи до System III, она bsприсутствовала внутри UNIX/TS 1.0 (ноябрь 1978 г.), [4] PWB/UNIX 2.0 (июнь 1979 г.), [4] и CB UNIX edition 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] SVR3 , SVR3.2 (1986 г.); [11] HP-UX ; [12] АИКС ; [13] и A/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.

Дизайн и особенности

Страница руководства bs[1] , якобы единственная спецификация языка программирования, характеризует его следующим образом:

Bs предназначен для задач программирования, где время разработки программы так же важно, как и конечная скорость выполнения. Формальности объявления данных и манипулирования файлами/процессами сведены к минимуму. Построчная отладка, операторы traceand dumpи полезные сообщения об ошибках во время выполнения упрощают тестирование программ. Более того, неполные программы можно отлаживать; внутренние функции можно протестировать до того, как будут написаны внешние функции, и наоборот.

Программа bsкомпилируется и выполняется иначе, чем программы, написанные на других основных языках программирования Unix того времени: C , FORTRAN и ассемблере , соответствующие команды которых компилируют исходный код программы в исполняемый вывод ассемблера ( a.out ). Вместо этого bsпрограмма сначала преобразуется командой bsво внутреннее обратное польское представление ( RPN ) , а затем выполняется внутренней машиной виртуального стека команды . [17] Таким образом, этот язык представляет собой гибрид интерпретатора и компилятора и отличается от программирования Unix от Древней Unix .bs

Язык bsимеет некоторые общие функции и синтаксис с BASIC , SNOBOL и C , причем первые два, по-видимому, послужили источником его названия. Как и BASIC, его можно использовать в интерактивном режиме, либо выполняя операторы немедленно, либо собирая их в программу для последующего выполнения. Как и в SNOBOL4, оператор присваивания ( =) используется для ввода-вывода и bsможет выполнять код в строках, используя свою функцию оценки . Он также включает в себя оператор запроса SNOBOL ( ?), используемый для проверки успешности вычисления выражения. Встроенная formatфункция, ограниченная одним аргументом, поддерживает подмножество printfспецификаторов преобразования формата C, например, «%f».

В языке есть некоторые заметные элементы. Например, его программные функции определяются с использованием синтаксиса, и его функции могут иметь локальные переменные. Кроме того, он может работать в двух режимах: либо интерпретировать (и выполнять) операторы и программы, либо их компилировать, а также переключаться между ними с помощью и . В противном случае его функциональность уникальна только в совокупности (на одном языке), поскольку отдельные функции избыточны с функциями сосуществующих инструментов, таких как Unix Shell , например, файловый ввод-вывод и циклы, и AWK , например, ассоциативные массивы и регулярные выражения. соответствие.fun ... nufbscompilestop

Язык bsпредназначался для удобной разработки и отладки небольших модульных программ. Он имеет набор синтаксиса и функций из предыдущих популярных языков, но в отличие от сценария Shell он компилируется внутренне . Таким образом, по назначению, дизайну и функциям bsон является малоизвестным и скромным предшественником гибридных интерпретируемых/компилируемых языков, таких как Perl и Python .

Примеры синтаксиса

Следующие примеры взяты из bs(1) справочной страницы A/UX . [18]

В этом примере bsв качестве калькулятора используется:

$  bs # Расстояние (дюймы), которое свет проходит за наносекунду. 186000 * 5280 * 12 / 1e9 11.78496        ...# Сложные проценты # (6% на 5 лет на 1000 долларов США). int = .06 / 4 bal = 1000 for i = 1 5 *4 bal = bal + bal*int
bal - 1000 346 .855007
... выход                       

Этот пример представляет собой схему типичной bsпрограммы:

# инициализировать вещи: var1 = 1
open ( «read» , «infile» , «r» )
... # вычислять: while ? ( str = read )
...
next # очистка:
close ( "read" )
... # последний выполненный оператор (выход или остановка): выход # последняя строка ввода:                бегать

Этот пример демонстрирует ввод-вывод:

# Скопируйте «старый файл» в «новый файл».
открыть ( «читать» , «старый файл» , «r» )
открыть ( «записать» , «новый файл» , «w» )
... пока ? ( write = read )
... # закрыть "read" и "write":
close ( "read" )
close ( "write" ) # Конвейер между командами.
open ( "ls" , "!ls *" , "r" )
open ( "pr" , "!pr -2 -h 'List'" , "w" ) while ? ( pr = ls ) ...
... # обязательно закройте (подождите) эти:
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 бутылка%%s пива%%% %s" , n ), s ), end ) nuf   для  n  =  99 ,  n ,  put  =  ""  пойте ( формат ( "%-0.0f" ,  n ),  "на стене," )  пойте ( формат ( "%-0.0f" ,  n ),  "," )  put  =  "сними один, раздай"  -- n  song (( format ( "%-0.0f" ,  n ),  "no" ) [  0  ==  n  ] ,  " на стене." ) next

Смотрите также

Рекомендации

  1. ^ abcd Руководство пользователя UNIX (выпуск 3.0 изд.). Bell Telephone Laboratories, Incorporated. 1980. с. 95.
  2. Личное сообщение Дика Хейта, 10 сентября 2019 г.
  3. ^ ab Руководство пользователя UNIX (PDF) (выпуск 3.0 изд.). Bell Telephone Laboratories, Incorporated. 1980. с. 9.
  4. ^ abc Личная беседа с Джоном Р. Мэши , 9 сентября 2019 г.
  5. ^ "CB/UNIX man 7", Общество наследия Unix , ноябрь 1979 г. Проверено 9 сентября 2019 г.
  6. ^ "CB/UNIX man 1", Общество наследия Unix , ноябрь 1979 г. Проверено 9 сентября 2019 г.
  7. ^ Джей Ди Доан, изд. (май 1981 г.). Руководство программиста CB-UNIX, издание 2.3 (PDF) . Колумбус, Огайо: Bell Telephone Laboratories. п. iii.
  8. ^ Т. А. Долотта; РЦ Хейт; Э. М. Пискорик, ред. (май 1977 г.). "Секция 1". Руководство программиста PWB UNIX, издание 1. Пискатауэй, Нью-Джерси: Bell Telephone Laboratories.
  9. ^ ab «IBM переходит на UNIX». Журнал ПК . 12 июня 1984 г. с. 218.
  10. ^ ab «Том 1». Руководство пользователя AT&T UNIX PC UNIX System V (PDF) . АТ&Т. 1986. с. 8.
  11. ^ «Команды и утилиты тома 1» . Руководство программиста UNIX (PDF) . АТ&Т. 1986. с. 41.
  12. ^ ab «Раздел 1 (AM)» . Справочник по пользовательским командам HP-UX, выпуск 11i (PDF) (1-е изд.). Компания Хьюлетт-Паккард. 2000. с. 93.
  13. ^ ab «Раздел 1 (ac)». Справочник команд AIX версии 6.1 (PDF) (первое издание). Международная корпорация бизнес-машин. 2007. с. 251.
  14. ^ «Раздел 1 (AL)» . Справочник по командам A/UX (PDF) (изд. 2.0). Apple Computer, Inc. 1990. с. 93.
  15. ^ «A/UX: Инструменты разработки», Apple, Inc , 18 февраля 2012 г. Проверено 9 сентября 2019 г.
  16. ^ «Раздел 1 (ac)» . Справочник команд AIX версии 7.2. Корпорация IBM. 2018. с. 282.
  17. Личный разговор с Диком Хейтом, 12 сентября 2019 г.
  18. ^ Файл /FILES, установочный носитель A/UX 3.0.1, Apple Inc. (1993).
  19. ^ "Language BS", 99 бутылок пива , 8 августа 1996 г. Проверено 9 сентября 2019 г.