bs (język programowania)
Zaprojektowany przez | Richarda C. Haighta |
---|---|
Po raz pierwszy pojawiły się | 1980 |
system operacyjny | Uniks |
Pod wpływem | |
BASICa , SNOBOL4 , C |
bs to język programowania i kompilator/interpreter dla programów o niewielkich rozmiarach w systemach UNIX . Polecenie bs można wywołać albo do programowania interaktywnego, albo z plikiem zawierającym program, opcjonalnie przyjmując argumenty, przez powłokę Unix , np. używając Shebang (Unix) #!/usr/bin/bs .
Wczesna strona podręcznika stwierdza: „[ bs ] jest zdalnym potomkiem Basic [sic] i SNOBOL4 , z dodanym odrobiną C ”.
Historia
Polecenie bs pojawia się w systemie UNIX System III Release 3.0 (1980), wydanym po raz pierwszy poza Bell Labs w 1982 roku. Zostało napisane przez Dicka Haighta (Richard C. Haight) około 1978 roku, który opowiada o tym w następujący sposób:
Napisałem bs w czasach Uniksa (V 3?) i wszystkie polecenia były konwertowane z asemblera na C. Tak więc bas [ Kena Thompsona ] stał się moim bs — w pewnym sensie.
Podręcznik wydania 3.0 wspomina bs w widocznym miejscu na stronie 9 (podkreślenie dodane):
Pisanie programu. Aby wprowadzić tekst programu źródłowego do pliku UNIX, użyj ed(1) . Cztery główne języki dostępne w systemie UNIX to C (patrz cc(1) ), Fortran (patrz f77(1) ), bs (kompilator/interpreter w duchu Basic, patrz bs(1) ) i asembler (patrz jako(1) ).
bs nie zostało wydane na zewnątrz przed Systemem III, było obecne wewnętrznie w systemach UNIX / TS 1.0 (listopad 1978), PWB / UNIX 2.0 (czerwiec 1979) oraz CB UNIX w wersjach 2.1 (listopad 1979) i 2.3 (1981). Polecenie bs nie pojawia się w niektórych wcześniejszych wydaniach wewnętrznych, np. w wydaniu UNIX Support Group z marca 1977 r., ani w podręczniku PWB/UNIX z maja 1977 r., sugerującym jego utworzenie około 1978 r. Nie pojawia się w żadnej wersji Research Unix ani Dystrybucja oprogramowania Berkeley .
Następnie, aż do lat 90., bs był dołączany do różnych komercyjnych systemów operacyjnych wywodzących się z Systemu III lub Systemu V, w tym między innymi: PC / IX ; UNIX System V, wydania 2 i 3: SVR2 , SVR3 , SVR3.2 (1986); HP-UX ; AIX ; i A/UX . (Podręcznik użytkownika dla AT&T UNIX PC (3B1) wyraźnie wspomina, że polecenie bs nie jest dostępne, ale jest dostępne w SVR3.2.)
Czasami bs był reklamowany jako jeden z podstawowych języków programowania do programowania w systemie UNIX. Jednak bs nie jest uwzględniony w poleceniach i narzędziach POSIX.1 (standardowa lista poleceń systemu Unix ) ani w specyfikacji Single UNIX i nie jest dostarczany z większością współczesnych systemów operacyjnych. Na przykład w Linuksie podobną składnię i funkcjonalność zapewnia powłoka bc , Perl i POSIX .
W XXI wieku bs jest obecny przynajmniej w HP-UX Release 11i (2000), a także w wersjach AIX 6.1 (2007) i 7.2 (2018), prawdopodobnie ze względu na ich dziedzictwo UNIX System V.
Projekt i funkcje
Strona podręcznika bs , rzekomo jedyna specyfikacja języka programowania, charakteryzuje go w następujący sposób:
Bs jest przeznaczony do zadań programistycznych, w których czas tworzenia programu jest równie ważny jak wynikająca z niego szybkość wykonania. Formalności deklaracji danych i manipulacji plikami/procesami są zminimalizowane. Debugowanie wiersz po kroku, śledzenia i zrzutu oraz przydatne komunikaty o błędach w czasie wykonywania upraszczają testowanie programu. Ponadto niekompletne programy można debugować; wewnętrzne można przetestować przed napisaniem funkcji zewnętrznych i odwrotnie.
Program bs jest kompilowany i wykonywany inaczej niż programy napisane w innych głównych językach programowania uniksowych tamtych czasów: C , FORTRAN i asemblerze , których odpowiednie polecenia kompilują kod źródłowy programu do wykonywalnego wyjścia asemblera ( a.out ). Zamiast tego bs jest najpierw konwertowany przez polecenie bs na pośrednią reprezentację wewnętrzną odwróconej polskiej ( RPN ) , a następnie wykonywany przez wewnętrzną maszynę wirtualnego stosu polecenia . Język bs jest zatem hybrydowym interpreterem i kompilatorem oraz rozbieżnością w programowaniu uniksowym od Ancient Unix .
Język bs ma wspólne cechy i składnię z BASIC , SNOBOL i C , z których dwa pierwsze przypuszczalnie zainspirowały jego nazwę. Podobnie jak BASIC, można go używać interaktywnie, wykonując instrukcje natychmiast lub gromadząc je w programie do późniejszego wykonania. Podobnie jak w SNOBOL4, operator przypisania ( = ) jest używany do wejścia/wyjścia , a bs może wykonywać kod w łańcuchach, używając swojej funkcji eval . Zawiera również operator zapytania SNOBOL ( ? ) używany do sprawdzania, czy ocena wyrażenia powiedzie się, czy nie. Wbudowana formatu , ograniczona do jednego argumentu, obsługuje podzbiór specyfikatorów konwersji formatu printf języka C, np. „%f”.
Język ma kilka rzucających się w oczy elementów. Na przykład jego funkcje programu są zdefiniowane przy użyciu fun ... nuf , a jego funkcje mogą mieć zmienne lokalne. Ponadto bs może działać w dwóch trybach, albo interpretując (i wykonując) instrukcje i programy, albo kompilując je i przełączając się między nimi za pomocą kompilacji i stop . W przeciwnym razie jego funkcjonalność jest unikalna tylko zbiorowo (w jednym języku), ponieważ poszczególne funkcje są redundantne w stosunku do współistniejących narzędzi, takich jak powłoka Unix , np. I/O plików i pętle, oraz AWK , np. tablice asocjacyjne i wyrażenia regularne dopasowanie.
Język bs miał na celu wygodne rozwijanie i debugowanie małych, modułowych programów. Ma zbiór składni i funkcji z poprzednich, popularnych języków, ale jest wewnętrznie kompilowany, w przeciwieństwie do skryptu powłoki . Jako taki, pod względem celu, projektu i funkcji, bs jest w dużej mierze nieznanym, skromnym poprzednikiem hybrydowych języków interpretowanych/kompilowanych, takich jak Perl i Python .
Przykłady składni
Poniższe przykłady pochodzą ze strony podręcznika systemu A/UX bs(1) .
W tym przykładzie użyto bs jako kalkulatora:
$ bs # Odległość (w calach) pokonuje światło w ciągu nanosekundy. 186000 * 5280 * 12 / 1e9 11 .78496 ... # Procent składany # (6% przez 5 lat od 1000 USD). int = .06 / 4 bal = 1000 dla i = 1 5 *4 bal = bal + bal*int bal - 1000 346 .855007 ... wyjście
Ten przykład to zarys typowego programu bs :
# zainicjuj rzeczy: var1 = 1 open ( "read" , "infile" , "r" ) ... # oblicz: while ? ( str = read ) ... next # clean up: close ( "read" ) ... # ostatnia wykonana instrukcja (exit lub stop): exit # ostatnia linia wejściowa: run
Ten przykład demonstruje wejście/wyjście:
# Skopiuj „stary plik” do „nowego pliku”. open ( "read" , "stary plik" , "r" ) open ( "write" , "newfile" , "w" ) ... podczas gdy ? ( write = read ) ... # close "read" i "write": close ( "read" ) close ( "write" ) # Potok między poleceniami. otwórz ( „ls” , „!ls *” , „r” ) otwórz ( „pr” , „!pr -2 -h 'Lista'” , „w” ) podczas gdy ? ( pr = ls ) ... ... # pamiętaj o zamknięciu (poczekaj na) te: zamknij ( "ls" ) zamknij ( "pr" )
Przykładowy program
Poniżej znajduje się przykładowy program bs , który emituje słowa piosenki 99 Bottles of Beer przy użyciu /usr/bin/bs .
0 zabawa śpiew ( n , koniec ) s s = ( "s" , "" ) [ dopasowanie ( n , "^1$" ) ] put = format ( format ( format ( "%s butelka%%s piwa%%% %s" , n ), s ), end ) nuf dla n = 99 , n , put = "" sing ( format ( "%-0.0f" , n ), " na ścianie," ) sing ( format ( " %-0.0f" , n ), "," ) put = "weź jeden i podaj dalej," -- n sing (( format ( "%-0.0f" , n ), "nie" ) [ == n ] , "na ścianie." ) dalej
Zobacz też
- ^ a b c d Podręcznik użytkownika systemu UNIX (wydanie 3.0). Bell Telephone Laboratories, Incorporated. 1980. s. 95.
- ^ Osobista wiadomość od Dicka Haighta, 10 września 2019 r.
- ^ a b Podręcznik użytkownika systemu UNIX (PDF) (wydanie 3.0, wyd.). Bell Telephone Laboratories, Incorporated. 1980. s. 9.
- ^ a b c Osobista rozmowa z Johnem R. Masheyem , 9 września 2019 r.
- ^ „CB / UNIX man 7” , The Unix Heritage Society , listopad 1979. Źródło: 9 września 2019 r.
- ^ „CB / UNIX man 1” , The Unix Heritage Society , listopad 1979. Źródło: 9 września 2019 r.
- Bibliografia _ (maj 1981). Podręcznik programisty CB-UNIX, wydanie 2.3 (PDF) . Columbus, OH: Bell Telephone Laboratories. P. iii.
- ^ TA Dolotta; Wysokość RC; EM Piskorik, wyd. (maj 1977). "Sekcja 1". Podręcznik programisty PWB UNIX, wydanie 1 . Piscataway, New Jersey: Bell Telephone Laboratories.
- ^ a b „IBM przechodzi na system UNIX”. Magazyn PC . 12 czerwca 1984. s. 218.
- ^ a b „Tom 1”. AT&T UNIX PC UNIX System V Podręcznik użytkownika (PDF) . AT&T. 1986. s. 8.
- ^ „Polecenia i narzędzia tomu 1” . Podręcznik programisty UNIX (PDF) . AT&T. 1986. s. 41.
- ^ a b „Sekcja 1 (AM)” . HP-UX Reference Release 11i Polecenia użytkownika (PDF) (1 wyd.). Firma Hewlett-Packard. 2000. str. 93.
- ^ a b „Sekcja 1 (ac)” . AIX wersja 6.1 Commands Reference (PDF) (pierwsze wydanie). Międzynarodowa Korporacja Maszyn Biznesowych. 2007. str. 251.
- ^ „Sekcja 1 (AL)” . Dokumentacja poleceń A / UX (PDF) (wyd. 2.0). Apple Computer, Inc. 1990. s. 93.
- ^ „A/UX: Development Tools” , Apple, Inc , 18 lutego 2012 r. Źródło: 9 września 2019 r.
- ^ „Sekcja 1 (ac)” . Opis komend systemu AIX wersja 7.2 . Firma IBM. 2018. s. 282.
- ^ Osobista rozmowa z Dickiem Haightem, 12 września 2019 r.
- ^ Plik /FILES , nośnik instalacyjny A/UX 3.0.1, Apple Inc. (1993)
- ^ „Language BS” , 99 butelek piwa , 8 sierpnia 1996 r. Źródło: 9 września 2019 r.