Проект PaSh, развивающий инструменты для параллельного выполнения shell-скриптов, объявил о переходе под покровительство организации Linux Foundation, которая предоставит инфраструктуру и сервисы, необходимые для продолжения разработки. Код проекта распространяется под лицензией MIT и включает компоненты на языках Python, Shell, C и
OCaml.
PaSh включает JIT-компилятор, runtime и библиотеку аннотаций:
- Runtime предоставляет набор примитивов для поддержки параллельного выполнения скриптов.
- Библиотека аннотаций определяет набор свойств, описывающих ситуации в которых допускается распараллеливание отдельных команд POSIX и GNU Coreutils.
- Компилятор на лету разбирает предложенный Shell-скрипт в абстрактное синтаксическое дерево (AST), разбивает на фрагменты, пригодные для параллельного выполнения, и формирует на их основе новый вариант скрипта, части которого могут выполняться одновременно. Информация о командах, которые допускают распараллеливания, берётся компилятором из библиотеки аннотаций. В процессе генерации параллельно выполняемого варианта скрипта в код подставляются дополнительные конструкции из Runtime.
Например, скрипт, обрабатывающий два файла f1.md и f2.md
cat f1.md f2.md |
tr A-Z a-z |
tr -cs A-Za-z '\n' |
sort |
uniq |
comm -13 dict.txt - > out
cat out | wc -l | sed 's/$/ mispelled words!/'
в обычных условиях обработает два файла последовательно:
а при запуске под управлением PaSh будет разбит на два одновременно выполняемых потока, каждый из которых обрабатывает свой файл: