Agenda for the 1.8.x -> 2.x transition     -*- outline -*-

1.95.x
* decently working JIT for x86 (done)
* libtoolize it (done)
* work under 64-bit architectures (done)
* asynchronous I/O (done)
* more example modules and documentation for modules (done)
* i18n (done)
* implement restartable processes for the JIT (done)
* check the interpreter under gcc 3.0 (done)

2.0
* documentation for Blox and TCP (done)
* documentation and GNU-ization for the C code (done)
* finish TCP (mostly done, have to test out-of-band data, ICMP and UDP)
* all GNU lightning targets must be tested (only SPARC missing)
* provide a NamespaceBrowser, necessary now that namespaces are widely used
* test everything more thoroughly

2.1
* some of the VM tasks from the list below

Let's go!

-----

more things to do somewhen...

vm

* Separate FloatD/FloatE/FloatQ.  Easier now that we have named primitives
  (in the development versions)

* Write LargeInteger primitives.  Investigate leveraging code from
  GNU bc/dc.

* Improve the memory manager.  The current one works, but not so
  cunning and definitely not scalable.  a) Allocate large objects in
  FixedSpace (since object are large, they wouldn't fragment the heap
  that much)  b) use multiple heaps each with its own OOP table
  c) investigate using memory locks to implement write barriers

* Annotate the CodeTree with possible ranges of integer values
  (getting clues by ifTrue/ifFalse's, assignments, and maybe
  adding/subtracting values with known ranges).  This should allow
  one to know for sure when overflow cannot happen and to propagate
  TREE_IS_INTEGER flags. (some broken code is there, we should
  really use SSA...)

* Of course, every kind of black magic could be done in the JIT....

-----

blox

* Use GTK.  Maybe with a --enable-blox={tk,gtk} configure option
  so that the work made to date is not wasted.  Prefer GTK under Unix,
  Tk under Windows (more stable).  Use libgnomeui for the canvas
  widget.  A little has been done to make geometry management compatible
  with GTK (Alignments can be used to obtain rubber-sheet geometry
  management), and the bindings are partly done.

-----

goodies

* implement a better packaging system allowing zipped source files with
  XML package descriptions to be delivered and installed.  Investigate
  using fastjar from gcc, and add a DeflatedStream, maybe with a C
  module for speed.

* make the smalltalk cpp work - nothing less, nothing more ;-)

* integrate VisualWorks' XSL processor (needs an XPath parser).

-----

emacs mode: here are some notes from Steve Byrne

* fix $. to be handled specially -- indenter gets confused on 
   ch == $.
      <here>ifTrue: 

* fix emacs mode so when a compile error occurs, it can be scanned ala C-x`

* doesn't align right -- the indicated line is much too far over to the left.

    self computeTypeString: elementType block: 
	[ :size :alignment 
	  :typeString | aBlock value: size * numElts
			       value: alignment
			       value: '(CArrayCType baseType: CArray ',
--> 	                             'subType: ', typeString,


* block parameter indenting in .el should align parameters better.

* emacs isearch c-u c-s should search for a string anchored at the start of a
  line, to help finding method definitions.

* quitting smalltalk subprocess 1) doesn't scroll necessarily (it should) 2)
  doesn't cause a new directory to be associatged with the buffer when
  it runs the first time (it should, doing a filein from a random context
  is a bad thing).

* fix monitoring so that it works across immediate expression boundaries
  (currently, around each call to yylex it gets turned on and off, isntead
  of being restored to its old state.)

* this code, without the dot after blue, causes * scalar to indent wrong.

  - otherRGB
       ^RGB red: red - otherRBG red
	    green: green - otherRGB green
	    blue: blue - otherRGB blue.
  !

  * scalar
