200 lines
7.5 KiB
Plaintext
200 lines
7.5 KiB
Plaintext
Scsh is two
|
|
===========
|
|
|
|
Scheme shell version 0.1 was released to the Net exactly two years ago
|
|
today, Halloween 1994. We are pleased to release scsh version 0.4.3 to
|
|
mark scsh's second birthday. The new release has many bug fixes,
|
|
improvements and new features.
|
|
|
|
The text below gives a general description of scsh, instructions for
|
|
obtaining it, pointers to discussion forums, and a description of the
|
|
new features in release 0.4. To read this document with emacs outline
|
|
mode, say M-x outline-mode.
|
|
|
|
* What is scsh
|
|
==============
|
|
Scsh is a broad-spectrum systems-programming environment for Unix embedded
|
|
in R4RS Scheme.
|
|
|
|
** Scsh as a scripting language
|
|
-------------------------------
|
|
Scsh has a high-level process notation for doing shell-script like tasks:
|
|
running programs, establishing pipelines and I/O redirection. For example, the
|
|
shell pipeline
|
|
|
|
gunzip < paper.tex.gz | detex | spell | lpr -Ppulp &
|
|
|
|
would be written in scsh as
|
|
|
|
(& (| (gunzip) (detex) (spell) (lpr -Ppulp)) ; Background a pipeline
|
|
(< paper.tex.gz)) ; with this redirection
|
|
|
|
Scsh embeds this process notation within a full Scheme implementation.
|
|
The process notation is realized as a set of macro definitions, and is
|
|
carefully designed to allow full integration with standard Scheme code.
|
|
Scsh isn't Scheme-like; it is Scheme.
|
|
|
|
At the scripting level, scsh also has an Awk design, also implemented
|
|
as a macro that can be embedded inside general Scheme code.
|
|
|
|
** Scsh as a systems-programming language
|
|
-----------------------------------------
|
|
Scsh additionally provides the low-level access to the operating system
|
|
normally associated with C. With the exception of signal handlers, the current
|
|
release provides full access to Posix, plus important non-Posix extensions,
|
|
such as complete sockets support. "Complete Posix" means: fork, exec & wait,
|
|
sockets, full read, write, open & close, seek & tell, complete file-system
|
|
access, including stat, chmod/chgrp/chown, symlink, FIFO & directory access,
|
|
tty & pty support, file locking, pipes, select, file-name pattern-matching,
|
|
time & date, environment variables, and more.
|
|
|
|
In brief, you can now write Unix systems programs in Scheme instead of C.
|
|
For example, we have implemented an extensible HTTP server at MIT entirely
|
|
in scsh.
|
|
|
|
As important as full access to the OS is the manner in which it is provided.
|
|
Scsh integrates the OS support into Scheme in a manner which respects the
|
|
general structure of the language. The details of the design are discussed
|
|
in a joint MIT Lab for Computer Science/University of Hong Kong technical
|
|
report, "A Scheme Shell," also to appear in a revised format in the *Journal
|
|
of Lisp and Symbolic Computation." This paper is also available by ftp:
|
|
ftp://ftp-swiss.ai.mit.edu/pub/su/scsh/scsh-paper.ps
|
|
|
|
|
|
** Scsh is a portable programming environment
|
|
---------------------------------------------
|
|
Scsh is designed for portability. It is implemented on top of Scheme 48,
|
|
a byte-code-interpreter Scheme implementation. The Scheme 48 virtual machine
|
|
can be compiled on any system with a C compiler; the rest of Scheme 48 is
|
|
machine-independent across 32-bit processors. Scsh's OS interface is
|
|
also quite portable, providing a consistent interface across different
|
|
Unix platforms. We currently have scsh implementations for
|
|
AIX,
|
|
CXUX,
|
|
FreeBSD,
|
|
HP-UX,
|
|
IRIX,
|
|
Linux,
|
|
NetBSD,
|
|
NeXTSTEP,
|
|
Solaris,
|
|
SunOS,
|
|
Ultrix
|
|
Scsh code should run without change across these systems.
|
|
Porting to new platforms is usually not difficult.
|
|
|
|
|
|
* Obtaining and installing scsh
|
|
===============================
|
|
You can get a copy of scsh via anonymous ftp, from
|
|
ftp://ftp-swiss.ai.mit.edu/pub/su/scsh/scsh.tar.gz
|
|
The tar file includes a detailed manual and a paper describing
|
|
the design of the system.
|
|
|
|
For the lazily curious, we also have the manual separately available as
|
|
ftp://ftp-swiss.ai.mit.edu/pub/su/scsh/scsh-manual.ps
|
|
Just click 'n view.
|
|
|
|
You *should* be able to build scsh on the standard platforms with exactly five
|
|
commands: gunzip, tar, cd, ./configure, and make. The configure script figures
|
|
out the special flags and switches needed to make the build work (thanks to
|
|
the GNU project for the autoconfig tool that makes this possible).
|
|
|
|
After doing the make, you can start up a Scheme shell and try it out
|
|
by saying
|
|
./scshvm -o ./scshvm -i ./scsh/scsh.image
|
|
See the manual for full details on the command-line switches.
|
|
|
|
If it's harder than this, and your system is standard, we'd like to know
|
|
about it.
|
|
|
|
|
|
* Getting in touch
|
|
==================
|
|
There are two main ways to join in scsh-related discussion: the mailing-list
|
|
scsh@martigny.ai.mit.edu
|
|
and the netnews group
|
|
comp.lang.scheme.scsh
|
|
These two forums are exactly equivalent, being bi-directionally gatewayed
|
|
at MIT.
|
|
|
|
Bugs can be reported to
|
|
scsh-bugs@martigny.ai.mit.edu
|
|
|
|
If you do not receive the alt netnews hierarchy, or wish to join the mailing
|
|
list for other reasons, send mail to
|
|
scsh-request@martigny.ai.mit.edu
|
|
|
|
|
|
* The World-Wide What?
|
|
======================
|
|
|
|
We even have one of those URL things:
|
|
http://www-swiss.ai.mit.edu/scsh/
|
|
|
|
|
|
* New in this release
|
|
=====================
|
|
|
|
** Signal handlers
|
|
We finally have signal handlers; with this Scsh now has all of Posix.
|
|
|
|
** Static heap linker
|
|
The static heap linker converts a Scheme 48 bytecode image as
|
|
embodied in a .image file to a C representation. This C
|
|
code is then compiled and linked in with a virtual machine. One
|
|
pleasant side effect of this is reduced startup times. Another
|
|
good thing is that immutable parts of the image can be shared
|
|
between processes. see the script scsh/static.scm
|
|
|
|
** Last few bits of Posix
|
|
Scheme bindings for isatty(), ttyname(), ctermid(), and fcntl().
|
|
|
|
** Regular expression compilation
|
|
- MAKE-REGEXP now actually does something useful.
|
|
- AWK has been modified to use it, precompiling all of its
|
|
patterns outside the main loop.
|
|
- Unfortunately, things are still pretty slow. We'll work on it.
|
|
|
|
** New meta-arg second-line syntax
|
|
Simpler grammar.
|
|
|
|
** New -s<fdes> command line switch
|
|
Scripts can be read from stdin or other open file descriptors.
|
|
|
|
** Starting up programs with the "-e <entry-point>" command-line
|
|
switch and with the (DUMP-SCSH-PROGRAM <file-name> <entry-point>)
|
|
are now equivalent in that both pass a list of command-line arguments
|
|
that includes the program name. The two start-up methods were not
|
|
the same in the previous release.
|
|
|
|
** Etc.
|
|
Solaris 2 on i386 support, AIX 4 support, HP-UX now uses dld for
|
|
faster loading, a few small networking bug fixs, better error
|
|
reporting, bug fixes, more efficient handling of closing unrevealed
|
|
file descriptors at exec() with CLOEXEC, ...
|
|
|
|
|
|
* Thanks
|
|
========
|
|
|
|
We would like to thank Michael Becker, Glenn Barry, Travis Broughton,
|
|
Robert E. Brown, Charlie Conklin, Franklin Chen, Jin S. Choi, Douglas
|
|
S. J. De Couto, Brian F. Dennis, Sean Doran, Kevin Esler, Lutz Euler,
|
|
Lewis Girod, Dan Hagerty, Rolf-Thomas Happe, David Hull, Steven L.
|
|
Jenkins, Patrick May, Richard Kelsey, Jay Nietling, Tod Olson,
|
|
Jonathan Rees, Michel Schinz, Cotton Seed, Bill Sommerfeld, Michael
|
|
Sperber, Steven L. Tamm, Ed Tobin, Victor Zandy, and others for bug
|
|
reports, bug fixes, and comments that were incorporated into this
|
|
release. We really appreciate their help, particularly in the task of
|
|
porting scsh to new platforms.
|
|
|
|
We'd like to thank everyone else for their patience; this release seemed like
|
|
a long time coming.
|
|
|
|
Brought to you by the Scheme Underground scsh team. Go forth and write
|
|
elegant systems programs.
|
|
-Olin Shivers & Brian Carlstrom
|
|
Cambridge
|
|
31 October, 1996
|