A Scheme Shell

# 1 Introduction

The central artifact of this paper is a new Unix shell called scsh. However, I have a larger purpose beyond simply giving a description of the new system. It has become fashionable recently to claim that ``language doesn't matter.'' After twenty years of research, operating systems and systems applications are still mainly written in C and its complex successor, C++. Perhaps advanced programming languages offer too little for the price they demand in efficiency and formal rigor.

I disagree strongly with this position, and I would like to use scsh, in comparison to other Unix systems programming languages, to make the point that language does matter. After presenting scsh in the initial sections of the paper, I will describe its design principles, and make a series of points concerning the effect language design has upon systems programming. I will use scsh, C, and the traditional shells as linguistic exemplars, and show how their various notational and semantic tradeoffs affect the programmer's task. In particular, I wish to show that a functional language such as Scheme is an excellent tool for systems programming. Many of the linguistic points I will make are well-known to the members of the systems programming community that employ modern programming languages, such as DEC SRC's Modula-3 [Nelson]. In this respect, I will merely be serving to recast these ideas in a different perspective, and perhaps diffuse them more widely.

The rest of this paper is divided into four parts:

- In part one, I will motivate the design of scsh (section 2), and then give a brief tutorial on the system (3, 4).

- In part two, I discuss the design issues behind scsh, and cover some of the relevant implementation details (5-9).

- Part three concerns systems programming with advanced languages. I will illustrate my points by comparing scsh to other Unix programming systems (10, 11).

- Finally, we conclude, with some indication of future directions and a few final thoughts.