Back to index

LispMe todo list and random thoughts

Non-standard define

The implementation of define differs from standard Scheme, all names are resolved during compilation.

Macro/eval

The implementation of the macro system is a kludge. (I'm not talking hygienic macros, i.e. define-syntax now!) Macros are expanded by invoking the VM during compilation. To allow interrupting the VM on a single-threaded OS, compotation procedes in "bursts" of STEPS_PER_TIME_SLICE=1600 steps at once, after which the GUI is re-enabled to accept Break events. However, during compilation no events are accepted, so after a given maximum number of steps macro expanding is aborted. I'd be happy when somebody could give a cleaner implementation here.

Macros/define

Macros can't currently expand to top-level define-expressions and other macro definitions, which inhibits writing macros like defun or define-structure (or implementing the hygienic macro system of R5RS via macro)

DB2 interface

Lately IBM released DB2 Everywhere, a tiny SQL relational database system for the Pilot. I'd like to be able to access those databases (via standard SQL!) with LispMe, but unfortunately IBM provides only libraries for Codewarrior, not for GCC :-( I imagine interfacing LispMe with SQL by a single procedure (sql statement), which takes the SQL statement as a string and returns either the SQLSTATE or (in case of an SQL SELECT statement a list of tuples (lists or vectors). Don't forget the datatype mapping between Scheme and SQL.

Version 2.7 includes support for HanDBase, which is far more popular than DB2 support.

require

A kind of require/provide mechanism for loading memos would be nice.

Case-insensitive symbols

George Caswell suggested making symbols case-insensitive because of a problem with Japanese character encoding. LispMe is generally case-insensitive and maps all input to lower case. This causes problems with multi-byte encodings (and doesn't work always with national special characters)
Additionally, there are some people wanting case-sensitive names, so the new preferences option "case-insensitive symbols" should be included.

This problem has been resolved in version 2.7

Memo alternatives

The 4kB Memo size limits is nasty, which makes splitting source code necessary. Other source formats (or maybe a builtin source editor?) would be nice.

This problem has been resolved in version 2.7 In version 2.8 support for both pedit and DOC source files has been introduced.

Splitting LispMe's code

LispMe's code is resource is just below 64k, the maximum allowed by GCC. Even the slightest addition or modification would break this barrier. Re-structuring the code, perhaps by using GLIBs, is inevitable before extending LispMe in any way.

This problem has been resolved in version 2.7 with the new prc-tools 2.0

Supporting more UI elements

Support for scrollbars and tables is missing, mainly because of the amount of glue code required, especially for the table callback interface.

Scrollbar support in version 2.8

Implementing the top-level in LispMe

LispMe's user interface is currently written in C. Another possibility would be writing the whole interface in LispMe itself, as basic UI functions are supported in LispMe. This would require some low-level primitives (error-handler, timer, memory manager) and at least an "emergency shell", if the UI code crashes.

Better demo applications

I'm still waiting for the breath-taking hyper demo program written in LispMe which shows all the PocketC/cBasPad/Quartus Forth etc. users why Scheme is a better language ;-)
Seriously, a graphing, symbolic calculator (HP-28 or such like) shouldn't be too hard to be implemented in LispMe and is quite demanded, too, if you consider the requests in comp.sys.palmtops.pilot.

Speed

Is this an issue? In comparison to other interpreted languages LispMe occupies a middle position, but it has no chance against languages compiling to 68000 machine code (OnboardC, Quartus). Would this be in popular demand? See next item, too.

About 10% speed increase due to optimized function calling code in version 2.8

Stand-alone apps

Is creating stand-alone apps (preferrably in machine code, like Quartus Forth does) in LispMe an issue? Or should LispMe stay aimed to its original goal, prototyping and testing algorithms on the fly?

Installation tool for demos

Installing the demo programs is more work than necessary. A simple .prc file including all demos as string resources could install the memos (and create the Lisp category) automatically and remove itself afterwards.