15dfecf96Smrg$XFree86: xc/programs/xedit/lisp/TODO,v 1.8 2002/11/23 08:26:47 paulo Exp $
25dfecf96Smrg
35dfecf96SmrgLAST UPDATED:	$Date: 2008/07/30 04:16:22 $
45dfecf96Smrg
55dfecf96Smrg  Small todo list
65dfecf96Smrg
75dfecf96Smrgo Change function/macro body to know if a &key or &optional argument was not
85dfecf96Smrg  provided, and initialize to the default value in the function, for
95dfecf96Smrg  interpreted and builtin functions it is better done before the function is
105dfecf96Smrg  called, but for bytecode it is better in the function.
115dfecf96Smrgo Following the previous idea, change function definitions in the format:
125dfecf96Smrg  (defun afun (a &aux b (c (some-code))) ...)
135dfecf96Smrg  to
145dfecf96Smrg  (defun afun (a) (let* ((b (c (some-code)))) ...))
155dfecf96Smrg  This can significatively reduce bytecode size, and also simplify function
165dfecf96Smrg  calls.
175dfecf96Smrgo Optimize text redisplay in Xaw, instead of allocating a copy of the buffer
185dfecf96Smrg  for the paint-list, should use the text in place, and only allocate small
195dfecf96Smrg  buffers when required, i.e. displaying control characters, etc.
205dfecf96Smrgo Add an interface to create new object types dinamically.
215dfecf96Smrgo Add a special string object to simplify and avoid too many copies of
225dfecf96Smrg  portions of the text buffers. This special string should be read-only
235dfecf96Smrg  and not gc-collected.
245dfecf96Smrgo Make the bytecode compiler smarter to detect some constructs like:
255dfecf96Smrg  (builtin-or-bytecode-function-call arg1 arg2 (return))
265dfecf96Smrg  this will not properly restore the internal stacks.
275dfecf96Smrg
285dfecf96Smrgo When an Init function is present in every file, call LispAddBuiltin from
295dfecf96Smrg  that initialization function.
305dfecf96Smrgo Cleanup the code, make it optional to build some uncommon features (as well
315dfecf96Smrg  as the entire interpreter?). Implement more functions directly in lisp.
325dfecf96Smrgo Finish an "specification" for loadable modules. Write a FFI interface.
335dfecf96Smrg  Without the possibility of using already existing libraries, the interpreter
345dfecf96Smrg  won't be too much useful due to a poor library. It is very desirable to
355dfecf96Smrg  "auto-generate" directly from C header files the interface to the lisp
365dfecf96Smrg  code, and from that, dlload a shared library. In some cases, it is required
375dfecf96Smrg  to link statically with a new interpreter binary, make it easy.
385dfecf96Smrgo Implement a better string type. That should support characters larger than
395dfecf96Smrg  8 bits, and that should allow embeded nuls.
405dfecf96Smrgo Implement a richer set of math functions. This, if properly done can be
415dfecf96Smrg  made a loadable module.
425dfecf96Smrgo Optmize mathimp.c, comparing a double with a bignum should never cause an
435dfecf96Smrg  error. Implement mp?_initsetXXX functions?
445dfecf96Smrgo Finish missing features in read.c, and simplify it.
455dfecf96Smrgo (close) probably should not send a signal when closing a pipe.
465dfecf96Smrgo Implement "real" vectors, they exist to make access to field elements
475dfecf96Smrg  at constant time, implementing vectors as lists may be very slow.
485dfecf96Smrgo Use float and double as floating points formats.
495dfecf96Smrgo Implement support for vectors of "atomic" types. Vectors of floats would
505dfecf96Smrg  be useful for example if a OpenGL binding is done.
515dfecf96Smrgo Implement a multiple precision floating point format. Either a 128 bits
525dfecf96Smrg  (or configurable length?) IEEE 754 like number, or some format using
535dfecf96Smrg  ratios, a epsilon for rouding, rounding modes, exact/inexact flag, a good
545dfecf96Smrg  amount of guard digits, etc.
555dfecf96Smrgo Write more functions and optimization for bignums. Try to make the code
565dfecf96Smrg  as reusable as possible, either by other software or at least by the
575dfecf96Smrg  different number types.
585dfecf96Smrgo Instead of using mathimp.c for a large amount of functions, implement a
595dfecf96Smrg  "generic number" type and implement the calculations directly in the
605dfecf96Smrg  mp library.
615dfecf96Smrgo Add more missing Common Lisp features, like &allow-other-keys for function
625dfecf96Smrg  definitions, the missing structure features, CLOS etc.
635dfecf96Smrgo Fix the Postgresql module, make it compile everywhere.
645dfecf96Smrgo Add support for multi-threaded applications?
655dfecf96Smrgo Make it possible to know if a object has only one reference, this is
665dfecf96Smrg  required to make "inplace" changes of variables. Very useful for things
675dfecf96Smrg  like (incf) and (decf), and also when dealing with bignums.
685dfecf96Smrgo Maybe have a freelist for objects depending on the type. Bignums can be
695dfecf96Smrg  reused, and having some large ones expecting to be freed by the gc can
705dfecf96Smrg  consume a lot of memory.
715dfecf96Smrgo Internationalization. Support ',' in floats? Correctly treat characters
725dfecf96Smrg  for {up,down}-casing.
735dfecf96Smrgo Synch the Xaw text code for supporting tables, text alignment/paragraphs,
745dfecf96Smrg  etc, and add bindings to the interpreter. Add support for incremental
755dfecf96Smrg  changes of those properties, currently it is "read-only".
765dfecf96Smrgo Write some type of "hyperlinks", this is the only feature missing to even
775dfecf96Smrg  allow writting a web browser inside xedit.
785dfecf96Smrgo Write some "demos" (maybe a file manager or a simple mail reader) using the
795dfecf96Smrg  Xt/Xaw bindings (needs modules working in all systems).
805dfecf96Smrgo Remove all calls to the macros GCDisable and GCEnable. This is unsafe
815dfecf96Smrg  and should be removed.
82