1$XFree86: xc/programs/xedit/lisp/TODO,v 1.8 2002/11/23 08:26:47 paulo Exp $ 2 3LAST UPDATED: $Date: 2008/07/30 04:16:22 $ 4 5 Small todo list 6 7o Change function/macro body to know if a &key or &optional argument was not 8 provided, and initialize to the default value in the function, for 9 interpreted and builtin functions it is better done before the function is 10 called, but for bytecode it is better in the function. 11o Following the previous idea, change function definitions in the format: 12 (defun afun (a &aux b (c (some-code))) ...) 13 to 14 (defun afun (a) (let* ((b (c (some-code)))) ...)) 15 This can significatively reduce bytecode size, and also simplify function 16 calls. 17o Optimize text redisplay in Xaw, instead of allocating a copy of the buffer 18 for the paint-list, should use the text in place, and only allocate small 19 buffers when required, i.e. displaying control characters, etc. 20o Add an interface to create new object types dinamically. 21o Add a special string object to simplify and avoid too many copies of 22 portions of the text buffers. This special string should be read-only 23 and not gc-collected. 24o Make the bytecode compiler smarter to detect some constructs like: 25 (builtin-or-bytecode-function-call arg1 arg2 (return)) 26 this will not properly restore the internal stacks. 27 28o When an Init function is present in every file, call LispAddBuiltin from 29 that initialization function. 30o Cleanup the code, make it optional to build some uncommon features (as well 31 as the entire interpreter?). Implement more functions directly in lisp. 32o Finish an "specification" for loadable modules. Write a FFI interface. 33 Without the possibility of using already existing libraries, the interpreter 34 won't be too much useful due to a poor library. It is very desirable to 35 "auto-generate" directly from C header files the interface to the lisp 36 code, and from that, dlload a shared library. In some cases, it is required 37 to link statically with a new interpreter binary, make it easy. 38o Implement a better string type. That should support characters larger than 39 8 bits, and that should allow embeded nuls. 40o Implement a richer set of math functions. This, if properly done can be 41 made a loadable module. 42o Optmize mathimp.c, comparing a double with a bignum should never cause an 43 error. Implement mp?_initsetXXX functions? 44o Finish missing features in read.c, and simplify it. 45o (close) probably should not send a signal when closing a pipe. 46o Implement "real" vectors, they exist to make access to field elements 47 at constant time, implementing vectors as lists may be very slow. 48o Use float and double as floating points formats. 49o Implement support for vectors of "atomic" types. Vectors of floats would 50 be useful for example if a OpenGL binding is done. 51o Implement a multiple precision floating point format. Either a 128 bits 52 (or configurable length?) IEEE 754 like number, or some format using 53 ratios, a epsilon for rouding, rounding modes, exact/inexact flag, a good 54 amount of guard digits, etc. 55o Write more functions and optimization for bignums. Try to make the code 56 as reusable as possible, either by other software or at least by the 57 different number types. 58o Instead of using mathimp.c for a large amount of functions, implement a 59 "generic number" type and implement the calculations directly in the 60 mp library. 61o Add more missing Common Lisp features, like &allow-other-keys for function 62 definitions, the missing structure features, CLOS etc. 63o Fix the Postgresql module, make it compile everywhere. 64o Add support for multi-threaded applications? 65o Make it possible to know if a object has only one reference, this is 66 required to make "inplace" changes of variables. Very useful for things 67 like (incf) and (decf), and also when dealing with bignums. 68o Maybe have a freelist for objects depending on the type. Bignums can be 69 reused, and having some large ones expecting to be freed by the gc can 70 consume a lot of memory. 71o Internationalization. Support ',' in floats? Correctly treat characters 72 for {up,down}-casing. 73o Synch the Xaw text code for supporting tables, text alignment/paragraphs, 74 etc, and add bindings to the interpreter. Add support for incremental 75 changes of those properties, currently it is "read-only". 76o Write some type of "hyperlinks", this is the only feature missing to even 77 allow writting a web browser inside xedit. 78o Write some "demos" (maybe a file manager or a simple mail reader) using the 79 Xt/Xaw bindings (needs modules working in all systems). 80o Remove all calls to the macros GCDisable and GCEnable. This is unsafe 81 and should be removed. 82