182 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			182 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
Scsh is one
 | 
						|
===========
 | 
						|
 | 
						|
Scheme shell version 0.1 was released to the Net exactly a year ago today,
 | 
						|
Halloween 1995.  We are pleased to release scsh version 0.4 to mark scsh's
 | 
						|
first 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 
 | 
						|
    alt.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/scsh.html
 | 
						|
 | 
						|
 | 
						|
* New in this release
 | 
						|
=====================
 | 
						|
 | 
						|
** New system calls.
 | 
						|
  select, file locking, full tty device control, ptys, set-file-times,
 | 
						|
  process timing, seek & tell. We still don't have signal handlers; with this
 | 
						|
  exception, Scsh now has all of Posix.
 | 
						|
 | 
						|
** Automatic reaping of exited subprocesses.
 | 
						|
  You may wait on a subprocess zero, one, or more times without filling
 | 
						|
  up the kernel's process table or generating an error.
 | 
						|
 | 
						|
** New delimited-input reader procedures.
 | 
						|
  You may read input delimited by a newline character (read-line),
 | 
						|
  a blank-line (read-paragraph), or a character from an arbitrary 
 | 
						|
  set (read-delimited). These procedures have native-code support
 | 
						|
  for reading from Unix input sources, and are quite fast.
 | 
						|
 | 
						|
** Better support for writing standalone scripts.
 | 
						|
  It's much easier to write standalone scripts now. Scripts can use
 | 
						|
  the new command-line switches to open dependent modules and load
 | 
						|
  dependent source code. Scripts can also be written in the Scheme 48
 | 
						|
  module language.
 | 
						|
 | 
						|
** Etc.
 | 
						|
  Control of I/O buffering policy, better error reporting, bug fixes,
 | 
						|
  here-strings, sub-second time precision, ...
 | 
						|
 | 
						|
 | 
						|
* Thanks
 | 
						|
========
 | 
						|
 | 
						|
We thank Travis Broughton, Charlie Conklin, Jin S. Choi, Brian F. Dennis,
 | 
						|
Patrick May, Bill Sommerfeld, Michael Sperber, Steven L. Tamm, Ed Tobin, 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, 1995
 |