Copyright (c) 1997 - 2004 Harold Carr
This work is licensed under the Creative Commons Attribution License.
To view a copy of this license, visit
http://creativecommons.org/licenses/by/2.0/
or send a letter to
Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
------------------------------------------------------------------------------
Created : 1999 Dec 18 (Sat) 17:14:40 by Harold Carr.
Last Modified : 2005 Mar 15 (Tue) 13:44:12 by Harold Carr.
To do:
* Make new/new* start-new-thread/start-new-thread* etc., consistent.
* -println flushing?
* llava.org doc: replace link to try as derived conditional to
the larger try/catch/finally section.
* Fix incorrect LOCATION in LlavaDoc output (workaround is explicit location)
* Make procedures in llavalib.scm.Predicate built-in.
* Ant build of llavalib, *.class, *.jar
* Find sourceforge like repository but using subversion
* Have (-bt) use -write: need to change toStringForBacktrace to write
instead of collect.
* Change: Error: java.lang.Exception: expected a number, got: a
to use write.
* Reader e, o, x, etc.
* javadoc llava
* Make scheme IF be default?
* Extend display, write, newline, read to take optional arg of many types.
* eq?, equal?, = : think about it
* Make importing from jars extensible.
* LlavDoc
generate library includes
embedded and script
lib.llavadoc.LlavaDoc
.*.xslt
* cross references in doc: define
* prettyprint
* llavadoc "define-syntax"
* Make defmacro builtin.
* Macroexpand
* Only one level of macro expansion seems to be happening at read/compile
time:
llava-> (getSource (getCode (lambda (x) (cond ((null? x) x) (else "no")))))
(-if (null? x) (begin x) (cond (else "no")))
* unset! ??
* Todo in namespaceimpl.
* Need to be able to coerce to short, byte
e.g., try creating a org.omg.IOP.Encoding
* Need to be able to emulate casting null: () null
So you can get DI to work with null arguments to methods
with several methods of same name but different types.
* How to deal with inner class creation and reference from llava syntax level
* Make undefinedIdHandler into two distinct classes rather than anonymous.
* Implement pluggability in factories.
Plus, do not create individual type factories until needed.
* make .print/display/newline use current std out (in repl).
* Check close after load - and check logic of PrimLoad
* checkNumArgs
* 1. Rewrite DII (i.e., dynvoke - call it Reflect, or DII).
DII and DIIImpl. -> PrimInvoke (etc.) will then need DII instance.
2. Enable auto-generic toggling
* reader: make object eq? constants for all tokens.
LlavaInteger subtype of Integer which preallocates range: ?-128.
LlavaDouble subtype of Double which preallocates 0.0, 1.0, ?
Note: can't subclass Integer or Double.
* lambda, assignment, etc as pluggable syntax rather than built
into the compiler.
* Interface and *Impl for all Prim* Code* etc.
* Make other procedures like c*r as generics off of Pair rather
than explicit primitives.
* define-final (use on lambdas, not generics).
* Internally use define and define-final rather than set
* Optimize
startup
- collect all derived into one internal string.
- or convert derived into explicit Java code.
- or speed up system itself so code runs faster (do this first)
Enable non-generic version which explicitly has primitives
in one class and switch statement in apply.
* support serialization of Llava
* Enable anonymous classes for primitives (and maybe use them).
* Factor primitive invoke/field methods.
* Visit "REVISIT" in code.
* REVISIT ThreadDeath in EngineImpl and GenericProcedureImpl.
* Reconsider undefined turning in GenericProcedure.
Obviates define before set!.
------------------------------------------------------------------------------
Create classes on the fly:
(package
(import org.llava.lib.java.util.Hashtable)
(public class MyPair
(implements some.Interface) // either full name or name-space support
(extends some.Class)
(private Object _car) // only private fields
(private Object _cdr)
(private Hashtable _shared)
(public (MyPair car cdr)
(set! _car car)
(set! _cdr cdr))
(public Object (car) _car)
(public Object (cdr) _cdr)
(public Object (set-car! v) (set! _car v) v)
(public Object (set-cdr! v) (set! _cdr v) v)))
Compile MyPair to a byte-coded interface.
Then proxy:
(let ((_car null)
(_cdr null)
(_shared null))
// proxy stuff here
)
Need new support for:
(new 'MyPair 'a 'b)
------------------------------------------------------------------------------
* Architecture
- top level and what is passed between compiler and evaluator.
- environments.
Runtime
Top
Frame
Compiletime
Lexical
Macro env ?? (probably should go in top or frame).
;; End of file.