Hi.

An alpha release of Guile is now available.  I would dearly appreciate
help with testing and with the documentation.

There are some interesting volunteer contributions that i have not yet
merged into this release.  I'd like to debug the basic release process
first.

* RELEASE NOTES

This release includes:

	- new features from SCM4e2, including
		socket functions
		POSIX functions
		UNIX functions
		new array procedures
		(and more)
		
	- A texinfo-ized user manual from Aubrey Jaffer
	  If you have an info reader, check "strategem/scm.info"

	- a friendlier C interface for people using libguile.a
	  (Thanks to Radey Shouman for contributing gsubrs!)

	- new features for Guile including:
	  	improved low level support for defining new types (lvectors)
	  	cheap exceptions for errors and exits (CATCH-WIND, THROW)
  	  	first class locatives for top level bindings (MAKE-VARIABLE)
  	  	you can control the symbol->variable mapping (EVAL2)
  	  	first class tables for interning symbols (obarrays)
  	  	creating uncapturable continuations (WITH-DYNAMIC-ROOT)

The new Guile features are documented in the new texinfo manual, but
there is much more work to do on this manual.  Volunteers are welcome.

The new C interface is documented in the ASCII file ``GUILE''.  That
documentation also needs considerable work.  I encourage brave
volunteers who have not previously extended SCM to try to use the
documentation in GUILE and to give feedback about what is hard to
understand.  It will also be interesting to see what more needs to be
added to the C interface.

Improving all of the documentation is an important task for which
volunteers are welcome.

A revised task list will follow within a week or so.  Anxious
volunteers with lots of time on their hands and good C and Scheme
programming skills are welcome to pester me sooner for tasks.




* FTP INFORMATION

The release can be found at:

	ftp.cygnus.com:pub/lord/strategem.tar.gz





* THE BUILD PROCESS

If you untar Guile, you'll have a directory called `strategem' of the
sources.  The build-process is these steps:

	% cd strategem

	% edit Ginit.scm (see below)

	% ./configure --prefix=<DIR>  (see below)

	% make install

That will build and install libguile.a, guile.h, guile (a stand-alone
interpreter), and some ancillary files.  You can try running the
interpreter just by invoking `guile'.

When you edit ``Ginit.scm'', just as with SCM, you should change the
path defined for the function `library-vicinity'.  In the sources as
shipped, the path is set to:

	"/phydeaux/ni/=irix/lib/scm/"

which is certainly wrong for most systems.  If <DIR> is the directory
you will specify as an argument to `configure', then you should change
the path to:

	"<DIR>/lib/scm/"

If you use slib, slib should be installed in that directory.

Whatever directory you specify for <DIR>, it should have at least
three subdirectories before you try to install Guile: `include',
`bin', and `lib'.

In a future release, editting Ginit.scm will no longer be a necessary
part of configuring and building Guile.




* Thank GNUs

Thanks Aubrey Jaffer, Radey Shouman, and Miles Bader for code
contributed to this release.  Thanks to Jon Blow and Adam Sah for
helpful design feedback.  Thanks to Aubrey and RMS for numerous
constructive suggestions.

