skip to main content
article
Public Access

Rash: from reckless interactions to reliable programs

Published:07 April 2020Publication History
Skip Abstract Section

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.

References

  1. Joel Berger. Zoidberg - A modular perl shell. 2018. https://metacpan.org/pod/Zoidberg.Google ScholarGoogle Scholar
  2. S. R. Bourne. Unix Time-Sharing System: The UNIX Shell. Bell System Technical Journal 57(6), 1978.Google ScholarGoogle Scholar
  3. Andy Chu. Oil. 2018. https://www.oilshell.org/.Google ScholarGoogle Scholar
  4. David Crawshaw. Neugram, Go Scripting. 2018. https://neugram.io/.Google ScholarGoogle Scholar
  5. Jakub Dundalek. Bash-like shell based on Clojure. 2018. https://github.com/dundalek/closh.Google ScholarGoogle Scholar
  6. Tomer Filiba. Plumbum: Shell Combinators and More. 2018. https://plumbum.readthedocs.io/.Google ScholarGoogle Scholar
  7. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  8. Free Software Foundation. Eshell Manual. 2018. https://www.gnu.org/software/emacs/manual/html_mono/eshell.html.Google ScholarGoogle Scholar
  9. Free Software Foundation. GNU Bash. 2018. https://www.gnu.org/software/bash/.Google ScholarGoogle Scholar
  10. Gabriel Gonzalez. turtle: Shell proogramming, Haskellstyle. 2018. https://hackage.haskell.org/package/turtle.Google ScholarGoogle Scholar
  11. Li Haoyi. Ammonite Documentation. 2018. http://ammonite.io/.Google ScholarGoogle Scholar
  12. Alec Heller and Jesse A. Tov. Caml-Shcaml. In Proc. ML Workshop, 2008.Google ScholarGoogle Scholar
  13. Microsoft. Typescript Language Specification. 2018. http://www.typescriptlang.org/.Google ScholarGoogle Scholar
  14. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  15. J. H. Reppy. Concurrent Programming in ML. Cambridge University Press, 1999. Google ScholarGoogle ScholarDigital LibraryDigital Library
  16. Anthony Scopatz. Xonsh Documentation. 2018. http://xonsh.org/.Google ScholarGoogle Scholar
  17. Olin Shivers. A Scheme shell. Laboratory for Computer Science, MIT, TR-635, 1994. Google ScholarGoogle ScholarDigital LibraryDigital Library
  18. Jeremy G. Siek and Walid Taha. Gradual Typing for Functional Languages. In Proc. Scheme and Functional Programming, 2006.Google ScholarGoogle Scholar
  19. Jeffrey P. Snover. Monad Manifesto. Microsoft, 2002.Google ScholarGoogle Scholar
  20. Sam Tobin-Hochstadt and Matthias Felleisen. Interlanguage Migration: from Scripts to Programs. In Proc. Dynamic Languages Symposium, 2006.Google ScholarGoogle Scholar
  21. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  22. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  23. Greg Weber and Petr Rockai. shelly: shell-like (systems) programming in Haskell. 2018. https://hackage.haskell.org/package/shelly.Google ScholarGoogle Scholar
  24. Qi Xiao. Elvish. 2018. https://elv.sh/.Google ScholarGoogle Scholar

Index Terms

  1. Rash: from reckless interactions to reliable programs

          Recommendations

          Comments

          Login options

          Check if you have access through your login credentials or your institution to get full access on this article.

          Sign in

          Full Access

          • Published in

            cover image ACM SIGPLAN Notices
            ACM SIGPLAN Notices  Volume 53, Issue 9
            GPCE '18
            September 2018
            214 pages
            ISSN:0362-1340
            EISSN:1558-1160
            DOI:10.1145/3393934
            Issue’s Table of Contents
            • cover image ACM Conferences
              GPCE 2018: Proceedings of the 17th ACM SIGPLAN International Conference on Generative Programming: Concepts and Experiences
              November 2018
              214 pages
              ISBN:9781450360456
              DOI:10.1145/3278122

            Copyright © 2018 ACM

            Publisher

            Association for Computing Machinery

            New York, NY, United States

            Publication History

            • Published: 7 April 2020

            Check for updates

            Qualifiers

            • article

          PDF Format

          View or Download as a PDF file.

          PDF

          eReader

          View online with eReader.

          eReader
          About Cookies On This Site

          We use cookies to ensure that we give you the best experience on our website.

          Learn more

          Got it!