diff --git a/build/build-external-modules b/build/build-external-modules deleted file mode 100755 index aad9f2f..0000000 --- a/build/build-external-modules +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh -# Build external-modules.c. - -target="$1" -shift - -( - cat <"$target" diff --git a/build/load-linker.exec b/build/load-linker.exec deleted file mode 100644 index 953ea60..0000000 --- a/build/load-linker.exec +++ /dev/null @@ -1,90 +0,0 @@ -; Copyright (c) 1993-1999 by Richard Kelsey and Jonathan Rees. See file COPYING. - -; Load the linker. -*- Mode: Scheme; -*- - -; Run this script with ,exec ,load l.exec. -; After the script is loaded, you can, in principle, do whatever -; you might do in the usual linker image. For example, you might do -; (this is from the Makefile) -; -; ,in link-config -; (load-configuration "interfaces.scm") -; (load-configuration "packages.scm") -; (flatload initial-structures) -; (load "initial.scm") -; (link-initial-system) -; -; This is intended to be used to debug new versions of the compiler or -; static linker. - -(config '(run (define :arguments :values))) ;temporary hack - -(translate "=scheme48/" "./") - -(load-package 'flatloading) -(open 'flatloading) - -(define (r x) (config `(run ,x))) - -(r '(define-structure source-file-names (export (%file-name% :syntax)) - (open scheme-level-1 - syntactic - fluids) - (begin (define-syntax %file-name% - (syntax-rules () - ((%file-name%) (fluid $source-file-name))))))) - -(r '(define-structure enumerated enumerated-interface - (open scheme-level-1 signals) - (files (rts defenum scm)))) - -(r '(define-structure architecture architecture-interface - (open scheme-level-1 signals enumerated) - (files (rts arch)))) - -(config '(structure reflective-tower-maker - (export-reflective-tower-maker))) - -; Make the new linker obtain its table, record, etc. structures from -; the currently running Scheme. - -(config '(load "packages.scm")) -(config '(structure %run-time-structures run-time-structures-interface)) -(config '(structure %features-structures features-structures-interface)) - -(r - '(define-structure %linker-structures - (make-linker-structures %run-time-structures - %features-structures - (make-compiler-structures %run-time-structures - %features-structures)))) - -; Load the linker's interface and structure definitions. -(config '(load "interfaces.scm" "more-interfaces.scm")) -(let ((z (config '(run %linker-structures))) - (env (config interaction-environment))) - (config (lambda () (flatload z env)))) - -; Load the linker. -(load-package 'link-config) - -; Initialize -(in 'link-config - '(open scheme packages packages-internal - reflective-tower-maker)) - -(in 'linker '(run (set! *debug-linker?* #t))) -(in 'link-config '(open flatloading)) ; A different one. - -; ,open debuginfo packages-internal compiler scan syntactic meta-types - -; (in 'link-config '(dump "l.image")) - -; ,exec (usual-stuff) - -(define (usual-stuff) - (in 'link-config) - (run '(begin (load-configuration "interfaces.scm") - (load-configuration "packages.scm") - (flatload initial-structures))) - (load "initial.scm")) diff --git a/build/lucid-script.lisp b/build/lucid-script.lisp deleted file mode 100644 index 0f142cf..0000000 --- a/build/lucid-script.lisp +++ /dev/null @@ -1,82 +0,0 @@ - -; Script to load the Scheme 48 linker into Common Lisp. -; Requires Pseudoscheme 2.11. - -(defvar pseudoscheme-directory "../pseudo/") -(load (concatenate 'string pseudoscheme-directory "loadit.lisp")) -; or perhaps (load (merge-pathnames "loadit.lisp" pseudoscheme-directory)) -(load-pseudoscheme pseudoscheme-directory) - -(progn (revised^4-scheme::define-sharp-macro #\. - #'(lambda (c port) - (read-char port) - (eval (let ((*readtable* ps::scheme-readtable)) - (read port))))) - (values)) - -(ps:scheme) -;-------------------- -; Scheme forms - -(benchmark-mode) - -(define config-env ; (interaction-environment) would also work here. - (#.'scheme-translator:make-program-env - '%config - (list #.'scheme-translator:revised^4-scheme-structure))) - -(load "bcomp/module-language" config-env) -(load "alt/config" config-env) -(load "env/flatload" config-env) -(eval '(set! *load-file-type* #f) config-env) - -(define load-config - (let ((load-config (eval 'load-configuration config-env))) - (lambda (filename) - (load-config filename config-env)))) - -(load-config "packages") - -(define flatload-package (eval 'flatload config-env)) - -(flatload-package (eval 'linker-structures config-env) config-env) - -(let ((#.'clever-load:*compile-if-necessary-p* #t)) - (let ((#.'ps:*scheme-read* #.'#'ps::scheme-read-using-commonlisp-reader)) - (load "alt/pseudoscheme-record") - (load "alt/pseudoscheme-features"))) - -(let ((#.'clever-load:*compile-if-necessary-p* #t)) - (flatload-package (eval 'link-config config-env))) - -(load "alt/init-defpackage.scm") - -(define-syntax struct-list ;not in link.sbin - (syntax-rules () - ((struct-list ?name ...) (list (cons '?name ?name) ...)))) - -;-------------------- -(quit) - -#+Lucid -(defun disksave-restart-function () - (format t "~&Scheme 48 linker.~2%") - ;; (hax:init-interrupt-delivery) - for threads - (ps:scheme) - (terpri)) -#+Lucid -(defun dump-linker () - (lcl:disksave "link/linker-in-lucid" :gc t :full-gc t :verbose t - :restart-function #'disksave-restart-function)) -;(dump-linker) -;(lcl:quit) - - -; Debugging hacks -;(defun enable-lisp-packages () -; (setq *readtable* ps:scheme-readtable) -; (values)) -;(defun disable-lisp-packages () -; (setq *readtable* ps::roadblock-readtable) -; (values)) - diff --git a/c/extension.c b/c/extension.c deleted file mode 100644 index ba54548..0000000 --- a/c/extension.c +++ /dev/null @@ -1,236 +0,0 @@ -/* Copyright (c) 1993-1999 by Richard Kelsey and Jonathan Rees. - See file COPYING. */ - -/* Implementation of the vm-extension opcode. This is completely - optional; nothing in the standard system uses these features. - If you have ANSI C but not POSIX support, try compiling with -DPOSIX=0. - - The vm-extension opcode is being phased out. New code should use the - external-call opcode to call C procedures. - - floating point: POSIX.1, ANSI C (should we be linking with -lM or -lm?) - sprintf: POSIX.1, ANSI C - atof: POSIX.1, ANSI C - - */ - -#ifndef POSIX -# define POSIX 2 -#endif - -#include -#include "sysdep.h" -#include "scheme48.h" - -#include -#include -#include -#include -#include /* setuid & setgid */ -#include -#include /* gethostbyname */ /* Kali code */ - -#include -#include - - -#define GREATEST_FIXNUM_VALUE ((1 << 29) - 1) -#define LEAST_FIXNUM_VALUE (-1 << 29) -#define CHANNEL_INDEX(x) EXTRACT_FIXNUM(STOB_REF(x, 1)) -#define FOR_INPUT 1 -#define FOR_OUTPUT 2 - -typedef struct { - char b[sizeof(double)]; -} unaligned_double; - -typedef union { - double f; - unaligned_double b; -} float_or_bytes; - -extern long s48_Sextension_valueS; /* how values are returned */ - -/* return status values */ -#define EXT_ST_OKAY 0 -#define EXT_ST_EXCEPTION 1 - -#define EXT_RETURN(value) {s48_Sextension_valueS = (value); return EXT_ST_OKAY; } -#define EXT_EXCEPTION return EXT_ST_EXCEPTION - -/******************************************/ - -s48_value -s48_extended_vm (long key, s48_value value) -{ - double x, y; - - switch (key) { - - /* Cases 0 through 19 are reserved for the mobot system. */ - - case 0: /* read jumpers on 68000 board */ - EXT_RETURN(S48_UNSAFE_ENTER_FIXNUM(0)); - - /* Floating point */ - -#define FLOP 100 -#define FLOP2(i) case FLOP+(i): \ - if (!S48_STOB_P(value) || S48_STOB_DESCRIPTOR_LENGTH(value) != 2) \ - EXT_EXCEPTION; -#define FLOP3(i) case FLOP+(i): \ - if (!S48_STOB_P(value) || S48_STOB_DESCRIPTOR_LENGTH(value) != 3) \ - EXT_EXCEPTION; - -#define get_arg(args,i) S48_STOB_REF(args,(i)) -#define get_string_arg(args,i) (S48_UNSAFE_EXTRACT_STRING(get_arg(args,i))) - -#define get_float_arg(args, i, var) EXTRACT_FLOAT(get_arg(args, i), var) -#define set_float_arg(args, i, val) SET_FLOAT(get_arg(args, i), val) - -#define EXTRACT_FLOAT(stob, var) \ - { s48_value temp_ = (stob); \ - float_or_bytes loser_; \ - if (!S48_STOB_P(temp_)) EXT_EXCEPTION; \ - loser_.b = *(unaligned_double*)(&S48_STOB_REF(temp_, 0)); \ - (var) = loser_.f; } - -#define SET_FLOAT(stob, val) \ - { s48_value temp_ = (stob); \ - float_or_bytes loser_; \ - if (!S48_STOB_P(temp_)) EXT_EXCEPTION; \ - loser_.f = (double)(val); \ - *(unaligned_double*)(&S48_STOB_REF(temp_, 0)) = loser_.b; } - - FLOP3(0) { - get_float_arg(value, 0, x); - get_float_arg(value, 1, y); - set_float_arg(value, 2, x + y); - EXT_RETURN(S48_UNSPECIFIC);} - FLOP3(1) { - get_float_arg(value, 0, x); - get_float_arg(value, 1, y); - set_float_arg(value, 2, x - y); - EXT_RETURN(S48_UNSPECIFIC);} - FLOP3(2) { - get_float_arg(value, 0, x); - get_float_arg(value, 1, y); - set_float_arg(value, 2, x * y); - EXT_RETURN(S48_UNSPECIFIC);} - FLOP3(3) { - get_float_arg(value, 0, x); - get_float_arg(value, 1, y); - if (y == 0.0) EXT_EXCEPTION; - set_float_arg(value, 2, x / y); - EXT_RETURN(S48_UNSPECIFIC);} - FLOP2(4) { - get_float_arg(value, 0, x); - get_float_arg(value, 1, y); - EXT_RETURN(S48_ENTER_BOOLEAN(x == y));} - FLOP2(5) { - get_float_arg(value, 0, x); - get_float_arg(value, 1, y); - EXT_RETURN(S48_ENTER_BOOLEAN(x < y));} - FLOP2(6) { /* fixnum->float */ - s48_value arg = get_arg(value, 0); - if (!S48_FIXNUM_P(arg)) EXT_RETURN(S48_FALSE); - set_float_arg(value, 1, S48_UNSAFE_EXTRACT_FIXNUM(arg)); - EXT_RETURN(S48_TRUE);} - FLOP2(7) { /* string->float */ - char *str = get_string_arg(value, 0); - set_float_arg(value, 1, atof(str)); - EXT_RETURN(S48_UNSPECIFIC);} - FLOP2(8) { /* float->string */ - size_t len; - char *str = get_string_arg(value,1); - get_float_arg(value, 0, x); - sprintf(str, "%g", x); - len = strlen(str); - if (len > S48_UNSAFE_STRING_LENGTH(get_arg(value,1))) - /* unlikely but catastrophic */ - fprintf(stderr, "printing float: output too long: %s\n", - str); - EXT_RETURN(S48_UNSAFE_ENTER_FIXNUM(len));} - - /* exp log sin cos tan asin acos atan sqrt */ - - FLOP2(9) { - get_float_arg(value, 0, x); - set_float_arg(value, 1, exp(x)); - EXT_RETURN(S48_UNSPECIFIC);} - FLOP2(10) { - get_float_arg(value, 0, x); - set_float_arg(value, 1, log(x)); - EXT_RETURN(S48_UNSPECIFIC);} - FLOP2(11) { - get_float_arg(value, 0, x); - set_float_arg(value, 1, sin(x)); - EXT_RETURN(S48_UNSPECIFIC);} - FLOP2(12) { - get_float_arg(value, 0, x); - set_float_arg(value, 1, cos(x)); - EXT_RETURN(S48_UNSPECIFIC);} - FLOP2(13) { - get_float_arg(value, 0, x); - set_float_arg(value, 1, tan(x)); - EXT_RETURN(S48_UNSPECIFIC);} - FLOP2(14) { - get_float_arg(value, 0, x); - set_float_arg(value, 1, asin(x)); - EXT_RETURN(S48_UNSPECIFIC);} - FLOP2(15) { - get_float_arg(value, 0, x); - set_float_arg(value, 1, acos(x)); - EXT_RETURN(S48_UNSPECIFIC);} - FLOP3(16) { /* atan */ - get_float_arg(value, 0, y); - get_float_arg(value, 1, x); - set_float_arg(value, 2, atan2(y, x)); - EXT_RETURN(S48_UNSPECIFIC);} - FLOP2(17) { - get_float_arg(value, 0, x); - set_float_arg(value, 1, sqrt(x)); - EXT_RETURN(S48_UNSPECIFIC);} - - FLOP2(18) { /* floor */ - get_float_arg(value, 0, x); - set_float_arg(value, 1, floor(x)); - EXT_RETURN(S48_UNSPECIFIC);} - case FLOP+19: { /* integer? */ - EXTRACT_FLOAT(value, x); - EXT_RETURN(S48_ENTER_BOOLEAN(fmod(x, 1.0) == 0.0)); } - case FLOP+20: { /* float->fixnum */ - EXTRACT_FLOAT(value, x); - if (x <= (double)GREATEST_FIXNUM_VALUE - && x >= (double)LEAST_FIXNUM_VALUE) - { - EXT_RETURN(S48_UNSAFE_ENTER_FIXNUM((long)x)); } - else - EXT_RETURN(S48_FALSE);} - FLOP3(21) { /* quotient */ - double z; - get_float_arg(value, 0, x); - get_float_arg(value, 1, y); - if (fmod(x, 1.0) != 0.0 || fmod(y, 1.0) != 0.0) EXT_EXCEPTION; - if (y == 0.0) EXT_EXCEPTION; - z = x / y; - set_float_arg(value, 2, z < 0.0 ? ceil(z) : floor(z)); - EXT_RETURN(S48_UNSPECIFIC);} - FLOP3(22) { /* remainder */ - get_float_arg(value, 0, x); - get_float_arg(value, 1, y); - if (fmod(x, 1.0) != 0.0 || fmod(y, 1.0) != 0.0) EXT_EXCEPTION; - if (y == 0.0) EXT_EXCEPTION; - - /* "fmod(double x, double y) returns the floating-point remainder - (f) of the division of x by y, where f has the same sign as x, - such that x=iy+f for some integer i, and |f| < |y|." */ - - set_float_arg(value, 2, fmod(x, y)); - EXT_RETURN(S48_UNSPECIFIC);} - - default: - EXT_EXCEPTION; - } -} - diff --git a/c/fake/libdl2.c b/c/fake/libdl2.c deleted file mode 100644 index 376ea24..0000000 --- a/c/fake/libdl2.c +++ /dev/null @@ -1,43 +0,0 @@ -/* - * This is a fake version of the dynamic loading library for machines - * which don't have it, and don't even have an nlist. - * We fake it so that everything fails. - */ -#include "sysdep.h" - - -static char *lasterror; - - -char * -dlerror(void) -{ - char *res; - - res = lasterror; - lasterror = NULL; - return (res); -} - - -void * -dlopen(char *name, int flags) -{ - lasterror = "Dynamic loading not supported on this machine"; - return (NULL); -} - - -int -dlclose(void *lib) -{ - return (0); -} - - -void * -dlsym(void *lib, char *name) -{ - lasterror = "Dynamic loading not supported on this machine"; - return (NULL); -} diff --git a/c/fake/sigact.h b/c/fake/sigact.h deleted file mode 100644 index e12edcb..0000000 --- a/c/fake/sigact.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - * If we don't have sigaction, we fake it using signal. - */ -#if ! defined(HAVE_SIGACTION) - -struct sigaction { - void (*sa_handler)(); - int sa_mask; - int sa_flags; -}; - -#define sigaction(sig, act, oact) signal((sig), (act)->sa_handler) -#define sigemptyset(ign) 0 - -#endif diff --git a/c/fake/strerror.c b/c/fake/strerror.c deleted file mode 100644 index fe1ec7e..0000000 --- a/c/fake/strerror.c +++ /dev/null @@ -1,22 +0,0 @@ -/* - * If the system doesn't have a strerror procedure, we provide our own. - * Note, this depends on sys_nerr and sys_errlist being provided. - * If your system doesn't provide that either, you can replace this - * procedure with one that always returns "Unknown error". - */ -#include "sysdep.h" - - -extern int sys_nerr; -extern char *sys_errlist[]; - - -char * -strerror(int errnum) -{ - if ((0 <= errnum) - && (errnum < sys_nerr)) - return (sys_errlist[errnum]); - else - return ("Unknown error"); -} diff --git a/c/fake/strerror.h b/c/fake/strerror.h deleted file mode 100644 index 670e683..0000000 --- a/c/fake/strerror.h +++ /dev/null @@ -1,8 +0,0 @@ -/* - * If we don't have strerror(), we fake it using sys_nerr and sys_errlist. - */ -#if ! defined(HAVE_STRERROR) - -extern char *strerror(int errnum); - -#endif diff --git a/c/fake/sys-select.h b/c/fake/sys-select.h deleted file mode 100644 index d5dc08c..0000000 --- a/c/fake/sys-select.h +++ /dev/null @@ -1,9 +0,0 @@ -/* - * If we have a sys/select.h, then include it. - */ -#if defined(HAVE_SYS_SELECT_H) - -#include -#include - -#endif diff --git a/c/io.h b/c/io.h deleted file mode 100644 index 8357210..0000000 --- a/c/io.h +++ /dev/null @@ -1,12 +0,0 @@ -extern FILE *ps_open_input_file(char *, long *); -extern FILE *ps_open_output_file(char *, long *); -extern long ps_close(FILE *); -extern char ps_read_char(FILE *, char *, long *, char); -extern long ps_read_integer(FILE *, char *, long *); -extern long ps_write_char(char, FILE *); -extern long ps_write_integer(long, FILE *); -extern long ps_write_string(char *, FILE *); -extern long ps_read_block(FILE *, char *, long, char *, long *); -extern long ps_write_block(FILE *, char *, long); -extern char *ps_error_string(long); -extern void ps_error(char *, long count, ...); diff --git a/c/old-scheme48.h b/c/old-scheme48.h deleted file mode 100644 index 03f5d10..0000000 --- a/c/old-scheme48.h +++ /dev/null @@ -1,110 +0,0 @@ -typedef long scheme_value; - -#define FIXNUM_TAG 0 -#define FIXNUMP(x) (((long)(x) & 3L) == FIXNUM_TAG) -#define IMMEDIATE_TAG 1 -#define IMMEDIATEP(x) (((long)(x) & 3L) == IMMEDIATE_TAG) -#define HEADER_TAG 2 -#define HEADERP(x) (((long)(x) & 3L) == HEADER_TAG) -#define STOB_TAG 3 -#define STOBP(x) (((long)(x) & 3L) == STOB_TAG) - -#define ENTER_FIXNUM(n) ((scheme_value)((n) << 2)) -#define EXTRACT_FIXNUM(x) ((long)(x) >> 2) - -#define MISC_IMMEDIATE(n) (scheme_value)(IMMEDIATE_TAG | ((n) << 2)) -#define SCHFALSE MISC_IMMEDIATE(0) -#define SCHTRUE MISC_IMMEDIATE(1) -#define SCHCHAR MISC_IMMEDIATE(2) -#define SCHUNSPECIFIC MISC_IMMEDIATE(3) -#define SCHUNDEFINED MISC_IMMEDIATE(4) -#define SCHEOF MISC_IMMEDIATE(5) -#define SCHNULL MISC_IMMEDIATE(6) -#define UNDEFINED SCHUNDEFINED -#define UNSPECIFIC SCHUNSPECIFIC - -#define ENTER_BOOLEAN(n) ((n) ? SCHTRUE : SCHFALSE) -#define EXTRACT_BOOLEAN(x) ((x) != SCHFALSE) - -#define ENTER_CHAR(c) (SCHCHAR | ((c) << 8)) -#define EXTRACT_CHAR(x) ((x) >> 8) -#define CHARP(x) ((((long) (x)) & 0xff) == SCHCHAR) - -#define ADDRESS_AFTER_HEADER(x, type) ((type *)((x) - STOB_TAG)) -#define STOB_REF(x, i) ((ADDRESS_AFTER_HEADER(x, long))[i]) -#define STOB_TYPE(x) ((STOB_HEADER(x)>>2)&31) -#define STOB_HEADER(x) (STOB_REF((x),-1)) -#define STOB_BLENGTH(x) (STOB_HEADER(x) >> 8) -#define STOB_LLENGTH(x) (STOB_HEADER(x) >> 10) - -#define STOBTYPE_PAIR 0 -#define PAIRP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_PAIR)) -#define STOBTYPE_SYMBOL 1 -#define SYMBOLP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_SYMBOL)) -#define STOBTYPE_VECTOR 2 -#define VECTORP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_VECTOR)) -#define STOBTYPE_CLOSURE 3 -#define CLOSUREP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_CLOSURE)) -#define STOBTYPE_LOCATION 4 -#define LOCATIONP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_LOCATION)) -#define STOBTYPE_CHANNEL 5 -#define CHANNELP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_CHANNEL)) -#define STOBTYPE_PORT 6 -#define PORTP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_PORT)) -#define STOBTYPE_RATNUM 7 -#define RATNUMP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_RATNUM)) -#define STOBTYPE_RECORD 8 -#define RECORDP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_RECORD)) -#define STOBTYPE_CONTINUATION 9 -#define CONTINUATIONP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_CONTINUATION)) -#define STOBTYPE_EXTENDED_NUMBER 10 -#define EXTENDED_NUMBERP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_EXTENDED_NUMBER)) -#define STOBTYPE_TEMPLATE 11 -#define TEMPLATEP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_TEMPLATE)) -#define STOBTYPE_WEAK_POINTER 12 -#define WEAK_POINTERP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_WEAK_POINTER)) -#define STOBTYPE_SHARED_BINDING 13 -#define SHARED_BINDINGP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_SHARED_BINDING)) -#define STOBTYPE_UNUSED_D_HEADER1 14 -#define UNUSED_D_HEADER1P(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_UNUSED_D_HEADER1)) -#define STOBTYPE_UNUSED_D_HEADER2 15 -#define UNUSED_D_HEADER2P(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_UNUSED_D_HEADER2)) -#define STOBTYPE_STRING 16 -#define STRINGP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_STRING)) -#define STOBTYPE_CODE_VECTOR 17 -#define CODE_VECTORP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_CODE_VECTOR)) -#define STOBTYPE_DOUBLE 18 -#define DOUBLEP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_DOUBLE)) -#define STOBTYPE_BIGNUM 19 -#define BIGNUMP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_BIGNUM)) - -#define CAR(x) STOB_REF(x, 0) -#define CDR(x) STOB_REF(x, 1) -#define SYMBOL_TO_STRING(x) STOB_REF(x, 0) -#define LOCATION_ID(x) STOB_REF(x, 0) -#define CONTENTS(x) STOB_REF(x, 1) -#define CLOSURE_TEMPLATE(x) STOB_REF(x, 0) -#define CLOSURE_ENV(x) STOB_REF(x, 1) -#define WEAK_POINTER_REF(x) STOB_REF(x, 0) -#define SHARED_BINDING_NAME(x) STOB_REF(x, 0) -#define SHARED_BINDING_IS_IMPORTP(x) STOB_REF(x, 1) -#define SHARED_BINDING_REF(x) STOB_REF(x, 2) -#define PORT_HANDLER(x) STOB_REF(x, 0) -#define PORT_STATUS(x) STOB_REF(x, 1) -#define PORT_LOCK(x) STOB_REF(x, 2) -#define PORT_LOCKEDP(x) STOB_REF(x, 3) -#define PORT_DATA(x) STOB_REF(x, 4) -#define PORT_BUFFER(x) STOB_REF(x, 5) -#define PORT_INDEX(x) STOB_REF(x, 6) -#define PORT_LIMIT(x) STOB_REF(x, 7) -#define PORT_PENDING_EOFP(x) STOB_REF(x, 8) -#define CHANNEL_STATUS(x) STOB_REF(x, 0) -#define CHANNEL_ID(x) STOB_REF(x, 1) -#define CHANNEL_OS_INDEX(x) STOB_REF(x, 2) - -#define VECTOR_LENGTH(x) STOB_LLENGTH(x) -#define VECTOR_REF(x, i) STOB_REF(x, i) -#define CODE_VECTOR_LENGTH(x) STOB_BLENGTH(x) -#define CODE_VECTOR_REF(x, i) (ADDRESS_AFTER_HEADER(x, unsigned char)[i]) -#define STRING_LENGTH(x) (STOB_BLENGTH(x)-1) -#define STRING_REF(x, i) (ADDRESS_AFTER_HEADER(x, char)[i]) diff --git a/c/prescheme.h b/c/prescheme.h deleted file mode 100644 index b95d022..0000000 --- a/c/prescheme.h +++ /dev/null @@ -1,59 +0,0 @@ -#include -#include "io.h" - -#define PS_READ_CHAR(PORT,RESULT,EOFP,STATUS) \ -{ \ - FILE * TTport = PORT; \ - int TTchar; \ - if (EOF == (TTchar = getc(TTport))) \ - RESULT = ps_read_char(TTport, &EOFP, &STATUS, 0==1);\ - else { \ - RESULT = TTchar; \ - EOFP = 0; \ - STATUS = 0; } \ -} - -#define PS_PEEK_CHAR(PORT,RESULT,EOFP,STATUS) \ -{ \ - FILE * TTport = PORT; \ - int TTchar; \ - if (EOF == (TTchar = getc(TTport))) \ - RESULT = ps_read_char(TTport, &EOFP, &STATUS, 0==0);\ - else { \ - RESULT = TTchar; \ - ungetc(RESULT, TTport); \ - EOFP = 0; \ - STATUS = 0; } \ -} - -#define PS_READ_INTEGER(PORT,RESULT,EOFP,STATUS) \ -RESULT = ps_read_integer(PORT,&EOFP,&STATUS); - -#define PS_WRITE_CHAR(CHAR,PORT,STATUS) \ -{ \ - FILE * TTport = PORT; \ - char TTchar = CHAR; \ - if (EOF == putc(TTchar,TTport)) \ - STATUS = ps_write_char(TTchar,TTport); \ - else { \ - STATUS = 0; } \ -} - - -/* C shifts may not work if the amount is greater than the machine word size */ -/* Patched by JAR 6/6/93 */ - -#define PS_SHIFT_RIGHT(X,Y,RESULT) \ -{ \ - long TTx = X, TTy = Y; \ - RESULT = TTy >= 32 ? (TTx < 0 ? -1 : 0) : TTx >> TTy; \ -} - -#define PS_SHIFT_LEFT(X,Y,RESULT) \ -{ \ - long TTy = Y; \ - RESULT = TTy >= 32 ? 0 : X << TTy; \ -} - -extern long s48_return_value, s48_run_machine(); - diff --git a/c/scheme48heap.h b/c/scheme48heap.h deleted file mode 100644 index 7072653..0000000 --- a/c/scheme48heap.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Externally visible objects defined in scheme48heap.c. - */ - -/* initialize top-level variables */ -extern void s48_heap_init(void); - -/* heap-init interface */ -extern void s48_initialize_heap(long, long); -extern void s48_register_static_areas(unsigned char, long *, long *, - unsigned char, long *, long *); - -/* heap interface */ -extern long s48_available(void); -extern long s48_heap_size(void); -extern long s48_find_all(long); -extern long s48_find_all_records(long); -extern char *s48_ShpS; -extern char *s48_SlimitS; - -/* gc interface */ -extern void s48_begin_collection(void); -extern long s48_trace_value(long); -extern long s48_trace_locationsB(char *, char *); -extern long s48_trace_stob_contentsB(long); -extern void s48_do_gc(void); -extern void s48_end_collection(void); -extern char s48_extantP(long); -extern long s48_gc_count(void); - -/* allocation interface */ -extern char s48_availableP(long); -extern long s48_preallocate_space(long); -extern char *s48_allocate_space(long, long, long); -extern void s48_write_barrier(long, char *, long); - -/* images interface */ -extern char s48_image_writing_okayP(void); -extern long s48_write_image(long, FILE *); -extern long s48_check_image_header(unsigned char *); -extern long s48_read_image(); - -extern long s48_startup_procedure(void); -extern long s48_initial_symbols(void); -extern long s48_initial_imported_bindings(void); -extern long s48_initial_exported_bindings(void); -extern long s48_resumer_records(void); -extern long s48_undumpable_records(long *); - -extern void s48_initialization_completeB(void); -extern void s48_initializing_gc_root(void); - -extern void s48_set_image_valuesB(long, long, long, long); diff --git a/c/unix/dynamo-test.c b/c/unix/dynamo-test.c deleted file mode 100644 index 70beb8b..0000000 --- a/c/unix/dynamo-test.c +++ /dev/null @@ -1,40 +0,0 @@ - -/* - * A simple test file for dynamic loading, dynamic name lookup, and - * old-style external calls. - */ - -#include -#include "scheme48.h" - -/* - * These should only be called on characters or other immediates. - */ - -s48_value -s48_dynamo_test(s48_value arg0, s48_value arg1, s48_value arg2) -{ - int i; - - s48_value vector = s48_make_vector(3, S48_FALSE); - - S48_VECTOR_SET(vector, 0, arg0); - S48_VECTOR_SET(vector, 1, arg1); - S48_VECTOR_SET(vector, 2, arg2); - - return vector; -} - -s48_value -s48_old_dynamo_test(long nargs, s48_value args[]) -{ - int i; - - s48_value vector = s48_make_vector(nargs, S48_FALSE); - - for (i = 0; i < nargs; i++) - S48_VECTOR_SET(vector, i, args[i]); - - return vector; -} - diff --git a/c/unix/misc.c b/c/unix/misc.c deleted file mode 100644 index f8fe75e..0000000 --- a/c/unix/misc.c +++ /dev/null @@ -1,129 +0,0 @@ -/* Copyright (c) 1993-1999 by Richard Kelsey and Jonathan Rees. - See file COPYING. */ - -#include -#include /* for getenv(), etc. (POSIX?/ANSI) */ -#include /* for strncpy(), etc. (POSIX/ANSI) */ -#include /* for getpwnam() (POSIX.1) */ -#include /* for sysconf(), etc. (POSIX.1/.2)*/ -#include -#include "sysdep.h" - - -#define TRUE (0 == 0) -#define FALSE (0 == 1) - -/* - Expanding Unix filenames - Unix Sucks - Richard Kelsey Wed Jan 17 21:40:26 EST 1990 - Later modified by others who wish to remain anonymous - - Expands initial ~ and ~/ in string `name', leaving the result in `buffer'. - `buffer_len' is the length of `buffer'. - - Note: strncpy(x, y, n) copies from y to x. -*/ - -char *s48_expand_file_name (name, buffer, buffer_len) - char *name, *buffer; - int buffer_len; -{ -#define USER_NAME_SIZE 256 - char *dir, *p, user_name[USER_NAME_SIZE]; - struct passwd *user_data; - int dir_len, i; - extern char *getenv(); - int name_len = strlen(name); - - dir = 0; - - if (name[0] == '~') { - name++; name_len--; - - if (name[0] == '/' || name[0] == 0) { - dir = getenv("HOME"); } - - else { - for (i = 0, p = name; i < name_len && *p != '/'; i++, p++) - if (i > (USER_NAME_SIZE - 2)) { - fprintf(stderr, - "\ns48_expand_file_name: user name longer than %d characters\n", - USER_NAME_SIZE - 3); - return(NULL); }; - strncpy(user_name, name, i); - user_name[i] = 0; - user_data = getpwnam(user_name); - if (!user_data) { - fprintf(stderr, "\ns48_expand_file_name: unknown user \"%s\"\n", - user_name); - return(NULL); }; - name_len -= i; - name = p; - dir = user_data->pw_dir; } } - - else if (name[0] == '$') { - name++; name_len--; - - for (i = 0, p = name; i < name_len && *p != '/'; i++, p++) - if (i > (USER_NAME_SIZE - 2)) { - fprintf(stderr, - "\ns48_expand_file_name: environment variable longer than %d characters\n", - USER_NAME_SIZE - 3); - return(NULL); }; - strncpy(user_name, name, i); - user_name[i] = 0; - - name_len -= i; - name = p; - dir = getenv(user_name); } - - if (dir) { - dir_len = strlen(dir); - if ((name_len + dir_len + 1) > buffer_len) { - fprintf(stderr, "\ns48_expand_file_name: supplied buffer is too small\n"); - return(NULL); }; - strncpy(buffer, dir, dir_len); - strncpy(buffer + dir_len, name, name_len); - buffer[name_len + dir_len] = 0; } - - else { - if ((name_len + 1) > buffer_len) { - fprintf(stderr, "\ns48_expand_file_name: supplied buffer is too small\n"); - return(NULL); }; - strncpy(buffer, name, name_len); - buffer[name_len] = 0; } - - return(buffer); -} - -/* test routine -main(argc, argv) - int argc; - char *argv[]; -{ - char buffer[32]; - s48_expand_file_name(argv[1], buffer, 32); - printf("%s\n", buffer); - return(0); -} -*/ - - -/* Driver loop for tail-recursive calls */ - -long s48_return_value; - -long -s48_run_machine(long (*proc) (void)) -{ - while (proc != 0) - proc = (long (*) (void)) (*proc)(); - return s48_return_value; -} - -unsigned char * -ps_error_string(long the_errno) -{ - return((unsigned char *)strerror(the_errno)); -} diff --git a/c/unix/test.c b/c/unix/test.c deleted file mode 100644 index 0835635..0000000 --- a/c/unix/test.c +++ /dev/null @@ -1,12 +0,0 @@ - -#include "c/scheme48.h" - -long -frog(long arg_count, long *args) -{ - long i, res; - - for (i = 0, res = s48_enter_integer(-100); i < arg_count; res += args[i], i++); - - return res; -} diff --git a/c/write-barrier.h b/c/write-barrier.h deleted file mode 100644 index 721b011..0000000 --- a/c/write-barrier.h +++ /dev/null @@ -1,2 +0,0 @@ - -#define S48_WRITE_BARRIER(stob, address, value) ((void)0) diff --git a/doc/hacking.txt b/doc/hacking.txt deleted file mode 100644 index 081d7e5..0000000 --- a/doc/hacking.txt +++ /dev/null @@ -1,290 +0,0 @@ - -,bench -,load-package linker -,new-package =link= linker debuginfo defpackage -,load scripts.scm -(link-initial-system) - - -To change between initial image starting in mini-command (MINI) and -command (MAXI): - - 1. Definition of initial system's command module in comp-packages.scm: - MINI: (make-mini-command scheme) - MAXI: (make-command scheme) - 2. Location of (define-module (make-command ...)...): - MINI: more-packages.scm - MAXI: comp-packages.scm - 3. Location of (define-interface command-interface ...): - MINI: more-interfaces.scm - MAXI: interfaces.scm - - - - -> ,new-package z architecture primitives packages table enumerated debug-data -z> (let ((i 0)) - (table-walk (lambda (x y) (set! i (+ i 1))) - location-name-table) - i) -1385 -z> (vector-length (find-all-xs (name->enumerand 'location stob))) -1259 -(vector-length (find-all-xs (name->enumerand 'record stob))) -2150 - -(find-all-xs (name->enumerand 'record stob)) -z> (do ((i 0 (+ i 1)) - (j 0 (if (package? (vector-ref rs i)) (+ j 1) j))) ((= i (vector-length rs)) j)) -72 -z> - - - - -> ,new-package z architecture primitives compiler table -z> (vector-ref stob 10) -'template -z> stob -'#(pair symbol vector closure location port ratio record continuation extended-number template weak-pointer external unused-d-header1 unused-d-header2 string code-vector double bignum) -z> (vector-ref stob 7) -'record -z> (define rs (find-all-xs 7)) -z> (vector-length rs) -2178 -z> (define ls (find-all-xs 4)) -z> (vector-length ls) -1266 -z> - - - - -To get a fresh config package: - -,in config (define-structures ((config1 (export))) - (open defpackage built-in-structures more-structures)) -,config-package-is config1 - - -To load a linker with a fresh new compiler: - x48 -i new-scheme48.image -h 10000000 ,in reification reify-structures -'#{Procedure 8447 reify-structures} -debug-config> (define reify-structures ##) -debug-config> make-simple-package - -Error: undefined variable - make-simple-package - (package debug-config) -1 debug-config> -debug-config> (define-structures ((p (export start))) (open initial-system scheme-level-2 packages)) -debug-config> (define go (in p `(start ,(reify-structures (desirable-packages) (lambda (loc) `',loc))))) - - - -### Small images for exercising the linker and/or runtime system - -debug/tiny.image: debug/tiny.scm $(LINKER_IMAGE) - ($(START_LINKER_RUNNABLE) \ - echo "(load \"debug/tiny-packages.scm\")"; \ - echo "(link-simple-system '(debug tiny) 'start tiny-system)") \ - | $(LINKER_RUNNABLE) -i $(LINKER_IMAGE) - -debug/little.image: $(LINKER_IMAGE) $(CONFIG_FILES) $(little-files) - ($(START_LINKER_RUNNABLE) \ - echo "(load \"scripts.scm\")"; \ - echo "(link-little-system)") \ - | $(LINKER_RUNNABLE) -i $(LINKER_IMAGE) $(BIG_HEAP) - -debug/medium.image: $(LINKER_IMAGE) $(CONFIG_FILES) $(medium-files) - ($(START_LINKER_RUNNABLE) \ - echo "(load \"scripts.scm\")"; \ - echo "(link-medium-system)") \ - | $(LINKER_RUNNABLE) -i $(LINKER_IMAGE) $(BIG_HEAP) - - - echo "(define l-f (package-all-filenames little-system))"; \ - echo "(define m-f (package-all-filenames medium-system))"; \ - - 'little-files l-f 'medium-files m-f \ - - -[The following is from June 1992, and probably not quite compatible -with the current compiler internals.] - -To eliminate use of the stack GC to implement tail recursion, change -comp.scm as follows: - -(define (compile-unknown-call exp cenv depth cont) - (note-source-code - exp - (maybe-push-continuation (sequentially - (push-all (cdr exp) cenv 0) - (compile (car exp) - cenv - (length (cdr exp)) - (fall-through-cont)) - (instruction (if (return-cont? cont) - op/move-args-and-call - op/call) - (length (cdr exp)))) - depth - cont))) - - --------------------- - -Here's another cool thing. 6/28/93 - -(define-interface evaluation-interface - (export eval load eval-from-file)) - -(define-structure run evaluation-interface - (open scheme-level-2 syntactic packages scan - environments - signals - locations - features ;force-output - table - fluids) - (files (debug run))) - -,load-package run -,in run -,in package-commands (environment-for-syntax-promise) -(define cool (make-simple-package (list scheme) eval ## 'cool)) -,in command set-environment-for-commands! -(## cool) - -cool> ,inspect (lambda (x) x) -'#{Procedure 6394} - - [0: exp] '(lambda (x) x) - [1: env] '#{Package 286 cool} -inspect: -inspect: q -cool> - - - -(define (z s) - (define (show-type name static) - (write name) - (display " : ") - (write (static-type static)) - (newline)) - (if (package? s) - (for-each-definition (lambda (name static loc) - (show-type name static)) - s) - (interface-walk (lambda (name type) - (show-type name - (car (structure-lookup - s name #t)))) - (structure-interface s)))) - -; ,open expander syntactic packages reconstruction - -(define (e x) - (let ((p (interaction-environment))) - (let ((node (expand-form x p))) - (write (node-type node (package->environment p))) - (newline) - (eval node p)))) - - - -> (define hunk3 (lap hunk3 - 0 (check-nargs= 3) - 2 (pop) - 3 (make-stored-object 3 0) - 6 (return))) -> (hunk3 1 2 3) -'(1 . 2) -> (define cxr (lap cxr - 0 (check-nargs= 2) - 2 (pop) - 3 (stored-object-indexed-ref 0) - 5 (return))) -> (cxr (hunk3 1 2 3) 2) -3 -> - - -(define-syntax %cons - (lambda (e r c) - (let ((n (cadr e)) - (kind (caddr e))) - `(,(r 'lap) (%cons ,n ,kind) - (check-nargs= ,n) - (pop) - (make-stored-object ,n ,kind) - (return))))) - - -(define (& x) - (or (node-ref x 'uid) - (begin (set! *n* (+ *n* 1)) - (node-set! x 'uid *n*) - *n*)) - x) - -(define (uid n) (node-ref (& n) 'uid)) - -(define *n* 0) diff --git a/doc/install.txt b/doc/install.txt deleted file mode 100644 index 7ffcada..0000000 --- a/doc/install.txt +++ /dev/null @@ -1,159 +0,0 @@ --*- Mode: Indented-text; -*- - -Here are some remarks to complement what's in the INSTALL file. - ------ - -When running "make", don't worry if the ".notify" target fails. Its -only purpose is to send an email message to -scheme-48-notifications@martigny.ai.mit.edu, so that we can get a -rough idea of how much Scheme 48 is being used and by whom. We -promise not to use your name or email address for any commercial -purpose. If you don't want us to know, just do "make -t .notify" -first. - ------ - -Customizing the installation - - 1. If you don't believe in configure scripts, or don't have a - /bin/sh that can handle the configure script, you can make - sysdep.h and Makefile manually from sysdep.h.in and Makefile.in. - The technique is fairly obvious. For Makefile, just give - reasonable values for all of the variables at the top that are - defined as "foo = @foo@", e.g. srcdir=., CC=cc, LIBS=-lm, - INSTALL=cp, etc. For sysdep.h, read the comments. If your OS is - Posix compliant, you should be able to copy sysdep.h.in to - sysdep.h unmodified and everything should work. - - 2. If you definitely won't be installing Scheme 48, you should set - libdir to the distribution directory (e.g. "make libdir=`pwd`"). - This will make the ,open and ,load-package commands work for the - library packages defined in more-packages.scm. - - 3. If desired, customize the contents of the development environment - heap image by editing the definitions of USUAL-COMMANDS and/or - USUAL-FEATURES in more-packages.scm; see below. - - 4. If you're using a DEC MIPS, and want to use the foreign function - interface, specify LDFLAGS=-N (with e.g. "make LDFLAGS=-N"). - ------ - -Customizing scheme48.image - -By default, the image consists of a core Scheme system (Revised^5 -Scheme plus a very minimal read-eval-print loop) together with a -standard set of "options" (command processor, debugging commands, -inspector, disassembler, generic arithmetic). The set of options is -controlled by the definitions of USUAL-COMMANDS and USUAL-FEATURES in -more-packages.scm. If you make the (open ...) clause empty, then -"make scheme48.image" will create a Scheme system without any extras -(such as error recovery), and the image will be smaller. The files -are listed in approximate order of decreasing desirability; you'll -probably want at least these: - - package-commands, build - - necessary for the scheme48.image script to work - debuginfo, disclosers - - necessary if you want error messages to be at all helpful - debugging - - defines important debugging commands such as ,preview and ,trace - -After editing the definition of usual-features, simply - - make scheme48.image - -to rebuild the image. - ------ - -Deeper changes to the system -- for example, edits to most of the -files in the rts/ directory -- will require using the static linker to -make a new initial.image. After you have a working scheme48.image -(perhaps a previous version of Scheme 48), you can create a linker -image with - - make linker - -after which you can say - - make image - -to get the linker to build a new initial.image and initial.debug. -scheme48.image will then be built from those. - -You might think that "make scheme48.image" ought to do this, but the -circular dependencies - - scheme48.image on initial.image - initial.image on link/linker.image - link/linker.image on scheme48.image - -needs to be broken somewhere, or else make will (justifiably) barf. I -chose to break the cycle by making scheme48.image not depend on -initial.image, since this is most robust for installation purposes. - ------ - -Editor support - -We recommend interacting with the Scheme 48 command processor using the -emacs/scheme interface written by Olin Shivers at CMU. Copies of the -relevant .el files, together with a "cmuscheme48.el", are in the -emacs/ subdirectory of the release. Usage information is in -doc/user-guide.txt. - -You will probably want to byte-compile the .el files to get .elc -files. Use M-x byte-compile-file to do this. - ------ - -Performance - -If you don't have a C compiler that optimizes as well as gcc does, -then performance may suffer. Take a look at the automatically -generated code in scheme48vm.c to find out why. With a good register -allocator, all those variables (including some of the virtual -machine's virtual registers) get allocated to hardware registers, and -it really flies. Without one, performance can be pretty bad. - -The configure script automatically sets the Makefile variable CFLAGS -to -O2 -g if gcc is available, or to -O if it isn't. This can be -overriden by specifying a different CFLAGS, e.g. "make CFLAGS=-g" for -no optimization. - -Even if you do have a good compiler, you should be able to improve -overall performance even more, maybe about 6-10%, by removing the -range check from the interpreter's instruction dispatch. To do this, -use the -S flag to get assembly code for scheme48vm.c, then find the -instructions in scheme48vm.s corresponding to the big dispatch in -restart(): - - L19173: { - code_pointer_83X = arg1K0; - switch ((*((unsigned char *) code_pointer_83X))) { - ... } - -There will be one or two comparison instructions to see whether the -opcode is in range; just remove them. For the 68000 I use a "sed" - script - - /cmpl #137,d0/ N - /cmpl #137,d0\n jhi L/ d - -but of course the constant will probably have to change when a new -release comes along. - -See the user's guide for information on the ,bench command, which -makes programs run faster. - ------ - -filenames.make is "include"d by the Makefile, but is automatically -generated from the module dependencies laid out in the various -configuration files (*-packages.scm). If you edit any of these .scm -files, you may want to do a "make filenames.make" before you do any -further "make"s in order to update the depedencies. This step isn't -necessary if you're using Gnu make, because Gnu make will make -included files automatically. diff --git a/doc/io.txt b/doc/io.txt deleted file mode 100644 index 239e1d2..0000000 --- a/doc/io.txt +++ /dev/null @@ -1,201 +0,0 @@ - -There are two types of I/O objects in Scheme 48, channels and ports. -Channels are the raw, unbuffered ports of the operating system. The -only I/O operations the VM supports for channels are block reads and -writes. Ports are the actual Scheme ports and are implemented in Scheme, -with some support from the VM for READ-CHAR, PEEK-CHAR, and WRITE-CHAR -for efficiency. The run-time system provides ports that are buffered -versions of channels. Other sorts of ports are in big/more-port.scm. - -Source files: - - rts/port.scm port operations and port handlers - rts/current-port.scm current-input-port, etc. - rts/channel.scm blocking on channels and handling i/o interrupts - rts/channel-port.scm ports that read and write to channels - rts/low.scm CHANNEL-READ and CHANNEL-WRITE - big/more-port.scm additional kinds of ports - vm/arch.scm fields of ports and channels - vm/prim-io.scm VM i/o opcodes - vm/vmio.scm implementation of channels - ----------------------------------------------------------------- - -CHANNELS - -The VM instructions that deal with channels are: - - (OPEN-CHANNEL ) -> channel - is a from the enumeration OPEN-CHANNEL-OPTION in arch.scm. - is either a filename (as a string) or an OS port (as a one-word - code-vector), depending on the mode. - - (CLOSE-CHANNEL ) -> unspecific - - (CHANNEL-MAYBE-READ - ) - -> number of bytes read or the eof-object - (CHANNEL-MAYBE-WRITE ) - -> number of bytes written - These read or write up to the specified number of characters or bytes - from or to the string or code-vector, with the first character or byte - going at . - - (CHANNEL-ABORT ) -> number of bytes read or written or - the eof-object - This aborts any pending read or write operation on the channel. The return - value reflects any partial completion. - -CHANNEL-MAYBE-READ and CHANNEL-MAYBE-WRITE do not block. If the read or -write cannot be completed immediately a PENDING-CHANNEL-I/O exception is -raised. It is then up to the run-time system to either wait or run some -other thread. The VM raises an I/O-COMPLETION interrupt whenever an i/o -operation completes. - -Because CHANNEL-MAYBE-READ and CHANNEL-MAYBE-WRITE are awkward to use, -the RTS defines somewhat simpler versions: - - (CHANNEL-READ ) - -> number of bytes read or the eof-object - (CHANNEL-WRITE ) - -> unspecified - is either a string or code vector and is the index of the - first character read or written. is one of: - N > 0 : the call returns when this many characters has been read or - an EOF is reached. - 'IMMEDIATE : the call reads as many characters as are available and - returns immediately. - 'ANY : the call returns as soon as at least one character has been read - or an EOF is reached. - is the number of characters to be written. CHANNEL-READ will read - the requested number of characters unless an EOF is reached. CHANNEL-WRITE - will write the requested number of characters. - ----------------------------------------------------------------- - -PORTS - -Ports are actual Scheme port and are (usually) buffered. They are fully -exposed to the run-time system. The VM instructions on ports could be -implemented in Scheme; they are in the VM for efficiency. Buffers are -code-vectors (this is a micro-hack; strings have a slightly higher overhead -because of the null terminating byte for C compatibility) (code-vectors are -just vectors of bytes). - -The fields of a port are: - - PORT-STATUS: a bit set represented as a fixnum. - Indices into this bit set are from the PORT-STATUS-OPTIONS - enumeration in arch.scm. The current bits are: input, output, - open-for-input, open-for-output (the last two are for things like - sockets, on which you need to block but which do not support - normal reading or writing). - - PORT-HANDLER: a record containing three procedures. These handle - printing the port, closing the port, and filling (for input ports) - or emptying (for output ports) buffers. - - PORT-DATA: ? - Whatever stuff the handler needs. - - PORT-LOCKED?, PORT-LOCK: used by the system to guarentee the atomicity - of i/o operations. - - PORT-BUFFER: a code-vector. The input or output buffer of the port. - - PORT-INDEX: a fixnum. The index of the next byte to read or written. - - PORT-LIMIT: a fixnum. One past the end of the valid/available buffer space. - - PORT-PENDING-EOF?: true if the next read to this port should return EOF. - -Additional operations on ports: - - (READ-BLOCK string-or-code-vector start count input-port) - Read COUNT bytes into STRING-OR-CODE-VECTOR starting at index START. - Returns the number of bytes read. Only an end-of-file will prevent - the requested number of bytes from being read. - - (WRITE-STRING string output-port) - Write the characters in the string to the port. - - (WRITE-BLOCK string-or-code-vector start count output-port) - The output counterpart to READ-BLOCK. This always writes out the - requested number of bytes. Its return value is unspecified. - - (FORCE_OUTPUT output-port) - Causes any buffered characters to be written out. - - (CURRENT-ERROR-PORT) - The current error port, analogous to Scheme's CURRENT-INPUT-PORT - and CURRENT-OUTPUT-PORT. - -The system maintains a list of output ports whose buffers should be -periodically flushed. The default output port and ports made by -OPEN-OUTPUT-FILE are on this list. (PERIODICALLY-FORCE-OUTPUT! ) -may be used to add others. - ----------------------------------------------------------------- - -PORT HANDLERS - -Every port has a handler with three procedures. The first two are used -for printing and closing ports and have the same type for all ports: - - (DISCLOSE port-data) -> disclose list - (CLOSE port-data) -> unspecific - -For CLOSE, The system takes care of modifying the port's status. - -The third procedure is used to fill and empty buffers. Its arguments -and return values depend on the kind of port: - - Buffered output ports: - (BUFFER-PROC port-data buffer start-index byte-count) -> unspecific - BYTE-COUNT bytes should be copied from the buffer beginning at - START-INDEX. The buffer may be either a string or a code-vector. - - Unbuffered output ports: - (BUFFER-PROC port-data char) -> unspecific - Write out the given character. The system uses this for the default - error port. - - Input ports: - (BUFFER-PROC data buffer start-index needed-bytes) - -> EOF or number of bytes read (before an EOF) - Bytes should be copied into the buffer starting at START-INDEX. The - buffer may be either a string or a code-vector. NEEDED-BYTES is one of: - - 'IMMEDIATE - The call should return immediately after transfering whatever number - of bytes are currently available, possibly none (this is used for - CHAR-READY?). The maximum number of characters is determined by the - length of BUFFER. - - 'ANY - The call should wait until at least one byte is available or an EOF - occurs (used for READ-CHAR and PEEK-CHAR). The maximum number of - characters is determined by the length of BUFFER. - - N > 0 - The call should wait until N bytes have been copied into the buffer - or an EOF occurs. If the return value is less than NEEDED-BYTES the - port code inserts an EOF after the last byte. - ----------------------------------------------------------------- - -Ports and the Virtual Machine - -Ports could be implemented entirely in Scheme, with no support from -the VM. For efficiency reasons VM instructions are supplied for -three port operations: - - (READ-CHAR ) - (PEEK-CHAR ) - (WRITE-CHAR ) - -For each of these, if there is sufficient data or space in the -appropriate buffer the VM performs the operation. Otherwise a -buffer-full/empty exception is raised and the exception handler -uses the buffer procedure from the port's handler to fill or -empty the buffer. diff --git a/doc/meeting.ps b/doc/meeting.ps deleted file mode 100644 index 3fcb07d..0000000 --- a/doc/meeting.ps +++ /dev/null @@ -1,1090 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dvips 5.521 Copyright 1986, 1993 Radical Eye Software -%%CreationDate: Sat Jan 15 16:05:04 1994 -%%Pages: 8 -%%PageOrder: Ascend -%%BoundingBox: 0 0 612 792 -%%EndComments -%DVIPSCommandLine: dvips -f -%DVIPSSource: TeX output 1994.01.15:1605 -%%BeginProcSet: tex.pro -/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N -/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72 -mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1} -ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale -isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div -hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul -TR matrix currentmatrix dup dup 4 get round 4 exch put dup dup 5 get -round 5 exch put setmatrix}N /@landscape{/isls true N}B /@manualfeed{ -statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 -0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn -begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X -array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo -setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx -FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{ -pop nn dup definefont setfont}B /ch-width{ch-data dup length 5 sub get} -B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup -length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B -/ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type -/stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp -0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2 -index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff -ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice -ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{ -ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}if nn -/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1 -sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{cc 1 add D -}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin 0 0 -moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul add -.99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore showpage -userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook -known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X -/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for -65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0 -0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V -{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7 -getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false} -ifelse}{false}ifelse end{{gsave TR -.1 -.1 TR 1 1 scale rulex ruley -false RMat{BDot}imagemask grestore}}{{gsave TR -.1 -.1 TR rulex ruley -scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave -transform round exch round exch itransform moveto rulex 0 rlineto 0 -ruley neg rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta -0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail} -B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{ -3 M}B /k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p --1 w}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{ -3 2 roll p a}B /bos{/SS save N}B /eos{SS restore}B end -%%EndProcSet -TeXDict begin 40258431 52099146 1000 300 300 () @start -/Fa 1 111 df<383C0044C6004702004602008E06000C06000C06000C0C00180C00180C -40181840181880300880300F00120E7F8D15>110 D E /Fb 3 111 -df<70F8F8F87005057C840D>58 D<70F8FCFC74040404080810102040060E7C840D>I<1E -07802318C023A06043C0704380704380708700E00700E00700E00700E00E01C00E01C00E -01C00E03821C03841C07041C07081C03083803101801E017147E931B>110 -D E /Fc 28 122 df<00003FE00000E01000018038000380780003007800070030000700 -000007000000070000000E0000000E0000000E000000FFFFE0000E00E0001C01C0001C01 -C0001C01C0001C01C0001C03800038038000380380003803800038070000380700007007 -000070071000700E2000700E2000700E2000E00E2000E0064000E0038000E0000000C000 -0001C0000001C000003180000079800000F3000000620000003C0000001D29829F1A>12 -D<7FF0FFE07FE00C037D8A10>45 D<01FFF800001F0000001E0000001E0000001E000000 -3C0000003C0000003C0000003C00000078000000780000007800000078000000F0000000 -F0000000F0000000F0000001E0000001E0000001E0000001E0008003C0010003C0010003 -C0030003C00200078006000780060007800C0007801C000F007800FFFFF800191F7D9E1D ->76 D<01FFFF80001E00E0001E0070001E0038001E003C003C003C003C003C003C003C00 -3C003C0078007800780078007800F0007800E000F003C000F00F0000FFFC0000F0000001 -E0000001E0000001E0000001E0000003C0000003C0000003C0000003C000000780000007 -80000007800000078000000F800000FFF000001E1F7D9E1F>80 D86 D<00F1800389C00707800E03801C03803C03 -80380700780700780700780700F00E00F00E00F00E00F00E20F01C40F01C40703C40705C -40308C800F070013147C9317>97 D<07803F8007000700070007000E000E000E000E001C -001C001CF01D0C3A0E3C0E380F380F700F700F700F700FE01EE01EE01EE01CE03CE03860 -7060E031C01F0010207B9F15>I<007E0001C1000300800E07801E07801C07003C020078 -0000780000780000F00000F00000F00000F00000F0000070010070020030040018380007 -C00011147C9315>I<0000780003F80000700000700000700000700000E00000E00000E0 -0000E00001C00001C000F1C00389C00707800E03801C03803C0380380700780700780700 -780700F00E00F00E00F00E00F00E20F01C40F01C40703C40705C40308C800F070015207C -9F17>I<007C01C207010E011C013C013802780C7BF07C00F000F000F000F00070007001 -70023804183807C010147C9315>I<00007800019C00033C00033C000718000700000700 -000E00000E00000E00000E00000E0001FFE0001C00001C00001C00001C00003800003800 -00380000380000380000700000700000700000700000700000700000E00000E00000E000 -00E00000C00001C00001C0000180003180007B0000F300006600003C00001629829F0E> -I<003C6000E27001C1E00380E00700E00F00E00E01C01E01C01E01C01E01C03C03803C03 -803C03803C03803C07003C07001C0F001C17000C2E0003CE00000E00000E00001C00001C -00301C00783800F0700060E0003F8000141D7E9315>I<01E0000FE00001C00001C00001 -C00001C000038000038000038000038000070000070000071E000763000E81800F01C00E -01C00E01C01C03801C03801C03801C0380380700380700380700380E10700E20700C2070 -1C20700C40E00CC060070014207D9F17>I<00C001E001E001C000000000000000000000 -000000000E003300230043804300470087000E000E000E001C001C001C00384038803080 -7080310033001C000B1F7C9E0E>I<0001800003C00003C0000380000000000000000000 -000000000000000000000000003C00004600008700008700010700010700020E00000E00 -000E00000E00001C00001C00001C00001C00003800003800003800003800007000007000 -00700000700000E00000E00030E00079C000F180006300003C00001228829E0E>I<01E0 -000FE00001C00001C00001C00001C0000380000380000380000380000700000700000703 -C00704200E08E00E11E00E21E00E40C01C80001D00001E00001FC00038E0003870003870 -00383840707080707080707080703100E03100601E0013207D9F15>I<03C01FC0038003 -800380038007000700070007000E000E000E000E001C001C001C001C0038003800380038 -007000700070007100E200E200E200E200640038000A207C9F0C>I<1C0F80F0002630C3 -18004740640C004780680E004700700E004700700E008E00E01C000E00E01C000E00E01C -000E00E01C001C01C038001C01C038001C01C038001C01C0708038038071003803806100 -380380E10038038062007007006600300300380021147C9325>I<1C0F802630C0474060 -4780604700704700708E00E00E00E00E00E00E00E01C01C01C01C01C01C01C0384380388 -3803083807083803107003303001C016147C931A>I<007C0001C3000301800E01C01E01 -C01C01E03C01E07801E07801E07801E0F003C0F003C0F003C0F00780F00700700F00700E -0030180018700007C00013147C9317>I<01C1E002621804741C04781C04701E04701E08 -E01E00E01E00E01E00E01E01C03C01C03C01C03C01C0380380780380700380E003C1C007 -2380071E000700000700000E00000E00000E00000E00001C00001C0000FFC000171D8093 -17>I<1C1E002661004783804787804707804703008E00000E00000E00000E00001C0000 -1C00001C00001C000038000038000038000038000070000030000011147C9313>114 -D<00FC030206010C030C070C060C000F800FF007F803FC003E000E700EF00CF00CE00840 -1020601F8010147D9313>I<018001C0038003800380038007000700FFF007000E000E00 -0E000E001C001C001C001C003800380038003820704070407080708031001E000C1C7C9B -0F>I<0E00C03300E02301C04381C04301C04701C08703800E03800E03800E03801C0700 -1C07001C07001C07101C0E20180E20180E201C1E200C264007C38014147C9318>I<0E03 -803307802307C04383C04301C04700C08700800E00800E00800E00801C01001C01001C01 -001C02001C02001C04001C04001C08000E300003C00012147C9315>I<0383800CC44010 -68E01071E02071E02070C040E00000E00000E00000E00001C00001C00001C00001C04063 -8080F38080F38100E5810084C60078780013147D9315>120 D<0E00C03300E02301C043 -81C04301C04701C08703800E03800E03800E03801C07001C07001C07001C07001C0E0018 -0E00180E001C1E000C3C0007DC00001C00001C00003800F03800F07000E06000C0C00043 -80003E0000131D7C9316>I E /Fd 10 117 df<03FF8000700000700000700000E00000 -E00000E00000E00001C00001C00001C00001C00003800003800003800003800007000007 -00100700100700200E00200E00600E00400E00C01C0380FFFF80141A7D9918>76 -D<03FFF800701C00700600700700E00700E00700E00700E00701C00E01C00E01C01C01C0 -3803807003FF800380000380000700000700000700000700000E00000E00000E00000E00 -001C0000FFC000181A7D991A>80 D<01E006181C08380870087010FFE0E000E000E000E0 -00E0086010602030C01F000D107C8F12>101 D<030706000000000000384C4E8E9C9C1C -3838707272E2E4643808197C980C>105 D<307C005986009E07009E07009C07009C0700 -380E00380E00380E00381C00701C80701C80703880703900E01900600E0011107C8F16> -110 D<01F006180C0C180E300E700E600EE00EE00EE00CE01CE018E030606030C01F000F -107C8F14>I<030F000590C009E0C009C06009C06009C0600380E00380E00380E00380E0 -0701C00701800703800703000E8E000E78000E00000E00001C00001C00001C00001C0000 -FF00001317808F14>I<30F059189E389C189C009C003800380038003800700070007000 -7000E00060000D107C8F10>114 D<03E004300830187018601C001F801FC00FE000E000 -60E060E06080C041803E000C107D8F10>I<06000E000E000E000E001C001C00FFC01C00 -38003800380038007000700070007000E100E100E100E200640038000A177C960D>I -E /Fe 24 124 df<00800100020004000C00080018003000300030006000600060006000 -E000E000E000E000E000E000E000E000E000E00060006000600060003000300030001800 -08000C00040002000100008009267D9B0F>40 D<8000400020001000180008000C000600 -060006000300030003000300038003800380038003800380038003800380038003000300 -030003000600060006000C0008001800100020004000800009267E9B0F>I<60F0F07010 -101020204080040B7D830B>44 D<60F0F06004047D830B>46 D<03000700FF0007000700 -070007000700070007000700070007000700070007000700070007000700070007000700 -FFF00C187D9713>49 D<0F80106020304038803CC01CE01C401C003C0038003800700060 -00C001800100020004040804100430083FF87FF8FFF80E187E9713>I<00300030007000 -F000F001700370027004700C7008701070307020704070C070FFFF007000700070007000 -70007007FF10187F9713>52 D<07801860303070306018E018E018E01CE01CE01C601C60 -3C303C185C0F9C001C00180018003870307060604021801F000E187E9713>57 -D68 D<007F000001C1C000070070000E0038001C001C003C -001E0038000E0078000F0070000700F0000780F0000780F0000780F0000780F0000780F0 -000780F0000780F000078078000F0078000F0038000E003C001E001C001C000E00380007 -00700001C1C000007F0000191A7E991E>79 D<7FFFFF00701C0700401C0100401C0100C0 -1C0180801C0080801C0080801C0080001C0000001C0000001C0000001C0000001C000000 -1C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C000000 -1C0000001C0000001C000003FFE000191A7F991C>84 D86 D<3F8070C070E0207000 -70007007F01C7030707070E070E071E071E0F171FB1E3C10107E8F13>97 -DI<07F80C1C381C30087000E000E000E000E000E000E000 -7000300438080C1807E00E107F8F11>I<07C01C3030187018600CE00CFFFCE000E000E0 -00E0006000300438080C1807E00E107F8F11>101 D<18003C003C001800000000000000 -000000000000FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C00 -FF80091A80990A>105 D109 DI<07E01C3830 -0C700E6006E007E007E007E007E007E0076006700E381C1C3807E010107F8F13>II114 D<0400040004000C000C001C003C00FFC01C001C001C001C001C001C001C -001C001C201C201C201C201C200E4003800B177F960F>116 D123 -D E /Ff 1 50 df<0C003C00CC000C000C000C000C000C000C000C000C000C000C000C00 -0C00FF8009107E8F0F>49 D E /Fg 30 121 df<0000600000E00000E00001C00001C000 -0380000380000380000700000700000700000E00000E00001C00001C00001C0000380000 -380000380000700000700000E00000E00000E00001C00001C00003800003800003800007 -00000700000700000E00000E00001C00001C00001C000038000038000038000070000070 -0000E00000E00000C00000132D7DA11A>47 D<387CFEFEFE7C38000000000000387CFEFE -FE7C3807147C930F>58 D<0000E000000000E000000001F000000001F000000001F00000 -0003F800000003F800000006FC00000006FC0000000EFE0000000C7E0000000C7E000000 -183F000000183F000000303F800000301F800000701FC00000600FC00000600FC00000C0 -07E00000FFFFE00001FFFFF000018003F000018003F000030001F800030001F800060001 -FC00060000FC000E0000FE00FFE00FFFE0FFE00FFFE0231F7E9E28>65 -D<0007FC02003FFF0E00FE03DE03F000FE07E0003E0FC0001E1F80001E3F00000E3F0000 -0E7F0000067E0000067E000006FE000000FE000000FE000000FE000000FE000000FE0000 -00FE0000007E0000007E0000067F0000063F0000063F00000C1F80000C0FC0001807E000 -3803F0007000FE01C0003FFF800007FC001F1F7D9E26>67 D69 D73 D77 D<03FC080FFF381E03F83800 -F8700078700038F00038F00018F00018F80000FC00007FC0007FFE003FFF801FFFE00FFF -F007FFF000FFF80007F80000FC00007C00003CC0003CC0003CC0003CE00038E00078F800 -70FE01E0E7FFC081FF00161F7D9E1D>83 D85 -D<07FC001FFF003F0F803F07C03F03E03F03E00C03E00003E0007FE007FBE01F03E03C03 -E07C03E0F803E0F803E0F803E0FC05E07E0DE03FF8FE0FE07E17147F9319>97 -D<01FE0007FF801F0FC03E0FC03E0FC07C0FC07C0300FC0000FC0000FC0000FC0000FC00 -00FC00007C00007E00003E00603F00C01F81C007FF0001FC0013147E9317>99 -D<0007F80007F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000 -F801F8F80FFEF81F83F83E01F87E00F87C00F87C00F8FC00F8FC00F8FC00F8FC00F8FC00 -F8FC00F87C00F87C00F87E00F83E01F81F07F80FFEFF03F8FF18207E9F1D>I<01FE0007 -FF800F83C01E01E03E00F07C00F07C00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C -00007C00003E00181E00180F807007FFE000FF8015147F9318>I<001F8000FFC001F3E0 -03E7E003C7E007C7E007C3C007C00007C00007C00007C00007C000FFFC00FFFC0007C000 -07C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C000 -07C00007C00007C0003FFC003FFC0013207F9F10>I<01FC3C07FFFE0F079E1E03DE3E03 -E03E03E03E03E03E03E03E03E01E03C00F07800FFF0009FC001800001800001C00001FFF -800FFFF007FFF81FFFFC3C007C70003EF0001EF0001EF0001E78003C78003C3F01F80FFF -E001FF00171E7F931A>II<1C003E007F007F007F003E001C00000000000000000000000000FF00FF00 -1F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE0 -0B217EA00E>I107 DIII<01FF00 -07FFC01F83F03E00F83E00F87C007C7C007CFC007EFC007EFC007EFC007EFC007EFC007E -7C007C7C007C3E00F83E00F81F83F007FFC001FF0017147F931A>II114 D<0FE63FFE701E600EE006E006F800FFC07FF83FFC1FFE03FE00 -1FC007C007E007F006F81EFFFCC7F010147E9315>I<0180018001800380038003800780 -0F803F80FFFCFFFC0F800F800F800F800F800F800F800F800F800F800F860F860F860F86 -0F8607CC03F801F00F1D7F9C14>IIIII E /Fh 6 106 df0 D<01800180018001800180 -C183F18F399C0FF003C003C00FF0399CF18FC1830180018001800180018010147D9417> -3 D<03C00FF01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFFFFFFFFFF7FFE7FFE3FFC1FF80FF0 -03C010127D9317>15 D<0000000400000000020000000002000000000100000000008000 -000000400000000020FFFFFFFFFCFFFFFFFFFC0000000020000000004000000000800000 -00010000000002000000000200000000040026107D922D>33 D<004000C0018001800180 -0300030003000600060006000C000C00180018001800300030003000600060006000C000 -C0006000600060003000300030001800180018000C000C00060006000600030003000300 -01800180018000C000400A2E7CA112>104 DI E /Fi 40 122 df<70F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F870 -000000000070F8F8F870051C779B18>33 D<030600078F00078F00078F00078F00078F00 -078F007FFFC0FFFFE0FFFFE07FFFC00F1E000F1E000F1E000F1E000F1E000F1E007FFFC0 -FFFFE0FFFFE07FFFC01E3C001E3C001E3C001E3C001E3C001E3C000C1800131C7E9B18> -35 D<387C7C7E3E0E0E0E1C1C38F8F0C0070E789B18>39 D<007000F001E003C007800F -001E001C00380038007000700070007000E000E000E000E000E000E000E000E000700070 -0070007000380038001C001E000F00078003C001F000F000700C24799F18>I<6000F000 -78003C001E000F000780038001C001C000E000E000E000E0007000700070007000700070 -0070007000E000E000E000E001C001C0038007800F001E003C007800F00060000C247C9F -18>I<01C00001C00001C00001C000C1C180F1C780F9CF807FFF001FFC0007F00007F000 -1FFC007FFF00F9CF80F1C780C1C18001C00001C00001C00001C00011147D9718>I<0060 -0000F00000F00000F00000F00000F00000F00000F0007FFFC0FFFFE0FFFFE07FFFC000F0 -0000F00000F00000F00000F00000F00000F00000600013147E9718>I<7FFF00FFFF80FF -FF807FFF0011047D8F18>45 D<3078FCFC78300606778518>I<03F0000FFE003FFF007C -0F807003C0E001C0F000E0F000E06000E00000E00000E00001C00001C00003C000078000 -0F00001E00003C0000780000F00001E00007C0000F80001E00E03C00E07FFFE0FFFFE07F -FFE0131C7E9B18>50 D<07F8001FFE003FFF007807807803C07801C03001C00001C00003 -C0000380000F0003FF0003FE0003FF000007800003C00001C00000E00000E00000E0F000 -E0F000E0F001C0F003C07C07803FFF001FFE0003F800131C7E9B18>I<1FFF803FFF803F -FF803800003800003800003800003800003800003800003800003BF8003FFE003FFF003C -07801803C00001C00000E00000E06000E0F000E0F000E0E001C07003C07C0F803FFF001F -FC0003F000131C7E9B18>53 D<007E0001FF0007FF800F83C01E03C01C03C03801803800 -00700000700000E1F800E7FE00FFFF00FE0780F803C0F001C0F000E0E000E0F000E07000 -E07000E07000E03801C03C03C01E07800FFF0007FE0001F800131C7E9B18>I<600000F0 -0000FC00007E00003F00001FC00007E00003F00001FC00007E00003F00001F80001F8000 -3F00007E0001FC0003F00007E0001FC0003F00007E0000FC0000F0000060000011187D99 -18>62 D<0FF0003FFC007FFF00700F00F00380F00380600780000F00003E00007C0001F0 -0001E00003C00003C00003C00003C00003C0000380000000000000000000000000000000 -0003800007C00007C00007C000038000111C7D9B18>I<007C0001FE0007FF000F87801E -03C03C1DC0387FC070FFE071E3E071C1E0E1C1E0E380E0E380E0E380E0E380E0E380E0E3 -80E0E1C1C071C1C071E3C070FF80387F003C1C001E00E00F83E007FFC001FF80007E0013 -1C7E9B18>I<1FE0003FF8007FFC00781E00300E0000070000070000FF0007FF001FFF00 -7F0700780700E00700E00700E00700F00F00781F003FFFF01FFBF007E1F014147D9318> -97 D<7E0000FE00007E00000E00000E00000E00000E00000E00000E3E000EFF800FFFC0 -0FC1E00F80E00F00700E00700E00380E00380E00380E00380E00380E00380F00700F0070 -0F80E00FC1E00FFFC00EFF80063E00151C809B18>I<01FE0007FF001FFF803E07803803 -00700000700000E00000E00000E00000E00000E00000E000007000007001C03801C03E03 -C01FFF8007FF0001FC0012147D9318>I<001F80003F80001F8000038000038000038000 -038000038003E3800FFB801FFF803C1F80380F80700780700380E00380E00380E00380E0 -0380E00380E00380700780700780380F803C1F801FFFF00FFBF803E3F0151C7E9B18>I< -01F00007FC001FFE003E0F00380780700380700380E001C0E001C0FFFFC0FFFFC0FFFFC0 -E000007000007001C03801C03E03C01FFF8007FF0001FC0012147D9318>I<001F80007F -C000FFE000E1E001C0C001C00001C00001C0007FFFC0FFFFC0FFFFC001C00001C00001C0 -0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0007FFF -007FFF007FFF00131C7F9B18>I<01E1F007FFF80FFFF81E1E301C0E0038070038070038 -07003807003807001C0E001E1E001FFC001FF80039E0003800001C00001FFE001FFFC03F -FFE07801F0700070E00038E00038E00038E000387800F07E03F01FFFC00FFF8001FC0015 -1F7F9318>I<7E0000FE00007E00000E00000E00000E00000E00000E00000E3E000EFF80 -0FFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0 -0E00E00E00E00E00E07FC3FCFFE7FE7FC3FC171C809B18>I<03800007C00007C00007C0 -000380000000000000000000000000007FC000FFC0007FC00001C00001C00001C00001C0 -0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000FFFF00FFFF -80FFFF00111D7C9C18>I<0038007C007C007C003800000000000000000FFC1FFC0FFC00 -1C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00 -1C001C001C001C6038F078FFF07FE03F800E277E9C18>I<7FE000FFE0007FE00000E000 -00E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E000 -00E00000E00000E00000E00000E00000E00000E00000E00000E0007FFFC0FFFFE07FFFC0 -131C7E9B18>108 D<7CE0E000FFFBF8007FFFF8001F1F1C001E1E1C001E1E1C001C1C1C -001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C -001C1C1C007F1F1F00FFBFBF807F1F1F001914819318>I<7E3E00FEFF807FFFC00FC1C0 -0F80E00F00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0 -0E00E07FC3FCFFE7FE7FC3FC1714809318>I<01F0000FFE001FFF003E0F803803807001 -C07001C0E000E0E000E0E000E0E000E0E000E0F001E07001C07803C03C07803E0F801FFF -000FFE0001F00013147E9318>I<7E3E00FEFF807FFFC00FC1E00F80E00F00700E00700E -00380E00380E00380E00380E00380E00380F00700F00700F80E00FC1E00FFFC00EFF800E -3E000E00000E00000E00000E00000E00000E00000E00007FC000FFE0007FC000151E8093 -18>I<01E38007FB801FFF803E1F80380F80700780700780E00380E00380E00380E00380 -E00380E00380700780700780380F803C1F801FFF800FFB8003E380000380000380000380 -000380000380000380000380003FF8003FF8003FF8151E7E9318>I<7F87E0FF9FF07FBF -F803F87803F03003E00003C00003C0000380000380000380000380000380000380000380 -000380000380007FFE00FFFF007FFE0015147F9318>I<07F7003FFF007FFF00780F00E0 -0700E00700E007007C00007FE0001FFC0003FE00001F00600780E00380E00380F00380F8 -0F00FFFF00FFFC00E7F00011147D9318>I<0180000380000380000380000380007FFFC0 -FFFFC0FFFFC0038000038000038000038000038000038000038000038000038000038040 -0380E00380E00380E001C1C001FFC000FF80003E0013197F9818>I<7E07E0FE0FE07E07 -E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00 -E00E01E00F03E007FFFC03FFFE01FCFC1714809318>I<7F8FF0FF8FF87F8FF01E03C00E -03800E03800E0380070700070700070700038E00038E00038E00038E0001DC0001DC0001 -DC0000F80000F80000700015147F9318>II<7F8FF07F9FF07F8FF0070700078E00039E0001DC0001F8 -0000F80000700000F00000F80001DC00039E00038E000707000F07807F8FF0FF8FF87F8F -F015147F9318>I<7F8FF0FF8FF87F8FF00E01C00E03800E038007038007070007070003 -8700038600038E0001CE0001CE0000CC0000CC0000DC0000780000780000780000700000 -700000700000F00000E00079E0007BC0007F80003F00001E0000151E7F9318>I -E /Fj 73 123 df<001F83E000F06E3001C078780380F8780300F0300700700007007000 -0700700007007000070070000700700007007000FFFFFF80070070000700700007007000 -070070000700700007007000070070000700700007007000070070000700700007007000 -0700700007007000070070000700700007007000070070007FE3FF001D20809F1B>11 -D<003F0000E0C001C0C00381E00701E00701E00700000700000700000700000700000700 -00FFFFE00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700 -E00700E00700E00700E00700E00700E00700E00700E07FC3FE1720809F19>I<001F81F8 -0000F04F040001C07C06000380F80F000300F00F000700F00F0007007000000700700000 -0700700000070070000007007000000700700000FFFFFFFF000700700700070070070007 -007007000700700700070070070007007007000700700700070070070007007007000700 -700700070070070007007007000700700700070070070007007007000700700700070070 -070007007007007FE3FE3FF02420809F26>14 D<7038F87CFC7EFC7E743A040204020402 -0804080410081008201040200F0E7E9F17>34 D<70F8FCFC74040404080810102040060E -7C9F0D>39 D<0020004000800100020006000C000C001800180030003000300070006000 -60006000E000E000E000E000E000E000E000E000E000E000E000E0006000600060007000 -300030003000180018000C000C000600020001000080004000200B2E7DA112>I<800040 -002000100008000C00060006000300030001800180018001C000C000C000C000E000E000 -E000E000E000E000E000E000E000E000E000E000C000C000C001C0018001800180030003 -00060006000C00080010002000400080000B2E7DA112>I<70F8FCFC7404040408081010 -2040060E7C840D>44 DI<70F8F8F87005057C840D>I<03F0000E -1C001C0E00180600380700700380700380700380700380F003C0F003C0F003C0F003C0F0 -03C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C070038070038070038078 -07803807001806001C0E000E1C0003F000121F7E9D17>48 D<018003800F80F380038003 -800380038003800380038003800380038003800380038003800380038003800380038003 -80038003800380038007C0FFFE0F1E7C9D17>I<03F0000C1C00100E0020070040078080 -0780F007C0F803C0F803C0F803C02007C00007C0000780000780000F00000E00001C0000 -380000700000600000C0000180000300000600400C00401800401000803FFF807FFF80FF -FF80121E7E9D17>I<03F0000C1C00100E00200F00780F80780780780780380F80000F80 -000F00000F00000E00001C0000380003F000003C00000E00000F000007800007800007C0 -2007C0F807C0F807C0F807C0F00780400780400F00200E001C3C0003F000121F7E9D17> -I<000600000600000E00000E00001E00002E00002E00004E00008E00008E00010E00020E -00020E00040E00080E00080E00100E00200E00200E00400E00C00E00FFFFF0000E00000E -00000E00000E00000E00000E00000E0000FFE0141E7F9D17>I<1803001FFE001FFC001F -F8001FE00010000010000010000010000010000010000011F000161C00180E0010070010 -07800003800003800003C00003C00003C07003C0F003C0F003C0E0038040038040070020 -0600100E000C380003E000121F7E9D17>I<007C000182000701000E03800C07801C0780 -380300380000780000700000700000F1F000F21C00F40600F80700F80380F80380F003C0 -F003C0F003C0F003C0F003C07003C07003C07003803803803807001807000C0E00061C00 -01F000121F7E9D17>I<4000007FFFC07FFF807FFF804001008002008002008004000008 -0000080000100000200000200000400000400000C00000C00001C0000180000380000380 -00038000038000078000078000078000078000078000078000078000030000121F7D9D17 ->I<03F0000C0C001006003003002001806001806001806001807001807803003E03003F -06001FC8000FF00003F80007FC000C7E00103F00300F806003804001C0C001C0C000C0C0 -00C0C000C0C000806001802001001002000C0C0003F000121F7E9D17>I<03F0000E1800 -1C0C00380600380700700700700380F00380F00380F003C0F003C0F003C0F003C0F003C0 -7007C07007C03807C0180BC00E13C003E3C0000380000380000380000700300700780600 -780E00700C002018001070000FC000121F7E9D17>I<70F8F8F870000000000000000000 -0070F8F8F87005147C930D>I<70F8F8F8700000000000000000000070F0F8F878080808 -101010202040051D7C930D>I<0FC0307040384038E03CF03CF03C603C0038007000E000 -C001800180010003000200020002000200020002000000000000000000000007000F800F -800F8007000E207D9F15>63 D<000100000003800000038000000380000007C0000007C0 -000007C0000009E0000009E0000009E0000010F0000010F0000010F00000207800002078 -000020780000403C0000403C0000403C0000801E0000801E0000FFFE0001000F0001000F -0001000F00020007800200078002000780040003C00E0003C01F0007E0FFC03FFE1F207F -9F22>65 DI<000FC040007030C0 -01C009C0038005C0070003C00E0001C01E0000C01C0000C03C0000C07C0000407C000040 -78000040F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000 -F8000000780000007C0000407C0000403C0000401C0000401E0000800E00008007000100 -0380020001C0040000703800000FC0001A217D9F21>IIII<000FE0200078186000E004E0038002E0 -070001E00F0000E01E0000601E0000603C0000603C0000207C00002078000020F8000000 -F8000000F8000000F8000000F8000000F8000000F8000000F8007FFCF80003E0780001E0 -7C0001E03C0001E03C0001E01E0001E01E0001E00F0001E0070001E0038002E000E00460 -00781820000FE0001E217D9F24>III<0F -FFC0007C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C0000 -3C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00203C00F8 -3C00F83C00F83C00F0380040780040700030E0000F800012207E9E17>III78 -D<001F800000F0F00001C0380007801E000F000F000E0007001E0007803C0003C03C0003 -C07C0003E0780001E0780001E0F80001F0F80001F0F80001F0F80001F0F80001F0F80001 -F0F80001F0F80001F0F80001F0780001E07C0003E07C0003E03C0003C03C0003C01E0007 -800E0007000F000F0007801E0001C0380000F0F000001F80001C217D9F23>II82 D<07E0800C1980100780300380600180600180E00180E00080E0 -0080E00080F00000F000007800007F00003FF0001FFC000FFE0003FF00001F8000078000 -03C00003C00001C08001C08001C08001C08001C0C00180C00380E00300F00600CE0C0081 -F80012217D9F19>I<7FFFFFE0780F01E0600F0060400F0020400F0020C00F0030800F00 -10800F0010800F0010800F0010000F0000000F0000000F0000000F0000000F0000000F00 -00000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F00 -00000F0000000F0000000F0000000F0000001F800007FFFE001C1F7E9E21>IIII<7FF83F -F80FE00FC007C0070003C0020001E0040001F00C0000F0080000781000007C1000003C20 -00003E4000001E4000000F8000000F8000000780000003C0000007E0000005E0000009F0 -000018F8000010780000207C0000603C0000401E0000801F0001800F0001000780020007 -C0070003C01F8007E0FFE01FFE1F1F7F9E22>I<08041008201020104020402080408040 -8040B85CFC7EFC7E7C3E381C0F0E7B9F17>92 D<081020204040808080B8FCFC7C38060E -7D9F0D>96 D<1FE000303000781800781C00300E00000E00000E00000E0000FE00078E00 -1E0E00380E00780E00F00E10F00E10F00E10F01E10781E103867200F83C014147E9317> -I<0E0000FE00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00 -000E3E000EC3800F01C00F00E00E00E00E00700E00700E00780E00780E00780E00780E00 -780E00780E00700E00700E00E00F00E00D01C00CC300083E0015207F9F19>I<03F80E0C -1C1E381E380C70007000F000F000F000F000F000F00070007000380138011C020E0C03F0 -10147E9314>I<000380003F800003800003800003800003800003800003800003800003 -8000038000038003E380061B801C0780380380380380700380700380F00380F00380F003 -80F00380F00380F003807003807003803803803807801C07800E1B8003E3F815207E9F19 ->I<03F0000E1C001C0E00380700380700700700700380F00380F00380FFFF80F00000F0 -0000F000007000007000003800801800800C010007060001F80011147F9314>I<007C00 -C6018F038F07060700070007000700070007000700FFF007000700070007000700070007 -00070007000700070007000700070007000700070007007FF01020809F0E>I<0000E003 -E3300E3C301C1C30380E00780F00780F00780F00780F00780F00380E001C1C001E380033 -E0002000002000003000003000003FFE001FFF800FFFC03001E0600070C00030C00030C0 -0030C000306000603000C01C038003FC00141F7F9417>I<0E0000FE00000E00000E0000 -0E00000E00000E00000E00000E00000E00000E00000E00000E3E000E43000E81800F01C0 -0F01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0 -0E01C00E01C00E01C0FFE7FC16207F9F19>I<1C003E003E003E001C0000000000000000 -00000000000E007E000E000E000E000E000E000E000E000E000E000E000E000E000E000E -000E000E000E00FFC00A1F809E0C>I<00E001F001F001F000E000000000000000000000 -0000007007F000F000700070007000700070007000700070007000700070007000700070 -00700070007000700070007000706070F060F0C061803F000C28829E0E>I<0E0000FE00 -000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0FF00E03 -C00E03000E02000E04000E08000E10000E30000E70000EF8000F38000E1C000E1E000E0E -000E07000E07800E03800E03C00E03E0FFCFF815207F9F18>I<0E00FE000E000E000E00 -0E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00 -0E000E000E000E000E000E000E000E00FFE00B20809F0C>I<0E1F01F000FE618618000E -81C81C000F00F00E000F00F00E000E00E00E000E00E00E000E00E00E000E00E00E000E00 -E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E0 -0E000E00E00E000E00E00E00FFE7FE7FE023147F9326>I<0E3E00FE43000E81800F01C0 -0F01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0 -0E01C00E01C00E01C0FFE7FC16147F9319>I<01F800070E001C03803801C03801C07000 -E07000E0F000F0F000F0F000F0F000F0F000F0F000F07000E07000E03801C03801C01C03 -80070E0001F80014147F9317>I<0E3E00FEC3800F01C00F00E00E00E00E00F00E00700E -00780E00780E00780E00780E00780E00780E00700E00F00E00E00F01E00F01C00EC3000E -3E000E00000E00000E00000E00000E00000E00000E00000E0000FFE000151D7F9319>I< -03E0800619801C05803C0780380380780380700380F00380F00380F00380F00380F00380 -F003807003807803803803803807801C0B800E138003E380000380000380000380000380 -000380000380000380000380003FF8151D7E9318>I<0E78FE8C0F1E0F1E0F0C0E000E00 -0E000E000E000E000E000E000E000E000E000E000E000E00FFE00F147F9312>I<1F9030 -704030C010C010C010E00078007F803FE00FF00070803880188018C018C018E030D0608F -800D147E9312>I<020002000200060006000E000E003E00FFF80E000E000E000E000E00 -0E000E000E000E000E000E000E080E080E080E080E080610031001E00D1C7F9B12>I<0E -01C0FE1FC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E -01C00E01C00E01C00E01C00E03C00603C0030DC001F1FC16147F9319>III<7FC3FC0F01E00701C007018003810001C20000E40000EC00007800003800003C -00007C00004E000087000107000303800201C00601E01E01E0FF07FE1714809318>II<3FFF380E200E201C40384078407000 -E001E001C00380078007010E011E011C0338027006700EFFFE10147F9314>I -E /Fk 3 54 df<03000700FF000700070007000700070007000700070007000700070007 -00070007000700070007007FF00C157E9412>49 D<00300030007000F001F00170027004 -7008701870107020704070C070FFFE0070007000700070007003FE0F157F9412>52 -D<20303FE03FC0240020002000200020002F8030E020700030003800384038E038E03880 -30406020C01F000D157E9412>I E /Fl 20 118 df<000E00001E00007E0007FE00FFFE -00FFFE00F8FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE -0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE -0000FE0000FE0000FE0000FE0000FE0000FE0000FE007FFFFE7FFFFE7FFFFE17277BA622 ->49 D<00FF800003FFF0000FFFFC001F03FE003800FF007C007F80FE003FC0FF003FC0FF -003FE0FF001FE0FF001FE07E001FE03C003FE000003FE000003FC000003FC000007F8000 -007F000000FE000000FC000001F8000003F0000003E00000078000000F0000001E000000 -3C00E0007000E000E000E001C001C0038001C0070001C00FFFFFC01FFFFFC03FFFFFC07F -FFFFC0FFFFFF80FFFFFF80FFFFFF801B277DA622>I<007F800001FFF00007FFF8000FE0 -FC001F807E003F803F007F003F007F001F80FF001F80FF001FC0FF001FC0FF001FC0FF00 -1FE0FF001FE0FF001FE0FF001FE07F001FE07F003FE03F003FE01F807FE00F807FE007C1 -DFE003FF9FE0007E1FE000001FE000001FC000001FC000001FC000003F801F003F803F80 -3F003F803F003F807E003F807C001F01F8001E03F0000FFFE00007FF800001FE00001B27 -7DA622>57 D<1C003E007F00FF80FF80FF807F003E001C00000000000000000000000000 -0000000000001C003E007F00FF80FF80FF807F003E001C00091B7B9A13>I<01FFFFF001 -FFFFF001FFFFF00001FE000001FE000001FE000001FE000001FE000001FE000001FE0000 -01FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE0000 -01FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE0000 -01FE000001FE001801FE007E01FE00FF01FE00FF01FE00FF01FE00FF01FC007E03F8007C -03F0003E0FE0000FFFC00003FE00001C297DA824>74 D77 -D<007F806003FFF0E007FFF9E00F807FE01F001FE03E0007E07C0003E07C0001E0FC0001 -E0FC0001E0FC0000E0FE0000E0FE0000E0FF000000FFC000007FFE00007FFFE0003FFFFC -001FFFFE000FFFFF8007FFFFC003FFFFE000FFFFE00007FFF000007FF000000FF8000007 -F8000003F8600001F8E00001F8E00001F8E00001F8F00001F0F00001F0F80003F0FC0003 -E0FF0007C0FFE01F80F3FFFF00E0FFFE00C01FF0001D297CA826>83 -D<7FFFFFFFFFC07FFFFFFFFFC07FFFFFFFFFC07F803FC03FC07E003FC007C078003FC003 -C078003FC003C070003FC001C0F0003FC001E0F0003FC001E0E0003FC000E0E0003FC000 -E0E0003FC000E0E0003FC000E0E0003FC000E000003FC0000000003FC0000000003FC000 -0000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC000 -0000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC000 -0000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC000 -0000003FC00000007FFFFFE000007FFFFFE000007FFFFFE0002B287EA730>I<001FF800 -00FFFE0003F01F0007E03F800FC03F801F803F803F801F007F800E007F0000007F000000 -FF000000FF000000FF000000FF000000FF000000FF000000FF0000007F0000007F000000 -7F8000003F8001C01F8001C00FC0038007E0070003F01E0000FFFC00001FE0001A1B7E9A -1F>99 D<003FE00001FFF80003F07E0007C01F000F801F801F800F803F800FC07F000FC0 -7F0007C07F0007E0FF0007E0FF0007E0FFFFFFE0FFFFFFE0FF000000FF000000FF000000 -7F0000007F0000007F0000003F8000E01F8000E00FC001C007E0038003F81F0000FFFE00 -001FF0001B1B7E9A20>101 D<0007F0003FFC00FE3E01F87F03F87F03F07F07F07F07F0 -3E07F00007F00007F00007F00007F00007F00007F000FFFFC0FFFFC0FFFFC007F00007F0 -0007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0 -0007F00007F00007F00007F00007F00007F00007F0007FFF807FFF807FFF80182A7EA915 ->I<00FF81F003FFE7F80FC1FE7C1F80FC7C1F007C383F007E107F007F007F007F007F00 -7F007F007F007F007F007F007F003F007E001F007C001F80FC000FC1F8001FFFE00018FF -800038000000380000003C0000003E0000003FFFF8001FFFFF001FFFFF800FFFFFC007FF -FFE01FFFFFF03E0007F07C0001F8F80000F8F80000F8F80000F8F80000F87C0001F03C00 -01E01F0007C00FC01F8003FFFE00007FF0001E287E9A22>II<07000F801FC03FE03FE0 -3FE01FC00F8007000000000000000000000000000000FFE0FFE0FFE00FE00FE00FE00FE0 -0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFE -FFFEFFFE0F2B7DAA14>I109 -DI<00 -3FE00001FFFC0003F07E000FC01F801F800FC03F800FE03F0007E07F0007F07F0007F07F -0007F0FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F87F -0007F07F0007F03F800FE03F800FE01F800FC00FC01F8007F07F0001FFFC00003FE0001D -1B7E9A22>I<03FE300FFFF01E03F03800F0700070F00070F00070F80070FC0000FFE000 -7FFE007FFF803FFFE01FFFF007FFF800FFF80003FC0000FC60007CE0003CF0003CF00038 -F80038FC0070FF01E0F7FFC0C1FF00161B7E9A1B>115 D<007000007000007000007000 -00F00000F00000F00001F00003F00003F00007F0001FFFF0FFFFF0FFFFF007F00007F000 -07F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F038 -07F03807F03807F03807F03807F03803F03803F87001F86000FFC0001F8015267FA51B> -II -E end -%%EndProlog -%%BeginSetup -%%Feature: *Resolution 300dpi -TeXDict begin - -%%EndSetup -%%Page: 1 1 -1 0 bop 551 311 a Fl(The)23 b(Sc)n(heme)e(of)i(Things:)530 -407 y(The)f(June)h(1992)h(Meeting)1245 385 y Fk(1)751 -522 y Fj(Jonathan)15 b(Rees)715 579 y(Cornell)h(Univ)o(ersit)o(y)682 -635 y Fi(jar@cs.cornell.edu)220 796 y Fj(An)21 b(informally)i -(constituted)e(group)g(of)g(p)q(eople)h(in)o(terested)g(in)g(the)f -(future)g(of)149 852 y(the)f(Sc)o(heme)g(programming)f(language)h(met)g -(at)f(the)g(Xero)o(x)g(P)o(alo)h(Alto)f(Researc)o(h)149 -909 y(Cen)o(ter)d(on)f(25)h(June)g(1992.)k(The)c(main)h(purp)q(ose)f -(of)f(the)h(meeting)g(w)o(as)f(to)g(w)o(ork)g(on)149 -965 y(the)h(tec)o(hnical)g(con)o(ten)o(t)f(of)g(the)g(next)g(revision)i -(of)d(the)i(Sc)o(heme)g(rep)q(ort.)220 1021 y(W)l(e)f(made)h(progress)e -(on)h(sev)o(eral)h(fron)o(ts:)218 1112 y Fh(\017)22 b -Fj(Some)15 b(di\013erences)i(with)e(the)g(IEEE)h(Sc)o(heme)g(standard)e -(w)o(ere)h(resolv)o(ed.)218 1205 y Fh(\017)22 b Fj(Prop)q(osals)13 -b(for)g(m)o(ultiple)i(return)e(v)m(alues)i(and)e Fi(dynamic-wind)f -Fj(w)o(ere)h(adopted.)218 1297 y Fh(\017)22 b Fj(A)15 -b(prop)q(osal)h(for)e(an)h Fi(eval)g Fj(pro)q(cedure)h(w)o(as)f -(adopted.)218 1390 y Fh(\017)22 b Fj(The)d(high-lev)o(el)h(macro)e -(facilit)o(y)h(describ)q(ed)h(in)g(the)e(Revised)1354 -1373 y Fk(4)1394 1390 y Fj(Rep)q(ort's)g(ap-)263 1446 -y(p)q(endix)f(will)g(b)q(e)f(mo)o(v)o(ed)e(in)o(to)i(the)f(rep)q(ort)g -(prop)q(er.)220 1537 y(Tw)o(o)d(sub)q(committees)i(w)o(ere)e(formed:)19 -b(one)13 b(to)f(w)o(ork)g(on)h(exceptions,)h(and)f(one)g(to)149 -1593 y(c)o(harter)i(the)g(formation)f(of)h(a)g(standard)f(library)l(.) -21 b(The)16 b(sub)q(committees)f(will)i(rep)q(ort)149 -1650 y(bac)o(k)f(to)e(the)h(group)g(with)h(prop)q(osals)f(for)g -(inclusion)i(in)f(the)g(rep)q(ort.)220 1706 y(It)j(had)g(b)q(een)i(hop) -q(ed)f(that)e(there)h(w)o(ould)h(b)q(e)g(progress)e(on)h(some)g(other)g -(fron)o(ts)149 1763 y(\(user-de\014ned)e(t)o(yp)q(es,)e(dynamic)h -(binding,)h(impro)o(v)o(emen)o(ts)e(to)f(\\rest")g(parameters\),)149 -1819 y(but)20 b(after)e(inconclusiv)o(e)j(discussion)g(these)e(topics)g -(w)o(ere)g(dropp)q(ed.)32 b(These)19 b(topics)149 1876 -y(will)e(probably)f(b)q(e)g(tak)o(en)f(up)g(again)h(in)g(the)f(future.) -220 1932 y(Norman)e(Adams)g(w)o(as)f(app)q(oin)o(ted)i(the)f(Revised) -1068 1916 y Fk(5)1103 1932 y Fj(Rep)q(ort's)g(editor.)19 -b(It)13 b(is)h(hop)q(ed)149 1989 y(that)f(it)g(will)i(b)q(e)e(ready)g -(b)o(y)g(early)h(1993,)e(so)g(as)h(to)f(precede)i(the)f(reconstitution) -h(of)f(the)149 2045 y(IEEE)j(standard)f(group.)220 2102 -y(This)f(article)g(is)g(m)o(y)f(o)o(wn)g(in)o(terpretation)h(of)f(what) -g(transpired,)h(and)g(should)g(not)149 2158 y(b)q(e)i(construed)g(as)f -(de\014nitiv)o(e.)149 2277 y Fg(Agreemen)o(t)h(with)i(the)g(IEEE)g(Sc)o -(heme)f(standard)149 2363 y Fj(Un)o(til)e(no)o(w,)f(the)g(Sc)o(heme)h -(rep)q(orts)e(ha)o(v)o(e)h(encouraged)g(but)g(not)g(required)h(the)f -(empt)o(y)149 2420 y(list)j Fi(\(\))e Fj(and)h(the)f(b)q(o)q(olean)i -(false)f(v)m(alue)g Fi(#f)f Fj(to)g(b)q(e)i(distinct.)22 -b(It)15 b(has)g(b)q(een)i(the)f(in)o(ten)o(t)p 149 2453 -598 2 v 201 2480 a Ff(1)219 2496 y Fe(T)m(o)c(app)q(ear)i(in)g -Fd(Lisp)f(Pointers)e Fe(V\(4\),)h(Octob)q(er{Decem)o(b)q(er)j(1992.)885 -2620 y Fj(1)p eop -%%Page: 2 2 -2 1 bop 307 311 a Fj(ev)o(er)14 b(since)h(the)f(Revised)i(Revised)f -(Rep)q(ort,)g(ho)o(w)o(ev)o(er,)e(that)g(this)h(distinction)i(w)o(ould) -307 368 y(ev)o(en)o(tually)h(b)q(e)g(required.)25 b(The)16 -b(IEEE)h(Sc)o(heme)g(standard)f(bit)h(the)f(bullet)i(in)f(1990,)307 -424 y(and)f(no)o(w)e(the)i(Revised)721 408 y Fk(5)757 -424 y Fj(rep)q(ort)f(follo)o(ws.)378 482 y(The)20 b(standard)f(also)h -(dropp)q(ed)h(the)f(distinction)i(b)q(et)o(w)o(een)e(essen)o(tial)h -(and)f(not-)307 538 y(essen)o(tial)e(language)e(features;)h(most)f -(features)g(that)g(w)o(ere)g(formerly)h(not)f(essen)o(tial,)307 -595 y(suc)o(h)11 b(as)f(n-ary)g Fi(+)g Fj(and)g Fi(apply)p -Fj(,)g(are)g(no)o(w)g(required.)19 b(The)11 b(Revised)1427 -578 y Fk(5)1458 595 y Fj(Rep)q(ort)g(will)h(adopt)307 -651 y(this)18 b(stance,)g(at)f(least)h(as)g(regards)f(language)h -(features)f(that)g(are)h(shared)f(with)h(the)307 708 -y(IEEE)h(standard.)30 b(Non-essen)o(tial)20 b(non-IEEE)g(o)q(ddities)g -(suc)o(h)f(as)f Fi(transcript-on)307 764 y Fj(and)13 -b Fi(transcript-off)d Fj(and)i(the)h(prop)q(osed)f Fi -(interaction-environment)d Fj(\(see)k(b)q(e-)307 821 -y(lo)o(w\))20 b(w)o(ere)f(not)h(discussed)h(at)e(the)h(meeting,)h(ho)o -(w)o(ev)o(er,)f(and)g(consensus)g(on)g(their)307 877 -y(status)15 b(will)h(ha)o(v)o(e)f(to)g(b)q(e)h(reac)o(hed)f(via)h -(electronic)g(mail.)378 935 y(A)g(third)h(asp)q(ect)g(of)f(the)g -(standard)g(that)g(w)o(as)f(adopted)i(w)o(as)e(a)h(certain)h(obscure) -307 991 y(paragraph)11 b(regarding)h(assignmen)o(ts)f(to)g(top-lev)o -(el)i(v)m(ariables)g(\(section)f(6,)f(paragraph)307 1048 -y(2\).)19 b(The)12 b(e\013ect)h(of)f(this)h(is)g(that)f(if)i(a)e -(program)f(con)o(tains)i(an)g(assignmen)o(t)f(to)g(an)o(y)h(top-)307 -1104 y(lev)o(el)j(v)m(ariable,)g(then)f(the)f(program)g(m)o(ust)g(con)o -(tain)h(a)f Fi(define)g Fj(for)g(that)f(v)m(ariable;)j(it)307 -1161 y(is)e(not)f(su\016cien)o(t)i(that)d(the)i(v)m(ariable)h(b)q(e)f -(b)q(ound.)20 b(This)14 b(has)g(b)q(een)g(the)g(case)f(for)g(most)307 -1217 y(v)m(ariables,)22 b(but)e(the)h(rule)f(applies)i(as)e(w)o(ell)h -(to)e(v)m(ariables)i(suc)o(h)f(as)g Fi(car)g Fj(that)f(ha)o(v)o(e)307 -1274 y(built-in)h(bindings.)30 b(In)18 b(addition,)i(it)e(is)g -(clari\014ed)h(that)f(if)g(a)f(program)g(mak)o(es)g(suc)o(h)307 -1330 y(a)d(de\014nition)i(or)e(assignmen)o(t,)g(then)h(the)f(b)q(eha)o -(vior)h(of)f(built-in)j(pro)q(cedures)e(will)h(not)307 -1387 y(b)q(e)j(a\013ected.)28 b(F)l(or)17 b(example,)j(rede\014ning)f -Fi(length)e Fj(cannot)h(a\013ect)f(the)h(b)q(eha)o(vior)h(of)307 -1443 y(the)14 b(built-in)j Fi(list->vector)c Fj(pro)q(cedure.)20 -b(If)14 b(in)i(some)d(particular)i(implemen)o(tation)307 -1500 y Fi(list->vector)f Fj(is)j(written)e(in)i(Sc)o(heme)f(and)g -(calls)h Fi(length)p Fj(,)e(then)h(it)g(m)o(ust)f(b)q(e)h(sure)307 -1556 y(to)d(call)i(the)f(built-in)i Fi(length)d Fj(pro)q(cedure,)h(not) -f(whatev)o(er)g(happ)q(ens)i(to)e(b)q(e)i(the)e(v)m(alue)307 -1612 y(of)i(the)g(v)m(ariable)i Fi(length)p Fj(.)307 -1740 y Fg(Multiple)i(return)e(v)m(alues)307 1828 y Fj(The)d -Fi(call-with-values)d Fj(and)i Fi(values)f Fj(pro)q(cedures)i(w)o(ere)f -(describ)q(ed)i(in)f(an)g(earlier)307 1885 y(Sc)o(heme)e(of)e(Things)h -(\()p Fc(Lisp)h(Pointers)p Fj(,)e(v)o(olume)h(IV,)g(n)o(um)o(b)q(er)g -(1\),)g(but)g(I'll)h(review)g(them)307 1941 y(here.)20 -b(The)c(follo)o(wing)g(is)g(adapted)f(from)f(John)i(Ramsdell's)g -(concise)h(description:)421 2054 y Fi(\(values)23 b Fc(obje)n(ct)g -Fb(:)8 b(:)g(:)n Fi(\))600 b Fj(essen)o(tial)16 b(pro)q(cedure)421 -2132 y Fi(values)e Fj(deliv)o(ers)j(all)f(of)f(its)g(argumen)o(ts)f(to) -h(its)g(con)o(tin)o(uation.)421 2249 y Fi(\(call-with-values)21 -b Fc(thunk)j(r)n(e)n(c)n(eiver)o Fi(\))268 b Fj(essen)o(tial)16 -b(pro)q(cedure)421 2326 y Fi(call-with-values)c Fj(calls)j(its)f -Fc(thunk)g Fj(argumen)o(t)g(with)g(a)g(con)o(tin)o(uation)h(that,)421 -2383 y(when)h(passed)g(some)f(v)m(alues,)i(calls)g(the)f -Fc(r)n(e)n(c)n(eiver)e Fj(pro)q(cedure)j(with)f(those)g(v)m(al-)421 -2439 y(ues)22 b(as)g(argumen)o(ts.)40 b(The)23 b(con)o(tin)o(uation)f -(for)g(the)g(call)h(to)f Fc(r)n(e)n(c)n(eiver)f Fj(is)h(the)421 -2496 y(con)o(tin)o(uation)15 b(of)g(the)g(call)i(to)d -Fi(call-with-values)p Fj(.)1043 2620 y(2)p eop -%%Page: 3 3 -3 2 bop 220 311 a Fj(Except)17 b(for)g(con)o(tin)o(uations)h(created)f -(b)o(y)g(the)g Fi(call-with-values)e Fj(pro)q(cedure,)149 -368 y(all)21 b(con)o(tin)o(uations)g(tak)o(e)e(exactly)h(one)h(v)m -(alue,)h(as)d(no)o(w;)j(the)e(e\013ect)g(of)f(passing)i(no)149 -424 y(v)m(alue)i(or)e(more)g(than)g(one)g(v)m(alue)i(to)d(con)o(tin)o -(uations)i(that)f(w)o(ere)g(not)g(created)g(b)o(y)149 -481 y Fi(call-with-values)13 b Fj(is)j(unsp)q(eci\014ed)i(\(as)c -(indeed)j(it)f(is)g(unsp)q(eci\014ed)h(no)o(w\).)220 -537 y Fi(values)d Fj(migh)o(t)h(b)q(e)h(de\014ned)h(as)e(follo)o(ws:) -245 623 y Fi(\(define)23 b(\(values)g(.)g(things\))293 -679 y(\(call-with-current-cont)o(inuation)340 736 y(\(lambda)g -(\(cont\))g(\(apply)g(cont)h(things\)\)\)\))149 822 y -Fj(That)g(is,)j(the)d(pro)q(cedures)h(supplied)i(b)o(y)d -Fi(call-with-current-continua)o(tion)149 878 y Fj(m)o(ust)18 -b(b)q(e)h(passed)g(the)f(same)g(n)o(um)o(b)q(er)h(of)f(argumen)o(ts)f -(as)h(v)m(alues)i(exp)q(ected)f(b)o(y)g(the)149 934 y(con)o(tin)o -(uation.)220 991 y(Because)14 b(the)g(b)q(eha)o(vior)g(of)g(a)f(n)o(um) -o(b)q(er-of-v)m(alues)i(mismatc)o(h)f(b)q(et)o(w)o(een)g(a)f(con)o -(tin-)149 1047 y(uation)f(and)g(its)f(in)o(v)o(ok)o(er)h(is)g(unsp)q -(eci\014ed,)i(some)d(implemen)o(tations)i(ma)o(y)e(assign)g(some)149 -1104 y(sp)q(eci\014c)19 b(meaning)f(to)e(suc)o(h)h(situations;)h(for)f -(example,)g(extra)g(v)m(alues)h(migh)o(t)f(b)q(e)g(ig-)149 -1160 y(nored,)f(or)f(defaults)h(migh)o(t)g(b)q(e)g(supplied)i(for)d -(missing)i(v)m(alues.)22 b(Th)o(us)16 b(this)g(m)o(ultiple)149 -1217 y(return)k(v)m(alue)g(prop)q(osal)g(is)g(compatible)g(with)g -(Common)f(Lisp's)h(m)o(ultiple)h(v)m(alues,)149 1273 -y(but)e(strictly)g(more)f(conserv)m(ativ)o(e)i(than)e(it.)30 -b(The)19 b(b)q(eha)o(vior)g(of)g(programs)e(in)i(suc)o(h)149 -1330 y(situations)e(w)o(as)e(a)h(p)q(oin)o(t)g(of)g(con)o(ten)o(tion)g -(among)g(the)g(authors,)f(whic)o(h)i(is)f(wh)o(y)g(only)149 -1386 y(the)g(least)f(common)g(denominator)g(b)q(eha)o(vior)h(w)o(as)e -(sp)q(eci\014ed.)149 1505 y Fg(Un)o(wind/wind)19 b(protection)149 -1590 y Fi(dynamic-wind)p Fj(,)13 b(whic)o(h)i(w)o(as)e(describ)q(ed)j -(previously)f(in)g(this)g(column)g(\(when)f(it)h(w)o(as)149 -1647 y(The)k(Sc)o(heme)g(En)o(vironmen)o(t;)g Fc(Lisp)f(Pointers)p -Fj(,)g(v)o(olume)g(I,)h(n)o(um)o(b)q(er)f(2\),)g(is)h(already)149 -1703 y(implemen)o(ted)24 b(in)f(man)o(y)e(Sc)o(heme)h(dialects.)41 -b Fi(dynamic-wind)20 b Fj(tak)o(es)h(three)h(argu-)149 -1760 y(men)o(ts,)15 b(all)h(of)f(whic)o(h)h(are)f(th)o(unks)h(\(pro)q -(cedures)f(of)g(no)g(argumen)o(ts\).)k(It)d(b)q(eha)o(v)o(es)f(as)149 -1816 y(if)h(it)g(w)o(ere)e(de\014ned)j(with)245 1902 -y Fi(\(define)23 b(\(dynamic-wind)f(before)h(during)g(after\))293 -1958 y(\(before\))293 2015 y(\(call-with-values)e(during)340 -2071 y(\(lambda)i(results)388 2128 y(\(after\))388 2184 -y(\(apply)g(values)g(results\)\)\)\))149 2270 y Fj(except)17 -b(that)f(the)h(execution)g(of)f(the)h Fi(during)e Fj(th)o(unk)i(is)g -(\\protected")e(against)h(non-)149 2326 y(lo)q(cal)e(en)o(tries)f(and)g -(exits:)19 b(a)12 b(thro)o(w)g(out)g(of)g(the)h(execution)h(of)e -Fi(during)g Fj(will)i(cause)f(the)149 2383 y Fi(after)h -Fj(th)o(unk)g(to)f(b)q(e)i(in)o(v)o(ok)o(ed,)f(and)g(a)g(thro)o(w)e -(from)i(outside)g(bac)o(k)g(in)h(will)g(cause)g(the)149 -2439 y Fi(before)10 b Fj(th)o(unk)h(to)f(b)q(e)h(in)o(v)o(ok)o(ed.)19 -b(\(By)10 b(\\thro)o(w")f(I)i(mean)g(an)g(in)o(v)o(o)q(cation)g(of)f -(an)h(explicit)149 2496 y(con)o(tin)o(uation)16 b(as)f(obtained)h(from) -e Fi(call-with-current-continuati)o(on)p Fj(.\))885 2620 -y(3)p eop -%%Page: 4 4 -4 3 bop 378 311 a Fj(F)l(or)14 b(details,)h(the)f(earlier)i(Sc)o(heme)f -(En)o(vironmen)o(t)g(column)g(refers)f(the)h(reader)f(to)307 -368 y(F)l(riedman)19 b(and)f(Ha)o(ynes's)f(pap)q(er)h(\\Constraining)g -(Con)o(trol")f(in)i(POPL)f(1985,)f(but)307 424 y(to)h(sa)o(v)o(e)g(y)o -(ou)h(the)g(trouble)g(of)g(lo)q(oking)g(that)f(up,)i(I)f(ha)o(v)o(e)g -(supplied)i(a)d(more)h(direct)307 481 y(implemen)o(tation)e(of)d -Fi(dynamic-wind)g Fj(in)i(an)f(app)q(endix)i(to)e(the)g(presen)o(t)g -(column.)378 537 y Fi(dynamic-wind)9 b Fj(w)o(as)i(adopted)g(with)h -(the)f(follo)o(wing)i(clari\014cations:)19 b(The)11 b(seman-)307 -594 y(tics)18 b(of)g Fi(\(dynamic-wind)k Fc(b)n(efor)n(e)h(during)h -(after)p Fi(\))18 b Fj(should)h(lea)o(v)o(e)f(unsp)q(eci\014ed)i(what) -307 650 y(happ)q(ens)i(if)g(a)f(thro)o(w)f(o)q(ccurs)i(out)f(of)f -Fc(b)n(efor)n(e)h Fj(or)g Fc(after)5 b Fj(;)24 b(and)d(it)g(is)h(b)q -(est)g(to)e(defer)307 707 y(in)o(terrupts)c(during)g -Fc(b)n(efor)n(e)e Fj(and)i Fc(after)p Fj(.)307 827 y -Fg(Ev)m(aluating)k(computed)e(expressions)307 913 y Fj(The)f(original)g -(1975)f(memo)g(on)g(Sc)o(heme)h(describ)q(ed)h Fi(evaluate)p -Fj(,)e(whic)o(h)h(w)o(as)e(analo-)307 970 y(gous)g(to)f(Lisp's)i -(traditional)g Fi(eval)e Fj(function.)21 b Fi(evaluate)14 -b Fj(to)q(ok)g(a)h(single)i(argumen)o(t,)307 1026 y(an)e(S-expression,) -h(and)g(in)o(v)o(ok)o(ed)f(an)g(in)o(terpreter)h(on)f(it.)20 -b(F)l(or)15 b(example:)403 1121 y Fi(\(let)23 b(\(\(name)g('+\)\))g -(\(evaluate)g(\(list)g(name)g(2)h(3\)\)\))498 1177 y -Fh(\000)-7 b(!)48 b Fi(5)307 1271 y Fj(Sc)o(heme)11 b(b)q(eing)h -(lexically)h(scop)q(ed,)f(ho)o(w)o(ev)o(er,)e(there)g(w)o(as)g(some)g -(confusion)h(o)o(v)o(er)f(whic)o(h)307 1328 y(en)o(vironmen)o(t)16 -b(the)f(expression)h(w)o(as)e(to)h(b)q(e)h(ev)m(aluated)g(in.)21 -b(Should)403 1422 y Fi(\(let)i(\(\(name)g('+\)\))450 -1479 y(\(let)h(\(\(+)f(*\)\))498 1535 y(\(evaluate)g(\(list)g(name)g(2) -h(3\)\)\)\))307 1629 y Fj(ev)m(aluate)16 b(to)f(5)g(or)f(to)h(6?)378 -1686 y(T)l(o)c(clarify)i(matters,)d(the)i(Revised)h(Rep)q(ort)f -(replaced)h Fi(evaluate)e Fj(with)h Fi(enclose)p Fj(,)307 -1742 y(whic)o(h)k(to)q(ok)f(t)o(w)o(o)f(argumen)o(ts,)h(a)g -Fi(lambda)p Fj(-expression)g(and)h(a)f(represen)o(tation)h(of)f(an)307 -1799 y(en)o(vironmen)o(t)h(from)f(whic)o(h)h(to)f(supply)h(bindings)i -(of)d(the)g Fi(lambda)p Fj(-expression's)g(free)307 1855 -y(v)m(ariables.)21 b(F)l(or)15 b(example:)403 1950 y -Fi(\(let)23 b(\(\(name)g('+\)\))450 2006 y(\(let)h(\(\(+)f(*\)\))498 -2063 y(\(\(enclose)g(\(list)g('lambda)g('\(\))g(\(list)g(name)h(2)f -(3\)\))737 2119 y(\(list)g(\(cons)g('+)h(+\)\)\)\)\)\))498 -2176 y Fh(\000)-7 b(!)48 b Fi(6)307 2270 y Fj(This)20 -b(forced)g(the)g(programmer)e(to)h(b)q(e)i(explicit)h(ab)q(out)d(the)h -Fi(lambda)p Fj(-expression's)307 2326 y(enclosing)d(en)o(vironmen)o(t.) -378 2383 y(F)l(or)d(v)m(arious)h(tec)o(hnical)i(and)e(practical)g -(reasons,)f(there)h(w)o(as)f(no)h Fi(eval)f Fj(analogue)307 -2439 y(in)21 b(subsequen)o(t)g(Sc)o(heme)f(rep)q(orts.)34 -b(The)20 b(ma)s(jor)f(stum)o(bling)h(blo)q(c)o(ks)h(w)o(ere)f(ho)o(w)f -(to)307 2496 y(describ)q(e)j Fi(eval)d Fj(formally)h(and)g(ho)o(w)g(to) -f(de\014ne)i(something)f(that)f(mak)o(es)g(sense)i(in)1043 -2620 y(4)p eop -%%Page: 5 5 -5 4 bop 149 311 a Fj(all)17 b(extan)o(t)f(v)m(arian)o(ts)g(of)f(the)h -(language.)23 b(Some)16 b(Sc)o(heme)g(implemen)o(tations)i(con)o(tain) -149 368 y(a)e(distinguished)i(top-lev)o(el)f(en)o(vironmen)o(t,)e -(while)i(others)e(extend)h(the)g(language)g(b)o(y)149 -424 y(pro)o(viding)j(w)o(a)o(ys)e(to)g(create)g(m)o(ultiple)j(en)o -(vironmen)o(ts,)e(an)o(y)g(of)f(whic)o(h)h(migh)o(t)g(serv)o(e)149 -481 y(equally)f(w)o(ell.)220 537 y(The)12 b Fi(eval)g -Fj(prop)q(osal)g(adopted)g(at)g(the)g(June)h(meeting,)g(whic)o(h)f(I)h -(repro)q(duce)g(here,)149 594 y(is)j(one)f(that)g(comes)g(from)g(Bill)i -(Rozas.)263 702 y Fi(\(eval)23 b Fc(expr)n(ession)g(envir)n(onment-sp)n -(e)n(ci\014er)m Fi(\))190 b Fj(essen)o(tial)16 b(pro)q(cedure)263 -777 y Fi(eval)10 b Fj(ev)m(aluates)h Fc(expr)n(ession)e -Fj(in)h(the)h(en)o(vironmen)o(t)f(indicated)i(b)o(y)e -Fc(envir)n(onment-)263 834 y(sp)n(e)n(ci\014er)p Fj(.)21 -b Fc(envir)n(onment-sp)n(e)n(ci\014er)13 b Fj(ma)o(y)i(b)q(e)i(the)f -(return)g(v)m(alue)h(of)e(one)h(of)g(the)263 890 y(three)21 -b(pro)q(cedures)g(describ)q(ed)h(b)q(elo)o(w,)g(or)e(implemen)o -(tation-sp)q(eci\014c)j(exten-)263 947 y(sions.)31 b(No)19 -b(other)g(op)q(erations)g(on)f(en)o(vironmen)o(t)i(sp)q(eci\014ers)g -(are)f(de\014ned)h(b)o(y)263 1003 y(this)c(prop)q(osal.)263 -1079 y(Implemen)o(tations)g(ma)o(y)e(allo)o(w)h(non-expression)h -(programs)e(\(i.e.)g(de\014nitions\))263 1135 y(as)j(the)h(\014rst)f -(argumen)o(t)g(to)g Fi(eval)g Fc(only)h Fj(when)g(the)f(second)i -(argumen)o(t)e(is)h(the)263 1192 y(return)i(v)m(alue)h(of)f -Fi(interaction-environment)d Fj(or)j(some)f(implemen)o(tation)263 -1248 y(extension.)i(In)16 b(other)e(w)o(ords,)g Fi(eval)h -Fj(will)i(nev)o(er)e(create)g(new)h(bindings)h(in)f(the)263 -1305 y(return)f(v)m(alue)i(of)d Fi(null-environment)f -Fj(or)i Fi(scheme-report-environment)p Fj(.)263 1420 -y Fi(\(scheme-report-environment)20 b Fc(version)p Fi(\))193 -b Fj(essen)o(tial)16 b(pro)q(cedure)263 1495 y Fc(V)m(ersion)21 -b Fj(m)o(ust)i(b)q(e)g(an)g(exact)f(non-negativ)o(e)h(in)o(teger)g -(corresp)q(onding)h(to)e(a)263 1552 y(v)o(ersion)e(of)f(one)h(of)f(the) -h(Revised)857 1535 y Fa(n)902 1552 y Fj(Rep)q(orts)g(on)g(Sc)o(heme.)34 -b(This)20 b(pro)q(cedure)263 1608 y(returns)g(a)g(sp)q(eci\014er)h(for) -f(an)g(en)o(vironmen)o(t)g(that)f(con)o(tains)i(exactly)f(the)g(set)263 -1665 y(of)d(bindings)i(sp)q(eci\014ed)g(in)f(the)g(corresp)q(onding)g -(rep)q(ort)f(that)f(the)i(implemen-)263 1721 y(tation)h(supp)q(orts.)32 -b(Not)18 b(all)i(v)o(ersions)g(ma)o(y)e(b)q(e)i(a)o(v)m(ailable)h(in)f -(all)g(implemen-)263 1778 y(tations)g(at)f(all)i(times.)35 -b(Ho)o(w)o(ev)o(er,)20 b(an)g(implemen)o(tation)i(that)d(conforms)g(to) -263 1834 y(v)o(ersion)e Fb(n)g Fj(of)f(the)h(Revised)748 -1818 y Fa(n)789 1834 y Fj(Rep)q(orts)g(on)g(Sc)o(heme)g(m)o(ust)f -(accept)h(v)o(ersion)g Fb(n)p Fj(.)263 1891 y(If)e Fi -(scheme-report-environmen)o(t)d Fj(is)i(a)o(v)m(ailable,)i(but)f(the)f -(sp)q(eci\014ed)j(v)o(ersion)263 1947 y(is)f(not,)e(the)i(pro)q(cedure) -g(will)g(signal)h(an)e(error.)263 2023 y(The)e(e\013ect)g(of)f -(assigning)i(\(through)e(the)h(use)g(of)g Fi(eval)p Fj(\))f(a)g(v)m -(ariable)j(b)q(ound)e(in)h(a)263 2079 y Fi(scheme-report-environment)8 -b Fj(\(e.g.)j Fi(car)p Fj(\))f(is)i(unsp)q(eci\014ed.)22 -b(Th)o(us)11 b(the)h(en)o(vi-)263 2136 y(ronmen)o(ts)e(sp)q(eci\014ed)i -(b)o(y)e(the)g(return)g(v)m(alues)i(of)d Fi(scheme-report-environment) -263 2192 y Fj(ma)o(y)15 b(b)q(e)g(imm)o(utable.)263 2307 -y Fi(\(null-environment\))572 b Fj(essen)o(tial)16 b(pro)q(cedure)263 -2383 y(This)d(pro)q(cedure)h(returns)f(a)f(sp)q(eci\014er)j(for)d(an)h -(en)o(vironmen)o(t)g(that)f(con)o(tains)h(no)263 2439 -y(v)m(ariable)f(bindings,)g(but)f(con)o(tains)f(\(syn)o(tactic\))g -(bindings)i(for)d(all)j(the)e(syn)o(tactic)263 2496 y(k)o(eyw)o(ords)k -(de\014ned)j(in)f(the)f(rep)q(ort,)g(and)g(no)g(others.)885 -2620 y(5)p eop -%%Page: 6 6 -6 5 bop 421 311 a Fi(\(interaction-environment\))585 -b Fj(pro)q(cedure)421 387 y(This)20 b(pro)q(cedure)g(returns)g(a)f(sp)q -(eci\014er)i(for)e(an)h(en)o(vironmen)o(t)g(that)e(con)o(tains)421 -444 y(implementation-de\014ned)k(bindings,)e(t)o(ypically)g(a)f(sup)q -(erset)g(of)f(those)g(listed)421 500 y(in)h(the)g(rep)q(ort.)30 -b(The)19 b(in)o(ten)o(t)g(is)h(that)e(this)h(pro)q(cedure)g(will)i -(return)e(a)f(sp)q(eci-)421 557 y(\014er)f(for)e(the)i(en)o(vironmen)o -(t)g(in)g(whic)o(h)g(the)g(implemen)o(tation)h(w)o(ould)f(ev)m(aluate) -421 613 y(expressions)f(dynamically)h(t)o(yp)q(ed)e(b)o(y)h(the)f -(user.)378 722 y(Rozas)c(explains:)19 b(\\The)11 b(prop)q(osal)g(do)q -(es)g(not)g(imply)h(the)f(existence)h(or)f(supp)q(ort)g(of)307 -778 y(\014rst-class)j(en)o(vironmen)o(ts,)g(although)h(it)f(is)g -(compatible)h(with)g(them.)k(The)14 b(prop)q(osal)307 -835 y(only)22 b(requires)g(a)f(w)o(a)o(y)f(of)h(asso)q(ciating)h(tags)e -(with)i(a)f(\014nite)h(set)f(of)g(distinguished)307 891 -y(en)o(vironmen)o(ts)d(whic)o(h)g(the)f(implemen)o(tations)i(can)f -(main)o(tain)f(implicitl)q(y)j(\(without)307 947 y(rei\014cation\).)378 -1004 y(\\)7 b(`P)o(ascal-lik)o(e')k(implemen)o(tations)h(can)f(supp)q -(ort)f(b)q(oth)h Fi(null-environment)d Fj(and)307 1061 -y Fi(scheme-report-environment)f Fj(since)k(the)g(en)o(vironmen)o(ts)f -(sp)q(eci\014ed)i(b)o(y)e(the)h(return)307 1117 y(v)m(alues)j(of)e -(these)g(pro)q(cedures)i(need)f(not)f(share)h(an)o(y)f(bindings)i(with) -f(the)f(curren)o(t)h(pro-)307 1174 y(gram.)k(A)11 b(v)o(ersion)f(of)g -Fi(eval)f Fj(that)h(supp)q(orts)g(these)g(but)h(not)e -Fi(interaction-environment)307 1230 y Fj(can)j(b)q(e)g(written)g(p)q -(ortably)l(,)h(but)e(can)h(b)q(e)h(b)q(etter)e(written)h(b)o(y)g(the)g -(implemen)o(tor,)g(since)307 1287 y(it)k(can)f(share)g(co)q(de)h(with)f -(the)h(default)f(ev)m(aluator)h(or)e(compiler.")378 1343 -y(Here)f(\\P)o(ascal-lik)o(e")i(refers)e(to)g(implemen)o(tations)h -(that)f(are)g(restricted)h(to)f(static)307 1400 y(compilation)f(and)e -(linking.)20 b(Because)11 b(an)f Fi(eval)g Fj(that)f(do)q(esn't)h(supp) -q(ort)g Fi(interaction-)307 1456 y(environment)15 b Fj(can)i(b)q(e)h -(written)e(en)o(tirely)i(in)g(the)f(Sc)o(heme)g(language)g(describ)q -(ed)i(b)o(y)307 1513 y(the)g(rest)f(of)f(the)i(rep)q(ort,)f(it)h -(raises)f(no)h(troublesome)f(questions)h(ab)q(out)f(its)h(formal)307 -1569 y(seman)o(tics.)307 1692 y Fg(Macros)307 1778 y -Fj(The)11 b(consensus)g(of)f(the)g(meeting)h(w)o(as)e(that)h -Fi(define-syntax)p Fj(,)f Fi(syntax-rules)p Fj(,)g Fi(let-)307 -1835 y(syntax)p Fj(,)14 b(and)h Fi(letrec-syntax)f Fj(should)i(b)q(e)g -(mo)o(v)o(ed)f(out)f(of)h(the)g(rep)q(ort's)g(app)q(endix)307 -1891 y(in)o(to)e(the)h(main)g(b)q(o)q(dy)g(of)e(the)i(rep)q(ort.)19 -b(Although)14 b(ev)o(ery)o(one)f(agrees)g(that)f(a)h(lo)o(w-lev)o(el) -307 1948 y(macro)j(facilit)o(y)i(is)f(imp)q(ortan)o(t,)g(the)g(sub)s -(ject)f(is)h(to)q(o)g(con)o(ten)o(tious)f(at)g(presen)o(t,)h(with)307 -2004 y(three)h(or)f(more)g(comp)q(eting)h(prop)q(osals)f(at)g(presen)o -(t.)27 b(The)17 b(disp)q(osition)i(of)e(the)h(rest)307 -2061 y(of)f(the)h(app)q(endix)h(and)f(of)f(the)g(other)g(lo)o(w-lev)o -(el)i(prop)q(osals)f(will)h(b)q(e)f(left)g(up)g(to)e(the)307 -2117 y(rep)q(ort's)f(editor.)307 2240 y Fg(Committee)j(w)o(ork)307 -2326 y Fj(There)c(is)h(a)e(strong)g(sense)i(that)e(some)h(kind)h(of)e -(exception)i(system)f(is)g(needed.)21 b(Ho)o(w-)307 2383 -y(ev)o(er,)15 b(no)g(sp)q(eci\014c)i(prop)q(osal)e(w)o(as)f(ready)h(at) -g(the)g(time)g(of)g(the)g(meeting.)20 b(A)15 b(commit-)307 -2439 y(tee)k(has)g(b)q(een)g(formed)g(to)f(w)o(ork)g(on)g(one.)31 -b(What)18 b(seems)h(to)f(b)q(e)h(in)h(the)f(air)g(migh)o(t)307 -2496 y(b)q(e)d(describ)q(ed)h(as)d(a)h(highly)i(distilled)g(v)o(ersion) -f(of)e(the)h(condition)h(system)f(that)f(Ken)o(t)1043 -2620 y(6)p eop -%%Page: 7 7 -7 6 bop 149 311 a Fj(Pitman)18 b(dev)o(elop)q(ed)h(for)d(Common)h -(Lisp.)27 b(I)18 b(hop)q(e)g(that)f(I'll)h(b)q(e)g(able)g(to)f(rep)q -(ort)g(on)149 368 y(this)f(in)g(a)f(future)g(column.)220 -424 y(On)i(the)f(sub)s(ject)g(of)g(libraries,)i(Will)g(Clinger's)e(min) -o(utes)h(rep)q(ort)f(that)g(\\the)g(au-)149 481 y(thors)h(p)q(erceiv)o -(e)i(a)e(need)i(to)d(giv)o(e)i(some)f(library)i(o\016cial)f(status.)26 -b(In)18 b(fact,)f(w)o(e)g(need)149 537 y(to)e(giv)o(e)h(o\016cial)h -(sanction)f(to)f(m)o(ultiple)i(libraries.)23 b(There)16 -b(is)g(reason)g(to)f(distinguish)149 594 y(b)q(et)o(w)o(een)d(accepted) -f(\(or)g(standard\))f(libraries,)j(exp)q(erimen)o(tal)f(libraries,)i -(and)d(prop)q(os-)149 650 y(als.)26 b(The)17 b(accepted)h(libraries)g -(can)g(reduce)g(the)f(in)o(tellectual)i(size)f(of)e(the)i(language)149 -707 y(b)o(y)g(remo)o(ving)f(things)g(lik)o(e)h Fi(string->list)e -Fj(from)g(the)i(rep)q(ort.)25 b(The)17 b(exp)q(erimen)o(tal)149 -763 y(libraries)i(w)o(ould)f(con)o(tain)g(solid)g(implemen)o(tations)h -(of)e(exp)q(erimen)o(tal)i(features,)e(in-)149 819 y(cluding)i(things)e -(that)g(migh)o(t)f(nev)o(er)h(deserv)o(e)g(to)g(b)q(e)g(in)h(the)f(rep) -q(ort.)24 b(The)18 b(prop)q(osal)149 876 y(libraries)f(could)f(con)o -(tain)g(an)o(ything)f(implemen)o(ted)i(in)f(p)q(ortable)g(Sc)o(heme.") -220 932 y(Among)11 b(the)g(con)o(ten)o(t)g(of)g(the)g(accepted)h -(libraries,)h(some)e(features)g(\(suc)o(h)g(as)g(those)149 -989 y(that)18 b(ma)o(y)f(b)q(e)h(mo)o(v)o(ed)g(out)f(of)h(the)g(b)q(o)q -(dy)g(of)g(the)g(rep)q(ort\))f(ma)o(y)g(b)q(e)i(required)g(to)e(b)q(e) -149 1045 y(built)e(in)f(to)f(implemen)o(tations,)h(while)h(others)e -(will)i(b)q(e)f(exp)q(ected)g(to)f(b)q(e)h(a)o(v)m(ailable)h(on)149 -1102 y(demand)g(\(p)q(erhaps)f(using)h(something)g(similar)g(to,)e(but) -i(not)e(the)h(same)g(as,)g Fi(require)149 1158 y Fj(as)h(found)h(in)g -(Common)e(Lisp)j(and)e(GNU)g(Emacs\).)220 1215 y(A)f(librarian)h(w)o -(as)d(app)q(oin)o(ted)j(\(Rees\),)e(and)h(a)f(library)i(committee)e(is) -h(dev)o(eloping)149 1271 y(prop)q(osals)i(for)e(the)i(c)o(harter,)e -(structure,)g(and)i(con)o(ten)o(t)e(of)h(the)g(libraries.)817 -1394 y Fh(\003)45 b(\003)g(\003)220 1517 y Fj(I)17 b(w)o(ould)g(lik)o -(e)h(to)e(ac)o(kno)o(wledge)h(Will)h(Clinger,)g(who)e(prepared)h(the)g -(min)o(utes)g(of)149 1574 y(the)i(meeting,)g(and)g(the)g(v)m(arious)g -(p)q(eople)h(who)e(con)o(tributed)h(prop)q(osals,)g(including)149 -1630 y(Bill)f(Rozas)d(and)h(John)f(Ramsdell.)22 b(An)o(y)15 -b(errors)g(here)h(are)f(m)o(y)g(resp)q(onsibilit)o(y)l(,)i(ho)o(w-)149 -1687 y(ev)o(er.)j(Thanks)15 b(also)g(to)f(Norman)g(Adams)h(and)g(Ric)o -(hard)h(Kelsey)g(for)e(corrections)h(to)149 1743 y(a)g(draft)g(of)g -(this)g(article.)220 1799 y(I)i(w)o(ould)g(also)g(lik)o(e)h(to)f(b)q -(elatedly)h(ac)o(kno)o(wledge)f(Norman)g(Adams,)f(P)o(a)o(v)o(el)h -(Cur-)149 1856 y(tis,)g(Bruce)g(Donald,)f(and)h(Ric)o(hard)g(Kelsey)g -(for)f(their)h(commen)o(ts)f(on)g(drafts)f(of)h(m)o(y)149 -1912 y(previous)g(column.)220 1969 y(F)l(or)e(future)g(columns,)h(I)g -(am)f(en)o(tertaining)h(v)m(arious)g(topic)g(p)q(ossibilities,)i -(includ-)149 2025 y(ing)h Fi(eval)p Fj(,)e(threads,)g -Fi(amb)p Fj(,)g(and)h(monads.)24 b(If)17 b(y)o(ou)f(ha)o(v)o(e)h(other) -f(ideas,)h(and)g(particu-)149 2082 y(larly)f(if)g(y)o(ou)e(think)i(the) -f(written)h(record)f(on)g(the)g(language)g(is)h(particularly)g(p)q(o)q -(or)f(in)149 2138 y(certain)h(areas,)e(please)i(write)g(and)f(let)h(me) -f(kno)o(w.)149 2297 y Fg(App)q(endix:)23 b(An)17 b(implemen)o(tation)i -(of)f Fi(dynamic-wind)149 2383 y Fj(This)c(program)e(is)h(based)g(on)g -(m)o(y)g(v)m(ague)g(recollection)i(of)d(an)h(ancien)o(t)h(man)o -(uscript)f(b)o(y)149 2439 y(Chris)k(Hanson)f(and)h(John)g(Lamping.)24 -b(I)17 b(ap)q(ologize)g(for)f(the)g(lac)o(k)h(of)f(data)f(abstrac-)149 -2496 y(tion,)h(but)f(the)g(co)q(de)h(is)g(more)e(concise)j(this)e(w)o -(a)o(y)l(.)885 2620 y(7)p eop -%%Page: 8 8 -8 7 bop 378 311 a Fj(A)11 b(state)f(space)h(is)h(a)f(tree)g(with)g(the) -g(curren)o(t)g(state)f(at)h(the)g(ro)q(ot.)17 b(Eac)o(h)11 -b(no)q(de)h(other)307 368 y(than)i(the)f(ro)q(ot)g(is)h(a)g(triple)g -Fh(h)p Fc(b)n(efor)n(e)o Fb(;)8 b Fc(after)p Fb(;)g Fc(p)n(ar)n(ent)o -Fh(i)p Fj(,)13 b(represen)o(ted)h(in)g(this)h(implemen-)307 -424 y(tation)e(as)f(t)o(w)o(o)g(pairs)h Fi(\(\()p Fc(b)n(efor)n(e)23 -b Fi(.)h Fc(after)p Fi(\))g(.)g Fc(p)n(ar)n(ent)o Fi(\))p -Fj(.)19 b(Na)o(vigating)13 b(b)q(et)o(w)o(een)g(states)307 -481 y(requires)j(re-ro)q(oting)f(the)h(tree)f(b)o(y)g(rev)o(ersing)g -(paren)o(t-c)o(hild)i(links.)378 537 y(Since)c Fi(dynamic-wind)d -Fj(in)o(teracts)h(with)h Fi(call-with-current-continua)o(tion)p -Fj(,)307 594 y(this)k(implemen)o(tation)g(m)o(ust)f(replace)h(the)f -(usual)h(de\014nition)h(of)e(the)g(latter.)307 700 y -Fi(\(define)23 b(*here*)g(\(list)g(#f\)\))307 795 y(\(define)g -(original-cwcc)f(call-with-current-continuat)o(ion\))307 -891 y(\(define)h(\(call-with-current-continua)o(tion)e(proc\))355 -948 y(\(let)i(\(\(here)g(*here*\)\))403 1004 y(\(original-cwcc)f -(\(lambda)g(\(cont\))808 1060 y(\(proc)h(\(lambda)g(results)999 -1117 y(\(reroot!)g(here\))999 1173 y(\(apply)g(cont)h -(results\)\)\)\)\)\)\))307 1269 y(\(define)f(\(dynamic-wind)f(before)h -(during)g(after\))355 1325 y(\(let)g(\(\(here)g(*here*\)\))403 -1382 y(\(reroot!)f(\(cons)i(\(cons)f(before)g(after\))g(here\)\))403 -1438 y(\(call-with-values)e(during)450 1495 y(\(lambda)i(results)498 -1551 y(\(reroot!)g(here\))498 1608 y(\(apply)g(values)g -(results\)\)\)\)\))307 1703 y(\(define)g(\(reroot!)g(there\))355 -1760 y(\(if)g(\(not)h(\(eq?)f(*here*)g(there\)\))450 -1816 y(\(begin)g(\(reroot!)g(\(cdr)g(there\)\))617 1873 -y(\(let)h(\(\(before)e(\(caar)i(there\)\))761 1929 y(\(after)f(\(cdar)g -(there\)\)\))665 1986 y(\(set-car!)g(*here*)g(\(cons)g(after)g -(before\)\))665 2042 y(\(set-cdr!)g(*here*)g(there\))665 -2098 y(\(set-car!)g(there)g(#f\))665 2155 y(\(set-cdr!)g(there)g -('\(\)\))665 2211 y(\(set!)g(*here*)g(there\))665 2268 -y(\(before\)\)\)\)\))1043 2620 y Fj(8)p eop -%%Trailer -end -userdict /end-hook known{end-hook}if -%%EOF diff --git a/doc/news.txt b/doc/news.txt deleted file mode 100644 index c8eb269..0000000 --- a/doc/news.txt +++ /dev/null @@ -1,700 +0,0 @@ --*- Mode: Indented-text; -*- - -Recent changes to Scheme 48. - -2/24/99 (version 0.53) - Additions: - DEFINE-FINITE-TYPE and DEFINE-ENUMERATED-TYPE (in structure - FINITE-TYPES; documented in doc/utilities.ps and - doc/html/utilities.html. - Added CHAR-SOURCE->INPUT-PORT, CHAR-SINK->OUTPUT-PORT, - MAKE-STRING-OUTPUT-PORT, STRING-OUTPUT-SOURCE-OUTPUT to - the extended-ports structure. - The structure BYTE-VECTORS is the same as CODE-VECTORS with `byte' - replacing `code' in all the names. The underlying datatype is the - same for both, and uses `byte' when printing. - There is a new and much improved interface to C code, thanks to - Mike Sperber. It is documented in in doc/external.ps and - doc/html/external.html. - Bug fixes: - Session-data and user-context records are no longer in the fluid env. - Lexical environments can now be nested up to 65k deep. - ,expand no longer prints `definition in expression context' warnings. - Added ARRAY? and SEARCH-TREE? to the array and search tree structures. - Flat environments work again. - Templates of the form `var ... ...' now work in syntax rules. - Reinstated caching of SCHEMIFY results to greatly reduce the space - used by debugging info. - Added argument checking to STRING->NUMBER and NUMBER->STRING. - Fixed space blow-up in LOAD. - Unused ports are closed more reliably. - Changes: - The heap, gc, and image code is now in three separate modules. - The symbol table is now held in a VM register. - Inlined SHOWING-FOCUS-VALUES into the main command loop and moved - the sentinal call to reduce the noise at the base of ,preview output. - The tables returned by MAKE-TABLE now use EQV? for comparison (instead - of EQ?). This makes these tables about 50% slower when numbers are - used as keys, but significantly more accurate. - Floating-point numbers are no longer double boxed. - The channels structure has been split into channels and low-channels. - -7/22/98 (version 0.52) - Bug fixes: - Fixed problems with unbound variables in SET! and the inliner. - Made macro expansion a bit less eager; this should reduce the amount - of heap space needed for compilation. - -6/29/98 (version 0.51) - Incompatible changes: - BIG-SCHEME no longer exports its version of DEFINE-RECORD-TYPE (but - it is available from the structure DEFRECORD). I am slowly removing - all uses of this version of DEFINE-RECORD-TYPE from the sources. - The version of DEFINE-RECORD-TYPE exported by DEFINE-RECORD-TYPES - checks that every constructor argument corresponds to a field. - Uses of LAP must list their free variables (see env/assem.scm). - Changes: - The functions exported by BIG-SCHEME that were not available elsewhere - are now exported by BIG-UTIL as well. - MAKE-RANDOM now checks its argument (but is still a fairly poor - source of pseudo-randomness). - SIGPIPE no longer kills the S48 process (this was done earlier but - not listed here). - The macro/module/compiler code has been reorganized. Hopefully - the only noticable difference is in the babble written when loading - files and packages. - Added CODE-QUOTE (in its own structure of the same name) for use - in writing hygienic macro-generating macros. CODE-QUOTE is the - same as QUOTE except that it does not strip off any of the macro - system's name annotations. - The FLOATNUMS package now exports FLOATNUM?. - Bug fixes: - Fixed phony stack-overflow bug. - Fixed a bug in thread time-debit mechanism. - Made floating point numbers always print as inexact. - Got rid of bogus type-error warnings when using floatnums. - Fixed declaration of call_startup_procedure in c/main.c. - -2/11/98 (version 0.50) - Fixed bug in closed-compiled version of READ-CHAR. - Fixed negative-key bug in integer tables. - -11/18/97 (version 0.49) - Removed some non-portable Kali code that had been accidentally - included in c/extension.c. - -10/29/97 (version 0.48) - The VM's calling convention now has the caller doing protocol checking, - instead of the callee. The *NARGS* register no longer exists. - Scheme's variable-arity procedures (APPLY, MAKE-VECTOR, +, -, etc.) - are usually handled without raising an exception. Calls with an - `atypical' number of arguments are now much faster. - Opcodes were added for >, <=, and >=. - Procedures can take up to about 8k arguments. The limit is determined - by the value of AVAILABLE-STACK-SPACE in scheme/vm/arch.scm. - Compiler detects wrong number of arguments in ((lambda ...) ...). - Removed the dynamic point from the dynamic environment to make - DYNAMIC-WIND behave reasonably with threads. - KILL-THREAD! should work more reliably. - The I/O primitives now pass OS error messages to the exception handlers. - I/O errors when flushing buffers no longer crash the system. - The Pre-Scheme compiler's hack for shadowing global variables with - local copies is no longer used. - Incompatible changes: - The internal thread interface was simplified. - There are some architecture changes; .image files will have to - be rebuilt. - ACCESS-SCHEME-48 and scheme/misc/slib-init.scm have been removed - (thanks to Mike Sperber's updating of slib). - -1/27/97 (version 0.47) - Fixed ,exit and added ,exit-when-done. - CASE now uses EQV? exclusively. - -11/5/96 (version 0.46) - Fixed a few minor thread problems. - opt/analyze.scm now writes to current-noise-port. - DELQ and DELETE now delete every instance, as the documentation claims. - There should be no more spurious heap-overflow interrupts. - Fixed bugs that caused the system to die if stdout blocked. - Template offsets have been increased to two bytes. - Disassembly of flat-lambda now works (fix from Michael Sperber). - -8/23/96 (version 0.45) - Fixed various problems with thread termination and nested schedulers. - Changed thread-internal interface to make schedulers easier to write. - BITWISE-{AND,IOR,XOR} now take an arbitrary number of arguments. - Output ports have their buffers flushed when Scheme 48 terminates. - In keeping with RnRS, CLOSE-{IN,OUT}PUT-PORT are now idempotent. - MODULO now handles negative arguments properly. - -6/20/96 (version 0.44) - The VM's byte-code interpreter and storage management code are - now compiled to separate C files. - The socket code works again. - -5/10/96 (version 0.42-0.43) - Various fixes to the thread and I/O systems. - The Unix interface code is more portable. - EOF (control-D) now resumes running all non-broken threads on - resumed command level. Thus EOF after a keyboard interrupt - (control-C) resumes running the interrupted thread. - -11/30/95 (version 0.41) - The distribution has been reorganized to reduce the number of files - in the top-level directory. - The threads implementation has been replaced with one based on engines - to allow for nested schedulers. - Threads are now included in the initial image. - The I/O system has been fixed and automatic periodic output buffer - flushing has been reinstalled. - Command levels have been integrated with the threads system to ensure - that at most one REPL is active at any time. - CONDVAR has been changed to PLACEHOLDER (condition variables being - something quite different). - ,profile no longer works, it will be fixed in a later version. - MIN and MAX now do inexact contagion. - -4/13/95 (version 0.40) - Renamed error-output-port to current-error-port. - Reinstated ".gdbinit"... - segment->template now takes parent templates debug data as an - argument. - Automatic periodic output buffer flushing has been - temporarily disabled. A future version of the I/O system - will fix it. - Fixed expansion of named LET. - The bummed-define-record-types structure is now gone; use - define-record-types instead. - There is somewhat better syntax checking now. - -8/12/94 (versions 0.38-0.39) - ,profile prints out profiling information - An interrupt is raised after ever GC; the default handler checks - to see if some reasonable amount of storage was reclaimed. - Some of the standard Scheme procedures, including LENGTH, FOR-EACH, - VECTOR, and ASSQ, are now significantly faster. - Making, accessing, and setting records is faster. - tar file now includes the top-level directory - The "scheme-level-2-internal" structure has been renamed to - "usual-resumer". - ` ( . ' is now illegal (as required by the R4RS grammar). - Made DELAY and FORCE comply with R4RS. - The EXPAND optimizer does a topological sort on definitions. - (optimize flat-environments) causes the compiler to produce - flat (instead of nested) lexical environments. - The I/O system has been rewritten to do its own buffering. There - are significant changes to unix.c to support this. See doc/io.txt. - (ERROR-OUTPUT) is now available from the structure i/o. - jar-defrecord has been replaced with a modified bummed-jar-defrecord - Files load about 25% faster, for a number of reasons. - Removed the copy of vm/arch.scm from the rts directory. - Threads and sockets work together; SOCKET-ACCEPT no longer blocks. - The compiler no longer prints out .'s as it compiles definitions. - -7/5/94 (version 0.37) - I/O opcodes now raise an interrupt instead of blocking (they still - block if no corresponding interrupt handler has been installed). - The threads code has been rewritten; threads that block on I/O - do not busy wait and THREAD-READ-CHAR and THREAD-PEEK-CHAR have - been removed. - Attempting to obtain a lock twice or to release an unowned lock - now signal errors. - READ-CHAR-WITH-TIMEOUT returns #F if the timeout occurs. - The socket structure is back in more-packages.scm. - Renamed .gdbinit to gdbinit - tar file now contains a top-level directory - -3/22/94 (version 0.36) - Removed doc/lsc.ps for copyright reasons. - Fixed (* 47123 46039) multiply bug. - Modified vm/README to make it easier to run the VM. - -3/16/94 (version 0.35) - Fixed (exact->inexact 0.1) -> 0..1. bug. - Fixed VM bug that permitted the creation of stored objects with - negative sizes. - -3/8/94 (version 0.34) - "make check" target tests out various features. - Fixes for SGI IRIX 4.0.5 and MIPS RISC/OS 4.51, courtesy - Bryan O'Sullivan. - debug/run.scm and the "medium system" work again now. - misc/static.scm should work on the 68000. - Command processor no longer fluid-binds (interaction-environment) - on recursive entry. - -2/24/94 (version 0.33) - Fixed bug in VM's interrupt system. - Made non-local srcdir work in Makefile. - Added (load-package 'bigbit) to vm/README. - -2/23/94 (version 0.32) - Some incompatible changes to the VM; .image files will have - to be rebuilt. - Improvements to configuration script and to unix.c to support - a wider variety of Unixes. The system should now work - under any Posix-compliant Unix (except maybe for - char-ready?; see comments in unix.c). - Upped the default heap size from 4 meg (2 per semispace) to 6 - meg (3 per semispace). - New command line argument -s for specifying size of - stack buffer. Default is 2500 (words). - $@ -> "$@" in script (thanks to Paul Stodghill for this fix). - Obscure interrupt/exception VM bug fixed. - It is now possible to put an initial heap image into static - memory (effectively allocated by OS process creation). - Immutable initial objects go into static read-only memory, - and mutable initial objects go into static read-write - memory. Initial objects not copied by the GC. There is no - documentation yet, but look at the rules for little and - debug/little.o in the Makefile if you're interested. - -2/13/94 (version 0.31) - Incompatible changes: - In interfaces, all exported syntactic keywords must be - given type :syntax. For example, - (define-interface my-macros - (export (my-macro :syntax) ...)) - Image entry procedures for the ,build command are now - passed a list of strings, not just a single string, for - the command line arguments following -a. - The names of the macros defined in scheme48.h - (pairp, car, string_length, etc.) are now all upper case. - New "configure" script generates Makefile from Makefile.in - and sysdep.h from sysdep.h.in (thanks to Gnu autoconf). - See INSTALL and doc/install.txt. - Bug fixes: - Can now make vectors (strings, etc.) as big as the amount - of heap space available (but you're still screwed if you - try to make one bigger than 2^23-1 bytes - don't do it). - Non-ANSI-ness fixed in scheme48vm.c (jump out of, then - back into, a block expected block-local variables to be - unchanged). - Fixed big/external.scm (had VECTOR-POSQ instead of ENUM). - In (define-syntax foo bar) you got an error if bar was a - variable reference. - Plugged a storage leak (file-environments table in - env/debug.scm). Images made with ,build were too large. - Flushed extraneous delay from make-reflective-tower. - Renamed variables in Makefile to resemble Gnu standards. - Fixed definition of LINKER_RUNNABLE in Makefile. - Added doc/call-back.txt. - Fixed define-enumerated documentation (doc/big-scheme.txt). - Environment maps no longer retained for things in initial.image - and scheme48.image. This makes scheme48.image about 170K - smaller. - -2/3/94 (version 0.30) - Faster EXPT. - FLOATNUMS improvement: (inexact->exact ) should now - work, e.g. - (inexact->exact (/ 1. 3.)) => 6004799503160661/18014398509481984 - Reinstated ACCESS-SCHEME-48 for the benefit of PSD (portable - scheme debugger) and a certain other software package that - shall remain nameless. It only knows about a small number of - procedures, including things like ERROR and FORCE-OUTPUT. - Various changes to support the Pre-Scheme compiler, notably - SET-REFLECTIVE-TOWER-MAKER!. - Incompatible change to the ENUMERATED structure: the names - foo/bar no longer become defined. Write (enum foo bar) - instead. This will macro expand into the correct small - integer. - -1/30/94 (version 0.29) - Fixed ps_run_time() to call sysconf() to find out how many - ticks there are per second. It used to assume 60. This - affects the output of the ,time command, so don't try - comparing numbers from this version with numbers from older - versions. - ,time command will now accept a command, e.g. - ,time ,load foo.scm. - It appears that if multiple arguments follow -a on the - argument line, they are concatenated together with spaces - separating them and passed to the startup procedure. I - don't know how long this has worked. This will change in - the future so that the startup procedure gets a list of - strings. - Installed what used to be called the GENERAL-TABLES structure - as the TABLES structure used by the system. This allows - the use of other comparison predicates besides EQ?, and - eliminates some code that had a restrictive copyright - notice. - ENUM, NAME->ENUMERAND, and ENUMERAND->NAME are all macros. - Enumerated types themselves are now macros as well. - -1/23/94 Fixed bad multiplication bug in VM: (* 214760876 10) was - returning 125112. - Moved RECORD-TYPE? and RECORD-TYPE-FIELD-NAMES from the - RECORDS-INTERNAL interface to the RECORDS interface, for - a somewhat closer approximation to MIT Scheme. - Various type system improvements. - Still no documentation for the ,exec package, but see - link/load-linker.exec for an example. - New generic function feature, exported by the METHODS - interface (see interfaces.scm), almost like in a certain - dynamic object-oriented language. - -1/11/94 (version 0.27) - Change: - The isomorphism used by CHAR->INTEGER and INTEGER->CHAR is - no longer ASCII. This change was introduced in order to - assist the development of portable programs. If you need - ASCII encoding, you should open the ASCII structure and - use the procedures CHAR->ASCII and ASCII->CHAR. - Features: - The help system is somewhat improved. - New form DEFINE-STRUCTURE defines a single structure. - Incompatible changes to package system: - Renamed DEFINE-PACKAGE to DEFINE-STRUCTURES - Renamed DEFINE-STRUCTURE to DEFINE - Renamed all the base types from FOO to :FOO. E.g. - :SYNTAX, :VALUE, :PAIR, etc. - Other: - Removed socket support due to restrictive copyright on some - of the C code that was in extension.c. - -12/21/93 ,take has been flushed in favor of ,exec ,load. Commands are - now accessed via a distinguished package instead of a table. - Documentation pending. - Postscript (.ps) files now included in doc/ subdirectory. (I - thought they had been there all along, but apparently I was - wrong.) - Enhanced, but still kludgey, floating point support. Use - ,open floatnum. - -12/12/93 (version 0.26) - NetBSD port. - Hacked write-level and write-depth for inspecting circular - structure. - Recursive FORCEs signal errors, e.g. - (force (letrec ((loser (delay (force loser)))) loser)) - -12/7/93 (version 0.25) - Bug fix: - filenames.make can now be remade using initial.image. This - means that you can snarf a distribution and then edit - USUAL-FEATURES before making scheme48.image. - - -12/6/93 Incompatible changes: - Change of terminology: "signature" --> "interface". - This means that DEFINE-SIGNATURE is now called - DEFINE-INTERFACE, etc. - Some structures have been renamed: - condition -> conditions - continuation -> continuations - exception -> exceptions - queue -> queues - port -> ports - record -> records, record-internal -> records-internal - table -> tables - template -> templates - The ,load-into command has been removed. Use ,in ... ,load - instead (see below), e.g. - ,in mumble ,load myfile.scm - The heap size for -h is specified in words, not bytes. As - before, the size must account for both semispaces; -h 2n - means n words per semispace. This change was actually - made a while ago, but I was confused as to what it meant. - Bug fixes: - #e1.7 reads as 17/10, (exact? 1+1.0i) => #f, and 1.0+i prints. - Features: - Things like ((structure-ref scheme if) 1 2 3) work. - The following commands now take arbitrary commands to execute - in the specified package, not just forms: - ,config ,user ,for-syntax ,in - For example, you can say - ,in mumble ,trace foo - This subsumes the functionality of the ,load-into and - ,load-config commands. - Dynamic loading of shared libraries for System V systems - (untested). - Documentation: - Somewhat improved. user-guide.txt now lists most of the - interesting built-in packages. lsc.ps is a draft of "A - Tractable Scheme Implementation," a paper submitted to Lisp - and Symbolic Computation. See also doc/big-scheme.txt, - doc/thread.txt, and doc/external.txt. - - -10/30/93 LET-SYNTAX and LETREC-SYNTAX. - Arrays (see big/array.scm). - Lots of internal changes. - -7/20/93 Features: - Type system. See doc/types.txt. - -7/4/93 Features: - New define-package clause (for-syntax *). - E.g. (define-package ((my-package ...)) - (open ...) - (for-syntax (open scheme my-utilities) - (files more-crud-for-syntax)) - ...) - A file name to package map is now used by the emacs - interface. Whenever you load a file, or zap from a file that - hasn't been previously loaded or zapped, the package in - which forms are being evaluated is remembered in a table. - The next time you zap some forms from the same file, they - will be evaluated in that package. - Sometimes you may get an association you don't want. In that - situation, you can use the ,forget command to delete an - entry in the table. - A new ,push command goes to a deeper command level. - Experimental "command preferred" command processor mode: if - you give the command ",form-preferred off", commands will - be "preferred" to forms, meaning that you don't need to - type a comma before giving a command. To see the value - of a variable FOO you have to say (begin foo). - Experimental "no levels" command processor mode: if you - give the command ",levels off", then an error will not - push a new command level. If you want to ignore an - error, you don't need to take any action - further - evaluations will happen at top level. If you want to - enter the inspector or get a preview, you can issue these - commands or a ,push command immediately after the error - occurs (more precisely, any time until the focus object - is set by some other command). - All of the mode-control commands (batch, bench, - break-on-warnings, form-preferred, and levels) take - an optional argument. When no argument is given, they - will toggle the corresponding mode. With an argument of - ON or OFF, they turn the mode on or off. - The ,flush and ,keep commands have been made more flexible - and verbose. - - -6/18/93 Incompatible changes: - The access-scheme48 procedure has gone away. Use ,open - or the module system instead. - The user, configuration, and for-syntax packages no longer - have variables bound to them in the configuration package. - Where previously you said: Now you should say: - ,in user
,user - ,in config ,config - ,in for-syntax ,for-syntax - ,load-into config ,load-config - ,load-into for-syntax ,for-syntax (load "file") - - Features: - There is an ,expand command for debugging macros. - The ,open command takes any number of structure names, and opens - them all (like ,new-package). - New procedure DEFINE-INDENTATION exported by the PP structure. - E.g. (define-indentation 'let-fluid 1) is like Gnu emacs's - (put 'let-fluid 'scheme-indent-hook 1). - The inspector simplifies generated names in continuation - source code display. E.g. when formerly it said - "Waiting for (#{Generated lambda} () (x->node (car exps)))" - now it says - "Waiting for (lambda () (x->node (car exps)))" - Macros can signal syntax errors by returning input expression - unchanged. (Comparison uses EQ?.) - - Documentation: - The doc/ directory contains a draft of a "Scheme 48 - Progress Report." - - Cleanup: - Procedure NULL-TERMINATE added to structure EXTERNALS's - signature. - "Vulgar Scheme" renamed to "Big Scheme". - Two new subdirectories, env/ (for programming environment) - and big/ (for Big Scheme), now contain most of what was - in the misc/ directory. - Several source files that were in the top level and link/ - directories have moved to the env/ and alt/ directories. - - -5/6/93 Bug fixes: - Fixed -h command line switch. The size was being improperly - divided by 4, so if you asked for an N megabyte heap, you'd - actually only get an N/4 megabyte heap. - Nested backquotes were broken for a while; should be fixed - now. - - Features: - Quoted structure is read-only: e.g. (set-car! '(a b) 3) will - produce an exception. - ,config [] and ,user [] are like ,in . - Unix socket support; see misc/socket.scm. - Now using gzip instead of compress for distributions. - ,open command offers to load packages. - A .gdbinit file sets a breakpoint at CM's exception raising - code, and defines a handy "preview" command. - -1/18/93 Feature: - Scheme 48 distributions now have version numbers. The - version number is printed in the image startup message. - Please include it in bug reports. - The module system is now documented. See doc/module.tex. - -12/17/92 Bug fixes: - Macro templates of the form (x ... y) are supported. - Macro templates are now less fussy about meta-variable - rank: you can do "(x y) ..." even when the rank of either - x or y (but not both) is too low; the low-ranking text - will be copied as many times as necessary. (A - meta-variable's "rank" is the number of ...'s it sits - under in the left-hand side of the rewrite rule.) - SYNTAX-RULES is now itself hygienic. This means you can - have a meta-variable named CAR, for instance. - - New development environment features: - Commands now start with comma (",") instead of colon - (":"). (Easier to type since it's not shifted.) - values, call-with-values, dynamic-wind, eval, - interaction-environment, and scheme-report-environment - added per upcoming Revised^5 Scheme report. See - doc/meeting.tex. - Modifications to quoted structure will now be detected and - reported as errors. - An interrupt will occur if an insufficient amount of memory - is reclaimed by a garbage collection. - Inspector now accepts arbitrary command processor commands - (with or without leading comma) - ,keep command controls retention of debugging information. - - Features removed: - #\page and #\tab. These aren't in the Scheme report. - Their absence in Scheme 48 will encourage portability. - access-scheme48 works with fewer names than before. Use the - package system instead. - Complex numbers not in the system, by default. Get them - back by changing usual-features in more-packages.scm. - - Features changed: - Many changes to package system. See doc/module.tex. - The :identify-image command is gone. Instead, supply a - second argument (optional) to the ,dump command. - The inspector's TEM command has been shortened to T. - - Internal changes and features: - Stored objects types are now part of the virtual machine - architecture, i.e. known to the byte-code compiler. - Run-time system is split up into many little modules. - File names are retained in debug database. (But not used for - anything yet...) - Tweaks to table package reduce standard image size by 50K - and increase compiler speed by 7%. - Immutability bit in object headers. - Weak pointers. - -7/18/92 Features removed: - Table package's default hash function no longer supports - string, pairs, or vectors. - -7/9/92 Bug fixes: - (- 0 -536870912) - Inspector now uses command i/o ports instead of current ones - Inexact integers print as N. instead of #iN - Throwing back into a call-with-....put-port now produces a - warning instead of an error - - Feature fixes: - In DEFINE-PACKAGE, OPEN no longer implies ACCESS. - misc/receive.scm renamed to rts/values.scm, made to conform - with Revised^5 Report, and installed internally. - - Features: - New :load-package command. Uses file names in (file ...) clause - of a define-package. These are interpreted relative to the - directory in which the file containing the define-package - was found. - #\tab and #\page now print this way. - - -6/17/92 Bug fixes: - Fixed bug in modulo. - Flushed LAST-PAIR (which disappeared between R^3 and R^4). - DEFINE-SYNTAX and SYNTAX-RULES now exist. - CEILING, FLOOR, and ROUND now exist. - GCD and LCM are now n-ary. - STRING-CI=? and STRING-COPY fixed. - STRING->SYMBOL now copies its argument before handing it to - INTERN. - =, <, etc. now work with more than two arguments. - CHAR-READY? exists. - Calls via APPLY are now tail-recursive. - DISPLAY of vectors and lists works (ugh). - - Development environment improvements: - Type ? at inspector to get list of inspector commands. - Inspector D command goes to next continuation. - Inspector M command shows more of a long menu. - Inspector TEM command goes to a continuation's or closure's - template. - For closures and continuations, inspector displays local - variables with their names. - For continuations, inspector displays source code for - expression into which control will return. - Multiple command loop levels. EOF (control-D) now only pops - out a single level. :reset pops all the way out. :level n - goes out to level n. - Can disable benchmark mode. - Procedures made with (let ((f (lambda ...))) ...) now print - with names. - - Features: - Package system: special forms define-package and package-ref; - command processor commands :set-package, :load-into, - :clear-package, :new-package, :export, :open-package, etc. - In misc directory: threads, queues, extended ports, format, etc. - - Changes to system environment: - user-initial-environment -> user-package - record-updator -> record-modifier - primitive-throw superseded by with-continuation - ash -> arithmetic-shift - New bootstrap regime. - Support for threads: alarm clock interrupt, etc. - - Etc.: - Liberal COPYRIGHT file, and a little notice in each source file. - INSTALL and NEWS split off from README. - doc.txt renamed to user-guide.txt. - The Makefile now provides two ways to make "s48" for - installation. One depends on the exec #! script execution - feature and the other doesn't. - "make" targets for testsys.image and little.image. - Runs Jaffer's test suite and library. - Flushed s48.el. Use cmuscheme instead. - - -9/5/90 Command processor argument parser revamped. - :load, :trace, and :untrace commands take arbitrary number - of arguments. Argument to :proceed is optional. - New (but undocumented) :identify-image command. - Better error messages: wrong number of arguments, undefined - variable. - +, *, min, max, apply are now n-ary; -, /, make-string, - make-vector, read-char, peek-char, write-char have - appropriate argument optionality. - Better internal support for macros; not yet ready for release. - Added STRING as per R^3.99RS. - More testing of Scheme version of bytecode interpreter. - Better scoping of ##; files can't see command processor context. - OR and CASE don't cons closures. - VM checks for non-existent heap image file, gives error - message instead of "bus error". - Numerous internal changes in compiler and exception system. - Fixed charnumber. - -8/26/90 Tested (link-system) inside of T; seems to work. - Benchmark mode available via :BENCH command. - System is 15K bigger due to new fatter global environment - representations. - Inspector abbreviation improved. - Disassembler now works on continuations, sort of. - -7/26/90 ((lambda ...) ...) no longer makes a closure - Features now in default system: - :inspect - :dis[assemble] - Generic arithmetic: bignums, rationals, complexes - rationalize - :time command is more verbose - MOREFILES variable in Makefile for loading extra stuff - Default heap size increased to 2 megabytes per semispace diff --git a/doc/no-leaf-env.txt b/doc/no-leaf-env.txt deleted file mode 100644 index 87a6967..0000000 --- a/doc/no-leaf-env.txt +++ /dev/null @@ -1,175 +0,0 @@ -Return-Path: -Date: Mon, 14 Jun 93 14:34:40 -0400 -To: jar@cs.cornell.edu -Subject: environments for leaf procedures -From: kelsey@flora.ccs.neu.edu -Sender: kelsey@ccs.neu.edu - - -I merged the no-leaf-environments code back into the system, and this -time it may be worth it. Loading pp.scm sped up by 2%, even though -the compiler is doing more work. Benchmark times (in seconds): - - old new speedup -quicksort 1.48 1.39 6% -towers 1.05 1.05 0% -matrix-multiply 3.32 3.10 7% -matrix-multiply2 1.94 1.80 7% - -Local variable names are screwed up: - - > (define (f x) (let ((y 4)) (+ x y))) - > (f 'a) - - Error: exception - (+ 'a 4) - 1> ,debug - '#{Continuation (pc 13) f} - - [0] 4 - [1: y] 'a - inspect: - -There is probably a simple fix for this. - -Here is the diff: - -% diff comp.scm comp.scm.save -26d25 -< (define $compiling-leaf (make-fluid 'no)) -28,33d26 -< (define (note-not-leaf!) -< (set-fluid! $compiling-leaf 'no)) -< -< (define (compiling-leaf?) -< (eq? 'yes (fluid $compiling-leaf))) -< -63,82c56,66 -< (deliver-value (if (env-ref? den) -< (local-variable den cenv depth #f) -< (instruction-with-variable op/global exp den #f)) -< cont))) -< -< (define (local-variable den cenv depth set?) -< (let ((back (env-ref-back den cenv)) -< (over (env-ref-over den))) -< (if (and (compiling-leaf?) -< (= back 0)) -< (instruction (if set? op/stack-set! op/stack-ref) -< (+ (- over 1) depth)) -< (let ((back (if (compiling-leaf?) (- back 1) back))) -< (if set? -< (instruction op/set-local! back over) -< (case back -< ((0) (instruction op/local0 over)) ;+++ -< ((1) (instruction op/local1 over)) ;+++ -< ((2) (instruction op/local2 over)) ;+++ -< (else (instruction op/local back over)))))))) ---- -> (if (env-ref? den) -> (let ((back (env-ref-back den cenv)) -> (over (env-ref-over den))) -> (deliver-value (case back -> ((0) (instruction op/local0 over)) ;+++ -> ((1) (instruction op/local1 over)) ;+++ -> ((2) (instruction op/local2 over)) ;+++ -> (else (instruction op/local back over))) -> cont)) -> (deliver-value (instruction-with-variable op/global exp den #f) -> cont)))) -143,145c127,132 -< (if (env-ref? den) -< (local-variable den cenv depth #t) -< (instruction-with-variable op/set-global! name den #t))) ---- -> (cond ((env-ref? den) -> (instruction op/set-local! -> (env-ref-back den cenv) -> (env-ref-over den))) -> (else -> (instruction-with-variable op/set-global! name den #t)))) -203d189 -< (note-not-leaf!) ; this isn't strictly necessary, but it keeps things simpler -222,231c208,215 -< (cond ((return-cont? cont) -< code) -< (else -< (note-not-leaf!) ; this isn't strictly necessary, but it keeps things simpler -< (sequentially (instruction-with-offset&byte op/make-cont -< (segment-size code) -< depth) -< (note-source-code (cont-source-info cont) -< code) -< (cont-segment cont))))) ---- -> (if (return-cont? cont) -> code -> (sequentially (instruction-with-offset&byte op/make-cont -> (segment-size code) -> depth) -> (note-source-code (cont-source-info cont) -> code) -> (cont-segment cont)))) -264d247 -< (note-not-leaf!) -280,315c263,284 -< (let-fluids $compiling-leaf 'maybe -< (lambda () -< (let ((code (really-compile-lambda-code formals body cenv name))) -< (if (eq? (fluid $compiling-leaf) 'maybe) -< (let-fluids $compiling-leaf 'yes -< (lambda () -< (really-compile-lambda-code formals body cenv name))) -< code))))) -< -< (define (really-compile-lambda-code formals body cenv name) -< (let* ((nargs (number-of-required-args formals)) -< (vars (normalize-formals formals)) -< (cenv (if (null? formals) -< cenv ;+++ -< (bind-vars vars cenv)))) -< (sequentially -< (cond ((n-ary? formals) -< (sequentially -< (instruction op/make-rest-list nargs) -< (instruction op/push) -< (if (compiling-leaf?) -< empty-segment -< (instruction op/make-env (+ nargs 1))))) -< ((null? formals) -< (note-not-leaf!) ; no point if no variables -< empty-segment) -< ((compiling-leaf?) -< empty-segment) -< (else -< (instruction op/make-env nargs))) -< (note-environment -< vars -< (compile-body body -< cenv -< 0 -< (return-cont name)))))) ---- -> (if (null? formals) -> (compile-body body ;+++ Don't make null environment -> cenv -> 0 -> (return-cont name)) -> (sequentially -> (let ((nargs (number-of-required-args formals))) -> (if (n-ary? formals) -> (sequentially -> (instruction op/make-rest-list nargs) -> (instruction op/push) -> (instruction op/make-env (+ nargs 1))) -> (instruction op/make-env nargs))) -> (let* ((vars (normalize-formals formals)) -> (cenv (bind-vars vars cenv))) -> (note-environment -> vars -> (compile-body body -> cenv -> 0 -> (return-cont name))))))) -> - diff --git a/doc/scheme48.man b/doc/scheme48.man deleted file mode 100644 index 6463bae..0000000 --- a/doc/scheme48.man +++ /dev/null @@ -1,81 +0,0 @@ -.TH LS48 1 -.\" File scheme48.man: Manual page template for Scheme 48. -.\" Replace LS48 with the name of your default image and LLIB with the -.\" directory containing scheme48vm and default image. -.SH NAME -LS48 \- a Scheme interpreter -.SH SYNOPSIS -.B LS48 -[-i image] [-h heapsize] [-a argument] -.SH DESCRIPTION -.B LS48 -is an implementation of the Scheme programming language as described in -the -.I "Revised^4 Report on the Algorithmic Language Scheme." -A runnable system requires two parts, an executable program that implements -the Scheme 48 virtual machine, and an image that is used to initialize -the store of the virtual machine. -.B LS48 -is a shell script that starts the virtual machine with an image that runs -in a Scheme command loop. -.PP -The -.B LS48 -command loop reads Scheme expressions, -evaluates them, and prints their results. -It also executes commands, which are identified by an initial comma character. -Type the command -.I ,help -to receive a list of available commands. -.PP -The -.B \-h -option causes -.IR heapsize -words to be allocated for both semispaces of the copying garbage -collector. One word is four bytes. Cons cells are currently 3 words, -so if you want to make sure you can allocate, say, a million cons -cells, you should specify -.B \-h -6000000 (actually a little more, to account for the initial heap -image and breathing room). -.PP -The -.I ,dump -and -.I ,build -commands put heap images in files. -The -.B \-i -option causes the initial heap image to be taken from file -.IR image . -The -.B \-a -option causes a list of strings to be passed as the argument -to an image generated using the -.I ,build -command. The first argument to -.I ,build -is a procedure that is passed -the arguments following -.B \-a -and which should return an integer (which is the -return value of the Scheme 48 process). -.PP -.nf - > ,build (lambda (a) (display a) (newline) 0) foo.image - > ,exit - $ LS48 -i foo.image -a mumble - mumble - $ -.PP -.fi -.SH FILES -.TP 40 -.B LLIB/scheme48vm -the virtual machine. -.TP -.B LLIB/LS48.image -the default image. -.SH BUGS -Procedure calls with more than 63 explicit arguments might not work. diff --git a/doc/src/code.tex b/doc/src/code.tex deleted file mode 100644 index aa8de05..0000000 --- a/doc/src/code.tex +++ /dev/null @@ -1,94 +0,0 @@ -% Latex Macros for Lisp code in text. -% Based on macros found in C. Rich's library. - -\makeatletter - -% \vobeyspaces turns all spaces into non-breakable spaces. -% Note: this is like \@vobeyspaces except without spurious space in defn. - -{\catcode`\ =\active\gdef\vobeyspaces{\catcode`\ =\active\let =\@xobeysp}} - -% \def\vobeytabs turns all tabs into 8 non-breakable spaces - -{\catcode`\^^I=\active\gdef\vobeytabs{\catcode`\^^I=\active\let^^I=\xvobeytabs}} - -\def\xvobeytabs{\@xobeysp\@xobeysp\@xobeysp\@xobeysp\@xobeysp\@xobeysp\@xobeysp\@xobeysp} - -% \vobeylines turns all cr's into non-breakable \par's - -{\catcode`\^^M=\active\gdef\vobeylines{\catcode`\^^M=\active\let^^M=\xvobeylines}} - -\def\xvobeylines{\par\penalty10000} - -% \obeycrsp turns cr's into non-breakable spaces - -{\catcode`\^^M=\active\gdef\obeycrsp{\catcode`\^^M=\active\let^^M=\@xobeysp}} - -%% \@noligs prevents ?` and !` from being treated as ligatures -%% added 19 April 86 [copied from Latex sources] - -\begingroup -\catcode``=13 -\gdef\@noligs{\let`=\@lquote} -\endgroup - -% Set up code environment, in which most of the common special characters -% appearing in code are treated verbatim, namely: _ # & ^ $ ~ @ " % -% *** JAR NEEDED $ AND _ IN SOME CODE *** - -% Note: \ { } are still enabled so that macros can be called in this -% environment. Use \\, \{ and \} to use these characters verbatim -% in this environment. - -% Note: this environment allows no breaking of lines whatsoever; not -% at spaces or hypens. To arrange for a break use the standard \- macro, -% or the \= macro which breaks, but inserts nothing. This is useful, -% for example for allowing hypenated identifiers to be broken, e.g. -% FOO-\=BAR. - -\def\setupcode{\parsep=0pt\parindent=0pt - \tt\frenchspacing\catcode``=13\@noligs% - \def\\{\char`\\}% - \@makeother\#\@makeother\&\@makeother\^%\@makeother\_\@makeother\$% - \@makeother\`\@makeother\'% - \@makeother\~\@makeother\@\@makeother\"\@makeother\%\vobeytabs\vobeyspaces} - -% Code environment as described above. Note that blank lines are -% not preserved, and lines are not kept on one page. Code is -% indented by the same amount as quotes. -% Note: to increase left margin, use \leftmargini=1in. -% was {\list{}{\parsep=0pt}\item[]\setupcode\obeylines}% -% then {\list{\parsep=0pt\listparindent=0pt\leftmargin=0pt}{}\item[]\setupcode% - -\newenvironment{bigcode}% - {\list{}{\parsep=0pt\leftmargin=0pt\labelwidth=0pt\itemindent=0pt% -\listparindent=0pt}\item[]\setupcode% -\obeylines}% - {\endlist} - -% Code is just like bigcode, but everything inside is kept on one page -% Note: This actually works by setting a huge penalty for breaking -% between lines of code. -% was {\list{}{\parsep=0pt}\item[]\setupcode\vobeylines}% - -\newenvironment{code}% - {\list{}{\parsep=0pt\leftmargin=0pt\labelwidth=0pt\itemindent=0pt% -\listparindent=0pt}\item[]\setupcode% -\vobeylines}% - {\endlist} - -% Reasonable separation between lines of code - -\newcommand{\codeskip}{\penalty0\vspace{2ex}} - -% \cd is used to build a code environment in the middle of text. -% Note: only difference from display code is that cr's are taken -% as unbreakable spaces instead of \par's. - -\newcommand{\cd}{\begingroup\setupcode\obeycrsp\startcode} - -\newcommand{\startcode}[1]{#1\endgroup} - -%\setbox0\hbox{\@xobeysp}\hline{43\wd0} - -\makeatother diff --git a/doc/src/meeting.tex b/doc/src/meeting.tex deleted file mode 100644 index 4a696cb..0000000 --- a/doc/src/meeting.tex +++ /dev/null @@ -1,439 +0,0 @@ -\documentstyle[11pt,twoside]{article} - -\input{code} -\input{latex-stuff} - -\advance \textheight by 2ex - -\begin{document} - -\begin{center} -{\Large\bf The Scheme of Things:} \\ -\vspace{2ex} -{\Large\bf The June 1992 Meeting$^{\hbox{\scriptsize 1}}$} \\ -\vspace{3ex} -Jonathan Rees \\ -Cornell University \\ -{\tt jar@cs.cornell.edu} -\end{center} - -\vspace{3ex} - -\footnotetext[1]{To appear in {\em Lisp Pointers} V(4), -October--December 1992.} - - -An informally constituted group of people interested in the future of -the Scheme programming language met at the Xerox Palo Alto Research -Center on 25 June 1992. The main purpose of the meeting was to work -on the technical content of the next revision of the Scheme report. - -We made progress on several fronts: -\begin{itemize} -\item Some differences with the IEEE Scheme standard were resolved. - -\item Proposals for multiple return values and {\tt dynamic-wind} were -adopted. - -\item A proposal for an {\tt eval} procedure was adopted. - -\item The high-level macro facility described in the -Revised$^4$ Report's appendix will be moved into the report proper. -\end{itemize} - -Two subcommittees were formed: one to work on exceptions, and one to -charter the formation of a standard library. The subcommittees will -report back to the group with proposals for inclusion in the report. - -It had been hoped that there would be progress on some other fronts -(user-defined types, dynamic binding, improvements to ``rest'' -parameters), but after inconclusive discussion these topics were -dropped. These topics will probably be taken up again in the future. - -Norman Adams was appointed the Revised$^5$ Report's editor. It is -hoped that it will be ready by early 1993, so as to precede the -reconstitution of the IEEE standard group. - -This article is my own interpretation of what transpired, and should -not be construed as definitive. - - -\piece{Agreement with the IEEE Scheme standard} - -Until now, the Scheme reports have encouraged but not required the -empty list {\tt()} and the boolean false value {\tt\#f} to be -distinct. It has been the intent ever since the Revised Revised -Report, however, that this distinction would eventually be required. -The IEEE Scheme standard bit the bullet in 1990, and now the -Revised$^5$ report follows. - -The standard also dropped the distinction between essential and -not-essential language features; most features that were formerly not -essential, such as n-ary {\tt+} and {\tt apply}, are now required. -The Revised$^5$ Report will adopt this stance, at least as regards -language features that are shared with the IEEE standard. -Non-essential non-IEEE oddities such as {\tt transcript-on} and {\tt -transcript-off} and the proposed {\tt interaction-\ok{}environment} (see -below) were not discussed at the meeting, however, and consensus on -their status will have to be reached via electronic mail. - -A third aspect of the standard that was adopted was a certain obscure -paragraph regarding assignments to top-level variables (section 6, -paragraph 2). The effect of this is that if a program contains an -assignment to any top-level variable, then the program must contain a -{\tt define} for that variable; it is not sufficient that the variable -be bound. This has been the case for most variables, but the rule -applies as well to variables such as {\tt car} that have built-in -bindings. In addition, it is clarified that if a program makes such a -definition or assignment, then the behavior of built-in procedures -will not be affected. For example, redefining {\tt length} cannot -affect the behavior of the built-in {\tt list->vector} procedure. -If in some particular implementation {\tt list->vector} is written -in Scheme and calls {\tt length}, then it must be sure to call the -built-in {\tt length} procedure, not whatever happens to be the value -of the variable {\tt length}. - - -\piece{Multiple return values} - -The {\tt call-with-values} and {\tt values} procedures were described -in an earlier Scheme of Things ({\em Lisp Pointers}, volume IV, number -1), but I'll review them here. The following is adapted from John Ramsdell's -concise description: - -\begin{list}{}{}{}\item - {\tt(values \var{object} $\ldots$)} - \hfill {\rm essential procedure} - - {\tt values} delivers all of its arguments to its continuation. - - \vspace{2ex} - - {\tt(call-with-values \var{thunk} \var{receiver})} - \hfill {\rm essential procedure} - - {\tt call-with-values} calls its \var{thunk} argument with a - continuation that, when passed some values, calls the - \var{receiver} procedure with those values as arguments. - The continuation for the call to \var{receiver} is the - continuation of the call to {\tt call-with-values}. -\end{list} - -Except for continuations created by the {\tt call-with-values} -procedure, all continuations take exactly one value, as now; the -effect of passing no value or more than one value to continuations -that were not created by {\tt call-with-values} is unspecified (as -indeed it is unspecified now). - -{\tt values} might be defined as follows: -\begin{code} - (define (values . things) - (call-with-current-continuation - (lambda (cont) (apply cont things)))) -\end{code} -That is, the procedures supplied by {\tt -call-with-current-continuation} must be passed the same number of -arguments as values expected by the continuation. - -Because the behavior of a number-of-values mismatch between a -continuation and its invoker is unspecified, some implementations may -assign some specific meaning to such situations; for example, extra -values might be ignored, or defaults might be supplied for missing -values. Thus this multiple return value proposal is compatible with -Common Lisp's multiple values, but strictly more conservative than it. -The behavior of programs in such situations was a point of contention -among the authors, which is why only the least common denominator -behavior was specified. - - -\piece{Unwind/wind protection} - -{\tt dynamic-wind}, which was described previously in this column (when it -was The Scheme Environment; {\em Lisp Pointers}, volume I, number 2), -is already implemented in many Scheme dialects. {\tt dynamic-wind} -takes three arguments, all of which are thunks (procedures of no arguments). -It behaves as if it were defined with -\begin{code} - (define (dynamic-wind before during after) - (before) - (call-with-values during - (lambda results - (after) - (apply values results)))) -\end{code} -except that the execution of the {\tt during} thunk is ``protected'' -against non-local entries and exits: a throw out of the execution -of {\tt during} will cause the {\tt after} thunk to be invoked, and a -throw from outside back in will cause the {\tt before} thunk to be -invoked. (By ``throw'' I mean an invocation of an explicit -continuation as obtained from {\tt call-with-current-continuation}.) - -For details, the earlier Scheme Environment column refers the reader -to Friedman and Haynes's paper ``Constraining Control'' in POPL 1985, -but to save you the trouble of looking that up, I have supplied a more -direct implementation of {\tt dynamic-wind} in an appendix to the -present column. - -{\tt dynamic-wind} was adopted with the following clarifications: The -semantics of {\tt(dynamic-wind \var{before} \var{during} \var{after})} -should leave unspecified what happens if a throw occurs out of {\em -before} or {\em after}\/; and it is best to defer interrupts during {\em -before} and {\em after}. - - - -\piece{Evaluating computed expressions} - -The original 1975 memo on Scheme described {\tt evaluate}, -which was analogous to Lisp's traditional {\tt eval} function. {\tt -evaluate} took a single argument, an S-expression, and invoked an -interpreter on it. For example: -\begin{code} - (let ((name '+)) (evaluate (list name 2 3))) - \ev 5 -\end{code} -Scheme being lexically scoped, however, there was some confusion over -which environment the expression was to be evaluated in. Should -\begin{code} - (let ((name '+)) - (let ((+ *)) - (evaluate (list name 2 3)))) -\end{code} -evaluate to 5 or to 6? - -To clarify matters, the Revised Report replaced {\tt evaluate} with -{\tt enclose}, which took two arguments, a {\tt lambda}-expression and -a representation of an environment from which to supply bindings of the -{\tt lambda}-expression's free variables. For example: -\begin{code} - (let ((name '+)) - (let ((+ *)) - ((enclose (list 'lambda '() (list name 2 3)) - (list (cons '+ +)))))) - \ev 6 -\end{code} -This forced the programmer to be explicit about the {\tt -lambda}-expression's enclosing environment. - -For various technical and practical reasons, there was no {\tt eval} -analogue in subsequent Scheme reports. The major stumbling blocks -were how to describe {\tt eval} formally and how to define something -that makes sense in all extant variants of the language. Some Scheme -implementations contain a distinguished top-level environment, while -others extend the language by providing ways to create multiple -environments, any of which might serve equally well. - -The {\tt eval} proposal adopted at the June meeting, which I reproduce -here, is one that comes from Bill Rozas. - -\begin{list}{}{}{}\item - - {\tt(eval \var{expression} \var{environment-specifier})} - \hfill {\rm essential procedure} - - {\tt eval} evaluates \var{expression} in the environment indicated - by {\em environment-\discretionary{}{}{}specifier}. {\em - environment-specifier} may be the return value of one of the three - procedures described below, or implementation-specific extensions. - No other operations on environment specifiers are defined by this - proposal. - - Implementations may allow non-expression programs (i.e.\ - definitions) as the first argument to {\tt eval} \var{only} when - the second argument is the return value of {\tt interaction-environment} - or some implementation extension. In other words, {\tt eval} will never - create new bindings in the return value of {\tt null-environment} or - {\tt scheme-report-environment}. - - \vspace{2ex} - - {\tt(scheme-report-environment \var{version})} - \hfill {\rm essential procedure} - - {\em Version} must be an exact non-negative integer corresponding to a - version of one of the Revised$^n$ Reports on Scheme. This procedure - returns a specifier for an environment that contains exactly the - set of bindings specified in the corresponding report that the - implementation supports. Not all versions may be available in all - implementations at all times. However, an implementation that - conforms to version $n$ of the Revised$^n$ Reports on Scheme must - accept version $n$. If {\tt scheme-report-environment} is - available, but the specified version is not, the procedure will - signal an error. - - The effect of assigning (through the use of {\tt eval}) a variable - bound in a {\tt scheme-report-environment} (e.g.\ {\tt car}) is - unspecified. Thus the environments specified by the return - values of {\tt scheme-report-environment} may be immutable. - - \vspace{2ex} - - {\tt(null-environment)} - \hfill {\rm essential procedure} - - This procedure returns a specifier for an environment that contains no - variable bindings, but contains (syntactic) bindings for all the - syntactic keywords defined in the report, and no others. - - \vspace{2ex} - %\newpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - {\tt(interaction-environment)} - \hfill {\rm procedure} - - This procedure returns a specifier for an environment that - contains imple\-men\-ta\-tion-defined bindings, typically a superset of - those listed in the report. The intent is that this procedure - will return a specifier for the environment in which the - implementation would evaluate expressions dynamically typed by the - user. - -\end{list} - -Rozas explains: -``The proposal does not imply the existence or support of first-class -environments, although it is compatible with them. -The proposal only requires a way of associating tags with a finite set -of distinguished environments which the implementations can maintain -implicitly (without reification). - -``\,`Pascal-like' implementations can support both {\tt null-environment} and -%\penalty0 -{\tt scheme-report-environment} since the environments specified by -the return values of these procedures need not share any bindings with -the current program. A version of {\tt eval} that supports these but -not {\tt interaction-environment} can be written portably, -but can be better written by the implementor, since it can share code -with the default evaluator or compiler.'' - -Here ``Pascal-like'' refers to implementations that are restricted to -static compilation and linking. Because an {\tt eval} that doesn't -support -\penalty0 -{\tt interaction-\discretionary{}{}{}environment} can be written -entirely in the Scheme language described by the rest of the report, -it raises no troublesome questions about its formal semantics. - - -\piece{Macros} - -The consensus of the meeting was that {\tt define-syntax}, {\tt -syntax-rules}, {\tt let-\discretionary{}{}{}syntax}, and {\tt -letrec-syntax} should be moved out of the report's appendix into the -main body of the report. Although everyone agrees that a low-level -macro facility is important, the subject is too contentious at -present, with three or more competing proposals at present. The -disposition of the rest of the appendix and of the other low-level -proposals will be left up to the report's editor. - - -\piece{Committee work} - -There is a strong sense that some kind of exception system is needed. -However, no specific proposal was ready at the time of the meeting. A -committee has been formed to work on one. What seems to be in the -air might be described as a highly distilled version of the condition -system that Kent Pitman developed for Common Lisp. I hope that I'll -be able to report on this in a future column. - - -On the subject of libraries, Will Clinger's minutes report that -``the authors perceive a need to give some library official status. In -fact, we need to give official sanction to multiple libraries. There -is reason to distinguish between accepted (or standard) libraries, -experimental libraries, and proposals. The accepted libraries can -reduce the intellectual size of the language by removing things like -{\tt string->list} from the report. The experimental libraries would -contain solid implementations of experimental features, including -things that might never deserve to be in the report. The proposal -libraries could contain anything implemented in portable Scheme.'' - - -Among the content of the accepted libraries, some features (such as -those that may be moved out of the body of the report) may be required -to be built in to implementations, while others will be expected to be -available on demand (perhaps using something similar to, but not the -same as, {\tt require} as found in Common Lisp and GNU Emacs). - -A librarian was appointed (Rees), and a library committee is -developing proposals for the charter, structure, and content of the -libraries. - - -\separator - -I would like to acknowledge Will Clinger, who prepared the minutes of -the meeting, and the various people who contributed proposals, -including Bill Rozas and John Ramsdell. Any errors here are my -responsibility, however. Thanks also to Norman Adams and Richard -Kelsey for corrections to a draft of this article. - -I would also like to belatedly acknowledge Norman Adams, Pavel -Curtis, Bruce Donald, and Richard Kelsey for their comments on drafts of -my previous column. - -For future columns, I am entertaining various topic possibilities, -including {\tt eval}, threads, {\tt amb}, and monads. -If you have other ideas, and particularly if you think the written -record on the language is particularly poor in certain areas, please -write and let me know. - -\vspace{2ex} - -%\newpage - -%\bgroup \small - -\piece{Appendix: An implementation of {\tt dynamic-wind}} - -This program is based on my vague recollection of an ancient -manuscript by Chris Hanson and John Lamping. I apologize for the lack -of data abstraction, but the code is more concise this way. - -A state space is a tree with the current state at the root. Each node other -than the root is a triple $\langle\var{before}, \var{after}, -\var{parent}\rangle$, represented in this implementation as two pairs -{\tt((\var{before} .\ \var{after}) .\ \var{parent})}. -Navigating between states requires re-rooting the tree by reversing -parent-child links. - -Since {\tt dynamic-wind} interacts with {\tt -call-with-current-continuation}, this implementation must replace the -usual definition of the latter. - -\begin{code} -(define *here* (list #f)) -\codeskip -(define original-cwcc call-with-current-continuation) -\codeskip -(define (call-with-current-continuation proc) - (let ((here *here*)) - (original-cwcc (lambda (cont) - (proc (lambda results - (reroot! here) - (apply cont results))))))) -\codeskip -(define (dynamic-wind before during after) - (let ((here *here*)) - (reroot! (cons (cons before after) here)) - (call-with-values during - (lambda results - (reroot! here) - (apply values results))))) -\codeskip -(define (reroot! there) - (if (not (eq? *here* there)) - (begin (reroot! (cdr there)) - (let ((before (caar there)) - (after (cdar there))) - (set-car! *here* (cons after before)) - (set-cdr! *here* there) - (set-car! there #f) - (set-cdr! there '()) - (set! *here* there) - (before))))) -\end{code} - -%\egroup - -\end{document} diff --git a/doc/src/summary.tex b/doc/src/summary.tex deleted file mode 100644 index 17c8555..0000000 --- a/doc/src/summary.tex +++ /dev/null @@ -1,83 +0,0 @@ -\documentstyle[11pt]{article} - -\pagestyle{empty} -\setlength{\textheight}{9in} -\setlength{\footheight}{0.0in} -\setlength{\topmargin}{0in} - -%Defaults from art10.sty: -%\textwidth 345pt \columnsep 10pt \columnseprule 0pt -%\oddsidemargin 63pt - -\advance\textwidth by 0.5in -\advance\oddsidemargin by -0.25in - - -\begin{document} - -\vspace*{-0.3in} - -\begin{center} -{\large\bf Scheme 48} \\ -\vspace{1ex} -Richard Kelsey ({\tt kelsey@corwin.ccs.northeastern.edu}) \\ -Jonathan Rees ({\tt jar@cs.cornell.edu}) \\ -June 1992 -\end{center} - -\vspace{1ex} - -Scheme 48 is an implementation of the Scheme programming language based -on a virtual machine architecture. The following is an overview of -the project. - -\paragraph{Goals} - -\begin{itemize} -\setlength{\itemsep}{0pt} -\item Straightforward, minimal implementation. -\item Flexible experimental apparatus for research in programming - language design and implementation. -\item Easy to make changes to internal data representations, memory - management, and compilation strategy. -\item High reliability. -\item Fast and complete enough to be a good - development environment for Scheme programs. -\end{itemize} - - -\paragraph{Virtual machine} - -The virtual machine executes a simple byte-code instruction set -similar to the target of the Scheme 311 compiler [Clinger, LFP 1984]. -The interpreter for the virtual instruction set is itself written in -PreScheme, a systems programming dialect of Scheme. A PreScheme -compiler applies intensive source-to-source rewrites to the -interpreter source code and emits low-level C code. When the output -is then compiled by an optimizing C compiler such as gcc, the result -is a very efficient and portable emulator. - -\paragraph{Run-time system} - -The virtual machine is initialized from a specified memory image -containing byte-compiled Scheme code and data. Images (including -small stand-alone applications) are built either by a linker or by -writing out the state of an executing program. A standard memory -image contains a Scheme run-time library ({\tt append}, {\tt read}, -{\tt write}, etc.), a compiler from Scheme to the virtual instruction -set, and a command processor and debugger. In this way Scheme 48 can -be configured to look like a conventional Lisp interpreter. - -In addition to the Scheme run-time library and development -environment, library software includes support for multitasking, -modules (packages), hygienic macros (as described in the Revised$^4$ -Scheme report), records, and exception handling. - -\paragraph{Applications} - -The Scheme 48 system is being used at several sites for research in -memory management, embedded systems, multiprocessing, and computer -system verification. Scheme 48 was chosen as the platform for these -projects because of its internal tractability and flexibility. - -\end{document} diff --git a/doc/threads.txt b/doc/threads.txt deleted file mode 100644 index 393f006..0000000 --- a/doc/threads.txt +++ /dev/null @@ -1,87 +0,0 @@ - - Threads - -The following are exported by the THREADS structure. - -(SPAWN thunk) -(SPAWN thunk name) - Create and schedule a new thread that will execute . The optional - name is used when printing the thread. - -(RELINQUISH-TIMESLICE) - Let other threads run for a while. - -(SLEEP time) - Sleep for