exec ...

Sergey ShishkinSergey Shishkin
3 min read

(exec 'any ..) - выполняет внешнюю системную команду. Аргументы any определяют команду и ее аргументы. Не возвращает; текущий процесс заменяется новым образом процесса.

https://picolisp.tiddlyhost.com/#exec

   (NIL "exec" _Exec)

src/glob.l

Код определения

# (exec 'any ..)
(de _Exec (Exe)
   (let
      (X (cdr Exe)
         Av (b8* (inc (length X)))
         Cmd (xName (evSym X)) )
      (set Av (pathString Cmd (b8 (pathSize Cmd))))
      (stkChk Exe)
      (let A Av
         (while (pair (shift X))
            (let Nm (xName (evSym X))
               (set (inc 'A)
                  (bufString Nm (b8 (bufSize Nm))) ) )
            (stkChk Exe) )
         (set (inc 'A) null) )
      (flushAll)
      (execvp (val Av) Av)  # Execute program
      (execErr (val Av)) ) )  # Error if failed

src/flow.l

И “ворох” зависимостей … length let cdr shift stkChk set bufString bufSize pathString pair flushAll val while evSym execvp exeErr inc xName

Никак не могу понять почему функция акцентирована как “примитив“, то есть она тоже в списке src/dec.l представлена как

(inline exec (Prg)
   (use @
      (loop
         (when (pair (++ Prg))
            (evList @) )
         (? (atom Prg)) ) ) )

Хотя её нет в списке для local, кстати, что вызывает вопросы, такая вот классификация. Например, почему там нет подобного представления для BigNum, который в отличие от exec, наоборот, есть в спискке для local. Такая же ситуация как с exec, с nth , но если исходить из логики, что последние две всегда имеют место быть в глобальном контексте и их нет смысла декларировать в каком-то другом, то что тогда делать с этим “BigNum”?

https://picolisp-manual.tiddlyhost.com/#exec

С одной стороны, автор сам декларирует принцип “Даже маленькие детали имеют значение!”, а с другой игнорирует их описание, хотя, именно, такие детали, требут специального внимания для понимания. Это обозначение с “примитивами“ только запутывает ситуация и без того, с “плотным кодом” систему, якобы без “синтаксического сахара”, в целом, для синтаксиса, но с насыщенной контекстной семантикой. И почему, например, варианты типа caar cadr cdar cddr классифицируются как “примитивы”, а car и cdr, от которых он зависят - нет. То есть, опять налицо пренебрежение к изначально продуманной системе обозначений.

В целом система крутая и автор гениален, но бросается в глаза некоторые расхождения между тем, что декларируется и тем, как реализовано. Это заставляет задуматься и глубже погружаться в сравнения с другими конкурирующими проектами. Сейчас параллельно исследую проект Rye language , который так же в своей основе опирается на концепции Lisp и Forth, но ещё менее концептуально эклектичен, а с другой стороны ещё более учитывает современные тенденции. Заставляют задуматься и такие элементарные соображения как то, принятие в качестве хоста PicoLisp требует знания POSIX/C и LLVM, а в случае с Ryelang только Go и, кроме того, WASM, фактически, из коробки, что для PicoLisp ещё нерешенная проблема. А кроме всего прочего, для меня как евангелиста ASON формата Карла Сассенрата, опять же, для PicoLisp ещё надо создавать соответствующий парсер, который в Ryelang, практически, уже существует. Этот “поворот” в сознании может отразится на дальнейший анализ PicoLisp, с одной стороны, он может стать не достаточно глубоким, но зато в сранении, какие-то акценты могут обнаружить новые точки зрения на программирование в целом, в частности, на “радикальный подход к созданию приложений“. Я тут параллельно тренируюсь формулировать промты для ИИ-ботов, и вот что, например, мне тут выдал намедни Chat GPT.

0
Subscribe to my newsletter

Read articles from Sergey Shishkin directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Sergey Shishkin
Sergey Shishkin

Всегда чему-то учусь!