MONDAY MAY 16,1977 LQ+6D.8H.0M.26S. LISP 1272 - GLS -
I BELIEVE THAT I HAVE FINALLY KILLED THE GC BUG THAT WAS
CAUSING THE TOPS-10 IMPLEMENTATION TO GET MPV ON STARTUP.
NUMEROUS OTHER BUGS HAVE BEEN KILLED ALSO.
AS ALWAYS, NUMBERED ITEMS ARE FOR ALL LISPS, AND LETTERED
ONES FOR NEWIO ONLY. THE OTHERS ARE IN NON-STANDARD CATEGORIES.
[1] THE VALUE OF HUNKP CONTROLS PRINT, PURCOPY, AND EQUAL
[2] PURE HUNKS EXIST (PURCOPY WILL WIN ON HUNKS)
[3] NEW PREDICATE: SYMBOLP
[4] CHANGES TO RANDOM; ALSO ([S]STATUS RANDOM).
[5] WARNING ABOUT MOST NEGATIVE NUMBER (THE "SETZ" PROBLEM)
[6] +, +$, AND THE LIKE NEVER DETECT OVERFLOW OR UNDERFLOW
[7] FLONUM OUTPUT HAS BEEN IMPROVED
[8] SQRT HAS BEEN IMPROVED
[9] VALUE OF FASLOAD IS NOW THE FUNCTION PROPERTIES TO CHECK
[A] NEW FUNCTION: FILEP
[B] FOR INFERIOR JOB HACKERS: JOBS CAN HAVE "PROPERTY LISTS"
[C] ASCII MODE I/O TO AND FROM INFERIORS IS PRESENTLY BROKEN
[&] THE NEW FUNCTION LH| PERFORMS A COMPLETELY WEIRD CROCK FOR LH
[;] THE SEGMENT TABLE BITS $FXP AND $FLP HAVE BEEN CHANGED
----------------------------------------------------------------
[1] THE VARIABLE HUNKP (INITIALLY T), IF NIL, CAUSES THE FUNCTIONS
PRINT, EQUAL, AND PURCOPY TO TREAT HUNKS AS LISTS (AS MOST
OTHER SYSTEM FUNCTIONS DO). IF NON-NIL, THEN THESE THREE
FUNCTIONS WILL TREAT THE HUNNKS AS HUNKS; IN PARTICULAR,
EQUAL WILL COMPARE THE HUNKS ELEMENT-BY-ELEMENT.
[2] PURE HUNKS EXIST (PURCOPY WILL WIN ON HUNKS). THIS JUST FILLS
IN A TRIVIAL HOLE THAT I DIDN'T GET AROUND TO IMPLEMENTING
EARLIER. (STATUS PURSPCNAMES) WILL REFLECT THE PRESENCE
OF THIS FEATURE.
[3] (SYMBOLP X) IS NON-NIL IFF X IS AN ATOMIC SYMBOL.
THIS CATEGORY INCLUDES NIL; THAT IS, (SYMBOLP 'NIL) => T.
[4] THE RANDOM FUNCTION NOW HAS BETTER BEHAVIOR. THE TWO-ARGUMENT
FORM HAS BEEN ELIMINATED (WHICH USED TO INITIALIZE THE GENERATOR),
SINCE THE STATE CANNOT BE CONTAINED IN TWO FIXNUMS ANY MORE.
A NEW STATUS FUNCTION EXISTS FOR THIS PURPOSE.
(STATUS RANDOM) RETURNS A LIST WHICH SUMMARIZES THE STATE
OF THE RANDOM NUMBER GENERATOR. NO GUARANTEES ARE MADE AS TO
ITS FORMAT, EXCEPT THAT IT MAY BE FED AS AN ARGUMENT X TO
(SSTATUS RANDOM X), WHICH WILL RESTORE THE GENERATOR TO THAT
FROZEN STATE. (SSTATUS RANDOM N) FOR ANY FIXNUM N IS ALSO
PERMISSIBLE; THIS WILL INITIALIZE THE GENERATOR IN A WAY THAT
DEPENDS IN AN UNSPECIFIED WAY ON N. (THIS IS SO THAT PEOPLE
CAN DO, FOR EXAMPLE, (SSTATUS RANDOM (TIME)) OR SOMETHING.)
[5] THE PDP-10 HARDWARE (BOTH KA10 AND KL10) HAS A WEIRD GLITCH TO
THE EFFECT THAT IT FAILS TO DIVIDE THE MOST NEGATIVE FIXNUM
(-400000000000) BY 1 CORRECTLY, EVEN THOUGH THE RESULTS ARE
WELL-DEFINED AND REPRESENTABLE. THE GENERIC FUNCTIONS
(QUOTIENT, *QUO, REMAINDER) HAVE BEEN FIXED TO COMPENSATE FOR
THIS PROBLEM; THEY ARE CONCEPTUALLY "GUARANTEED" TO RETURN
CORRECT ANSWERS INDEPENDENT OF SUCH HARDWARE LOSSES. HOWEVER,
THERE IS NO EFFECTIVE WAY TO FIX THE FIXNUM-ONLY FUNCTIONS
(//, \); SUCH FUNCTIONS ARE PERMITTED TO HAVE THE CHARACTERISTICS
IMPOSED BY THE HOST HARDWARE (THUS ON MULTICS // MAY HAVE
OTHER PECULIARITIES, FOR ALL I KNOW). THIS IS BECAUSE THESE
FUNCTIONS ARE INTENDED TO BE OPEN-CODED AS SINGLE HOST HARDWARE
INSTRUCTIONS. BEWARE!
[6] THE FIXNUM- AND FLONUM-ONLY ARITHMETIC FUNCTIONS ARE NOW
*DEFINED* TO DO "WHAT THE HARDWARE DOES". THE INTERPRETED
VERSIONS USED TO DETECT OVERFLOW AND UNDERFLOW, BUT NO MORE.
THUS YOU CAN USE + TO COMPUTE STRANGE CHECKSUMS, ETC.
IN ANY CASE, COMPILED AND INTERPRETED CODE SHOULD BE COMPATIBLE
WITH RESPECT TO THESE FUNCTIONS. ANY PECULIAR SCREWS IN THE
HARDWARE ARE NOT COMPENSATED FOR (SEE [5] ABOVE). THE GENERIC
ARITHMETIC FUNCTIONS ARE "GUARANTEED" TO BEHAVE "MATHEMATICALLY"
AND TO COMPENSATE AS NECESSARY FOR SUCH SCREWS.
[7] AN IMPROVED FLONUM PRINT ALGORITHM HAS BEEN INSTALLED.
I (GLS) HAVE "PROVED" THAT IT HAS THESE PROPERTIES:
(1) IT OUTPUTS ENOUGH DIGITS THAT NO INFORMATION IS LOST
(A PERFECT READER, WHICH I DO NOT YET CLAIM LISP HAS,
CAN ALWAYS RECOVER THE ORIGINAL FLONUM BY ROUNDING).
(2) IT OUTPUTS NO MORE DIGITS THAN NECESSARY TO ACHIEVE (1).
(3) IT OUTPUTS THE BEST POSSIBLE DECIMAL FLONUM OF THE
NUMBER OF DIGITS IN (2).
[8] THANKS TO AN ALGORITHM FROM KAHAN AND HELP FROM RJF (FATEMAN),
THE SQRT ROUTINE HAS BEEN IMPROVED. IT IS CONSIDERABLY FASTER.
[9] THE VALUE OF FASLOAD IS NOW THE LIST OF PROPERTIES FASLOAD SHOULD
CHECK FOR TO DECIDE WHETHER TO PRINT A WARNING MESSAGE. ITS
INITIAL VALUE IS (SUBR FSUBR LSUBR), AND SO WILL HAVE THE SAME EFFECT
AS BEFORE, WHEN THE INITIAL VALUE WAS T. ALSO AS BEFORE, SETTING FASLOAD
TO NIL WILL SUPPRESS ALL SUCH ERROR MESSAGES. ONE CAN BE VERY PARANOID,
FOR EXAMPLE, AND SET IT TO (EXPR SUBR LSRUB FEXPR FSUBR ARRAY MACRO).
[A] THE PREDICATE FILEP RETURNS T IFF ITS ARGUMENT IS A FILE OBJECT.
IT WILL RETURN T EVEN IF IT IS A CLOSED FILE; TO DETECT AN OPEN
FILE, USE (AND (FILEP X) (STATUS FILEMODE X)).
[B] INFERIOR JOB OBJECTS NOW HAVE AN EXTRA SLOT J.CRUFT
WHICH IS GC-PROTECTED. SEE SYS:.FASL DEFS FOR THE
JOB OBJECT DEFINITIONS. BY CONVENTION, THIS NEW SLOT
IS USED TO HOLD A PROPERTY LIST FOR VARIOUS DATA ABOUT
THE JOB.
[C] BECAUSE OF AN ITS DEFICIENCY, THE NEW CODE THAT ALLOWS FILEPOS
TO WORK ON OUTPUT FILES AND SIOT TO BE USED FOR ALL ASCII I/O
DOESN'T WORK ON THE USR DEVICE (INFERIOR JOBS). THE BASIC
PROBLEM IS THAT SIOT DOESN'T WORK ON THE USR DEVICE IN ITS.
ONE CONSEQUENCE IS THAT LISPT WILL NOT WORK ON ITS 1051 AND ABOVE
(FOR WHICH THE NEW SIOT I/O CODE WILL BE PROVIDED IN LISP).
[&] THE FUNCTION LH| IS A HACK FOR THE BENEFIT OF THIRD-FLOOR
HACKERS. IT NORMALLY EXISTS ONLY IN THE ITS VERSION.
THIS FEATURE IS ONLY SEMI-OFFICIAL, AND I WON'T GUARANTEE
IT TO WORK FOR ANYONE BUT LH AND FRIENDS.
(LH| <SIZE> <SPACE>) ALLOCATES A CHUNK OF MEMORY <SIZE>
WORDS BIG OF DATA TYPE <SPACE>. (ACTUALLY, <SIZE> IS
ROUNDED UP TO BE AN INTEGRAL NUMBER OF PAGES.)
THE RETURNED VALUE IS A FIXNUM WHICH IS THE ADDRESS OF
THE FIRST WORD OF THE CHUNK OF MEMORY. IF ZERO IS RETURNED,
IT WAS NOT POSSIBLE TO OBTAIN THE MEMORY. (THIS SHOULD
BE FAMILIAR TO GETCOR HACKERS!) ONE SHOULD **NOT** USE
(DECLARE (FIXNUM (LH/|))); IT IS NOT A NUMBER FUNCTION
JUST BECAUSE IT RETURNS A FIXNUM! NOTICE THAT ONE MUST USE
A "/" TO GET THE "|" IN THE NAME OF THE FUNCTION.
THE CHUNK OF MEMORY WILL BE MADE TO HAVE THE DATA TYPE
INDICATED BY <SPACE>; ONE CAN ALLOCATE THE MEMORY AT WILL
AND CREATE POINTERS INTO IT. GC WILL MARK FROM ALL WORDS
IN THE SPACE IF <SPACE> IS LIST, BIGNUM, OR ANY KIND OF HUNK.
HOWEVER, THE DATA IN THE MEMORY ITSELF IS NOT MARKED OR SWEPT.
NO GUARANTEES ARE MADE IF <SPACE> IS "SYMBOL" OR "ARRAY";
ALL OTHER DATA TYPES SHOULD WORK, HOWEVER.
[;] FOR ANY .FASL CODE HACKERS WHO MAY CARE: THE BITS $FXP AND
$FLP IN SEGMENT TABLE ENRTIES HAVE DISAPPEARED. THE BIT
THAT USED TO BE $FXP IS NOW CALLED $PDLNM, AND $FLP IS NO
LONGER USED. PDL NUMBER SEGMENTS NOW HAVE FX+$PDLNM OR
FL+$PDLNM SET INSTEAD OF $FXP OR $FLP. (THIS IS TO ALLOW
INTRODUCTION OF OTHER NUMBER PDLS IN THE FUTURE IF DESIRED.)
THIS CHANGE IS UPWARD-COMPATIBLE FOR COMPILED CODE WHICH
OPEN-CODES TYPE TESTS; EVENTUALLY THE COMPILER WILL BE
CHANGED TO REFLECT THE NEW BITS.