Шелл и реактивность
Листая публикацию про scsh 1 наткнулся на пару интересных иллюстраций:
…

Это мне напомнило другую матрицу, объясняющую что такое observables в rxjs:
Узнали? Согласны?
И там (раздел The Tao of Scheme and Unix2) подаётся интересная мысль и интересная находка для scheme-оболочки:
Большинство попыток встроить системную оболочку в функциональные языки программирования пытаются скрыть разницу между вызовом программы и вызовом объявленной функции. Если пользователь вводит
(lpr "notes.txt")оболочка сначала воспринимает
lprкак функцию. Если lpr не найдена среди объявленных функций, оболочка выполняет поиск программы вPATH. Эта прозрачность - аналогия к вызову функций в традиционных оболочках, таких как ksh.Это фундаментальная ошибка…
Эти две вычислительные модели фундаментально разные. Любая попытка их смешать, а не разграничить, приведет к уродливой и неконсистентной семантике.
В мире прилагаемых3 функций, агенты исполняются последовательно, и организованы с помощью функциональной композиции:
(g (f x)).В мире процессов, агенты исполняются одновременно, и организованы в конвейеры (pipes) потоков данных:
f | g.
Есть о чём подумать. И о том, что классические шеллы (ksh, bash и прочие) действительно, смешивают эти вещи для упрощения, так и то, что это, и правда, несочетаемые вещи.
-
A Scheme Shell Olin Shivers [Personal Information Architecture Note 3 4/1994](сохраненная копия) ↩
-
признаюсь, меня привлекло tao в оглавлении, решил посмотреть. ↩
-
Прикладных? Прикладываемых? ↩