Initial entry
This commit is contained in:
parent
416944b293
commit
da943cec51
69
util/int/TODO
Normal file
69
util/int/TODO
Normal file
|
@ -0,0 +1,69 @@
|
|||
- Reduction of repetetivity in the code
|
||||
Before making any major changes to the interpreter, it would be good to
|
||||
implement Model 3 (Intelligent Calls), as described in the interpreter
|
||||
documentation. This will reduce the bulk of the code considerably, since then
|
||||
there will be only one routine for each instruction. Now identical changes
|
||||
have to be made in n places.
|
||||
|
||||
|
||||
- Shadow bytes with internal values
|
||||
The biggest problem with the interpreter is that undefinedness is not
|
||||
transitive. A warning is given if an undefined value is used, but then the
|
||||
interpreter goes on to use the (zero) value as if nothing had happened. The
|
||||
reason is that internal values in the interpreter have no shadow bytes, and
|
||||
consequently the undefinedness is lost as soon as a value is passed to an
|
||||
operation. Likewise the type is lost, which makes it impossible to do good
|
||||
type cheking on pointers. If internal values would have a shadow byte (only
|
||||
one per values is needed), we could have a shadow bit signifying "derives from
|
||||
null pointer", which could be checked when the pointer is dereferenced.
|
||||
Presently only the value of the pointer is checked.
|
||||
|
||||
|
||||
- Name generation upon forking.
|
||||
At present there is an ad-hoc mechanism for generating new file names for
|
||||
int.log and int.mess and a new variable name for LOG= upon forking. This
|
||||
mechanism is not well localized and does not generalize immediately to other
|
||||
file names like int.tally and int.core. Another consequence is that the AT=
|
||||
facility is presently implemented as a patch.
|
||||
|
||||
|
||||
- Integration of memory access
|
||||
Presently each memory access consists of at least three calls, one to check
|
||||
the shadow byte, one to store the data and one to rewrite or update the shadow
|
||||
byte; each of these do the same address evaluations etc. There should
|
||||
probably be routines for integrated writing and reading of bytes.
|
||||
|
||||
|
||||
- Improvements of warnings
|
||||
Presently warnings are indicated by a single number, in warn.h. This is often
|
||||
too little information. The warning should be a printf format, and warning()
|
||||
should accept a variable number of parameters.
|
||||
|
||||
|
||||
- There seems to be no way of obtaining the largest possible double
|
||||
on a machine in a system-independent way (except, perhaps, for including
|
||||
<math.h>). For the time being there is a #define MAXDOUBLE in do_fpar.c.
|
||||
|
||||
|
||||
- Program to process the int.tally file
|
||||
|
||||
|
||||
- Program to process int.core; also, define a more proper format for the
|
||||
int.core file.
|
||||
|
||||
|
||||
- Some esthetic problems
|
||||
- The system call umount is called unmount on some systems, or
|
||||
even called differently in different libraries on the same
|
||||
system. It is not clear to me who is to blame, nor if that
|
||||
would help.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
[[
|
||||
Proposed code to be generated by mkswitch.c;
|
||||
type to be had from /ur/em/etc/em_table.
|
||||
DoXXX[01](par) long par { type arg = (LOG(("@X9 XXX %lt", par)), arg_t(par)); }
|
||||
]]
|
Loading…
Reference in a new issue