Типичный поток мэйнфреймов ...
Input Disk/Tape/User (runtime) --> Job Control Language (JCL) --> Output Disk/Tape/Screen/Printer
| ^
v |
`--> COBOL Program --------'
Типичный поток Linux ...
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 |
: :
Оболочки - клей Linux
Оболочки Linux, такие как sh / ksh / bash / ... предоставляют средства обозначения ввода / вывода / управления потоком, очень похожие на старый язык управления заданиями для мэйнфреймов ... но на стероидах! Они сами по себе являются полными по Тьюрингу языками , оптимизированными для эффективной передачи данных и управления другим исполняемым процессам, написанным на любом языке, поддерживаемом ОС.
Большинство приложений Linux, независимо от того, на каком языке написана основная часть программы, зависят от сценариев оболочки, и Bash стал наиболее распространенным. Щелчок по значку на рабочем столе обычно запускает короткий сценарий Bash . Этот сценарий, прямо или косвенно, знает, где находятся все необходимые файлы, и устанавливает переменные и параметры командной строки, наконец, вызывая программу. Это простейшее использование оболочки.
Однако Linux в том виде, в каком мы его знаем, вряд ли был бы Linux без тысяч сценариев оболочки, которые запускают систему, реагируют на события, контролируют приоритеты выполнения и компилируют, настраивают и запускают программы. Многие из них довольно большие и сложные.
Оболочки предоставляют инфраструктуру, которая позволяет нам использовать готовые компоненты, которые связаны между собой во время выполнения, а не во время компиляции. Эти компоненты представляют собой самостоятельные программы, которые можно использовать по отдельности или в других комбинациях без перекомпиляции. Синтаксис для их вызова неотличим от синтаксиса встроенной команды Bash , и на самом деле существует множество встроенных команд, для которых также есть автономный исполняемый файл в системе, часто имеющий дополнительные параметры.
Между Python и Bash нет разницы в производительности на уровне всего языка. Это полностью зависит от того, как каждый из них закодирован и какие внешние инструменты вызываются.
Любой из хорошо известных инструментов, таких как awk, sed, grep, bc, dc, tr и т. Д., Оставит выполнение этих операций на любом языке в пыли. Тогда Bash предпочтительнее для всего, что не имеет графического пользовательского интерфейса, поскольку проще и эффективнее вызывать и передавать данные обратно из инструмента, подобного инструментам с Bash, чем из Python .
Производительность
В зависимости от того, какие программы вызывает сценарий оболочки Bash и их пригодности для данной подзадачи, общая пропускная способность и / или скорость отклика будут лучше или хуже, чем у эквивалентного Python . Чтобы усложнить ситуацию, Python , как и большинство языков, также может вызывать другие исполняемые файлы, хотя он более громоздкий и поэтому используется не так часто.
Пользовательский интерфейс
Одна из областей, в которой Python является явным победителем, - это пользовательский интерфейс. Это делает его отличным языком для создания локальных или клиент-серверных приложений, поскольку он изначально поддерживает графику GTK и гораздо более интуитивно понятен, чем Bash .
Баш понимает только текст. Другие инструменты должны быть вызваны для графического интерфейса пользователя и данных, переданных от них. Python скрипт является одним из вариантов. Более быстрые, но менее гибкие варианты - это двоичные файлы, такие как YAD, Zenity и GTKDialog .
В то время как оболочки, такие как Bash, хорошо работают с графическими интерфейсами, такими как Yad , GtkDialog (встроенный XML-подобный интерфейс для функций GTK +) , диалогом и xmessage , Python гораздо более эффективен и поэтому лучше подходит для сложных окон графического интерфейса.
Резюме
Сборка с использованием сценариев оболочки похожа на сборку компьютера с готовыми компонентами, как настольные ПК.
Сборка с использованием Python , C ++ или любого другого языка больше похожа на сборку компьютера путем спайки микросхем (библиотек) и других электронных компонентов вместе, как это делают смартфоны.
Наилучшие результаты обычно достигаются при использовании комбинации языков, каждый из которых может делать то, что умеет лучше всего. Один разработчик называет это « программированием полиглота ».