Typowy przepływ w komputerze mainframe ...
Input Disk/Tape/User (runtime) --> Job Control Language (JCL) --> Output Disk/Tape/Screen/Printer
| ^
v |
`--> COBOL Program --------'
Typowy przepływ Linuksa ...
Input Disk/SSD/User (runtime) --> sh/bash/ksh/zsh/... ----------> Output Disk/SSD/Screen/Printer
| ^
v |
`--> Python script --------'
| ^
v |
`--> awk script -----------'
| ^
v |
`--> sed script -----------'
| ^
v |
`--> C/C++ program --------'
| ^
v |
`--- Java program ---------'
| ^
v |
: :
Powłoki są klejem Linuksa
Powłoki Linuksa, takie jak sh / ksh / bash / ..., zapewniają funkcje wyznaczania wejścia / wyjścia / kontroli przepływu, podobnie jak stary język sterowania zadaniami na komputerze mainframe ... ale na sterydach! Są kompletnymi językami Turinga , będąc jednocześnie zoptymalizowanymi pod kątem wydajnego przekazywania danych i kontroli do iz innych procesów wykonawczych napisanych w dowolnym języku obsługiwanym przez system operacyjny.
Większość aplikacji Linuksa, niezależnie od języka, w którym napisana jest większość programu, zależy od skryptów powłoki, a Bash stał się najbardziej powszechny. Kliknięcie ikony na pulpicie zwykle uruchamia krótki skrypt Bash . Ten skrypt, bezpośrednio lub pośrednio, wie, gdzie znajdują się wszystkie potrzebne pliki i ustawia zmienne oraz parametry wiersza poleceń, ostatecznie wywołując program. To najprostsze zastosowanie powłoki.
Linux, jaki znamy, nie byłby Linuksem bez tysięcy skryptów powłoki, które uruchamiają system, reagują na zdarzenia, kontrolują priorytety wykonywania oraz kompilują, konfigurują i uruchamiają programy. Wiele z nich jest dość dużych i złożonych.
Powłoki zapewniają infrastrukturę, która pozwala nam używać gotowych komponentów, które są ze sobą połączone w czasie wykonywania, a nie w czasie kompilacji. Komponenty te są samodzielnymi programami, których można używać samodzielnie lub w innych kombinacjach bez konieczności ponownej kompilacji. Składnia ich wywoływania jest nie do odróżnienia od składni wbudowanego polecenia Bash , aw rzeczywistości istnieje wiele wbudowanych poleceń, dla których istnieje również samodzielny plik wykonywalny w systemie, często mający dodatkowe opcje.
Nie ma różnicy w wydajności między językami Python i Bash . Zależy to całkowicie od sposobu kodowania każdego z nich i wywoływanych narzędzi zewnętrznych.
Każde z dobrze znanych narzędzi, takich jak awk, sed, grep, bc, dc, tr itp., Pozostawi wykonywanie tych operacji w dowolnym języku na uboczu. Bash jest zatem preferowany w przypadku wszystkiego, co nie ma graficznego interfejsu użytkownika, ponieważ wywoływanie i przekazywanie danych z narzędzia takiego jak Bash jest łatwiejsze i bardziej wydajne niż z Pythona .
Występ
Zależy to od programów wywoływanych przez skrypt powłoki Bash i ich przydatności do podanego podzadania, czy ogólna przepustowość i / lub responsywność będą lepsze, czy gorsze niż w równoważnym Pythonie . Aby skomplikować sprawę, Python , podobnie jak większość języków, może również wywoływać inne pliki wykonywalne, chociaż jest to bardziej uciążliwe i przez to rzadziej używane.
Interfejs użytkownika
Jednym z obszarów, w którym Python jest wyraźnym zwycięzcą, jest interfejs użytkownika. To sprawia, że jest to doskonały język do tworzenia aplikacji lokalnych lub klient-serwer, ponieważ natywnie obsługuje grafikę GTK i jest znacznie bardziej intuicyjny niż Bash .
Bash rozumie tylko tekst. Inne narzędzia muszą być wywoływane w celu uzyskania GUI i danych zwrotnych z nich. Python skrypt jest jedna opcja. Szybszymi, ale mniej elastycznymi opcjami są pliki binarne, takie jak YAD, Zenity i GTKDialog .
Podczas gdy powłoki takie jak Bash działają dobrze z GUI, takimi jak Yad , GtkDialog (osadzony interfejs podobny do XML z funkcjami GTK +) , dialog i xmessage , Python jest znacznie bardziej wydajny i lepszy dla złożonych okien GUI.
Podsumowanie
Budowanie za pomocą skryptów powłoki przypomina składanie komputera z gotowymi komponentami, tak jak komputery stacjonarne.
Budowanie za pomocą Pythona , C ++ lub większości innych języków przypomina raczej budowanie komputera przez lutowanie układów scalonych (bibliotek) i innych części elektronicznych, tak jak smartfony.
Najlepsze wyniki zwykle uzyskuje się, używając kombinacji języków, w których każdy może robić to, co robi najlepiej. Jeden z programistów nazywa to „ programowaniem poliglotowym ”.