Annotation of 42BSD/ucb/lisp/pearl/ChangeLog, revision 1.1.1.1

1.1       root        1:     Changes to PEARL since the User's Manual.
                      2: 
                      3: 6/26/83 -- Version 3.9: Misc. bug fixes -- distributed with 4.2.
                      4: -- Fixed a(n embarassingly) large number of bugs in the functions
                      5: relating to blocks and freezing and thawing variables.  User visible
                      6: changes are that freezeblock and thawblock are now fexprs expecting
                      7: the name of the block to be frozen.  Blocks without names cannot be
                      8: frozen or thawed individually.  A prominent bug was also found in
                      9: freezebindings which did not work correctly when the structure being
                     10: frozen had no non-frozen variables of its own.
                     11: 
                     12: 6/21/83
                     13: -- Changed the name of the "selectq" in ucisubset.l to "selectq*" to
                     14: avoid the new Franz function "selectq" which requires the default case
                     15: to be labeled with "t" or "otherwise".  Changed all PEARL code to use
                     16: the new Franz selectq.
                     17: 
                     18: 5/14/83 -- Version 3.8: Unification added.
                     19: -- Added unification pattern matching as an option, using code written
                     20: by Dave Chin.  To turn on unification, call the function "useunification".
                     21: There is currently no way to turn it off since the code as written
                     22: cannot handle old unification results if it doesn't think unification
                     23: is taking place (controlled by special variable *unifyunbounds*).
                     24: It is not as expensive as expected so this may be changed.
                     25: -- Also fixed serious bugs in "setv".
                     26: 
                     27: 5/12/83
                     28: -- Fixed bug in create which caused the mechanism of changing the type
                     29: of create being done in nested structures to fail.
                     30: 
                     31: 5/6/83
                     32: -- Fixed bug in printing of global adjunct variables.
                     33: 
                     34: 5/1/83
                     35: -- Fixed various major bugs in varreplace.
                     36: 
                     37: 4/26/83 -- Version 3.7: Two part compilation and minor bug fixes
                     38:            in scopy and hooks.
                     39: -- Created a way to do a "make" which compiles in two pieces for small
                     40: machines.  Simply define "make pearl" as either "big" or "small"
                     41: depending on memory size (Less than about 2.5 Mb of memory requires
                     42: "small").
                     43: -- Changed "scopy" and related functions so that the abbreviation on the
                     44: copy is just gensym'ed from the old abbreviation, without adding ":copy".
                     45: -- Fixed a bug in the hook functions which caused all slots after the ones
                     46: with hooks to execute the result (*done*, etc) of the first one.
                     47: 
                     48: 3/28/83 -- Version 3.6: Inherit all slot hooks and predicates and unbind
                     49:            incorrectly bound global variables after failed match.
                     50: --- Slot hooks are now always inherited and added to, rather than
                     51: replaced.  If the hooks and predicates of a slot are preceded by "instead"
                     52: then inheriting doesn't happen and hooks and predicates are replaced.
                     53: --- Fixed match so that if an unbound global variable is set during a match
                     54: that later fails, the value is restored to *pearlunbound*.  The names of
                     55: variables that are set are saved in the special variable *globalsavestack*.
                     56: 
                     57: 3/18/83 -- Version 3.5: New print functions.
                     58: --- Rewrote all the print functions.  Externally, the three old
                     59: pairs of functions: "valprint"/"valform", "fullprint"/"fullform",
                     60: and "abbrevprint"/"abbrevform" behave the same.  However, there is now
                     61: a function called "allform" which all of these use which adjusts its
                     62: treatment of a structure based on several special atoms:
                     63:     1. *abbrevprint* -- non-nil value causes abbreviations to be used
                     64: whenever possible.  "abbrevform" (and thus "abbrevprint") lambda-binds
                     65: this to t and calls "allform".  "fullform" binds this to nil.
                     66:     2. *fullprint* -- non-nil value causes complete information
                     67: including hooks and predicates to be given when present.  "fullform"
                     68: (and thus "fullprint") lambda-binds this to t and calls "allform".
                     69: "abbrevform" binds this to nil.
                     70:     3. *uniqueprint* -- described below.
                     71:     4. *quiet* -- described below.
                     72: "valform" lambda-binds both to nil which is their default values.
                     73: Thus, the default action of "allform" used by itself will be like "valform".
                     74: --- All the default print functions which used to use "valprint"
                     75: automatically now use "allprint" so that they can all be changed by
                     76: changes to the default values of *abbrevprint* and *fullprint*.
                     77: --- The third atom which affects the behavior of all the print functions
                     78: is *uniqueprint*.  If it is given a non-nil value then if a structure
                     79: is encountered more than once during the same top-level call to a
                     80: print function, it will be translated into exactly the same cons-cells.
                     81: This saves on cons-cells and also makes it possible for the "*form"
                     82: functions to handle circular structures, although "sprint" and thus
                     83: the "*print" functions can't handle the result.  Since most people
                     84: seldom have duplications within a structure, the default is OFF (nil).
                     85: The assoc list is stored in the special atom *uniqueprintlist*.
                     86: --- "form" and "print" functions were added to handle structures,
                     87: streams and symbols specially.  They are called
                     88: "structureform", "structureprint" "symbolform", "symbolprint",
                     89: "streamform" and "streamprint" and do not ensure that you give them
                     90: the right type of value.
                     91: --- The fourth atom which affects the behavior of all the print
                     92: functions is *quiet* which, if non-nil, keeps them from running
                     93: either sprint or the *form function.   This is helpful for when you
                     94: wish to turn off ALL printing in one fell swoop.  A function called
                     95: "quiet" was also added which behaves like progn, except that it
                     96: lambda-binds *quiet* to t during the evaluation of its arguments,
                     97: provided a local island of "quiet".
                     98: 
                     99: 3/8/83 -- Version 3.4: Type tags added.
                    100: --- Added a field to definitions, structures, symbols, and databases to
                    101: indicate what they were to speed up type checking.  All relevant
                    102: functions related to structures and databases were changed.
                    103: --- Fixed some bugs in releasedb.
                    104: --- Many lowlevel functions in PEARL were changed, but none in ways that would
                    105: affect most people (because they shouldn't be using the changed functions).
                    106: 
                    107: 3/4/83 -- Version 3.3: New faster hashing.
                    108: --- Changed internal code to do the hashing so that it only gets the value
                    109: out of a slot once instead of as many as 4 times as before.  Resulted
                    110: in about a 5% speedup for structures only hashed a couple of ways.
                    111: Should be more for multiply hashed items.  Should also make new
                    112: hashing methods easier to add.
                    113: 
                    114: 2/25/83 -- Version 3.2: Slot encoding applied to speeded-up match.
                    115: --- Rewrote match functions to use the new slot encoding.  Provided
                    116: about a 10% speedup.
                    117: --- There are now two different kinds of match function: "standardmatch"
                    118: and "basicmatch" will only match two structures of the same type.
                    119: "standardexpandedmatch" and "basicexpandedmatch" will match two
                    120: structures which are related hierarchically (one above the other)
                    121: on the slots they have in common.  "standardfetch" uses the regular
                    122: versions and "expandedfetch" uses the expanded versions.
                    123: 
                    124: 2/21/83
                    125: --- Changed all special variables in PEARL to be defined with defvar so
                    126: that fasl'ing in pearl.o at compile time will automatically declare them
                    127: special again.
                    128: 
                    129: 2/17/83 -- Version 3.1: Slot encoding for speed.
                    130: --- Added major and minor version numbers to PEARL, stored in
                    131: "pearlmajorversion" and "pearlminorversion" respectively.
                    132: Started at 3.1 for this version.
                    133: --- Added new method of storing in slots to speed up some things.
                    134: --- Putpath, delsetpath, addsetpath and clearpath now will work on a
                    135: slot with any kind of value or variable in it but result in a constant
                    136: value.  This may cause problems, and if it does it will be "fixed" to
                    137: worry about what was there and decide what to do to it.
                    138: --- Scopy no longer throws away bound adjunct variables.
                    139: --- Many functions listed in the manual as being "proprietary" to PEARL
                    140: (i.e., not safe to use) have gone away.  There are too many to list here.
                    141: 
                    142: 1/23/83
                    143: --- Fixed a bug which made slots inherit hashing when redescribed in an
                    144: expanded structure unless new hashing was specifically included.
                    145: --- Added a new "hashing mark" "+", for redescribed slots of expanded
                    146: structures only, which says copy the old info and add the following
                    147: new hashing too.  It must come first to be effective.
                    148:     Thus, the following should work:
                    149:        (cb x (* a int))
                    150:        (ce x y (a ^))
                    151:        (ce x z (+ : a ^))
                    152:        (ce x w (: + a ^)) ;; anomalous use of +
                    153: resulting in:
                    154:        * hashing in x,
                    155:        no hashing in y,
                    156:        both * and : hashing in z,
                    157:     and only * hashing in w (because of misplacement of +).
                    158: 
                    159: 1/19/83
                    160: --- Merged the file sprint.l into ucisubset.l.
                    161: 
                    162: 1/18/83
                    163: --- Miscellaneous changes to functions length and others in ucisubset.l
                    164: to improve efficiency.
                    165: 
                    166: 1/7/83
                    167: --- Changed ,@ to ., in most cases (i.e., whenever equivalent) to
                    168: avoid an unneeded append generated by the backquote macro.
                    169: 
                    170: 12/24/82
                    171: --- Made change in the definitions of de, df, dm, drm and dsm so that
                    172: if the special variable *savedefs* is nil then old definitions of functions
                    173: are not saved.  This is especially useful in compiling (and hence assembly
                    174: and loading) since it will speed it up quite a bit.  The saving of the file
                    175: the definition was in is also disabled.  The variable *savedefs* is
                    176: normally t which causes these macros to act as before, saving the
                    177: definition, etc.  If *savedefs* is nil, then they simply expand into the
                    178: appropriate defun or setsyntax.  The following lines should be
                    179: included in the file to have this effect only at compile time:
                    180:     (eval-when (compile)
                    181:               (declare (special *savedefs*))
                    182:               (setq *savedefs* nil))
                    183: If you want to permanently disable the saving in your lisp,
                    184: simply put a
                    185:     (setq *savedefs* nil)
                    186: in your .lisprc file AFTER the loading of ucisubset.l.
                    187: 
                    188: 11/12/82
                    189: --- Removed association of "remove" with Franz's "delete" so that
                    190: Franz's remove could be used and fixed all references to "remove" and
                    191: "dremove", changing many to "delq"s.
                    192: --- Deleted "powercopy" and redefinition of "copy" now that Franz has
                    193: correct meaning (doesn't attempt to copy hunks) for copy.
                    194: 
                    195: 10/30/82
                    196: --- All the exprs whose names were of the form XXXX1 where XXXX was the
                    197: name of a lexpr which was a principle function of PEARL were eliminated
                    198: (i.e., absorbed by the other form).
                    199: --- Many small changes to speed up PEARL, including:
                    200:     1. Changed many progs to lets.
                    201:     2. Inserted progn's around (or (non-error)
                    202:                                   (not (msg t .....))
                    203:                                   (pearlbreak))
                    204:     thus eliminating the not and clarifying the meaning.
                    205:     3. Changed many pops to (setq x (cdr x)) (where popped item not wanted).
                    206:     4. Changed plus, difference, times and remainder to +&, -&, * and \\.
                    207:     5. Changed greaterp and lessp to >& and <&.
                    208:     6. Changed minusp to (<& ..  0)
                    209:     7. Changed (neq 0 ..) to (not (=& 0 ..)).
                    210:     8. Eliminated the intermediate exprs insertdb1, fetch1, etc.
                    211:     by converting the basic functions insertdb, fetch to use the
                    212:     &optional syntax.
                    213: PRELIMINARY RESULTS:
                    214:     25-33% speedup of various test programs.
                    215: 
                    216: 10/20/82
                    217: --- Added abbreviation "pdb" for "printdb".
                    218: --- Changed usage of nth, push and pop to use Franz Opus 38.32's new
                    219: definitions of them, removing them from ucisubset.l.
                    220: 
                    221: 9/17/82
                    222: --- Changed scopy, patternize and varreplace to exprs from macros
                    223: so that they will compile without complaints of special variables.
                    224: 
                    225: 9/16/82
                    226: --- Added new hashing mechanism using label && and called "hash
                    227: focusing".  If this is found when inserting into the database
                    228: then the item is hashed as if it were the item in the slot so
                    229: labelled.  This is designed for people using a data base all of
                    230: whose entries are of the same type (not required, just common
                    231: for this application) and enables the contents of a slot to be
                    232: more usefully used to discriminate them (e.g., planfors, inference
                    233: rules, or almost any such extremely-common binary predicates.)
                    234: At fetching time, && is considered less useful than *** or ** and more
                    235: useful than * or nothing (subject to debate and change).  (This
                    236: necessitated the addition of an additional entry in the header of
                    237: structure definitions, moving everything else down a slot in the hunk.)
                    238: This differs from & (hash aliasing) in that && hash focussing affects
                    239: how a structure itself is inserted and fetched, while & simply
                    240: affects how structures containing this type of structure are
                    241: treated.  For example, suppose the unique numbers of A, B, and C
                    242: respectively are 1, 2, and 3.  C is a symbol.  A has one slot X with
                    243: * and && hashing.  B has one slot Y of type symbol with * hashing.
                    244: Then a structure like (A (X (B (Y C)))) will be indexed the
                    245: following ways and fetcheverywhere will find it in the following
                    246: order:
                    247:     && which uses the 2 and 3 from B and its C, (ignoring the 1 of A),
                    248:            and also simply 2 from B.
                    249:     * on A uses type of B thus using 1 and 2.
                    250:     also put under 1 of A without using 2 or 3.
                    251: If B had an & in its slot then the
                    252:     * on A is affected by & on B thus using 1 and 3 (ignoring the 2 of B).
                    253: 
                    254: Thus, if you consider A, B, and C to be three levels of information
                    255: in the structure, an item can be hashed under any combination of two
                    256: of those levels.  The normal * method uses levels 1 and 2, the
                    257: aliasing & method ignores level 2 and uses levels 1 and 3, and the
                    258: new focussing && method ignores level 1 and uses levels 2 and 3.
                    259: In addition, the item can be put under 1, 2 or 3 individually by
                    260: various combinations of marks (1 = none, 2 = :, 3 = :+&).  The only
                    261: unavailable combination of the 3 is all three.
                    262: 
                    263: (Added internal-use-only functions are insertbyfocus, removebyfocus,
                    264: puthashfocus, gethashfocus, recursetoinsidestandardfetch.
                    265: 
                    266: 9/15/82
                    267: --- Added two functions "memmatch" and "memstrequal" which are like
                    268: "memq" except that they use "match" and "strequal" respectively
                    269: instead of "eq".
                    270: --- Added fixes to "scopy" and "patternize" from Dave Chin which allow
                    271: them to handle circularly linked structures AND to use the same copy
                    272: of the same structure wherever it appears.  This required the addition
                    273: of a special variable *scopieditems*.  This also included a bug fix
                    274: which added code to store pointers to the new copies in the
                    275: abbreviation atoms stored in them.
                    276: --- Added a function called "varreplace" similar to "patternize" which
                    277: replaces all bound variables in an item with their values, in effect
                    278: permanently freezing them.
                    279: --- Added a function called "(intscopy item outeritem)" where intscopy
                    280: stands for "internal scopy" exactly the same as "(scopy item)" except
                    281: it does the copying as if the item were internal to outeritem, thus
                    282: sharing its local and block variables.
                    283: --- Split create.l into create.l and scopy.l.
                    284: 
                    285: 9/14/82
                    286: --- Moved much of the initialization stuff out of pearl-top-level-init
                    287: to be done at load time instead.  This cut the minimum startup cost
                    288: for PEARL from 4 seconds to 0.8 seconds CPU.
                    289: --- Changed setdbsize to remove all current databases before changing
                    290: the size, warn if *warn* is set and recreate *maindb* with *db*
                    291: pointing to it.  Also fixed a bug when removing the last database.
                    292: --- Changed the init-files processing to parallel the new Franz method,
                    293: looking in the current directory, and then the home directory, and
                    294: looking for .init.prl followed by .o, .l or nothing, and then init.prl
                    295: followed by .o, .l or nothing.  Similarly for start.prl.
                    296: --- Fixed cleardb so that it doesn't make new cons-cells for the buckets
                    297: and so that it uses connectdb if the database has a parent.  Thus,
                    298: cleardb is a local database clearer and its effects do not extend up
                    299: the DB hierarchy.
                    300: 
                    301: 6/6/82
                    302: Added new hashing method.  If slots are labelled with *** and all
                    303: slots so marked are filled with useful values, then the item is hashed
                    304: under the type of structure plus the values of all these slots.
                    305: New functions are gethashmulti and puthashmulti.  *multiproducts* is a
                    306: new special atom containing the numbers to multiply the various values
                    307: with to produce the index (currently powers of 16).
                    308: 
                    309: 6/3/82
                    310: Fixed a bug in fetcheverywhere which caused it to only find the
                    311: bucket for the first *-ed slot, instead of all of them.  (Added
                    312: to npearl also).
                    313: 
                    314: 5/28/82
                    315: Tried replacing the sequential search method of finding slot numbers
                    316: for particular slot names with evaluating a concat'ed atom made out
                    317: of <typename ":" slotname> but timings found it slower so it was
                    318: removed.
                    319: 
                    320: 5/27/82
                    321: Fixed a problem with storage of variables.  Instead of two spots in
                    322: the hunk, one for the alist (unfrozen variables) and one for the
                    323: alistcp (frozen variables), there is a special cons cell with these
                    324: in its car and cdr.  This cons cell is pointed to by all substructures
                    325: so that they can be used in fetches and matches and will be able to
                    326: unbind or freeze or thaw their variables.  Additional special variable
                    327: is *toplevelalists* (or some such).
                    328: 
                    329: 5/6/82
                    330: --- When an individual (including default instance) structure is created,
                    331: an abbreviation atom is stored in it.  This abbreviation is chosen as
                    332: follows:
                    333:     1.  If the option of having a structure stored in an atom is used,
                    334:     then that atom is the one used as an abbreviation.  Thus
                    335:        (create individual x Pete)
                    336:     will have Pete as a abbreviation.
                    337:     2.  If that option isn't used, then default instances will be
                    338:     given the abbreviation i:x (where x is the structure type name)
                    339:     and individuals at the top level will be given a name newsym-ed
                    340:     from the name of their type.  Thus
                    341:        (create base x)  will make a default instance abbreviated i:x and
                    342:        (create individual x) will be abbreviated x0 or x1 or whatever.
                    343: --- New printing and "form-type" functions were added called "abbrevprint"
                    344: and "abbrevform" which print the abbreviation (if there is one) for
                    345: any structure below the top level.
                    346: --- The base name of the type of a slot (i.e., the last word, after
                    347: setof's are stripped off) is stored for each slot (a more general
                    348: application of the "ppset" information always stored for integer slots
                    349: with ordinal types before).  This is in preparation for two things:
                    350:     1. Enforcing such type descriptions.
                    351:     2. Generating knowledge about the slots of a structure so that the
                    352:     user need not know whether to use fetch or path.
                    353: 
                    354: 5/5/82
                    355: The name of an old slot in a new expanded may be changed by following
                    356: the new name by the old slotname preceded with an equal sign.  Thus
                    357: for example:
                    358: pearl> (create base X
                    359:               (A struct))
                    360: (X (A (nilstruct)))
                    361: pearl> (create expanded X Y
                    362:               (B =A)
                    363:               (C .....))
                    364: (Y (B (nilstruct)) (C .....)))
                    365: 
                    366: NOTE that there MAY NOT be a space between the equal sign and the A
                    367: since = is the read macro which expands =A into (*slot* A) but leaves
                    368: a single space-surrounded = alone.
                    369: 
                    370: 4/28/82
                    371: --- Adapted PEARL to fit Franz Opus 38.13 so that the atoms
                    372: showstack-printer and trace-printer are bound to the functions
                    373: pearlshowstackprintfn and pearltraceprintfn. (Note the addition of
                    374: "pearl" to the beginning of these).  Also changed the name of
                    375: breakprintfn to pearlbreakprintfn but it is not currently
                    376: lambda-bindable.
                    377: --- Adapted the reading of .init.prl and .start.prl files to disable
                    378: the printing of "[load .init.prl]" by lambda-binding $ldprint to nil
                    379: first (Franz Opus 38.14).
                    380: 
                    381: 2/22/82
                    382: --- Fixed a bug in the hook disablers.   The atoms for path hooks
                    383: were misnamed in such a way that you couldn't use hidden and
                    384: visible.   Instead of *rungethooks*, and other *run...hooks*
                    385: forms, they are now *rungetpathhooks* and other *run...pathhooks*.
                    386: Note that they must be called as (XXXpath ...) and not (path XXX ...)
                    387: when used with hidden and visible.
                    388: 
                    389: 2/21/82
                    390: --- Added ability to evaluate an atom when expecting a value of a
                    391: different type (besides integers which already worked this way).
                    392: For symbols, this is done if the atom isn't a symbol name.
                    393: For structures, it must evaluate to a structure.
                    394: For Lisp slots, it may not evaluate to an atom.
                    395: For setof slots, its value is checked for being of the appropriate
                    396: type, including depth of nesting.
                    397: --- Added the fetching function "fetcheverywhere" which gathers
                    398: ALL the buckets the object could have been hashed into and builds
                    399: a stream out of all of them (potentially five buckets).  Will wait
                    400: to build an "expandedfetcheverywhere" with its potential of
                    401: returning 5 times the-depth-of-the-hierarchy buckets.
                    402: 
                    403: vi: set lisp:

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.