Abstract
Command languages like the Bourne Shell provide a terse syntax for exploratory programming and system interaction. Shell users can begin to write programs that automate their tasks by simply copying their interactions verbatim into a script file. However, command languages usually scale poorly beyond small scripts, and they can be difficult to integrate into larger programs. General-purpose languages scale well, but are verbose and unwieldy for common interactive actions such as process composition.
We present Rash, a domain-specific command language embedded in Racket. Rash provides a terse and extensible syntax for interactive system administration and scripting, as well as easy composition of both Racket functions and operating system processes. Rash and normal Racket code can be nested together at the expression level, providing the benefits of a shell language and a general-purpose language together. Thus, Rash provides a gradual scale between shell-style interactions and general-purpose programming.
- Joel Berger. Zoidberg - A modular perl shell. 2018. https://metacpan.org/pod/Zoidberg.Google Scholar
- S. R. Bourne. Unix Time-Sharing System: The UNIX Shell. Bell System Technical Journal 57(6), 1978.Google Scholar
- Andy Chu. Oil. 2018. https://www.oilshell.org/.Google Scholar
- David Crawshaw. Neugram, Go Scripting. 2018. https://neugram.io/.Google Scholar
- Jakub Dundalek. Bash-like shell based on Clojure. 2018. https://github.com/dundalek/closh.Google Scholar
- Tomer Filiba. Plumbum: Shell Combinators and More. 2018. https://plumbum.readthedocs.io/.Google Scholar
- Matthew Flatt, Eli Barzilay, and Robert Bruce Findler. Scribble: closing the book on ad hoc documentation tools. In Proc. SIGPLAN International Conference on Functional Programming, 2009. Google Scholar
Digital Library
- Free Software Foundation. Eshell Manual. 2018. https://www.gnu.org/software/emacs/manual/html_mono/eshell.html.Google Scholar
- Free Software Foundation. GNU Bash. 2018. https://www.gnu.org/software/bash/.Google Scholar
- Gabriel Gonzalez. turtle: Shell proogramming, Haskellstyle. 2018. https://hackage.haskell.org/package/turtle.Google Scholar
- Li Haoyi. Ammonite Documentation. 2018. http://ammonite.io/.Google Scholar
- Alec Heller and Jesse A. Tov. Caml-Shcaml. In Proc. ML Workshop, 2008.Google Scholar
- Microsoft. Typescript Language Specification. 2018. http://www.typescriptlang.org/.Google Scholar
- Jon Rafkind and Matthew Flatt. Honu: syntactic extension for algebraic notation through enforestation. In Proc. International Conference on Generative Programming and Component Engineering, 2012. Google Scholar
Digital Library
- J. H. Reppy. Concurrent Programming in ML. Cambridge University Press, 1999. Google Scholar
Digital Library
- Anthony Scopatz. Xonsh Documentation. 2018. http://xonsh.org/.Google Scholar
- Olin Shivers. A Scheme shell. Laboratory for Computer Science, MIT, TR-635, 1994. Google Scholar
Digital Library
- Jeremy G. Siek and Walid Taha. Gradual Typing for Functional Languages. In Proc. Scheme and Functional Programming, 2006.Google Scholar
- Jeffrey P. Snover. Monad Manifesto. Microsoft, 2002.Google Scholar
- Sam Tobin-Hochstadt and Matthias Felleisen. Interlanguage Migration: from Scripts to Programs. In Proc. Dynamic Languages Symposium, 2006.Google Scholar
- Sam Tobin-Hochstadt, Matthias Felleisen, and T. Stephen Strickland. The Design and Implementation of Typed Scheme. In Proc. ACM Symposium on Principles of Programming Languages (POPL), 2008. Google Scholar
Digital Library
- Michael M. Vitousek, Andrew Kent, Jeremy G. Siek, and Jim Baker. Design and Evaluation of Gradual Typing for Python. In Proc. ACM Symposium on Dynamic Languages, 2014. Google Scholar
Digital Library
- Greg Weber and Petr Rockai. shelly: shell-like (systems) programming in Haskell. 2018. https://hackage.haskell.org/package/shelly.Google Scholar
- Qi Xiao. Elvish. 2018. https://elv.sh/.Google Scholar
Index Terms
Rash: from reckless interactions to reliable programs
Recommendations
Rash: from reckless interactions to reliable programs
GPCE 2018: Proceedings of the 17th ACM SIGPLAN International Conference on Generative Programming: Concepts and ExperiencesCommand languages like the Bourne Shell provide a terse syntax for exploratory programming and system interaction. Shell users can begin to write programs that automate their tasks by simply copying their interactions verbatim into a script file. ...
Languages as libraries
PLDI '11Programming language design benefits from constructs for extending the syntax and semantics of a host language. While C's string-based macros empower programmers to introduce notational shorthands, the parser-level macros of Lisp encourage ...
Languages as libraries
PLDI '11: Proceedings of the 32nd ACM SIGPLAN Conference on Programming Language Design and ImplementationProgramming language design benefits from constructs for extending the syntax and semantics of a host language. While C's string-based macros empower programmers to introduce notational shorthands, the parser-level macros of Lisp encourage ...







Comments