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.