bs (język programowania)

bs
Zaprojektowany przez Richarda C. Haighta
Po raz pierwszy pojawiły się 1980 ; 43 lata temu ( 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ż

  1. ^ a b c d Podręcznik użytkownika systemu UNIX (wydanie 3.0). Bell Telephone Laboratories, Incorporated. 1980. s. 95.
  2. ^ Osobista wiadomość od Dicka Haighta, 10 września 2019 r.
  3. ^ a b Podręcznik użytkownika systemu UNIX (PDF) (wydanie 3.0, wyd.). Bell Telephone Laboratories, Incorporated. 1980. s. 9.
  4. ^ a b c Osobista rozmowa z Johnem R. Masheyem , 9 września 2019 r.
  5. ^ „CB / UNIX man 7” , The Unix Heritage Society , listopad 1979. Źródło: 9 września 2019 r.
  6. ^ „CB / UNIX man 1” , The Unix Heritage Society , listopad 1979. Źródło: 9 września 2019 r.
  7. Bibliografia _ (maj 1981). Podręcznik programisty CB-UNIX, wydanie 2.3 (PDF) . Columbus, OH: Bell Telephone Laboratories. P. iii.
  8. ^ TA Dolotta; Wysokość RC; EM Piskorik, wyd. (maj 1977). "Sekcja 1". Podręcznik programisty PWB UNIX, wydanie 1 . Piscataway, New Jersey: Bell Telephone Laboratories.
  9. ^ a b „IBM przechodzi na system UNIX”. Magazyn PC . 12 czerwca 1984. s. 218.
  10. ^ a b „Tom 1”. AT&T UNIX PC UNIX System V Podręcznik użytkownika (PDF) . AT&T. 1986. s. 8.
  11. ^ „Polecenia i narzędzia tomu 1” . Podręcznik programisty UNIX (PDF) . AT&T. 1986. s. 41.
  12. ^ a b „Sekcja 1 (AM)” . HP-UX Reference Release 11i Polecenia użytkownika (PDF) (1 wyd.). Firma Hewlett-Packard. 2000. str. 93.
  13. ^ a b „Sekcja 1 (ac)” . AIX wersja 6.1 Commands Reference (PDF) (pierwsze wydanie). Międzynarodowa Korporacja Maszyn Biznesowych. 2007. str. 251.
  14. ^ „Sekcja 1 (AL)” . Dokumentacja poleceń A / UX (PDF) (wyd. 2.0). Apple Computer, Inc. 1990. s. 93.
  15. ^ „A/UX: Development Tools” , Apple, Inc , 18 lutego 2012 r. Źródło: 9 września 2019 r.
  16. ^ „Sekcja 1 (ac)” . Opis komend systemu AIX wersja 7.2 . Firma IBM. 2018. s. 282.
  17. ^ Osobista rozmowa z Dickiem Haightem, 12 września 2019 r.
  18. ^ Plik /FILES , nośnik instalacyjny A/UX 3.0.1, Apple Inc. (1993)
  19. ^ „Language BS” , 99 butelek piwa , 8 sierpnia 1996 r. Źródło: 9 września 2019 r.