1
0
mirror of synced 2026-01-14 15:55:51 +00:00
Interlisp.medley/docs/internal/1982BUGS.TEDIT

2 lines
37 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

problem type: Performance
Subject: Want faster GETPROP
subsystem: microcode
GETPROP could be open coded faster. It is time-critical for a number of user functions. GETPROP would be faster if PUTPROP put new properties on the front of symbols PList instead of the back.
---------------------
subsystem: microcode
TYPENAME is too slow, and is used by TYPENAMEP. Want primitive in microcode which is JNTYPENAMEP [alpha, beta, offset], like DTEST except jumps instead of traps if type doesn't match.
---------------------
subsystem: compiler
Some of the initial constants and global variables can now be expanded inline for faster execution. Do stats on system, and look at GLOBALVAR references of functions which show up in profile.
******************
Date: 12 Feb. 1982 8:53 am PST (Friday)
From: Moran.PA
Subject: CLOSEF problem
CLOSEF doesn't seem to work on the Dolphin in functions that work perfectly
well on Maxc. My style is the following:
(LAMBDA (F)...(OUTFILE F)...(PRINTOUT NIL...)...(CLOSEF F)...)
When it gets to CLOSEF, it says that file val-of-F is not open. However, calling CLOSEALL in the break does close file val-of-F, which really was open and which did indeed get all the printout intended.
Tom
------------------------------------------------------------
Date: 1 March 1982 7:20 pm PST (Monday)
From: Bobrow.PA
The compiler seems to me to be much too verbose. Cannot there be a flag so that
it only says things when either a) there is a free variable b) an undefined function called
Currently I scan my dribble file for these, which are most useful. But so little wheat and so much chaff.
***************
Date: 19 March 1982 9:59 am PST (Friday)
From: VanLehn.PA
Subject: HELPFLG bug
To: Lispbug^.pa
cc: VanLehn
Reply-To: VanLehn
LISPX seems to be rebinding HELPFLG so that SETQ's at top level have no effect. I can't force errors to break by setting it to BREAK!, which makes debugging under errorsets damn near impossible.
Kurt
*****************
Date: 19 Mar 1982 1006-PST
From: Neil Goldman <GOLDMAN at USC-ISIF>
Subject: CONSTANT
To: MASINTER at PARC-MAXC
In the macro for CONSTANT, I propose that the evaluation of the form be done under ERRORSET protection, with an error causing the thing to be treated as a DEFERREDCONSTANT, just as is done when the value fails to pass the CONSTANTOK test.
neil
********************
Subject: SEPRCASE/GETBRK bug
To: LispCore^
If a character X is defined as a macro in readtable Y, then (SYNTAXP X 'BREAK Y) is NIL, but X is not in (GETBRK Y). I don't know whether this is a bug or
a feature, but in any case it means that SEPRCASE treats such a char as an alphabetic, and FINDCALLERS and friends will miss when the target atom is preceded by the macro character.
*******************
Date: 8 Apr 1982 1932-PST
Subject: SPECVARS and the compiler.
From: RBATES at USC-ISIB
The manual on page 18.21 states "Whenever bcompl or brecompile encounter a block declaration they rebind retfns, specvars ... to their top level value". This is NOT true as far as SPECVARS are concerned. The reason is the function LOCALVARS in COMP seeing that LOCALVARS are T sets SPECVARS to SYSSPECVARS without checking what the current value of SPECVARS is. This bug has been around since Sept 1976! These two functions with the coms show off the bug:
(FOO (LAMBDA NIL (PROG (X) (FUM]
(FUM (LAMBDA NIL (NILL X)]
(SETQ BUGCOMS '((FNS FOO FUM)
(SPECVARS X)
(BLOCK (FOOBLOCK FOO FUM (ENTRIES FOO]
/Ray
*************
Date: 19 Apr 1982 0956-PST
Subject: DECLARE:
From: RBATES at USC-ISIB
I noticed that DECLARE: don't get compiled away (the function DECLARE: always get called), but DECLARE does get compiled away. This problem has been around awhile. Also that the example on the end of page 23.16:
(FOR X IN Y (DECLARE: (LOCALVARS X)) -- )
doesn't work.
/Ray
********************
Date: 19 MAY 1982 1535-PDT
From: KAPLAN
Subject: \TAKEINTERRUPT skeleton on AINTERRUPT
I defined a skeleton for the \TAKEINTERRUPT macro on AINTERRUPT.
It has dummy calls to 2 primitives, one for checking whether \INTERRUPTABLE
is T everywhere above its lowest binding (which is predictably NIL by the
client of \TAKEINTERRUPT). I can simulate this with a stack
search using a constant stack pointer, but this probably
should be done at a lower level.
The other is a function for calling INTERRUPTED (I called it
\CALLINTERRUPT). I don't think this can be the same as \CAUSEINTERRUPT.
Maybe it is sufficient simply to branch to the keyboard context here.
I noticed that there are 2 global variables used mark that an
interrupt is pending, \InterruptChar (used in the keyboard handler) and
\INTCHAR, used in INTERRUPTED. \CAUSEINTERRUPT clears \InterruptChar
and sets \INTCHAR. I don't quite understand this--is it temporary cause
we haven't committed to WIND?
--Ron
*****************
Date: 28 MAY 1982 0003-PDT
From: KAPLAN
Subject: Bug in BCOMPL/BRECOPILE
To: MASINTER
I noticed that BRECOMPILE and BCOMPL setup LOCALVARS slightly differently.
BCOMPL initializes it to SYSLOCALVARS. BRECOMPILE does that only if
LOCALVARS is T. If it is not T, it sets it to (UNION SYSLOCALVARS LOCALVARS).
Do you understand this? Which is correct, or are both correct?
If the UNION makes sense, should it also happen for SPECVARS?
--Ron
*****************
Date: 15 JUN 1982 2210-PDT
From: MASINTER.PA
Subject: INSPECT scrolling
To: lispsupport
If you put up an inspect window, and then change radix (e.g., from RADIX(8) to RADIX(10)), you get inconsistant output when you scroll the window.
Larry
*****************
We need to have an updated suite of tests to give to the technicians for hardware checkout.
Date: 18 June 1982 9:18 am PDT (Friday)
FROM: MANN
Subject:Runmicrotest.cm/replacement
Can you send us a message about Runmicrotest.cm or a suitable replacement to
use in checking out the Dorado's as we discussed the other day. We do need this to do a good verification that the machines we ship run all the
emulators.
*****************
Interlisp-D I believe has never been verified to run the DIsrael Y-FUN test of spaghetti stack operation.
Date: 23 Jun 1982 1332-EDT
From: DISRAEL at BBNG
To: masinter at PARC-MAXC
(1) YY2 is the Interlisp version of the standard fixed point
(recursion) operator in the lambda calculus. As written in lambda
calculus form, it looks like this: LAMBDA F. (LAMBDA X. F (X X))
(LAMBDA X. F (X X)). You apply it to a functional - a function that
returns a function as value - and then apply the result to, say a
number. So if you give YY2 the factorial functional - everyone's
favorite example : LAMBDA FUN. (LAMBDA N. IF N = 0, 1, ELSE TIMES N
(FUN N-1)) - you get something which when applied to 3 yields 6. It
does this bit of magic by unwinding an internal lambda expression 4
times (in this case). So it simulates recursion by as much iteration as
you need. Note: the definition of FACTFUN is not syntactically
recursive, and if one defines FACT as (YY2 'FACTFUN), then FACT is also
not recursively defined.
One can actually think of YY2 (never mind why it's called that and not
Y) as the limit (the least fixed point) of an infinite series, starting
with Y-0 (which see) and getting on by applying Yn to G to get Yn+1.
(Moreover Yn = (G 'Yn) - so every Y is a fixed point of G).
Z is another, slightly unstandard recursion operator - written in lambda
calculus form as follows: LAMBDA F. ((LAMBDA X. F (LAMBDA Z. (X X) Z))
(LAMBDA X. F (LAMBDA Z. (X X) Z)). Again Z of FACTFUN is a
non-recursively defined FACTORIAL applicable to numbers.
(3) As for COMBOY - it's the Y-type recursion operator written out
purely in terms of the two (so-called) primitive combinators. K (LAMBDA
X. (LAMBDA Y. X)) and S (LAMBDA X. (LAMBDA Y. (LAMBDA Z. ((X Z) (Y
Z))))). But there is a bug in the code: as it stands, it is not
applicable to numbers - only to functions; e.g. not to 3 but to
LAMBDA.() 3 - and of course TIMES, SUB1, etc. barf at these.
(4) Speaking of combinators; BB is functional composition (in
disguise), SKIAPPLY is function application and SKIAPPLY2 is "APPLY" -
again in disguise. (It takes a function and an arg as arguments;
SKIAPPLY takes a function and returns a function which is the argument
function to SKIAPPLY primed for application. (Baroque, eh??). WW
takes a function and produces a function which when applied to an
argument, produces a version of a two-placed function whose two
arguments are identified. (So SQUARE is WW applied to TIMES.)
(5) F and J are weird functionals of purely theoretical interest
(unlike the others which are, as you'll surely allow, of immense
practical import). J is a function provably equal to I (LAMBDA X. X);
but which is, unlike I, provably non-normalizable. I, moreover, is
provably the only fixed point of F. (I think J, like COMBOY, may
require functions as arguments all the way down.)
To TEST:
(APPLY* (YY2 'FACTFUN) 3) will do nicely to compute (factorial 3). (The
same goes for (APPLY* (Z 'FACTFUN) 3).) You can go (APPLY* (FACTFUN 'FACTORIAL) 3) - where FACTORIAL is the regular recursively defined factorial function. And, since YY2 (or Z) are fixed point operators (so F = YF) you can go (APPLY* (APPLY* 'FACTFUN (YY2 'FACTFUN)) 3). ETC...
**************
Date: 27 June 1982 5:53 pm PDT (Sunday)
From: vanMelle.PA
Subject: incompatible changes
incompatible changes for whenever we feel like introducing an incompatible change:
Rearrange InterfacePage so that IFPFaultHi is even-aligned.
Rearrange DataTypeDescriptors so that DTDFREE, DTDCNT0 and DTDNEXTPAGE are all in the same quadword.
Make htfind xor the hiloc of the datum when computing the hash probe.
**************
Date: 30 JUN 1982 0755-PDT
From: SPROULL
Subject: Dolphin experience
[This was a long report on Bob's experience with the Dolphin. I have exerpted the problems which I think are still relevant]
- - - - - - - - - - - - - - - - - - - -
The bad news
My view is that Interlisp is sinking of its own weight, and the
move onto a personal computer has shown the hulk in alarming
vividness. This section presents a brief justification of this view
and offers possibilities for remedies. The problem can be fixed,
but it may be costly.
The problem, as I see it, is that Interlisp has never had a clean
internal structure of the system (as separate from the language):
features and packages have accreted, wired into the existing maze
to create a tighter maze. It's now so bad that a good programmer
who encounters an Interlisp system is at a loss for what to do for
a good long time. Few if any of the "interfaces" in Interlisp
correspond to things he recognizes from other environments. He has
to seek out facilities one by one; his intuition for where to look
is often wrong; and he remains worried about deep interactions
among various parts of the system.
This problem has been made worse by the move onto a personal
computer. I think to a great extent, new facilities are added to Interlisp
using the same rather low standards of interface definition that
have characterized Interlisp so far. For example, while I think the
facilities provided by the Interlisp-D stuff for graphics are
mostly OK, the interfaces can be substantially improved.
I feel the "system" part of Interlisp needs a thorough overhaul. I
favor the "open system" approach in which a very few low-level
primitives are built in, and the rest is done with packages that
can be separated and that have well-defined interfaces.
I realize that an undertaking such as this is a big one. However, I
believe that a great deal of the detailed functionality of
Interlisp can be retained (even much of the code can be retained),
but the interfaces need to be redesigned in light of the tremendous
evolution of the system. It's remarkable that they've remained
useful as long as they have, but they need overhaul. I see two
hopeful signs:
1. To the extent possible, new work should be done in the
form of LISPUSERS packages. I'm delighted, for example, to
see the new editor done in this way. (But I suspect the
interface between it and the rest of the system could be
improved if the system were improved.) I think it's
important that some (perhaps all) of these packages be
distributed in source-file form so that users can actually
understand what they do.
2. The new Common Lisp effort is an opportunity to redesign
many of these functions. Perhaps a long-range plan might be
to put Common Lisp up on the Dolphin. Should the Xerox group
be contributing to the design of Common Lisp, especially in
those areas where it has the most expertise (e.g., user
I/O)?
Another approach is to invest some effort in restructuring
Interlisp. I think it might be worth a few days' effort to estimate
the difficulty of this problem and the improvements that could be
reasonably expected.
(long paragraph)
To summarize, I'd like a complete, consistent "graphics
package" at the low level. Some of the pieces are there
(bitblt, line, etc.), but I don't see the structure. It
appears to be a complex set of stuff with complex
inter-relations. There is no clear description of what a
bitmap is, or what a display stream is, or what a window is.
This needs to be cleaned up.
More to the present point, however, is that I find the
manual almost completely lacking is discussion of concepts.
To pick an example from the current manual, consider the
file package. What is a "file" from the point of view of
Lisp? What is its purpose? What does it contain? What is the
distinction between what is remembered inside the Lisp
virtual memory and what is retained on the disk? And so on
and on . . . While the file package might have once started
out so simple that none of these questions arose, it's long
past that point now.
The new graphics stuff definitely needs a good deal such
concept documentation. In the manual, old and new, there's
too much emphasis on functions and not enough on structure
and concepts.
The best manual would result from a system restructuring
The Interlisp language should form a distinct part of the
manual -- some sections
of the current manual are salvageable in this respect. If
the interface between the language and the packages were
cleaned up, this section would describe the interface. I,
for one, would benefit enormously from a self-contained
section that describes the language without reference to any
of the system stuff.
***********
Date: 8 July 1982 8:25 am PDT (Thursday)
From: VanLehn.PA
Subject: main data space overflow
....
I've tried to find the storage leaks using COUNTDOWN, MAPATOMS and
so forth. So far, the only circularities I've come across are on LISPXHISTORY. I need better leak-finding tools. One would be to do the mark & sweep part of garbage collection, including the freelist as "accessible" during the mark. The list that the sweep delivers is therefore all the cons cells that got leaked. By looking through the ones with atomic cars and cdrs, I could probably figure out from the pnames where the leaks came from.
4. Of course, having found all the lost storage, it could be put back on the freelist, saving me a reload (but probably still taking 20 minutes). Since there is plenty of array space around, the mark & sweep could be written simply, using its own array to hold the mark bits. I don't see any reason to do the "copy" part of a "stop & copy" since swapping doesn't seem to be a problem on the Dorado (according to temporal intuition and control T).
5. If the mark's bit array is the screen bitmap, one could probably learn alot about the storage use and maybe the chronology of the leaks by seeing not only where in vmem the leaks are, but watching the mark propagate out from specific atoms. A quick calculation has it that marking the current Mds, assuming it's mostly cons cells (95% in my program), would take a 900 by 900 bitmap.
I'd be willing to help code such a tool, or any other.
Any tools or diagnostic ideas would be welcomed with extreme enthusiasm.
------------------------------------------------------------
Date: 8 JUL 1982 1155-PDT
From: ROACH.PA
Subject: DEFINEQ and MACROs
To: LISPSUPPORT
cc: ROACH
Dear Interlisp Support,
I think MACROs, DEFINEQ, and the Interlisp compiler interact
incorrectly. I would like to define macros such as DEFEXPR, DEFFEXPR,
etc. that can appear in files and will expand out into DEFINEQ forms
which go on to be compiled like other DEFINEQ forms. I've been told
by Ronald Kaplan that this won't work, and in fact, it doesn't. What
is Interlisp's problem? I might point out that Maclisp does allow you
to do this sort of thing. This is a pretty serious deficiency on
Interlisp's part.
Secondly, instead of compiling expressions in the order in which
they occur, the Interlisp compiler gathers functions definitions into a
separate group from all other expressions. This is also a bug. (Again
Maclisp does the right thing.) Compiled forms ought to load in the
same order in which the uncompiled forms loaded.
I am hopeful that action will be taken on these problems.
****************
Date: 27 JUL 1982 0935-PDT
From: KAPLAN.PA
. . .
We probably also ought to implement a device info interface that could,
for example, tell how many pages are left on the disk, in an ifs directory,
or in the ifs as a whole.
*****************
00348 00024 UU
Date: 10 Aug. 1982 8:48 am PDT (Tuesday)
From: VanLehn.PA
Subject: MARKASCHANGED
To: lispsupport
cc: VanLehn
MARKASCHANGED apparently doesn't inform the compiler that the function
needs to be compiled. Reference manual doesn't specify whether it does or not. Obviously, it should tell the compiler to recompile.
*****************
Date: 26-AUG-82 11:46:38 PST
Subject: AWFUL CODE FROM CREATE USING
To: LispSupport
(create FOO using X) when FOO is a RECORD translates as a forest of CONS of
CARs of CDRs rather than COPY. Produces awfully large chunks of code that
doesn't even run fast. Bug?
*****************
------------------------------------------------------------
Date: 8-Sep-82 14:03:40 PDT (Wednesday)
From: Masinter.PA
Subject: Re: RAISE for files
Users want to be able to read a file in lower case as if it were in upper case.
Why don't we put a translation table into READ tables? We already have them for FILEPOS and FFILEPOS etc. This would make a lot of sense. The cost is relatively small.
------------------------------------------------------------
Date: 9-Sep-82 16:18:21 PDT (Thursday)
From: Masinter.PA
Subject: RESETLST vs RESETFORM
To: Bobrow
cc: LispSupport, Masinter.PA
This should be in the manual, or maybe we should fix RESETFORM.
Example: this doesn't work:
(RESETFORM (DEFPRINT 'A 'FOO) stuff)
This is what DOES work:
(RESETLST (RESETSAVE NIL (LIST 'DEFPRINT 'A (DEFPRINT 'A 'FOO)))
stuff)
**********************
Date: 10-Sep-82 8:48:59 PDT (Friday)
There sentiment for making TY not elide comments
Date: 14 Sept. 1982 9:41 am PDT (Tuesday)
From: JonL.pa
I've never used TY, but if it does the obvious thing, then one might
expect that TY* would be the command which doesn't elide comments
(e.g., PF and PF*?)
**********************
We need to have an inbound CHAT server so you can CHAT to a machine from a remote terminal over the PUP and NS Ethernet.
We need to handle UNIX filenames better
We need device synonyms and pseudo-devices
We need to be able to delete 1100 {DSK} files without building the whole map
We need to document the facilities for doing Binary i/o for bitmaps, integers, floats. AOUT/AIN.
Compiler: [14 NOV 1981 1815-PST] (FUNCTION (LAMBDA --)) expression used
as a value to be stored into a record slot. The compiler did produce a suitable subfunction, but then compiled as the value of the (FUNCTION --) expression the free varaible NEWVALUE.
We need to fix Sandbarring
Storage management:
We need to fix the GC so that it collects items which are only held as keys of hash-tables. (CLISPARRAY in particular).
we need unwindprotect
many system functions have Names which can conflicts with user fns
We need to unify the handling of meta, blank keys
we need to clean up GLOBALVARS situation
We need more diagnostics and system tests
We need to fix it so that expanding macros doesn't take so long
* FUNARG doesn't work
* MASTERSCOPE:
WHO USES FILE FREE causes funny error messages
----------------------------------------------------------------
Date: 16 SEP 1982 1802-PDT
From: BURTON.PA
Subject: compiler bug
The bind merge optimzation getts carried away with the function
DSPDESTINATION on <LISPCORE>WIND>LLDISPLAY and binds the variable
\INTERRUPTABLE with the variable DS. The effect is that the
\DTEST is called in a context that is uninterruptable leading to
a call to RAID when DSPDESTINATION is given a bad argument such as
(DSPDESTINATION 123 (DSPCREATE)).
----------------------------------------------------------------
Date: 20 SEP 1982 1954-PDT
From: SHEIL.PA
Subject: Compiler bug - EVERY
Attempting to compile the expression (EVERY xxx (FUNCTION ATOM)) generates the
compiler warning message (ATOM: Too many args for macro). Code seems to be OK
but the message is distracting, especially if the code has come from a type?
from either a record or DECLtype.
Beau
----------------------------------------------------------------
Date: 24-Sep-82 8:47:08 PDT (Friday)
From: Masinter.PA
Subject: Re: Problem with open leaf files -- and patch
In-reply-to: BOBROW's message of 21 SEP 1982 1517-PDT
To: LISPSUPPORT
cc: Bobrow, Stefik
Danny's patch to FINDOPENFILE seems to get around the immediate problem,
but some more permanent fixes are needed. Ron and I talked about these
problems for a while; I thought I would send out some notes on our
conversation and some additional thoughts.
There are currently three separate problem areas in the current system:
a) READ/PRINT given file names which are not fully qualified scans the directory every time, which is TERRIBLY SLOW
b) for LEAF files, the file CANNOT BE FOUND by INFILEP/OUTFILEP/FINDFILE if it is already open
c) There are a number of inconsistancies having to do with the use of DIRECTORIES and the error mechanism to implement search paths.
Proposals:
a) files which are presented to READ/PRINT (i.e., in a context
where an OPEN file is required) will ONLY scan against the set
of files which are open with appropriate access.
This is a change from Interlisp-10 semantics, where if you
do an INFILE(FOO), and then create a NEW VERSION of FOO, and
then do READ(FOO), you will get a FILE NOT OPEN error.
b) we should implement the notion of a "search path" device, e.g.
{LISPUSERS} and {SOURCES}. The system will support assigning
search paths to a device (new function), so that one can say
{SOURCES} = {PHYLUM}<LISPCORE>WIND> , {PHYLUM}<LISPCORE>SOURCES>
Doing an INFILEP on {SOURCES}xxxx will return a full filename
of {PHYLUM}<LISPCORE>WIND>xxxx, i.e., the name returned will
be fully qualified. OUTFILE on {SOURCES} will write on the
FIRST directory on the search path.
The general idea here is to take what is currently done via
the error mechanism and DIRECTORIES and FINDFILE and instead
build it in in at a lower level. This will allow some more
rational implementations of the facilities.
It will also make more logical the link between the "connected"
directory and the search path; that is, one can either
connect to {SOURCES} or to {WIND} or to {LISPUSERS}. It will remove
the distinction between FINDFILE and INFILEP in the
non-spelling-correction case.
Finally, all of this is relatively easily implemented in
Interlisp-10! Interlisp-10 already supports a (undocumented)
feature where if you PUTPROP(LISPUSERS DIRECTORIES (<LISPUSERS> <LISP>))
and attempt to FINDFILE(LISPUSERS:filename), it will in fact
search those directories.
Comments?
-------------------------
Date: 24-Sep-82 8:49:48 PDT (Friday)
From: Masinter.PA
Subject: Re: Bitmap editor
In-reply-to: SHEIL's message of 21 SEP 1982 1603-PDT
To: SHEIL
cc: burton, lispsupport
I always wanted to do EDITBM on a "window".
One general way of handling this is to have a general "coersion" function
which coerces to "clipped bitmap", with the relatively obvious coersions for
windows/displaystreams/bitmaps/regions....
----------------------
Date: 24 Sep 1982 1538-PDT
From: Friedland
Subject: interlisp d bug
To: cschmidt, rindfleisch
renamefile on {DSK} doesn't work. If you have a file
A 100 pages long and a file B 200 pages long and (RENAMEFILE A B), you
end up with a file B 200 pages long, its first 100 being the old A
and the last 200 being garbage from the old B. You have to
(DEFILE B) before the renamefile. This despite what the manual says.
PEter
-----------------------------
Date: 29 SEP 1982 2012-PDT
From: JONL.PA
Subject: Undefined Function
Once in a while, I mistype a DEFINEQ, and wind up with an s-expression
in the definition cell of some litatom which is *almost* what I wanted -- it just lacks the word LAMBDA. The error message you get when you try to run
such a function is "Undefined Function" -- wouldn't it be better to
reserve that msg for the case of a definition cell which is either NIL or
NOBIND, and print something more informative for the case where it contains
something like ((X) (LIST X (TIMES 2 X)), or (() (PRINT 5)).
----------------------
Date: 29 SEP 1982 2016-PDT
From: JONL.PA
Subject: PUNTing a broken compilation
To: lispbug^
1) There needs to be an advertised way to do a BCOMPL which ignores errors
which occur during the compilation of a single funciton, so that a single
call to BCOMPL will proceed thru the while file, finding perhaps other
errors before ending.
2) I tried the unadvertised function (PUNT) after one of my macros caused
a BREAK during compilation, and it appeared as though the then-current
break window became the normal TTY display stream.
-----------------------------
Date: 30 SEP 1982 1119-PDT
From: SHEIL.PA
Subject: two comments on the RESETFORM macro
Currently, the RESETFORM macro evaluates the resetform (a) outside of errorset
protection and (b) some time (during which an interrupt can occur) before the
resetlst entry for undoing it is made. This could be disasterous if one is
resetting, for example, a display stream clipping region and the user bombed
you out. [(a) may or may not be a bug or non-feature, depending on how one
reads the manual; (b) is nasty to fix and probably requires interrupt protection]
Also, the RESETFORM macro doesnt do a very good job if one passes it a LAMBDA
expression as the reset function (two copies wind up in the compiled code).
[The motivation for this is for two arg fns like DSPCLIPPINREGION, as
(RESETFORM ((LAMBDA (X) (DSPCLIPPINGREGION X window)) NEWREG)
forms)
is much more elegant than
(RESETLST (RESETSAVE NIL (LIST 'DSPCLIPPINGREGION
(DSCLIPPINGREGION NEWREG window)
window))
forms)
In fact, since I just realized that, it might be worth noting this trick in the
manual for other slow thinkers.]
*** I really want to shift to this notation in DEDIT, so this patch would be
greatly appreciated ***
Beau
PS: From a slightly broader point of view, it would be nice to have a wizard
scrutinize these macros as (a) this is not the first non-feature report for
them (b) they dont look to be as good code as they could be. Last time I
raised this, the discussion quickly expanded to include respecifying the
whole error handling machinery (and thus nothing happened). Perhaps a useful
intermediate step would be to define a few more useful abstractions, such
as CATCH and THROW, which we could start using in our code to replace the
convoluted RESETLST constructions that tend to generate these discussions in
the first place.
*********************
Date: 1 OCT 1982 1430-PDT
From: SHEIL.PA
Subject: Glitch in RENAME
To: LISPSUPPORT
If one has a variable FOO which is used in some file BAR and you wish to rename
it to FUM, (RENAME 'FOO 'FUM 'VARS 'BAR) will bomb with complaint "no VARS defn
for FOO" unless FOO has a top level binding.
Beau
*********************
00705 00024 UU
Date: 1 OCT 1982 1611-PDT
From: SHEIL.PA
Subject: PP and PRETTYPRINT glitches
To: LISPSUPPORT
Some time ago, PP (and PP* and PPT) had LOCALVARS declarations added so that their variables would not interfere with EVALVs from PRETTYPRINT. Unfortunately, the ERRORSET implementation causes all these to be SPECIAL in Interlisp-D anyway. Pending a more general resolution of this problem, it would be nice if these fns were patched to avoid the fact that (PP X) for example, does absolutely nothing. [Major motivation: This is irritating if you know what is going on but absolutely inexplicable if you dont].
Manual note: ARGLIST of PRETTYPRINT does not match manual spec.
*********************
Date: 3-Oct-82 21:05:18 PDT (Sunday)
From: Masinter.PA
Subject: Re: PP and PRETTYPRINT glitches
In-reply-to: SHEIL's message of 1 OCT 1982 1611-PDT
To: SHEIL
cc: LISPSUPPORT
An additional (more general) fix is for the compiler to rename the variables which are auto-SPECVARed because of the ERRORSET hack.
*********************
Date: 3 OCT 1982 2327-PDT
From: KAPLAN.PA
Subject: Clispify/dwimify bug
If (don't ask why) the atoms < and > have top-level values, then
CLISPIFY((LIST (FOO))) is (< (FOO) >) which then doesn't dwimify
back.
As a minimum, this (and all) clisp transformations should not be
performed in environments where they won't dwimify properly.
*********************
Date: 4 OCT 1982 0514-PDT
From: JONL.PA
Subject: MASTERSCOPE Message
If you edit a macro, MasterScope will correctly tell you that
certain functions depend upon it; but when calling UNSAVEFNS,
it always prints the message "Loading FooFunction", regardles
wof whether it is really loading it, or merely UNSAVEDEFing it.
*********************
Date: 4 Oct. 1982 8:26 am PDT (Monday)
From: Stefik.PA
Subject: Re: Interlisp-D planning
Larry and Bill, -
The Lisp features {desired by Mark et al.) were
(1) Ability to have functions without naming them.
(2) Ability to hash on strings (or unintered atoms?) for our LOOPS uids.
(3) Access to an efficient (say B-tree) database (perhaps cedar?).
Of more immediate importance will be some participation by yous guys in design
reviews of LOOPS, and consulting on performance tuning. Mark
*********************
Subject: lisp.tasks
* UNBREAK work on internal block functions just like TRACE
* DUMMYFRAMEP definition correction
* compiler optimization NEWOPTFLG=T
* free code deleterefs pointers therefrom
Interlisp-10 problems
* DELFILE BUG
* GETSTREAM
* CALLSCCODE returns duplicate values
* add ALLOCSTRING
* make NCREATE allocate system datatypes too
Date: 6 Oct. 1982 9:44 am PDT (Wednesday)
From: Bobrow.PA
Subject: Re: Interlisp-D planning
In-reply-to: Masinter's message of 5-Oct-82 19:45:57 PDT (Tuesday)
To: Masinter
cc: Stefik, Bobrow, vanMelle
1) Must function call always go through an atom? Perhaps the name slot on the
stack could be made in the "naked" case to point to the fn data object. Inspect
macros might allow at least finding out about arguments expected.
One might even have a string in such an object to name it (this would work for
our methods).
2) The current atom hash table code made available as string hashing would do
quite nicely at this stage for us, I think. More than 2^16 atoms would be nice,
but is not right, since we want separate name spaces with overlapping names,
and I don't think we need anything but string hashing.
3) Eventually we might want to use file based indexes for knowledge bases (e.g.
BTrees) when they get too large. The current Alpine project is NOT planning to
provide a BTree index interface at the moment (I checked with Mark Brown)
Most of the indexing stuff is done now on the clients side of the Cedar database.
Stats runs show that our GetValue and PutValue are remarkably slow (about 250
microseconds on a Dorado) and take most of the time, as we expected. Help on
redesign on that would be most welcome.
danny
Date: 4 OCT 1982 0514-PDT
From: JONL.PA
Subject: MASTERSCOPE Message
To: LISPBUG^
If you edit a macro, MasterScope will correctly tell you that certain functions depend upon it; but when calling UNSAVEFNS, it always prints the message "Loading FooFunction", regardles of whether it is really loading it, or merely UNSAVEDEFing it.
Date: 4-Oct-82 12:53:41 PDT (Monday)
From: Masinter.PA
Subject: lisp.tasks
To: masinter
cc: , Masinter.PA
* Compiler: [14 NOV 1981 1815-PST] (FUNCTION (LAMBDA --)) expression used
as a value to be stored into a record slot. The compiler did produce a suitable subfunction, but then compiled as the value of the (FUNCTION --) expression the free varaible NEWVALUE.
* Name conflicts with system fns
* EVAL edit macro in editor needs ERSETQ instead of NLSETQ.
* correct handling of meta, blank keys
* periodicallyreclaim be sensitive to mouse events, process suspension.
* Breakcheck problem associated with heavy swapping on first uba or udf.
* improve interface to stats for other things than fn call
* make STACK FULL non-fatal error
* (APPEND circular) bug
* Can create ARRAYs > 2^16.
* STORAGE) function prints garbage negative numbers in the 3rd column.
* UNBREAK work on internal block functions just like TRACE
* BRKDWNRESULTS print out
* interaction of code which rewrites filemaps and RADIX
* rename low level functions
* memory map diagnostics
* DUMMYFRAMEP definition correction
* Interlisp-10 problems:
* DELFILE BUG
* samedir has problems on tops20: directoryname neq filenamefield
* CALLSCCODE returns duplicate values
* add ALLOCSTRING
* make NCREATE allocate system datatypes too
* Code for generating Interpress from Tops-20 and Vax (Troff, Scribe, ...)
* small demo
* LISPXSTATS
* compiler optimization NEWOPTFLG=T
* free code deleterefs pointers therefrom
Misc bugs
Masterscope recursion with long names
BQUOTE
Date: 6-Oct-82 13:21:14 PDT (Wednesday)
From: Masinter.PA
Subject: questions & comments from Schoen
To: LispSupport
cc: Masinter.PA
document VRAID package; I think as a LispUsers package.
we should provide FLOUT and READ/WRITEBINARYBITMAP for fast i/o of floatps and bitmaps.
Schoen has a VAXPRINT package (possibly similar to VanBuers) which causes
the vax to hardcopy screen bitmaps. He doesn't know what the Versatec they
use is exactly, but it has 2112 dots across, he says.
Date: 8 OCT 1982 1620-PDT
From: SHEIL.PA
Subject: Lisp task list
To: MASINTER
cc: lispcore^
I just spent 15 mins reading it. Very comprehensive; fine job; don't envy
you the task of prioritizing it! A couple of additonal points:
ERRORSET compilation.
Possibility of marking the stack rather than introducing
new function call. If not, the making compiler suppress or
rename forced new specvars.
Error handling
Proposal to make ^D work by ^E (incompatible but worth it?)
Some improvement over current mess.
Failing that, debugging optimization of RESETLST/SAVE/FORM
Global vars
If RESETVARSLST is known not to be declared global, lets fix it
rather than documenting it! Mike Sannella needs some help
to get new manual to indicate which system params are global
- maybe he could propose a list derived from the manual and
we could dispose of this one.
Garbage collection
Compiled code blocks (pointers therefrom)
Hash arrays [urgent; current incompatibility + perf problem]
File package
Hasdef problems
Fixing EDIT interfaces to use same.
Beau
Date: 11-Oct-82 16:41:58 PDT (Monday)
From: vanMelle.PA
Subject: CASEARRAY for READ
To: LispSupport
Yet another (perhaps the same) request for (RAISE T) for files...
------------------------------
Mail-from: Arpanet host SU-SCORE rcvd at 11-OCT-82 1414-PDT
Date: 11 Oct 1982 1402-PDT
From: David E. Smith <CSD.SMITH at SU-SCORE>
Subject: lower case
To: vanmelle at PARC-MAXC
Stanford Phone: (415)497-1809
I need a way of forcing interlisp to be case independent for file input as
well as terminal input. Read macros won't do it because I don't want the
lower case letters to be break characters and "ALWAYS" forces this. Advising
or rewriting READC presumably wouldn't work either because strings and
characters prefaced by "%" would then get upcased.
How do I do this? Am I forced to rewrite LOAD and all of its accomplices?
Crufty and/or release dependent solutions will not be sneezed at. Help!
-- de2
----------------------------------------------------------------
Date: 12-Oct-82 13:11:06 PDT (Tuesday)
From: vanMelle.PA
Subject: Font assumptions
To: Burton
cc: LispSupport
If you do (FONTSET 'STANDARD) to turn off fonts (e.g., to make a
fontfree file), subsequent calls to the inspector die in a \DTEST of
FONTDESCRIPTOR because DEFAULTFONT is NIL.
I wonder how many other places make such assumptions.
Incidentally, herewith a reminder that \DTESTFAIL desperately needs to
produce a better error message, at least incorporating its second arg
(the intended type).
Bill
Date: 14-Oct-82 16:36:57 PDT (Thursday)
Subject: Re: Schlumberger URGENT
In-reply-to: Raim.EOS's message of 14 Oct. 1982 10:24 am PDT (Thursday)
Eric (and users in general) should avoid doing (APPLY 'IMAX LST) and
instead write (for X in LST maximum X).
The limit of number of arguments to a function is indeed 80; it is possible
that we could bump it, but there still would be a fixed limit.
Larry
Date: 15-Oct-82 15:05:36 PDT (Friday)
From: vanMelle.PA
Subject: LARGEST/SMALLEST
To: LispCore^
It has been pointed out that these names are confusing, due to the
ambiguity of what you might want the iterative to return. I propose
that LARGEST be called MAXIMIZING, SMALLEST be MINIMIZING, and that
there also me oprs MAXIMUM and MINIMUM. Since FIND is a synonym of
FOR, we could thus have:
(find X in L maximizing (FOO X))
returns the X for which FOO is largest, and
(for X in L maximum (FOO X))
returns the largest value of FOO over L.
Bill
<00><>GACHA
<00><>z<>