# $Id: TODO,v 1.10 2001/09/18 02:03:21 matju Exp $

0.7:
[x] fix Undoable
[ ] update documentation
[x] make installer
[ ] commit all stuff

Array/Hash/String/IO/File Mixins:
--- other
[ ] change Assert: #assert_foo -> Assert.foo (to clean namespace)
[ ] add Observable.rb
[ ] integrate Observable/Observer pattern with the rest
[ ] take care of #clone() (?)
[ ] Default values in Array,Hash. (doesn't apply to String ?)
[ ] Provide 2 samples for HashMixin
[ ] Provide 2 samples for StringMixin
[ ] Fix the return type problems / quirks.
	-> eg: return type must be a real Array or self.type ?
[ ] IOMixin be written and pass 50% of the tests
[ ] Provide 2 samples for IOMixin
[ ] patch TestFile and use it
[ ] Fix all the things marked with #!@#$
[ ] Tune for time spent, object count usage, memory usage.
[ ] fix the #[] class method non-inheritance (?)
[ ] remove big test case files when updated rubicon tarball released.
[ ] Common method for accessing the caller's scope
[ ] write reimplementations of: pack, unpack, tr!, etc.
[ ] take care of tainting
[ ] take care of safe levels if applicable
[ ] take care of synchronization
[ ] more test cases for tainting
[ ] more test cases for freezing
[ ] more test cases for parameter invariance (?)
[ ] {Array,String}UsingRegions
[ ] ArrayUsingBinaryTree, AdaptiveStructureArray
[ ] ArrayUsingObject, HashUsingArray
[ ] Annotated{Array,String}, SubArrayProxy
[ ] DirectoryAsHash, FunctionAsHash (?)
[ ] FileAsString, StringAsFile, FileAsArray, ArrayAsFile
[ ] FileSequence
[ ] StringUsingArray
[ ] Typed{Array|Hash}
[ ] ArrayMixinContract
[ ] StringUsingFrozenString
[ ] StringWithLazyCopy
[ ] ModuleConstantsAsHash, ModuleMethodsAsHash
[ ] ObjectMethodsAsHash, ObjectVariablesAsHash
[ ] make ProcArray#dup work
[ ] support transactions: begin/commit/rollback with collision detection
	etc. this basically involves copies and diffs of the original data.
	there's a lot of interesting stuff to be done with diffs and
	transactions.

ToSource/LGRAM:
[ ] structured formatting
[ ] loop-handling, merge-handling options (or non-options)
[x] Integrate into MetaRuby
[x] Change name
[ ] Read "marshal.c", and docs.
[x] LispParser
[ ] RubyParser (limited to what RubyWriter can write)
[ ] FullRubyParser, RubyAST (all of Ruby, layered)
[ ] Traversal options
[ ] Pretty-printing options
[ ] support for Float
[ ] support for Infinity, NaN
[ ] 

Packaging:
[ ] take care of installation, test automation
[ ] do more testing

Future Stuff:
[ ] grammar/parser/unparser ?
[ ] is an event loop relevant to MetaRuby ? (maybe not but i have one)
[ ] Regexp engine in Ruby
	(that works on top of StringMixin)
	(won't write that myself)
[ ] lazy/relational/goal-directed/dataflow programming support.
[ ] define Tuple,TupleClass,TupleSet.
[ ] binding.local :foo, "towel" do ... end, something like:
	class Binding; def local(var,val)
		backup = eval "#{var}", self
		eval "#{var} = #{val.inspect}",self # hack!!!
		yield
		eval "#{var} = #{backup.inspect}",self # hack!!!
	end end
    # could also be binding.fluid

#----------------------------------------------------------------#

<knu> just one thing the stock ruby can't do as simple as Perl:
@hash[@keys] = @values; 

#----------------------------------------------------------------#

QUESTIONS

* should #frozen? be included in Simple Protocols ?

QUESTIONS (Hollow/Array)

	1. should a new method named #get_many be added?
		It would be working like this:
		
		def get_many(some_array)
			does a fast equivalent of some_array.map! {|x| get x }
			returns void

	2. should there be two interfaces instead of one, a minimal one, and
		a performance one? Things of the #get_seq, #put_seq kind would
		go in the latter.

			alecx says yes.

			btw #put_seq is req'd, but given that, #put is not.

	3. should #frozen? be included in interface ?

BUGS & QUIRKS (Array)

1. [dave] #map returns Array, #map! returns ArrayMixin

2. [matju] #replace does not accept ArrayMixin

3. [dave] #reject returns an ArrayMixin and #reject! too; this is not like
	#map, #map!

4. [matju] #dup cannot be overridden.

MORE BUGS

1. Contracts use a #frozen? which is not available to them.

