Название довольно много говорит обо всем. Я использую clojure для своих крупных проектов, но это не очень хороший язык сценариев, потому что jvm имеет медленный запуск и не очень хорошо взаимодействует с некоторыми событиями unixy. Поэтому я ищу lisp, который будет хорошо работать как язык сценариев, например, имея хороший интерфейс для управления процессами unix, легко использовать такие вещи, как async io и т.д.
Какая самая лучшая lisp/схема для unix-скриптов?
Ответ 1
Scsh (это означает "Scheme shell" ) можно получить в http://www.scsh.net. Это "вариант схемы 48 (новая система технологий R5RS для новых технологий)... предназначенная для написания реальных автономных программ Unix и сценариев оболочки".
Хорошее введение в системное администрирование можно найти в http://www.theillien.com/Sys_Admin_v12/html/v11/i01/a2.htm.
Ответ 2
Racket - действительно хорошая реализация схемы. Его довольно мощный. Одна из его разработок - разработка веб-сервера с нуля.
Ответ 3
Широкий диапазон общих инструментов unix имеет привязки для Guile. Если это ваша цель автоматизировать любой из этих инструментов, это может быть приятным местом для поиска.
Ответ 4
Ответ 5
CLISP, реализация Common Lisp, полезна для сценариев Unix.
CLISP имеет множество расширений, которые делают его полезным для сценариев: поддержка Unicode, регулярные выражения, различные параметры командной строки, потоки сокетов, каналы,...
Кроме того, CLISP имеет относительно небольшую площадь, написан на C для переносимости и быстро запускается - для общего Lisp.
Ответ 6
Eshell с Elisp для интерактивного использования:
"Eshell способен вызывать почти любую функцию elisp, загруженную в Emacs. Такая гибкость не имеет себе равных, нет никаких оболочек, способных приблизить то, что может сделать Eshell. Фактически эта функциональность сильно используется (и поощряется! ) от Eshell. Если вы хотите открыть файл foobar.txt в Emacs, вы просто вызываете find файл foobar.txt, и Eshell отобразит это в elisp-вызов (find-file" foobar.txt ") и откройте файл для вас."
из http://www.masteringemacs.org/articles/2010/12/13/complete-guide-mastering-eshell/
Ответ 7
Я несколько раз сталкивался с этой страницей, пытаясь найти хороший способ переноса каких-то все более-менее сильных сценариев bash на более понятный язык. Поскольку эти скрипты уже вызывали несколько скриптов Racket, имело смысл удалить слой косвенности и использовать Racket для всего.
После некоторого поиска я наткнулся на shell-pipeline пакет для Racket. Из документации:
Эта библиотека упрощает работу с коннекторами внешних программ и функций ракетки в стиле unix. Вы можете писать так же просто, как
(run-pipeline '(cat /etc/passwd) '(grep root) '(cut -d : -f 1))
, который будет печатать"root\n"
в stdout (в системах unix) и вернет0
. Чтобы получить вывод в виде строки, используйтеrun-pipeline/out
таким же образом. Вы также можете использовать функции ракетки в конвейере. Если у вас есть реализация racketgrep
под названиемmy-grep
, вы можете сделать(run-pipeline '(cat /etc/passwd) `(,my-grep root) '(cut -d : -f 1))
, чтобы получить те же результаты. Таким образом, вы можете писать всевозможные функции фильтрации в Racket, а не использовать команды оболочки.