Tytuł prawie wszystko mówi. Używam clojure do moich dużych projektów, ale nie jest to dobry język skryptowy, ponieważ jvm ma powolny start i nie jest dobrze współpracuje z niektórymi rzeczami unixowymi. Tak więc szukam seplenienia, które będzie dobrze działało jako język skryptowy, na przykład mając dobry interfejs do zarządzania procesami uniksowymi, z łatwością korzystam z rzeczy takich jak async io, itp.Jaki jest najlepszy lisp/scheme dla skryptów uniksowych?
Odpowiedz
Scsh (to skrót od "Scheme shell") można uzyskać pod adresem http://www.scsh.net. Jest to "wariant Schematu 48 (systemu Scheme zgodnego z R5RS) ... zaprojektowanego do pisania samodzielnych, autonomicznych programów i skryptów powłoki".
Ładne wprowadzenie do administrowania systemem można znaleźć pod adresem http://www.theillien.com/Sys_Admin_v12/html/v11/i01/a2.htm.
Racket to naprawdę fajna implementacja Schematu. Jest dość potężny. Jednym z jego rozwiązań jest tworzenie od zera serwera internetowego.
Szeroka gama typowych narzędzi uniksowych ma wiązania dla Guile. Jeśli Twoim celem jest zautomatyzowanie któregokolwiek z tych narzędzi, może to być miłe miejsce do patrzenia.
+1 dla Guile: szybki czas uruchamiania, przyzwoite moduły (w tym DBD/DBI) i nadal aktywnie rozwijany. Uważany też za mzscheme (rakieta), ale start był zbyt wolny. – minaev
CLISP, implementacja Common Lisp, jest przydatna w skryptach Uniksowych.
clisp ma wiele rozszerzeń, które czynią go użytecznym dla skryptów: wsparcie dla Unicode, wyrażenia regularne, różne opcje wiersza polecenia, strumienie gniazda, przewody rurowe, ...
Dodatkowo clisp ma stosunkowo niewielkie rozmiary, jest napisany w C dla przenośności i zaczyna się szybko - dla Common Lisp.
Eshell z Elisp do użytku interaktywnego:
„Eshell jest zdolny do wywoływania prawie każdy Elisp funkcję załadowanego Emacs That. rodzaj elastyczności jest nieporównywalny, nie ma tu skorup, które mogłyby zbliżyć się do tego, co potrafi Eshell działa, ta funkcjonalność jest mocno używana (i zachęcana!) przez Eshell. Jeśli chcesz otworzyć plik foobar.txt w Emacs, po prostu wywołaj plik find foobar.txt, a Eshell zamapuje to na wywołanie elisp (plik-find "foobar.txt") i otwórz plik dla ciebie. "
z http://www.masteringemacs.org/articles/2010/12/13/complete-guide-mastering-eshell/
wpadłem na tej stronie kilka razy, patrząc na miły sposób do portu niektóre coraz-unweildy bashu na język saner. Ponieważ te skrypty zostały już powołując się kilka skryptów rakieta, to miało sens usuń warstwę przekierowania i użyj Rakiety do wszystkiego:
Po pewnym wyszukiwaniu natknąłem się na pakiet shell-pipeline dla rakiety Z dokumentacji:
Ta biblioteka umożliwia łatwe tworzenie potrójnych kanałów programów zewnętrznych i funkcji rakiet. Możesz pisać rzeczy tak proste jak
(run-pipeline '(cat /etc/passwd) '(grep root) '(cut -d : -f 1))
, które wydrukują"root\n"
na standardowe wyjście (na systemach unix) i zwrócą0
. Aby uzyskać wyjście jako ciąg, użyjrun-pipeline/out
w ten sam sposób.Możesz również umieścić funkcje rakiet w potoku. Jeśli masz implementację rakietygrep
o nazwiemy-grep
, możesz wykonać(run-pipeline '(cat /etc/passwd) `(,my-grep root) '(cut -d : -f 1))
, aby uzyskać takie same wyniki. Możesz więc pisać wszystkie rodzaje funkcji filtrujących w Racketach, zamiast używać poleceń powłoki.
Tak, scsh jest dobry, częściowo dlatego, że jest to bardzo dokładnie to, do czego jest przeznaczony. Jednak Racket (wymieniony w innej odpowiedzi) jest również dobrą alternatywą, ponieważ jest tak kompletny, że ma zasadniczo wszystkie wsparcie systemowe, które ma scsh. Powiedziałbym kiedyś, że scsh jest jednoznaczny, ale ostatnio coraz częściej używam rakiet do takich rzeczy. –