SLiMiシステムのリリースノート

#AI

SLiMiシステムのバージョン286のリリースノートです。

変更点は、ガベージコレクションの改善、新しいメニュー項目の追加、Common Lispのサポートなどです。

1982年に発表されたコンピュータシステム『System 286』のリリースノートが、最近ネット上に流出しました。このノートは、当時の技術者たちが開発したソフトウェアの変更点や新機能を記載した文書で、ユーモアと技術的詳細が混在しています。

不完全な著作権情報と技術的ユーモア

このリリースノートは、MITの著作権情報が不完全なまま削除された記録を含んでいます。1982年2月31日(存在しない日付)にHyperbolics社の社員によって削除されたと記載されており、これは明らかに冗談です。また、システム286の使用は法的処罰を伴うと警告しており、技術的な冗談としての意図が感じられます。

リリースノートの構成と内容

リリースノートは5つのセクションに分かれています。最初のセクションは、プログラムを破壊する可能性のある不相容な変更点を説明しています。次に、高度なユーザーにしか影響しない変更点、向上互換性のある新機能、一般的な質問への回答、バグ情報などが記載されています。

技術的な冗談とユーモアの要素

このノートには、技術的な冗談が散りばめられています。例えば、再帰処理は古くなり、LOOPを使用するよう警告しているなど、プログラミング言語の進化を反映したユーモアが含まれています。また、バグ情報のセクションでは、テキストフォーマッターの不具合によりセクションが消失していると記載されており、技術的な冗談としての意図が感じられます。

まとめ

このリリースノートは、1980年代の技術者たちが作成したユーモアと技術的詳細が融合した文書で、現代のプログラマにも笑いと学びを提供しています。

原文の冒頭を表示(英語・3段落のみ)

This passed through my mailbox recently. Probably some of you will findit amusing as well. It's allegedly a decade old now... -- Jamie-*- 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 orMCR286 (used by systems 231-285) will result in prosecution.)*** An invalid MIT copyright notice on OZ:SRC:<L.DOC>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.INTRODUCTIONThese notes accompany the Symbolic Lisp Machines Inc. (SLiMi) software releasethat includes System version 286 (TM). They cover all important changes sincethe System 279 (TM) release notes, except those you get to find out about foryourself and those which you never find out about.This document is in the following files:EE:LIB:<LISPM.DOCUMENTATION>SYSTEM-286.RELEASEAI: LMDOC; SYS286 MSGOZ: SRC: <L.DOC>SYS286.MSGSCRC:<DOC>MIT-RELEASE-286.TEXT[US-PATENT&COPYWRONG-OFFICE]<COPYWRONG>286-RELEASE.TXTThere have been no particularly major changes in system 286 (TM). There arethe usual slew of minor bug fixes, some slight performance improvements, someminor 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. Regrettably, 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] Documentation 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. Note: The compiler does not understand recursion. Use the interpreter.[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. NOTE: The interpreter does not understand recursion. Use the compiler.[5] Numbers 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 six 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. What it returns we don't know. Please don't tell us that it sometimes returns a form that causes the scavenger to crash the machine. We know about this (even if we aren't doing anything about it).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 cause 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 SYS:LOOP-BUG "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. Don't use this on color screens, or the users might accidently consciously see the messages.[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. We won't tell you what RPLACA anb RPLACD return. 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:TV-ON 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 TV:SIX-HURTS 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)) #<Won big: OK! 12323212> [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:MOLASSES-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 really have to be used, as every time you use a new password, the next patch file is 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 and cause havoc on your machine. If there is no data on the next packet you recieve on the EVIL connection, a 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 randomly do a warm boot or cold boot, and a bignum will 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 number that you were sent, and start EVIL serving the person who got you. Note that you can also set EVIL:*NUMBER-OF-DIRTY-MESSAGES* to a number of insults to be returned in your SLOW-ANSWER-STRING. The evil server is implemented using .daemon. flavors.[15] Package DWIM improved. So that error handling caused 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 pr

※ 著作権に配慮し、引用は冒頭3段落までです。続きは元記事をご覧ください。

元記事を読む ↗