.c -*- Hey, ZISNAGAZ (ZISNAGAZ Is Not As Good As Zwei), this is bogus Text -*- RELEASE NOTES FOR SYSTEM 286 (TM) (c) 1982 Slimebolics Machines Inc. Enhancements (c) 1982 Metaphorics, Inc. Enhancements (c) 1982 Digicomputronomatics, a Division of Flexopneumohydroservosystematization and Control [better known by its acronym, Flexopneumohydroservosystematization and C] Enhancements (c) 1982 Hyperbolics, Inc. (The number 286 is a trademark of Hyperbolics, Inc. Usage of System 286 or MCR286 (used by systems 231-285) will result in prosecution.) *** An invalid MIT copyright notice on OZ:SRC:SYS286.MSG removed on *** 2/31/82 by Hyperbolics personnel. This file had been installed as the *** official SLiMi source in direct contravention to instructions to *** Digicomputronomatics personnel acting on Metaphorics' behalf. INTRODUCTION These notes accompany the Symbolic Lisp Machines Inc. (SLiMi) software release that includes System version 286 (TM). They cover all important changes since the System 279 (TM) release notes, except those you get to find out about for yourself. This document is in the following files: EE:LIB:SYSTEM-286.RELEASE AI: LMDOC; SYS286 MSG OZ: SRC: SYS286.MSG SCRC:MIT-RELEASE-286.TEXT There have been no particularly major changes in system 286 (TM). There are the usual slew of minor bug fixes, some slight performance improvements, some minor new features, and a pile of new bugs. Hoo Boy! This set of release notes is very, very long. To help make it more manageable, these release notes are divided into five sections: o Changes to take note of. Everybody should read, or at least skim, this section. It tells about incompatible changes that might break programs, or that might confuse you. Don't worry, most of them confuse us too. o Changes that only affect advanced users. The changes in this section might break programs written by advanced users, but are very unlikely to affect normal or casual users of the system. You only have to worry about things in this section if you work with advanced subsystems and use advanced features. Regretably, we have yet to locate a normal user of our systems. You'll all have to slog through this garbage eventually. Get it over with now. o Upward-compatible changes. This section documents new features. You can skip this entirely if you don't feel like reading a lot of stuff. However, there are several interesting new features that you might like to know about, and we encourage you to take advantage of them. The mandatory Pascal syntax required in this release is a good example. Maintainers of non-SLiMi systems will want to look here to see what code to copy. o Notes. This section isn't about changes at all. It answers some commonly asked questions and provides various news. Of course, you can skip this entirely if you like, but we haven't got anywhere else to advertise. We'll know if you skip it, though. Wait till you want help. o Bugs. This section really doesn't tell you much, except for which functions the documention had been deleted as the functions don't work. You also can safely skip this section, especially if you don't care why your machine just crashed. A bug in our text formatter (Scribble, not for non-personnel) has caused this section to disappear. SUMMARY OF CHANGES. Changes to take note of. [1] The garbage collector now works. [2] Recursion is now obsolete and will generate compiler warnings. Use LOOP. [3] Common lisp installed. [4] LOOP is now obsolete and will generate compiler warnings. Use recursion. [5] Docuemtation for all numbers. Changes that only affect advanced users. [1] In Zwei, M-X Visit Other Window in Other Microcode works again. [2] Change to implementation of WITHOUT-INTERRUPTS and UNWIND-PROTECT. [3] SK combinators are now the primitive programming elements. [4] Bug in HALTSP fixed. Upward-compatible changes. [1] ZMail has new menu item "IGNORE". [2] LOOP has been extended. [3] Advertising. [4] CAR and CDR now return extra values. [5] The TV:WIN-BIG special form. [6] m-X View Function Through Rose Colored Glasses. [7] New file system editor. [8] RMail installed. [9] Password server. [10] JCL support as alternative to system menu. [11] A new system, the CIRCULATORY system, has been added. [12] Compiler optimization. [13] NIL ;;we're superstitious [14] New server: EVIL server. [15] Package DWIM improved. [16] New special form: WITHOUT-NES [17] New function: TV:DWIMIFY [18] Memory storage and allocation improved. [19] Personality awareness. [20] New ZWEI commands. Notes. [1] New mice. [2] Helpful hints in using CPT monitors. [3] Confusion concerning MAPCAR cleared up. [4] New machine to be relased soon. [5] New address for bug reports. CHANGES TO TAKE NOTE OF. [1] The garbage collector now works. In addition a new, experimental garbage collection algorithm has been installed. With SI:%%DSK-GC-QLX-BITS set to 17. [the default] the old garbage collection algorithm remains in force: when virtual storage is filled, the machine cold boots itself. With SI:%%DSK-GC-QLX-BITS set to 23. the new garbage collector is enabled. Unlike most current garbage collectors, the new gc starts its mark phase from the mind of the user, rather than from the obarray. This allows the garbage collection of significantly more Qs. As the garbage collector runs, it may ask you something like ``Do you remember what SI:RDTBL-TRANS does?'' and if you can't give a reasonable answer in thirty seconds, the symbol becomes a candidate for GCing. The variable SI:%%GC-QLX-LUSER-TM governs how long the GC waits before timing out the user. The variable SI:%%GC-QLX-LUSER-STREAM-IS-BACKGROUND if T will only allow the user to answer GC related questions while to background window NEVER-GIVE-THE-USER-A-BREAK-IN-ANSWERING-GC-RELATED-QUESTIONS-1 is exposed. This window is created as a background window with as deexposed typeout action of permit and an exposed typein action of Other: &ignore. [2] Recursion is now obsolete. Use LOOP. Direct use of recursion will be temporarily supported giving only a style warning from the compiler. See the new RECURSIVELY keyword to LOOP. [3] Common lisp installed. The semantics of most functions have changed to conform to Common Lisp. Many argument orders have been reversed. Truth and falsity have reverted to the Lisp 1.5 definitions: T is bound to *T* and F is bound to NIL. However, code which refers only to primitives in the set {1+, CAR, CDR, COND, CONS, DEFUN, LAMBDA, SETQ, ZEROP} should continue to function normally. Note: (NOT T) generates an error. Numbers are now also EQ so = is now obsolete and will not work. Also, you should replace (>= A B) with (OR (> A B) (EQ A B)) and the same goes for <=. [4] LOOP is now obsolete. Use recursion. Direct use of LOOP will be temporarily supported giving only a style warning from the compiler. Recode your LOOP code using recursion, making sure you have a terminating clause in the definition. [5] Number are documented. As part of our policy of keeping things well documented, all numbers in the system must be documented. Creation of a number without any documentation will result in an error. Use of the DESCRIBE function on a number will print out its documentation. Note that numbers are EQ now, so don't try to use one number for more than one purpose. (That's why there's an infinite number of them.) (Well, almost, as we only have a sex bit machine.) CHANGES THAT ONLY AFFECT ADVANCED USERS. [1] In Zwei, m-X Visit Other Window in Other Microcode works again. As you will recall, this oft-broken feature is a conceptual extension of c-X O, allowing system designers to visit their competitors' systems in a second Zwei window. This way, they can test that their new features will run only in microcodes compatible with their political beliefs without even rebooting their machines. [2] Change to implementation of WITHOUT-INTERRUPTS and UNWIND-PROTECT. In an attempt to reduce the number of control special forms in the language, WITHOUT-INTERRUPTS and UNWIND-PROTECT are now just ordinary functions, no longer special forms. Their calling conventions, however, remain unchanged. [3] SK combinators are now the primitive programming elements. (SKK(KSKKS(SKS)(KKS(KKKSKSSSK))(KKS)(SSSKSK((KKS)((SKSS))))))! They go best with dotted pairs such as ((SKK.(KS.S).(KSKSS)).(S.K)) [4] Bug in HALTSP fixed. The bug which caused HALTSP to get hung in a tight microcode loop when given certain pathological arguments (such as its own FEF) has been fixed. This function now always returns. UPWARD-COMPATIBLE CHANGES. [1] ZMail has new menu item "IGNORE". Mousing this item with a left click will reply to the current message with one of several cleverly worded messages chosen at random from the list held by the variable ZWEI:*GLIB-REPLIES*. This list defaultly includes messages like "Fixed in the new error system.", "Fixed in the new activity system.", and "Fixed in the new system system." Other messages include "This is a Twenex bug.", "This is a Multics bug.", and the quite useful "Loser, that's a feature. Next time mail to the right list: FEATURE-LISPM." With a middle click, different tactics are tried. A fake message from COMSAT or XMAILR is formatted to say that the message was undeliverable due to microwave bridge sabotage. A right click will just caused the message to be ignored. [2] LOOP has been extended. The new RECURSIVELY keyword handles cases that would seem to require recursion. This is simplest to explain with an example. Where formerly you had to write: (DEFUN EQUAL (X Y) (IF (OR (NLISTP X) (NLISTP Y)) (EQ X Y) (AND (EQUAL (CAR X) (CAR Y)) (EQUAL (CDR X) (CDR Y))))) you can now write simply: (DEFUN EQUAL (X Y) (LOOP RECURSIVELY INTO X AND Y DESCENDING-UNTIL (OR (NLISTP X) (NLISTP Y)) FAILING-IF (NEQ X Y) PREMATURELY NIL FINALLY T BELATEDLY (FERROR NIL "Bug in LOOP! Please report this to JONL."))) [3] Advertising. The function SI:BITBLT-SUBLIMINALLY is now released to users. You've probably seen it used many times without realizing it. It's the function that the system uses at random intervals to display the message "Converse isn't all THAT bad" on the screen in our official corporate font for 50msec. You're probably wondering how we can do anything on the screen in 50msec, but take our word for it that it works. We hardly get any more bug reports on Converse and we haven't fixed any bugs in it for months. Note: this function will cause your machine to crash if you use it to say anything bad about our company or its code. [4] CAR and CDR now return extra values. The function CAR now returns two values. Since it has to go to the trouble to figure out if the object is carcdr-able anyway, we figured you might as well get both halves at once. For example, the following code shows how to destructure a cons (SOME-CONS) into its two slots (THE-CAR and THE-CDR): (MULTIPLE-VALUE-BIND (THE-CAR THE-CDR) (CAR SOME-CONS) ...) For symmetry with CAR, CDR returns a second value which is the CAR of the object. In a related change, the functions MAKE-ARRAY and CONS have been fixed so they don't allocate any storage except on the stack. This should hopefully help people who don't like using the garbage collector because it cold boots the machine so often. [5] The TV:WIN-BIG special form is useful for writing window system code. The TV:WIN-BIG special form is a macro whose function is to ensure that all "window system" code executed inside of it will work correctly. This special form combines all the features of these now obsolete window system functions: TV:WITH-BLINKER-READY TV:SHEET-FORCE-ACCESS TV:WITH-DEADLY-FORCE-AND-LICENCE-TO-KILL TV:DELAYING-SCREEN-MANAGMENT TV:DELAYING-YOUR-PAYCHECK TV:WITH-MOUSE-GRABBED TV:WITH-MOUSE-YU-SHIANG-STYLE TV:OPEN-BLINKER TV:CLOSE-THE-DOOR TV:OPEN-DOOR-AT-COMPETIORS TV:MOUSE-BLINKER-FAST-TRACKING-MIXIN TV:FAST-NEW-CAR-FOR-CHRISTMAS-MIXIN TV:STEVES-MIXIN TV:SWITCH-FROM-VHF-TO-UHF TV:SCREEN-UNPROTECT An example of the TV:WIN-BIG special form follows: Where previously it took pages of code to arrange things so that you could use the mouse to draw a box on the screen, now all that is needed is: (TV:WIN-BIG (DRAW A BOX ON THE TV:SCREEN USING THE FURRY:MOUSE)) OK! [6] The Zwei command m-X View Function Through Rose Colored Glasses has been installed. It is also available on h-c-V. This command (invaluable when reading SLiMi system source code) reads and analyzes the function that the point is in and recodes it, removing crocks, hacks, obscurities, and SETQs in COND branches. On machines with color screens, the recoded definition is also displayed on the color screen in shocking pink. With a c-U argument, h-c-V will replace the version in the buffer with the recoded version. m-X View Function Through Rose Colored Glasses has aesthetic parameters you can set to suit your own coding style. ZWEI:*ACCEPTABLE-LOOPING-CONSTRUCTS*, initially set to (LOOP), is a list of the special forms the command will use in coding loops. ZWEI:*ALLOW-SETQS-IN-COND-BRANCHES* is for diehard losers. ZWEI:*REQUIRE-SETQS-IN-COND-BRANCHES* is for our maintenance personnel, the number of whom is now a bignum. ZWEI:%%PROG-DENSITY-THRESHOLD is the minimum percentage of PROG's allowed as a percentage of all lines of code. DO NOT USE A NUMBER LESS THAN 40. [7] New file system editor. A meta-level up from Dired, the new File System Editor gives you the same control of file systems on your machine that Dired used to give you of files. So if your disk seems overly cluttered with file systems, you can just type c-X s-D and you'll be put in a window where you can remove the file systems you don't want with a single keystroke. [8] RMail windows installed. Like ZMail windows, but tolerably fast. Built out of essentially the same flavors but omitting TV:MOLLASSES-MIXIN. [9] Password server. If you fail three times to remember your password when asked for it, all other lisp machine users will be queried to see if they can remember. This is built on CHAOS:NOTIFY-ALL-LMS. This shouldn't be really have to be used, as everytime you use a new password, the next patch file updated to store your password. That's why it takes so long to read in all of the patch-directories. (For your protection, only your encrypted password is saved.) [10] JCL support as alternative to system menu. In our continuing effort to support languages other than Lisp on the CADDR, we have developed an OS/360-compatible JCL. This can be used as a alternative to the standard system menu. Type System J to get to a JCL interactive read-execute-diagnose loop window. [Note that for 360 compatibility, all input lines are truncated to 80 characters.] This window also maintains a mouse-sensitive display of critical job parameters such as dataset allocation, core allocation, channels, etc. When a JCL syntax error is detected or your job ABENDs, the window-oriented JCL debugger is entered. The JCL debugger displays appropriate OS/360 error messages (such as IEC703, ``disk error'') and allows you to dequeue your job. [11] A new system, the CIRCULATORY system, has been added. The long-experimental CIRCULATORY system has been released to users. The Lisp Machine uses Type B fluid, the L machine uses Type A fluid. When the switch to Common Lisp occurs both machines will, of course, be Type O. Please check fluid level by using the DIP stick which is located in the back of VMI monitors. Unchecked low fluid levels can cause poor paging performance. [12] Speed up in efficiency for LET. Compiler optimizations have been made to macro expand LET into a WITHOUT-INTERRUPTS special form so that it can PUSH things into a stack in the LET-OPTIMIZATION area, SETQ the variables and then POP them back when its done. Don't worry about this unless you use multiprocessing. Note that LET *could* have been defined by: (LET ((LET '`(LET ((LET ',LET)) ,LET))) `(LET ((LET ',LET)) ,LET)) This is believed to speed up execution by as much as a factor of 1.01 or 3.50 depending on whether you believe our friendly marketing representatives. This code was written by a new programmer here (we snatched him away from Itty Bitti Machines where we was writting COUGHBOL code) so to give him confidence we trusted his vows of "it works pretty well" and installed it. ;;an unlucky number was omitted. (the code didn't work) [14] New server: EVIL server. A new server, the EVIL server, has been installed for your pleasure. Now anyone can connect to your machine cause havoc on your machine. If there is no data on the next packet you recieve on the EVIL connection, as random function is called. If you are given a negative number, you automatically open an EVIL connection on their machine, and send them as their data, the absolute value of that number. A small fixnum will cause one of your Chaos connections to be closed. A large fixnum will cause one of your ZWEI buffers to be killed. A small flonum will cause a random message to be sent to all objects in your world. A large flonum will do randomly do a warm boot or cold boot, and a bignum will start cause you to start EVIL serving all machines at your site, and then crash your machine. As usual, most of the user settable variables relavent are undocumented, but we will tell you that you can set EVIL:ESCALATION-FUNCTION to some expression to escalate the numbethat you were sent, and start EVIL serving the person who got you. Note that you can also set EVIL:*NUMBER-OF-DIRTY-MESSAGES* to an number of insults to be returned in your SLOW-ANSWER-STRING. The evil server is implimented using .daemon. flavors. [15] Package DWIM improved. So that error handling caused by by typing the name of a function will be faster, all functions, variables and symbols which are unique are now globalized. Note that PKG-GOTO is obsolete. PKG-GOSUB is still maintained for downward compatability. [16] New special form: WITHOUT-NES So that error handling will be faster, just wrap a WITHOUT-NES form around the body. Afterwards, you will be able to quickly get MUCKLISP style error messags like ;Bpt: i/o lossage. This form is already wrapped around LISP-TOPLEVEL99 for you. Just remember to set the variable *ALLOW-ERROR-IN-ERROR-HANDLER* to T to avoid infinite loops. [17] New function: TV:DWIMIFY Pops up a menu window, and runs an AI program to do what you mean instead of what you click. Great when your mouse is flakey. [18] Memory storage and allocation improved. There is a new special form: WITHOUT-CONSING. This special form will ensure that now consing is done evaluating its body. This is used by the garbage collector to make sure you don't create more garbage than you free up. Also, if your idle time exceeds *IDLE-TIME-BEFORE-GC* 60ths of second, a full gc is ddone for you. Just don't do a HACKS:PIZZA and take too long eating it. [19] Personality awareness. Set the variable *LOSERS* to all the people that you think are losers. This will cause all the variable *PEOPLE-WHO-THINK-I-AM-A-LOSER* to be updated in all of your loser's init file. Now you can run a program on another machine which if there are no free lisp machines, will free up one just for you, by cold booting it. [20] New ZWEI command. SUPER-HYPER-META-CONTROL-SHIFT-GREEK-X Correct Grammar will correct grammer of buffer the. SUPER-HYPER-META-CONTROL-SHIFT-GREEK-X Correct Programming Bugs will correct bugs in your programming, provided you have Set Default programming language. SUPER-HYPER-META-CONTROL-SHIFT-GREEK-X Translate Into Language will prompt you for a two new langauges: the first is the langauge to translate the program into, the second is the langauge to translate the comments into. Known langauges are found in the variable *LINGUA-KNOWLECHEN* (from the Latin and the French). If you set this variable to include a language it really doesn't know, it will try hard to find the language on the File-computer (not yet supported in the default file system). NOTES. [1] New mice. Remember those white mice that were fed 20 liters of strong coffee a day? New mice in our official corporate colors will arrive soon. Remember, our mice are much better than our competitor's rats. [2] Helpful hints in using CPT monitors A new font is available for users of CPT monitors. FIX200 allows a full 5 x 8 character area of your file to be visible simultaneously, despite the slight imperfections in the newer CPT monitors [users of older CPT monitors will have to wait for the upcoming release of FIX400]. A crash development effort to develop horizontal scrolling in the editor is underway. Howard is away on vacation, however, and no one else can fathom the window system code. Our crack hardware team has announced the availability of retrofit kits consisting of microscopes with image intensifiers, and a case of dramamine tablets. Marketing can't decide the price for this, however, so you'll just have to wait. [3] There has been some confusion concerning MAPCAR. (DEFUN MAPCAR (&FUNCTIONAL FCN &EVAL &REST LISTS) ;(c) SLiMi, 1982 (PROG (V P LP) (SETQ P (LOCF V)) L (SETQ LP LISTS) (%START-FUNCTION-CALL FCN T (LENGTH LISTS) NIL) L1 (OR LP (GO L2)) (AND (NULL (CAR LP)) (RETURN V)) (%PUSH (CAAR LP)) (RPLACA LP (CDAR LP)) (SETQ LP (CDR LP)) (GO L1) L2 (%FINISH-FUNCTION-CALL FCN T (LENGTH LISTS) NIL) (SETQ LP (%POP)) (RPLACD P (SETQ P (NCONS LP))) (GO L))) We hope this clears up the many questions we've had about it. [4] New address for bug reports. Bug reports now amount to an average of 12,853 per day. Unfortunately, this is only a small fraction [ < 1% ] of the mail volume sent to BUG-SLiMi. In order that we may more expeditiously deal with these valuable messages, please communicate them by one of the following paths: ARPANET sites: "Wastebasket@SLiMiHQ"@AI Note: AI is not expected to run TCP/IP so mail will not get through after January 1. So much the better. UUCP sites: ucb70!progn!a!caddr!cddadr!fubar!go!a!slimivixen!slimivaxen!slimihq!wastebasket Non-network sites: Federal Express to: Wastebasket Room NE43-926 Copernicus, The Moon, 12345-6789 Dialnet number 1-900-555-1212 Our trained operators are on call 24-hours a day. That toll-free number again is 1-900-555-1212. Try some today. Visa and Mastercharge accepted. * * Our very rich lawyers assure us that we are not responsible for any errors in advice given over the phone.