stringtranslate.com

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

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]

В то время я писал bsна Unix (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 editions 2.1 (ноябрь 1979 г.) [5] [6] и 2.3 (1981 г.). [7] Эта bsкоманда не появляется в некоторых более ранних внутренних выпусках, например, в выпуске UNIX Support Group от марта 1977 г. [4] или в руководстве PWB/UNIX от мая 1977 г. [8], что предполагает ее создание около 1978 г. Она не появляется ни в одной из версий Research Unix или Berkeley Software Distribution .

Впоследствии и в 1990-х годах bsбыла включена в различные коммерческие операционные системы, производные от System III или System V, включая, но не ограничиваясь: PC/IX ; [9] UNIX System V Releases 2 и 3: SVR2 , [10] SVR3 , SVR3.2 (1986); [11] HP-UX ; [12] AIX ; [13] и A/UX . [14] (В руководстве пользователя для AT&T UNIX PC (3B1) специально упоминается, что bsкоманда недоступна, но она доступна в SVR3.2. [10] )

Иногда bsрекламировался как один из основных языков программирования для разработки под UNIX. [3] [9] [15] Однако bsне включен в команды и утилиты POSIX.1 (стандартный список команд Unix ) и не входит в Единую спецификацию UNIX и не поставляется с большинством современных операционных систем. Например, в Linux похожий синтаксис и функциональность предоставляются bc , Perl и POSIX shell .

В 21 веке bsприсутствует, по крайней мере, в HP-UX Release 11i (2000), [12] , а также в AIX версий 6.1 (2007) [13] и 7.2 (2018), [16], вероятно, из-за их наследия UNIX System V.

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

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

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

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

Язык bsразделяет некоторые функции и синтаксис с BASIC , SNOBOL и C , два первых, вероятно, вдохновили его название. Как и BASIC, он может использоваться интерактивно, либо выполняя операторы немедленно, либо собирая их в программу для последующего выполнения. Как и в SNOBOL4, оператор присваивания ( =) используется для ввода-вывода и bsможет выполнять код в строках, используя свою функцию eval . Он также включает оператор запроса 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 для 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" )
... # последний выполненный оператор (выход или остановка): exit # последняя строка ввода:                бегать

В этом примере демонстрируется ввод-вывод:

# Копировать "oldfile" в "newfile".
open ( "read" , "oldfile" , "r" )
open ( "write" , "newfile" , "w" )
... while ? ( 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 Bottles of Beer с помощью /usr/bin/bs. [19]

весело  петь ( n ,  конец )  s  s  =  ( "s" ,  "" ) [  матч ( n ,  "^1$" )  ]  положить  =  формат ( формат ( формат ( "%s бутылка%%s пива%%%%s" ,  n ),  s ),  конец ) нуфдля  n  =  99 ,  n ,  put  =  ""  sing ( format ( "%-0.0f" ,  n ),  "на стене," )  sing ( format ( "%-0.0f" ,  n ),  "," )  put  =  "сними одну, передай по кругу,"  -- n  sing (( format ( "%-0.0f" ,  n ),  "нет" ) [  0  ==  n  ] ,  "на стене." ) next

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

Ссылки

  1. ^ abcd UNIX User's Manual (выпуск 3.0 ред.). Bell Telephone Laboratories, Incorporated. 1980. стр. 95.
  2. Личное сообщение Дика Хейта, 10 сентября 2019 г.
  3. ^ ab UNIX User's Manual (PDF) (выпуск 3.0 ред.). Bell Telephone Laboratories, Incorporated. 1980. стр. 9.
  4. ^ abc Личная беседа с Джоном Р. Маши , 9 сентября 2019 г.
  5. ^ «CB/UNIX man 7», The Unix Heritage Society , ноябрь 1979 г. Получено 9 сентября 2019 г.
  6. ^ «CB/UNIX man 1», The Unix Heritage Society , ноябрь 1979 г. Получено 9 сентября 2019 г.
  7. ^ JD Doan, ред. (май 1981 г.). CB-UNIX Programmer's Manual, издание 2.3 (PDF) . Колумбус, Огайо: Bell Telephone Laboratories. стр. iii.
  8. ^ TA Dolotta; RC Haight; EM Piskorik, ред. (май 1977 г.). "Раздел 1". PWB UNIX Programmer's Manual, издание 1. Piscataway, Нью-Джерси: Bell Telephone Laboratories.
  9. ^ ab "IBM Goes UNIX". PC Magazine . 12 июня 1984 г. стр. 218.
  10. ^ ab "Том 1". AT&T UNIX PC UNIX System V Руководство пользователя (PDF) . AT&T. 1986. стр. 8.
  11. ^ "Команды и утилиты тома 1". Руководство программиста UNIX (PDF) . AT&T. 1986. стр. 41.
  12. ^ ab "Раздел 1 (AM)". HP-UX Reference Release 11i User Commands (PDF) (1-е изд.). Hewlett-Packard Company. 2000. стр. 93.
  13. ^ ab "Раздел 1 (ac)". Справочник команд AIX версии 6.1 (PDF) (Первое издание). International Business Machines Corporation. 2007. стр. 251.
  14. ^ "Раздел 1 (AL)". Справочник команд A/UX (PDF) (ред. 2.0). Apple Computer, Inc. 1990. стр. 93.
  15. ^ «A/UX: Development Tools», 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 Bottles of Beer , 8 августа 1996 г. Получено 9 сентября 2019 г.