diff options
author | Bryan Newbold <bnewbold@robocracy.org> | 2017-02-20 00:05:25 -0800 |
---|---|---|
committer | Bryan Newbold <bnewbold@robocracy.org> | 2017-02-20 00:05:25 -0800 |
commit | 3278b75942bdbe706f7a0fba87729bb1e935b68b (patch) | |
tree | dcad4048dfc0b38367047426b2b14501bf5ff257 /README | |
parent | db04688faa20f3576257c0fe41752ec435beab9a (diff) | |
download | scm-3278b75942bdbe706f7a0fba87729bb1e935b68b.tar.gz scm-3278b75942bdbe706f7a0fba87729bb1e935b68b.zip |
Import Upstream version 5d2upstream/5d2
Diffstat (limited to 'README')
-rw-r--r-- | README | 568 |
1 files changed, 282 insertions, 286 deletions
@@ -1,93 +1,96 @@ -This directory contains the distribution of scm5c3. Scm conforms to +This directory contains the distribution of scm5d2. Scm conforms to Revised^5 Report on the Algorithmic Language Scheme and the IEEE P1178 -specification. Scm runs under VMS, MS-DOS, OS2, MacOS, Amiga, -Atari-ST, NOS/VE, Unix and similar systems. - -This file consists mainly of excerpts from "scm.info", the result of -compiling (with makeinfo) "scm.texi" to `info' form. In case of -conflicts with "scm.info", consult "scm.info". - -The author can be reached at <jaffer@ai.mit.edu> - - MANIFEST - - `README' is this file. It contains a MANIFEST, INSTALLATION - INSTRUCTIONS, hints for EDITING SCHEME CODE, and a TROUBLE - SHOOTING GUIDE. - `COPYING' details the LACK OF WARRANTY for scm and the conditions - for distributing scm. - `scm.1' is the unix style man page in nroff format. - `scm.doc' is the text man page generated from scm.1. - `QUICKREF' is a Quick Reference card for IEEE and R4RS. - `scm.texi' details feature support and enhancements to Scheme and - contains a SCHEME BIBLIOGRAPHY. - `ChangeLog' documents changes to the scm. - - `r4rstest.scm' is Scheme code which tests conformance with Scheme - specifications. - `example.scm' is Scheme code from Revised^4 Report on the - Algorithmic Language Scheme which uses inexact numbers. - `pi.scm' is Scheme code for computing digits of pi [type (pi 100 5)] - which can be used to test the performance of scm against - compiled C code [cc -o pi pi.c;time pi 100 5]. - `pi.c' is C code for computing digits of pi. - `bench.scm' is Scheme code for computing and recording speed of - "pi.scm". - - `Makefile' is for building scmlit using the `make' program. - `build.scm' creates a database and program for compiling and linking - new SCM executables, libraries, and dlls. - `build.bat' invokes build.scm on MS-DOS platforms. - `mkimpcat.scm' build SCM-specific catalog for SLIB. - `disarm.scm' disables file opening and modifications. - `.gdbinit' provides commands for debugging SCM with GDB. - `setjump.mar' provides setjump and longjump which do not use $unwind - utility on VMS. - `ugsetjump.s' provides setjump and longjump which work on Ultrix VAX. - `setjump.s' provides setjump and longjump for the Cray YMP. - - `Init5c2.scm' is Scheme initialization code. - `Transcen.scm' has Scheme code for inexact builtin procedures. - `Link.scm' has Scheme code for compiling and dynamic linking. - `scmfig.h' is a C include file containing system dependent definitions. - `patchlvl.h is the patchlevel of this release. - `continue.c' code for continuations. - `continue.h' data types and external functions for continuations. - `setjump.h' is an include file dealing with continuations, stacks, - and memory allocation. - `scm.h' has the data type and external definitions of scm. - - `scm.c' has the top level and interrupt code. - `findexec.c' has code to find the executable file. - `time.c' has functions dealing with time. - `repl.c' has error, read-eval-print loop, read, write and load code. - `scl.c' has the code for utility functions which are not part of the - IEEE Scheme spec or which are required for non-integer - arithmetic. - `eval.c' has the evaluator, apply, map, and foreach. - `sys.c' has the code for opening and closing files, storage - allocation and garbage collection. - `rope.c' has C interface functions. - `subr.c' has all the rest of functions. - `sc2.c' has code for procedures from R2RS and R3RS not in R4RS. - `dynl.c' has c code for dynamically loading object files. - `unif.c' has code for uniform vectors. - `rgx.c' has code for string regular expression match. - `crs.c' has code for interactive terminal control. - `split.scm' sets up CURSCM (SCM with crs.c) so that input, output, - and diagnostic output are each directed to separate windows. - `edline.c' Gnu readline input editing - (get ftp.sys.toronto.edu:/pub/rc/editline.shar). - `Iedline.scm' Gnu readline input editing. - `record.c' has code for proposed "Record" user definable datatypes. - `gsubr.c' has make_gsubr for arbitrary (< 11) arguments to C functions. - - `ioext.c' has code for system calls in common between PC compilers and unix. - `posix.c' has code for posix library interface. - `unix.c' has code for non-posix system calls on unix systems. - `socket.c' has code for socket interface. - - SLIB +specification. SCM runs under Amiga, Atari-ST, MacOS, MS-DOS, OS/2, +NOS/VE, Unicos, VMS, Unix and similar systems. + + `http://swissnet.ai.mit.edu/~jaffer/SCM.html' + +Manifest +======== + +`.gdbinit' provides commands for debugging SCM with GDB +`COPYING' details the LACK OF WARRANTY for SCM and the conditions + for distributing SCM. +`ChangeLog' changes to SCM. +`Iedline.scm' Gnu readline input editing. +`Init.scm' Scheme initialization. +`Link.scm' compiles and dynamically links. +`Macro.scm' Supports Syntax-Rules Macros. +`Makefile' builds SCMLIT using the `make' program. +`QUICKREF' Quick Reference card for R4RS and IEEE Scheme. +`README' contains a MANIFEST, INSTALLATION INSTRUCTIONS, hints + for EDITING SCHEME CODE, and a TROUBLE SHOOTING GUIDE. +`Transcen.scm' inexact builtin procedures. +`bench.scm' computes and records performance statistics of pi.scm. +`build.bat' invokes build.scm for MS-DOS +`build.scm' database for compiling and linking new SCM programs. +`continue.c' continuations. +`continue.h' continuations. +`crs.c' interactive terminal control. +`dynl.c' dynamically load object files. +`ecrt0.c' discover the start of initialized data space + dynamically at runtime. +`edline.c' Gnu readline input editing (get + ftp.sys.toronto.edu:/pub/rc/editline.shar). +`eval.c' evaluator, apply, map, and foreach. +`example.scm' example from R4RS which uses inexact numbers. +`findexec.c' find the executable file function. +`gmalloc.c' Gnu malloc(); used for unexec. +`gsubr.c' make_gsubr for arbitrary (< 11) arguments to C + functions. +`ioext.c' system calls in common between PC compilers and unix. +`mkimpcat.scm' build SCM-specific catalog for SLIB. +`patchlvl.h' patchlevel of this release. +`pi.c' computes digits of pi [cc -o pi pi.c;time pi 100 5]. +`pi.scm' computes digits of pi [type (pi 100 5)]. Test + performance against pi.c. +`posix.c' posix library interface. +`pre-crt0.c' loaded before crt0.o on machines which do not remap + part of the data space into text space in unexec. +`r4rstest.scm' tests conformance with Scheme specifications. +`ramap.c' array mapping +`record.c' proposed `Record' user definable datatypes. +`repl.c' error, read-eval-print loop, read, write and load. +`rgx.c' string regular expression match. +`rope.c' C interface functions. +`sc2.c' procedures from R2RS and R3RS not in R4RS. +`scl.c' inexact arithmetic +`scm.1' unix style man page. +`scm.c' initialization, interrupts, and non-IEEE utility + functions. +`scm.doc' man page generated from scm.1. +`scm.h' data type and external definitions of SCM. +`scm.texi' SCM installation and use. +`scmfig.h' contains system dependent definitions. +`scmmain.c' initialization, interrupts, and non-IEEE utility + functions. +`script.c' utilities for running as `#!' script. +`setjump.h' continuations, stacks, and memory allocation. +`setjump.mar' provides setjump and longjump which do not use $unwind + utility on VMS. +`setjump.s' provides setjump and longjump for the Cray YMP. +`socket.c' BSD socket interface. +`split.scm' example use of crs.c. Input, output, and diagnostic + output directed to separate windows. +`subr.c' the rest of IEEE functions. +`sys.c' call-with-current-continuation, opening and closing + files, storage allocation and garbage collection. +`time.c' functions dealing with time. +`ugsetjump.s' provides setjump and longjump which work on Ultrix VAX. +`unexalpha.c' Convert a running program into an Alpha executable file. +`unexec.c' Convert a running program into an executable file. +`unexelf.c' Convert a running ELF program into an executable file. +`unexhp9k800.c' Convert a running HP-UX program into an executable file. +`unexsgi.c' Convert a running program into an IRIX executable file. +`unexsunos4.c' Convert a running program into an executable file. +`unif.c' uniform vectors. +`unix.c' non-posix system calls on unix systems. + + +File: scm.info, Node: SLIB, Next: Building SCM, Prev: Making SCM, Up: Installing SCM + +SLIB +==== [SLIB] is a portable Scheme library meant to provide compatibility and utility functions for all standard Scheme implementations. Although @@ -95,18 +98,19 @@ SLIB is not *neccessary* to run SCM, I strongly suggest you obtain and install it. Bug reports about running SCM without SLIB have very low priority. SLIB is available from the same sites as SCM: - * swissnet.ai.mit.edu:pub/scm/slib2c3.tar.gz - * prep.ai.mit.edu:pub/gnu/jacal/slib2c3.tar.gz - * ftp.maths.tcd.ie:pub/bosullvn/jacal/slib2c3.tar.gz - * ftp.cs.indiana.edu:/pub/scheme-repository/imp/slib2c3.tar.gz + * swissnet.ai.mit.edu:/pub/scm/slib2c7.tar.gz -Unpack SLIB (`tar xzf slib2c3.tar.gz' or `unzip -ao slib2c3.zip') in an + * ftp.gnu.org:/pub/gnu/jacal/slib2c7.tar.gz + + * ftp.cs.indiana.edu:/pub/scheme-repository/imp/slib2c7.tar.gz + +Unpack SLIB (`tar xzf slib2c7.tar.gz' or `unzip -ao slib2c7.zip') in an appropriate directory for your system; both `tar' and `unzip' will create the directory `slib'. Then create a file `require.scm' in the SCM "implementation-vicinity" -(this is the same directory as where the file `Init.scm' is installed). -`require.scm' should have the contents: +(this is the same directory as where the file `Init5d2.scm' is +installed). `require.scm' should have the contents: (define (library-vicinity) "/usr/local/lib/slib/") (load (in-vicinity (library-vicinity) "require")) @@ -128,16 +132,21 @@ Alternatively, you can set the (shell) environment variable SCHEME_LIBRARY_PATH: SCM Variables.). If set, the environment variable overrides `require.scm'. Again, absolute pathnames are recommended. - MAKING SCM + + +File: scm.info, Node: Making SCM, Next: SLIB, Prev: Installing SCM, Up: Installing SCM + +Making SCM +========== The SCM distribution has "Makefile" which contains rules for making "scmlit", a "bare-bones" version of SCM sufficient for running `build.scm'. `build.scm' is used to compile (or create scripts to compile) full featured versions. -Makefiles are not portable to the majority of platforms. If -`Makefile' works for you, good; If not, I don't want to hear about it. -If you need to compile SCM without build.scm, there are several ways to +Makefiles are not portable to the majority of platforms. If `Makefile' +works for you, good; If not, I don't want to hear about it. If you +need to compile SCM without build.scm, there are several ways to proceed: * Use SCM on a different platform to run `build.scm' to create a @@ -148,8 +157,8 @@ proceed: * Create your own script or `Makefile'. - * Buy a SCM executable from jaffer@ai.mit.edu. See the end of - `ANNOUNCE' in the distribution for details. + * Buy a SCM executable from jaffer @ ai.mit.edu. See the end of the + `ANNOUNCE' file in the distribution for details. * Use scmconfig (From: bos@scrg.cs.tcd.ie): @@ -161,51 +170,31 @@ proceed: I am moving it to the OLD subdirectory until someone submits an update. - Making SCM with Think C 4.0 or 4.1 - -Note: These instructions need to be uptdated for scm5c3. If Think C -can be called using system(), then SCM can be built using build.scm. - - Edit Scmfig.H to set desired options and IMPLINIT. - from Yasuaki Honda // honda@csl.SONY.co.jp: - Make a project and add source files repl.c, time.c, scm.c, subr.c, - sys.c, eval.c, scl.c, sc2.c, and unif.c to it. - Add libraries MacTraps, unix, ANSI to the project. - The project should be segmented in the following way: - ---------- - repl.c - scm.c - subr.c - sys.c - sc2.c - unif.c - time.c - ---------- - MacTraps - unix - ---------- - ANSI - ---------- - eval.c - ---------- - scl.c - ---------- - Choose 'Set Project Type' from 'Project' menu. - Choose Application from radio buttons. - Set Partition size to 600K. (The default 384K is not enough). - - EDITING SCHEME CODE + + +File: scm.info, Node: Editing Scheme Code, Next: Debugging Scheme Code, Prev: SCM Session, Up: Operational Features + +Editing Scheme Code +=================== + + - Function: ed ARG1 ... + The value of the environment variable `EDITOR' (or just `ed' if it + isn't defined) is invoked as a command with arguments ARG1 .... + + - Function: ed FILENAME + If SCM is compiled under VMS `ed' will invoke the editor with a + single the single argument FILENAME. Gnu Emacs: Editing of Scheme code is supported by emacs. Buffers holding files ending in .scm are automatically put into scheme-mode. EMACS for MS-DOS and MS-Windows systems is available (free) from: - * http://simtel.coast.net/SimTel/gnu/demacs.html + `http://simtel.coast.net/SimTel/gnu/demacs.html' If your Emacs can run a process in a buffer you can use the Emacs - command `M-x run-scheme' with SCM. Otherwise, use the emacs - command `M-x suspend-emacs'; or see "other systems" below. +command `M-x run-scheme' with SCM. Otherwise, use the emacs command +`M-x suspend-emacs'; or see "other systems" below. Epsilon (MS-DOS): There is lisp (and scheme) mode available by use of the package @@ -224,7 +213,7 @@ Epsilon (MS-DOS): other systems: Define the environment variable `EDITOR' to be the name of the - editing program you use. The SCM procedure `(ed arg1 ...)' will + editing program you use. The SCM procedure `(ed arg1 ...)' will invoke your editor and return to SCM when you exit the editor. The following definition is convenient: @@ -233,152 +222,159 @@ other systems: Typing `(e)' will invoke the editor with the file of interest. After editing, the modified file will be loaded. - TROUBLE SHOOTING - -Reported problems and solutions are grouped under "Compiling", -"Linking", "Running", and "Testing". If you don't find your problem -listed here, you can send a bug report to <jaffer@ai.mit.edu>. The -bug report should include: - - * The version of SCM (printed when SCM is invoked with no arguments). - - * The type of computer you are using. - - * The name and version of your computer's operating system. - - * The values of the environment variables SCM_INIT_PATH and - SCHEME_LIBRARY_PATH. - - * The name and version of your C compiler. - - * If you are using an executable from a distribution, the name, - vendor, and date of that distribution. In this case, - corresponding with the vendor is recommended. - - - Compiling: - -FILE ERROR or WARNING HOW TO FIX - -*.c include file not found Correct status of - STDC_HEADERS - - fix #include statement - or add #define for - system type to scmfig.h - -scm.c assignment between incompatible types change SIGRETTYPE in scm.c - -time.c CLK_TCK redefined incompatablility - between <stdlib.h> and - <sys/types.h>. remove - STDC_HEADERS in scmfig.h - - edit <sys/types.h> to - remove incompatability. - -sys.c statement not reached ignore - constant in conditional expression ignore - -sys.c: `???' undeclared, outside of functions #undef STDC_HEADERS - in scmfig.h - -scl.c syntax error define system type in - scmfig.h and scl.c (softtype) - - Linking: - -ERROR or WARNING HOW TO FIX - -_sin etc. missing. uncomment LIBS in makefile - - Running: - -PROBLEM HOW TO FIX - -Opening message and then machine Change memory model option -crashes. to C compiler (or makefile). - - Make sure sizet definition is - correct in scmfig.h - - Reduce size of HEAP_SEG_SIZE - in setjump.h - -Input hangs #define NOSETBUF - -ERROR: heap: need larger initial Need to increase the initial - heap allocation using - -a<kbytes> or INIT_HEAP_SIZE. - -ERROR: Could not allocate ... Check sizet definition. - - Get more memory. - - Don't try to run as subproccess - -... in scmfig.h and recompile scm Do it and recompile files. - -ERROR: Init.scm not found Assign correct IMPLINIT in - makefile or scmfig.h or - define environment variable - SCM_INIT_PATH to be the full - pathname of Init.scm (see - INSTALLATION instructions). - -WARNING: require.scm not found define environment variable - SCHEME_LIBRARY_PATH to be the - full pathname of the scheme - library SLIB or change - library-vicinity in Init.scm - to point to library or remove. - See section SLIB above. - - Make sure library-vicinity has - a trailing file separator - (like / or \). - - Testing: (load "r4rstest.scm") or (load "pi.scm") (pi 100 5) - -Runs some and then machine crashes. See above under machine - crashes. - -Runs some and then ERROR: ... Remove optimization option -(after a GC has happened) to C compiler and recompile. - - #define SHORT_ALIGN in scmfig.h - -Some symbol names print incorrectly. Change memory model option - to C compiler (or makefile). - - Check that HEAP_SEG_SIZE fits - within sizet. - - Increase size of HEAP_SEG_SIZE - (or INIT_HEAP_SIZE if it is - smaller than HEAP_SEG_SIZE). - -ERROR: Rogue pointer in Heap. See above under machine - crashes. - -Newlines don't appear correctly in Check file mode (define OPEN_... -output files. in Init.scm - -Spaces or control characters appear Check character defines in -in symbol names scmfig.h - -Negative numbers turn positive. Check SRS in scmfig.h -VMS: Couldn't unwind stack #define CHEAP_CONTIUATIONS -VAX: botched longjmp in scmfig.h -Sparc(SUN-4) heap is growing out of control: +File: scm.info, Node: Problems Compiling, Next: Problems Linking, Prev: Automatic C Preprocessor Definitions, Up: Installing SCM + +Problems Compiling +================== + +FILE PROBLEM / MESSAGE HOW TO FIX +*.c include file not found. Correct the status of + STDC_HEADERS in scmfig.h. + fix #include statement or add + #define for system type to + scmfig.h. +*.c Function should return a value. Ignore. + Parameter is never used. + Condition is always false. + Unreachable code in function. +scm.c assignment between incompatible Change SIGRETTYPE in scm.c. + types. +time.c CLK_TCK redefined. incompatablility between + <stdlib.h> and <sys/types.h>. + Remove STDC_HEADERS in scmfig.h. + Edit <sys/types.h> to remove + incompatability. +subr.c Possibly incorrect assignment Ignore. + in function lgcd. +sys.c statement not reached. Ignore. + constant in conditional + expression. +sys.c undeclared, outside of #undef STDC_HEADERS in scmfig.h. + functions. +scl.c syntax error. #define SYSTNAME to your system + type in scl.c (softtype). + + + +File: scm.info, Node: Problems Linking, Next: Problems Running, Prev: Problems Compiling, Up: Installing SCM + +Problems Linking +================ + +PROBLEM HOW TO FIX +_sin etc. missing. Uncomment LIBS in makefile. + + + +File: scm.info, Node: Problems Running, Next: Testing, Prev: Problems Linking, Up: Installing SCM + +Problems Running +================ + +PROBLEM HOW TO FIX +Opening message and then machine Change memory model option to C +crashes. compiler (or makefile). + Make sure sizet definition is + correct in scmfig.h. + Reduce the size of HEAP_SEG_SIZE in + setjump.h. +Input hangs. #define NOSETBUF +ERROR: heap: need larger initial. Increase initial heap allocation + using -a<kb> or INIT_HEAP_SIZE. +ERROR: Could not allocate. Check sizet definition. + Use 32 bit compiler mode. + Don't try to run as subproccess. +remove <FLAG> in scmfig.h and Do so and recompile files. +recompile scm. +add <FLAG> in scmfig.h and +recompile scm. +ERROR: Init5d2.scm not found. Assign correct IMPLINIT in makefile + or scmfig.h. + Define environment variable + SCM_INIT_PATH to be the full + pathname of Init5d2.scm. +WARNING: require.scm not found. Define environment variable + SCHEME_LIBRARY_PATH to be the full + pathname of the scheme library + [SLIB]. + Change library-vicinity in + Init5d2.scm to point to library or + remove. + Make sure the value of + (library-vicinity) has a trailing + file separator (like / or \). + + + +File: scm.info, Node: Testing, Next: Reporting Problems, Prev: Problems Running, Up: Installing SCM + +Testing +======= + +Loading `r4rstest.scm' in the distribution will run an [R4RS] +conformance test on `scm'. + + > (load "r4rstest.scm") + -| + ;loading "r4rstest.scm" + SECTION(2 1) + SECTION(3 4) + #<primitive-procedure boolean?> + #<primitive-procedure char?> + #<primitive-procedure null?> + #<primitive-procedure number?> + ... + +Loading `pi.scm' in the distribution will enable you to compute digits +of pi. + + > (load "pi") + ;loading "pi" + ;done loading "pi.scm" + ;Evaluation took 20 mSec (0 in gc) 767 cells work, 233 bytes other + #<unspecified> + > (pi 100 5) + 00003 14159 26535 89793 23846 26433 83279 50288 41971 69399 + 37510 58209 74944 59230 78164 06286 20899 86280 34825 34211 + 70679 + ;Evaluation took 550 mSec (60 in gc) 36976 cells work, 1548 bytes other + #<unspecified> + +Loading `bench.scm' will compute and display performance statistics of +SCM running `pi.scm'. `make bench' or `make benchlit' appends the +performance report to the file `BenchLog', facilitating tracking +effects of changes to SCM on performance. + +PROBLEM HOW TO FIX +Runs some and then machine crashes. See above under machine crashes. +Runs some and then ERROR: ... Remove optimization option to C +(after a GC has happened). compiler and recompile. + #define SHORT_ALIGN in `scmfig.h'. +Some symbol names print incorrectly. Change memory model option to C + compiler (or makefile). + Check that HEAP_SEG_SIZE fits + within sizet. + Increase size of HEAP_SEG_SIZE (or + INIT_HEAP_SIZE if it is smaller + than HEAP_SEG_SIZE). +ERROR: Rogue pointer in Heap. See above under machine crashes. +Newlines don't appear correctly in Check file mode (define OPEN_... in +output files. `Init5d2.scm'). +Spaces or control characters appear Check character defines in +in symbol names. `scmfig.h'. +Negative numbers turn positive. Check SRS in `scmfig.h'. +VMS: Couldn't unwind stack. #define CHEAP_CONTIUATIONS in + `scmfig.h'. +VAX: botched longjmp. + +Sparc(SUN-4) heap is growing out of control + You are experiencing a GC problem peculiar to the Sparc. The + problem is that SCM doesn't know how to clear register windows. + Every location which is not reused still gets marked at GC time. + This causes lots of stuff which should be collected to not be. + This will be a problem with any *conservative* GC until we find + what instruction will clear the register windows. This problem is + exacerbated by using lots of call-with-current-continuations. - You are experiencing a GC problem peculiar to the Sparc. The - problem is that SCM doesn't know how to clear register - windows. Every location which is not reused still gets marked - at GC time. This causes lots of stuff which should be - collected to not be. This will be a problem with any - "conservative" GC until we find what instruction will clear - the register windows. This problem is exacerbated by using - lots of call-with-current-continuations. |