legcap v2
---------

gotchas:
* datasets created into inheritance will affect those datasets on reload
* no renaming entries
* quotas need to be implemented

- newentry.sml:
	- does create enforce acls correctly?

- newdataset.sml:
	- cleaner:
		two handed clock?
		lru cache size alg?

- newexecute.sml:

do we want to use the atom type instead of strings where possible?

----------------------------------------------------

design:

- parser/lex (ml-yacc, ml-lex)

- central dispatcher

- i/o thread (threads, really) for each connection

- worker threads for each search (is this done?), communicate via
  mailboxes to i/o thread. threads for each context

- used to be functorized; defunctorized to allow better optimization,
  and now one doesn't have to fight sharing constraints.

-------------
BUGS/MISFEATURES:

- no atomic STOREs
	this is hard without a true database backend
	i think this should probably be dropped from the spec

- no multiple paths to dataset

- no support for DELETEDSINCE (technically conforming)

- no synchronized literals

- syntax errors always result in untagged BADs

- no quotas

- connections dropped while output is pending don't seem to be cleaned 
  up correctly

- possibly allows a single client to consume unlimited memory by doing
  sends but never recvs

- created datasets don't show up in open contexts

-------------
(bugs with the spec):

- what happens if we rename an entry on top of an existing one?
	currently, returns NO

- UPDATECONTEXT missing from grammar

- LISTRIGHTS wrong in grammar

- strings allow arbitrary 8 bit data during authenticate, too

- DELETEDSINCE is not well specified.
	what does it mean for an entry to be deleted?
	set to DEFAULT?
	set to NIL?
	what happens if it's set to DEFAULT and there's an inherited value?

- inheritance in general is not well thought out

- contexts on contexts?
