home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / mitsch75.zip / scheme-7_5_17-src.zip / scheme-7.5.17 / src / microcode / TODO < prev    next >
Text File  |  2000-03-20  |  6KB  |  148 lines

  1. -*-Text-*-
  2. $Id: TODO,v 1.2 2000/03/21 04:30:50 cph Exp $
  3.  
  4.     Things to do to the C microcode:
  5.  
  6. MINOR (although not necessarily painless):
  7.  
  8. * Adopt a naming convention for primitives to mitigate the name conflict
  9. problem with user-definable names.
  10.  
  11. * Make the microcode intern the empty string and the empty vector, so
  12. EQV? does not have to do extra work.  Note that fasdump/fasload have
  13. to be careful about this.  This may not be desirable for strings,
  14. given the existence of SET-STRING-LENGTH!
  15.  
  16. * Check that the microcode backs out of assignment correctly when it
  17. needs to gc.
  18.  
  19. * Implement multiple values.
  20.  
  21. * Change fasdump in scheme and bchscheme to fix the heap image before
  22. writing the file.  In this way, if there is a trap during the writing
  23. operation, the system can recover because there will be no broken hearts
  24. in memory.
  25.  
  26. * Make Microcode_Termination close all files (including the photo
  27. file) if there is no termination handler.
  28.  
  29. * Clean up the OS dependent stuff.  Add a new error,
  30. ERR_UNIMPLEMENTED_PRIMITIVE, which is signalled by the missing
  31. procedures.  Divide the procedures into the ones which can signal such
  32. an error, and the ones that must return a fake value (System_Clock,
  33. for example).  NOTE: The error has been added, we must now examine all
  34. the primitives.
  35.  
  36. * Improve vms.c.  Implement many of the missing procedures.
  37.  
  38. * Make the communication between OS_file_open and the appropriate
  39. primitive better: if OS_file_open fails it can be because the file
  40. does not exist, or because of some OS limitation on the number of
  41. files open at any given time.
  42.  
  43. * Add the GNU emacs directory stuff to unix.c, and maybe to vms.c.
  44.  
  45. MAJOR (or very painful):
  46.  
  47. * Look at all instances of Microcode_Termination to determine whether
  48. they are synchronous or not.  If not synchronous, the stack may be in
  49. a bad state and the termination handler may be screwed up.  In
  50. particular, we may be in the middle of compiled code.  This might want
  51. to be merged with the trap mechanism in unix.c.
  52.  
  53. * Redesign fasdump so pure load can be implemented.
  54.  
  55. * Fix purify so it does an indirect transport of the procedure stored
  56. in an environment.  Thus purifying an environment would have the
  57. effect of purifying the code that created it.  Maybe the values should
  58. be purified too.
  59.  
  60. * Write complete garbage collect.  This should be easy if the
  61. mechanism used in bchscheme is used.
  62.  
  63. * Fix purify in bchscheme.  Currently, if the object is too large, it
  64. crashes.
  65.  
  66. * Rewrite purify to avoid the double garbage collection.  It can use
  67. the same hack that fasdump uses, namely build a table of fixups in the
  68. spare heap while it conses in constant space.  If it reaches the end
  69. of constant space, it backs out by using the table of fixups.
  70.  
  71. * Fix the way weak pairs are treated by fasdump, and by fasdump and
  72. purify in bchscheme.  They should not be treated like normal pairs.
  73.  
  74. * Design and implement a better microcode error facility.  Adding new
  75. errors and parsers is a pain in the neck, and often the only
  76. interesting thing is the message the microcode wants to provide.
  77.  
  78. * Eliminate all fprintf(stderr, <mumble>).  This can be achieved by
  79. having a message facility available for the microcode.
  80.  
  81. * Split fixnum types: +fixnum is 0, -fixnum is -1, null is ?.
  82. Check for implicit 0 type.  Make manifest header be +fixnum.
  83.  
  84. * Change the representation of compiled procedures for faster external
  85. calls.
  86.  
  87. * Hack GC and related programs so that variable caches and uuo links
  88. need no type code for faster free variable reference and calls.
  89.  
  90.     Things done to the C microcode:
  91.  
  92. * Clean up variable reference code.  Many changes here:
  93. - Single trap mechanism so the microcode does not have to check more
  94. than one thing.  Implement unbound, unassigned, and dangerous in terms of this.
  95. - Clean up aux variable compilation: variables should not go into pure
  96. space, and then all the kludges about compilation can go away.
  97. - Eliminate the procedure name slot from the variable reference code.
  98. It should still be there for debugging, but not visible.  This also
  99. removes the extra test for assignment.
  100.     Jinx 4/2/87
  101. Variables can always go into pure space now because of the way aux
  102. compilation is done (depth, offset).
  103.  
  104. * Fix `access' code so that it continues correctly when the variable
  105. is unbound or unassigned.  This is because the value of the access'
  106. environment field is not being pushed on the stack at the time of the
  107. error, so there is no way to continue.  There are probably some other
  108. similar bugs -- this one is likely to be caused by the fact that it
  109. requires a non-standard stack frame, making it slightly painful to
  110. implement.
  111.     Jinx 4/2/87
  112.  
  113. * Setup the cached variable stuff so that assignments and references
  114. can be separated. 
  115.     Jinx 10/5/87
  116.  
  117. * Remove danger bit. 
  118.     Jinx 10/9/87
  119.  
  120. * Change various places that are signalling interrupts to use the
  121. macro `Request_Interrupt'.
  122. * Examine usage of `New_Compiler_Memtop' to determine if it is being
  123. used similarly.
  124. Eliminated.  There are new macros in interrupt.h .
  125.     Jinx 11/17/87
  126.  
  127. * Make fasdump dump only those primitives referenced in the file.
  128. Maybe dump some arity information?  Once this is done, both kinds of
  129. primitives can be merged.
  130.     Jinx 11/17/87
  131.  
  132. * Change primitives to use uniform mechanism like external primitive
  133. mechanism.
  134.     Jinx 11/17/87
  135.  
  136. * Change the internal representation of primitives.  Instead of being
  137. just the primitive number, the high 12 bits of the datum can be the
  138. primitive number and the low 12 bits can be the primitive number if
  139. implemented, MAX_PRIMITIVE + 1 otherwise.  Then the primitive
  140. procedure table can be grown by 1 (with an error procedure) so that
  141. when invokig primitives the masking will automaticall cause an error
  142. procedure to be invoked if the primitive is not implemented, without
  143. comparing against MAX_PRIMITIVE.
  144.     Jinx 12/4/87
  145.  
  146. * Improve compiled code interface to primitives.  Make them be
  147. expensive on backout, not on normal call.
  148.     Jinx 12/4/87