(And thanks-in-advance to the other volunteers who's code i've yet
 to merge.  You'll hear more about that in future versions).



-t



p.s.: here is the text of Aubrey's announcment for SCM4e2:


  
 	* scl.c (num2ulong): checks for bignum sign and magnitude added.
 	* subr.c (logand logior logxor lognot): lognot restriction to
 	INUMs removed.  Logand, logior, and logxor now will work for up to
 	32 bit signed numbers.
 	* repl.c (def_err_response): Circuitous call to quit() replaced
 	with exit(EXIT_FAILURE);
 	(everr): Now calls def_err_response() in interrupt frame if
 	errjmp_bad or there are dynwinds to do.  This prevents silent
 	failure in batch mode.
 	* scm.texi (Trouble Shooting): Section converted from README.
 	* Init.scm (-d filename): option added which does:
 	(begin (require 'database-utilities) (open-database filename))
 	* repl.c (handle_it): Now discards possibly used top freelist cell
 	for GC safety.  Also now just punts if errjmp_bad.
 	* scm.texi: converted from MANUAL.  GUILE documentation merged in.
 	* scl.c (SYSTNAME): msdos changed to ms-dos.  windows added.
 	archimedes changed to acorn.
 	* dynl.c Link.scm: names unified.  Libraries for HP-UX fixed.
 	HP-UX dll suffix now ".sl".
 	* ioext.c (l_open_input_pipe, l_open_output_pipe): moved from
 	"Init.scm".
 	* sys.c (i_setbuf0): added.
 	(open_file): `0' in mode string now controls the buffered-ness of
 	returned port.
 	* Init.scm (slib:load-compiled): no longer silently fails if other
 	than the first argument does not link correctly.
 	* sys.c (free_storage): lord@cygnus.com pointed out that candle
 	was being burnt from both ends.  Loop fixed.  Mallocs either
 	leaking or counted wrong.
 	* code.doc: added description of compiled closures.
 	* socket.c (l_socketpair): added.  Both make-stream-socketpair and
 	make-stream-socket now take optional prototype argument.
 	* ramap.c (ramapc and friends): moved from unif.c to get source
 	file sizes below 64k.
 	* posix.c (l_pwinfo grinfo): made to work like network inquiry
 	procedures (no args steps through entries).
 	(l_setgr l_setpw l_uname): added.
 	* socket.c MANUAL: most Scheme names for socket functions changed
 	for consistency.
 	* socket.c (socket:shutdown): added.  I can't imagine what use
 	shutdown provides.  SOCKETs can be closed like any other port.
 	Should socket:shutdown SOCKETs be closed?  Does having shutdown
 	sockets cause file descriptors to be reused?  Socket:shutdown will
 	be removed if no use is found for it.
 	(tc16_sknm): added to encapsulate information retrieved from
 	getpeername and getsockname.
 	(socket-name:family socket-name:port-number socket-name:address):
 	added to retrieve information from tc16_sknm.
 	(inet:string->address inet:address->string inet:network
 	inet:local-network-address inet:make-address): added.
 	(gethost sethostent getnet getnetent getproto setprotoent getserv
 	setservent): inquiry procedures added.
 	* sys.c (makfromstrs(argc, argv)): added.  converts C array of
 	strings to SCM list of strings.  If argc < 0, a null terminated
 	array is assumed.
 	* eval.c (l_proc_doc): added procedure-documentation.
 	* build.scm (scm:build): Added. Replaces system specific
 	makefiles.
 	* ccnfigdb.scm: Database of system specific compile, link, and
 	archive procedures and library information.
 	* sys.c	(grow_throw lthrow dynthrow): now pass arrays, check
 	for adequate growth, and clear out register windows (on sparc).
 	* ioext.c (ttyname fileno): added.
 	* unix.c (symlink readlink lstat): added.
 	* scmfig.h repl.c sys.c (IO_EXTENSIONS): flag removed.
 	* ioext.c (read-line read-line! file-position, file-set-position
 	reopen-file open-pipe opendir readdir rewinddir closedir chdir
 	umask rename-file isatty? access chmod mkdir rmdir stat utime
 	raise): moved from "repl.c" and "sys.c".
 	* sys.c (opendir readdir rewinddir closedir reopen-file): added
 	under IO_EXTENSIONS.
 	* eval.c (badargsp): added under ifndef RECKLESS to check @apply
 	and apply() arg counts.
	* unix.c (mknod acct nice sync): added.
	* socket.c (socket bind! gethost connect! listen! accept): added.
	* time.c (utime): added under IO_EXTENSIONS.
	* sys.c (tc16_ufd): file descriptor type added under IO_EXTENSIONS.
	(fds->port-pair getcwd umask access chmod mkdir rmdir): added
	under IO_EXTENSIONS.
	* scm.c (l_pause): added if SIGALRM defined.
	(l_sleep): added if SIGALRM not defined.
	* scl.c (num2ulong): added.  Used in "time.c"
	* sys.c (access chmod): Posix access added under IO_EXTENSIONS.
	* posix.c (chown link pipe waitpid, kill, getpw, getgr, get*id,
	set*id): added.
	* time.c (l_raise l_getpid): added
	* subr.c (ulong2big): 
	* scl.c (ulong2num): useful routines for system call data
	conversion moved from "time.c".
	* subr.c (big2inum): (more accruately) renamed from big2long.
	* Init.scm repl.c (quit): code was not using return values
	correctly.
	* record.c (init_record): remaining record functions moved into C
	code.
	* eval.c sys.c: compiled closures now conditional under CCLO.
	* time.c (curtime): replaces get-universal-time.  Other time
	functions removed (SLIB support more complete).
	* subr.c (divbigbig): fixed (modulo -2177452800 86400) => 86400
	bug.  Also added to test.scm.
	* dynl.c (init_dynl): *feature* dld:dyncm added for dynamically
	(ldso) linked libc.sa and libm.sa (under Linux).
	* scm.c (run_scm init_scm): "-a" heap allocation argument supported.
	* Makefile (proto.h): removed.
	* Link.scm (usr:lib lib): Now checks for shared libraries
	(lib*.sa) first.
	* scl.c scm.c: Support for compilation under Turbo C++ for Windows
	 (system and exec disabled) added under C flag "_Windows".
	* test.scm ((test-delay)): added.
	((test-bignum)): added and called automatically if bignums
	suported.  test-inexact called automatically if inexacts
	supported.
	* Init.scm (trace untrace): moved to SLIB/trace.scm.
	* Link.scm: Autoload for hobbit now does (provide 'hobbit).  This
	allows hobbit to know if it is self compiling (although reloads of
	hobbit will not be quite right).
	((compile file . args)): removed.
	* makefile.unix (proto.h): removed.
	* Transcen.scm: compile-allnumbers HOBBIT declaration added.
	Init.scm will now load compiled Transcen.o.
	* scm.h: HOBBIT section removed.
	* README (SLIB): Now strongly recommends getting SLIB and lists
	ftp sites.
	* eval.c (m_delay): fixed bug with multiple sets of (delay x).
	* unif.c (array-fill!): bug with increment in default clause fixed.
	Fast string support added.

	From: Drew Whitehouse, Drew.Whitehouse@anu.edu.au
	* scm.h (P): Conditionalized ANSI'fied version of the scm.h.

	From: rshouman@chpc.utexas.edu (Radey Shouman)
	* unif.c (array-fill! array-for-each): bug fixes.
	* eval.c (ceval apply): 
	* sys.c (makcclo): tc7_cclo, compiled closures, now supported.
	* record.c (init_record): C implementation of slib "Record"s using
	CCLO.
	* scm.h subr.c (QUOTIENT MODULO REMAINDER): fixes a bug for
	bignums with DIGSTOOBIG defined.  Also, changed the return type of
	longdigs() to void, since that value is no longer used anywhere.

	From: rshouman@hpcf.cc.utexas.edu (Radey Shouman)
	Date: Mon, 29 Aug 1994 11:36:46 +0600
	* unif.c: This is a large patch, but also a bit larger than it
	appears -- I moved a few function definitions around to eliminate
	gratuitous forward references.
	* unif.c repl.c (raprin1): Combined print routine for arrays with
	that for uves.
	* unif.c (UNIFORM-VECTOR-READ! and -WRITE): work with general
	arrays, by copying when necessary, renamed them to
	UNIFORM-ARRAY-READ! and -WRITE.
	* unif.c (ARRAY-CONTENTS): Generalized so that it returns a 1-d
	array even when the stride in the last dimension is greater than
	one, gave it an optional second argument STRICT, which makes it
	behave as it did before, returning an array/vector only if the
	contents are contiguous in memory.
	* unif.c (ARRAY-CONTIGUOUS?) Eliminated. Instead, use
		(lambda (ra) (array? (array-contents ra #t)))
	* unif.c code.doc (ramapc): unrolls arrays mapping into one loop
	if possible, to make this quick, changed the format of the array
	CAR, now uses one bit to indicate that an array is contiguous --
	this still allows a ridiculous number of dimensions.
	* scm.h (DSUBRF): dsubrs are mapped directly, to allow this I
	moved the typedef for dsubr and #define for DSUBRF to scm.h
	* unif.c (ARRAY-MAP!) taught something about subrs, now most subrs
	may be mapped without going through apply(), saving time and
	reducing consing.  +, -, *, /, =, <, <=, >, and >= are mapped
	directly as special cases -- for uniform arrays this is nearly as
	fast as the equivalent C, and doesnt' cons.  I've made sure that
	+, -, *, and / vectorize on the CRAY, this may be wasted effort
	but the effort is not great.
	* unif.c (ARRAY-COPY!) now copies many arrays of differing types
	to each other without going through the aref/aset, e.g. float ->
	double, double -> complex, integer -> float ...  This should make
	array type coercions for arithmetic faster.
	* unif.c (TRANSPOSE-ARRAY) Added, which returns a shared array
	that is the transpose of its first argument.  I think this does
	what an APL:TRANSPOSE would.
	* unif.c (ENCLOSE-ARRAY) Added, this returns an array that looks
	like an array of shared arrays, the difference being that the
	shared arrays are not actually allocated until referenced.
	Internally, the contents of an enclosed array is another array.
	The main reason for this is to allow a reasonably efficient
	implementation of APL:COMPRESS, EXPAND, and INDEXING.  In order to
	actually make an array of shared arrays, just use ARRAY-COPY!.
	* unif.c (cvref): Created internal version of aref(), cvref() that
	doesn't do error checking; Thus speeding things up.  Profiling of
	SCM running array code revealed that aref() was taking a
	surprising fraction of the CPU time

 	From: Radey Shouman <shouman@ccwf.cc.utexas.edu>
 	* unif.c (ra2contig): now has a second parameter to indicate
 	whether copying is necessary or not.  Eliminates gratuitous copy
 	by UNIFORM-ARRAY-READ! when called with a noncontiguous array.
 	(array_map): more liberal check on when ARRAY-MAP! can use
 	array-ified asubrs.
 
 	From: Radey Shouman <shouman@ccwf.cc.utexas.edu>
 	* gsubr.c (make_gsubr gubr_apply): allows arbitrary (< 11)
 	required, optional, and rest arguments to compiled functions.
 
 	From: Gary Houston <ghouston@actrix.gen.nz>
 	* scl.c (round): Now rounds as described in R4RS.
 	* test.scm (test-inexact): test cases for round.
 
 	From: Jerry D. Hedden <hedden@esdsdf.dnet.ge.com>
 	* ioext.c: conditional code for vms and version (3.6) of Aztec C.
 	* pi.scm ((e digits)): Modified 'bigpi' for slight speed
 	improvement.  Added function to calculate digits of 'e'.
 
 	From: Robert Sanders <rsanders@hrothgar.mindspring.com>
 	* ioext.c (l_write_line): moved from "Init.scm".
 
 	From: Shigenobu Kimura <skimu@komachi.phys.s.u-tokyo.ac.jp> *
 	dynl.c (fcall): Fixed dynamic linking on hp9000s700 (or 720) HP-UX
 	9.01 or 9.03.
 
 	From: jon_seymour@vnet.ibm.com (jon seymour)
 	* scmfig.h: defined LACK_TIMES and STDC_HEADERS if __IBMC__ is
 	defined.
 	* sys.c: #include <io.h> and #include <direct.h>. define ttyname()
 	macro.
 	* scm.c: #include <io.h> and compile out execvp() call.
 	* time.c: #include <sys/timeb.h>
 	* makefile.os2: makefile for use with OS/2 toolkit nmake.



