







In the fall of 1990, one of us (Rakitzis) re-implemented the Plan 9 command interpreter, rc, for use as a UNIX shell. Experience with that shell led us to wonder whether a more general approach to the design of shells was possible, and this paper describes the result of that experimentation. We applied concepts from modern functional programming languages, such as Scheme and ML, to shells, which typically are more concerned with UNIX features than language design. Our shell is both simple and highly programmable. By exposing many of the internals and adopting constructs from functional programming languages, we have created a shell which supports new paradigms for programmers.
Crafting Interpreters
Despite using them every day, most software engineers know little about how programming languages are designed and implemented. For many, their only experience with that corner of computer science was a terrifying "compilers" class that they suffered through in undergrad and tried to blot from th...

Understanding Bash: Elements of Programming | Linux Journal
Ever wondered why programming in Bash is so difficult? Bash employs the same constructs as traditional programming languages; however, under the hood, the logic is rather different.
Integrating functional and imperative programming | Proceedings of the 1986 ACM conference on LISP and functional programming
We present a new model, based on monads, for performing input/output in a non-strict, purely functional language. It is composable, extensible, efficient, requires no extensions to the type system, and extends smoothly to incorporate mixed-language ...
About the book | A guide to a-Shell
a-Shell is not only a terminal emulator for iOS/iPadOS, but also an environment with a set of useful libraries, where you can run basic Unix commands and other tricky tools.
Getting Started
A smarter, more intuitive, and readable shell. You'll get more done, and more easily, with Murex

A Coming Revolution in Metaprogramming | Will Crichton
A single programming language is no longer enough. I predict that soon, the best programmers will fluently move between languages and the best languages will interoperate well with others. This interoperability will likely stem from strong metaprogramming facilities. I examine how we might build a programmable compiler and look at recent work toward that end.
Rethinking the Unix Philosophy: Evolution or Collapse?
Explore the evolution and challenges of the Unix Philosophy in modern software development. Learn its relevance and implications in today's tech landscape.

Pony
An open-source, object-oriented, actor-model, capabilities-secure, high-performance programming language.
Forking is Cool, or: A Unix Shell in Zig, or: Dave Learns How to Fork - ratfactor
In this article, I make a real, working interactive shell written in Zig. Though essentially a toy, it demonstrates the incredible elegance of the fork() system call and is an example of what can be done with absolutely no runtime memory allocations.
Tangible Functional Programming
ui.sh — Turn your terminal into a design engineer
A toolkit for coding assistants like Claude Code, Cursor, and Codex to help you build UIs that don't suck.

Arturo programming language
Arturo programming language: Simple, expressive & portable programming language for efficient scripting
Crafting Interpreters
Ever wanted to make your own programming language or wondered how they are designed and built?
Co-Creator of Haskell: Functional Programming, Thinking in Types, Useless Languages | Simon Jones
The Coalton Programming Language
A statically typed, functional programming language that compiles to Common Lisp