TODO 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. - Shadow bytes with internal values
  2. The biggest problem with the interpreter is that undefinedness is not
  3. transitive. A warning is given if an undefined value is used, but then the
  4. interpreter goes on to use the (zero) value as if nothing had happened. The
  5. reason is that internal values in the interpreter have no shadow bytes, and
  6. consequently the undefinedness is lost as soon as a value is passed to an
  7. operation. Likewise the type is lost, which makes it impossible to do good
  8. type cheking on pointers. If internal values would have a shadow byte (only
  9. one per values is needed), we could have a shadow bit signifying "derives from
  10. null pointer", which could be checked when the pointer is dereferenced.
  11. Presently only the value of the pointer is checked.
  12. - Name generation upon forking.
  13. At present there is an ad-hoc mechanism for generating new file names for
  14. int.log and int.mess and a new variable name for LOG= upon forking. This
  15. mechanism is not well localized and does not generalize immediately to other
  16. file names like int.tally and int.core. Another consequence is that the AT=
  17. facility is presently implemented as a patch.
  18. - Integration of memory access
  19. Presently each memory access consists of at least three calls, one to check
  20. the shadow byte, one to store the data and one to rewrite or update the shadow
  21. byte; each of these do the same address evaluations etc. There should
  22. probably be routines for integrated writing and reading of bytes.
  23. - Improvements of warnings
  24. Presently warnings are indicated by a single number, in warn.h. This is often
  25. too little information. The warning should be a printf format, and warning()
  26. should accept a variable number of parameters.
  27. - There seems to be no way of obtaining the largest possible double
  28. on a machine in a system-independent way (except, perhaps, for including
  29. <math.h>). For the time being there is a #define MAXDOUBLE in do_fpar.c.
  30. - Program to process the int.tally file
  31. - Program to process int.core; also, define a more proper format for the
  32. int.core file.
  33. - Some esthetic problems
  34. - The system call umount is called unmount on some systems, or
  35. even called differently in different libraries on the same
  36. system. It is not clear to me who is to blame, nor if that
  37. would help.
  38. [[
  39. Proposed code to be generated by mkswitch.c;
  40. type to be had from /ur/em/etc/em_table.
  41. DoXXX[01](par) long par { type arg = (LOG(("@X9 XXX %lt", par)), arg_t(par)); }
  42. ]]