Back to index

LispMe History

Though there may be several additions/modifications in each release, the one I consider most important is written bold.

V1.00 22.08.1997

initial release

V1.10 (internal version)

enhancement:
optimization of conditionals (if, and, or)
new:
tail recursion elimination
bugfix:
duplicate names in lambda, let, letrec
new:
added begin expression
enhancement:
modified samples to take advantage of tail recursion, begin
new:
added execution statistics

V1.20 07.09.1997

enhancement:
safer memory management
new:
command "reset to factory settings"
cleanup:
moved "reset heap" to menu
cleanup:
minor cosmetic tweaks
new:
top-level define
cleanup:
let and letrec syntax as in Scheme
new:
option for auto power off
new:
print expression
cleanup:
samples modified for new syntax
enhancement:
all samples as .csv file for easier import

V1.30 (internal version)

bugfix:
(quote . any) traps
new:
cond special form
new:
functions set-car! and set-cdr!
new:
slashified symbols (removed in V1.50)

V1.40/28.10.1997

new:
PalmOS2 support
enhancement:
more memory
new:
floating point numbers
new:
transcendental functions using MathLib
enhancement:
Print depth in setup dialog
enhancement:
own scanning/printing routines for floats as ROM routines are junk :-(
enhancement:
better error messages
bugfix:
check OS version
enhancement:
extended standard library
new:
memory statistics
cleanup:
#t and #f like in Scheme
bonus:
conditionally compile PalmOS1 version

V1.50/21.11.1997

optimization/fix:
various code size optimizations and minor glitch fixes
cleanup:
internally composite objects like procedures and continuation are no longer pairs at user level
new:
characters
new:
strings
cleanup:
display, write and newline instead of print
new:
graphics primitives draw, rect and text
enhancement:
font and pattern support for graphics
enhancement:
clip graphics to output area
new:
global vars *point*, *font* and *pat*
removal:
dropped slashified symbols
new:
syntax for hexadecimal string constants

V1.60/21.1.1998

cleanup:
use machine format with object->string
cleanup:
escape # when outputting strings
bugfix:
crash with font 7
cleanup:
else no longer a variable
new:
HTML documentation
optimization:
load time
bugfix:
added missing functions in on-line help
bugfix:
button display in long evaluations during memo load
new:
procedures read, read-string, message, and wait-pen
new:
Tic-Tac-Toe sample program

V1.70/8.3.1998

enhancement:
use DB memory for heap etc., allowing 32k heap on any Pilot
bugfix:
parsing multiple SEXP after a dot
bugfix:
wrong error message for set-car! and set-cdr!
bugfix:
a subtile bug in pointer tagging made pairs having integer -2048 .. -1921 in their car look like non-pairs to the VM
enhancement:
finally found a way to have more than 32k code with gcc, so be prepared for a bunch of new functions/types!
new:
procedures random, disasm, sound, and wait
new:
switching to another application no more aborts a running evaluation. The evaluation is resumed when you restart LispMe.
new:
MemoPad I/O via standard Scheme port mechanism
change:
former procedures read and read-string now called input and input-string to be compatible with ports
new:
procedure dir and delete-file

V1.80/19.4.1998

bugfix:
check frequency parameter of sound
cleanup:
omit trailing space in object->string
new:
vectors
cleanup:
(or e1 e2) returns e1, if it is true
new:
A little theorem prover (sample program) submitted to me by Winton Davies.

V1.90/9.5.1998

bugfix:
print formatting with memos
enhancement:
changed vector representation for faster GC
bugfix:
wrong masking for UID in vector access
new:
Parentheses Hack for easier input of programs

V2.00/4.7.1998

LispMe

enhancement:
single argument for /
enhancement:
any number of arguments for +, *, min, max, append, and string-append,
enhancement:
any number of arguments for and, and or,
cleanup:
return #n for definitions and after loading memos
enhancement:
optimised cond
new:
special form case
new:
complex numbers
change:
made expt and log10 library procedures instead of primitives.
bugfix:
check recursion depth in reader and compiler
bugfix:
repeatedly outputting the same vector didn't unlock its chunk when output was truncated
bugfix:
accented chars in string->list causes invalid pointer error

Parentheses Hack V1.1

bugfix:
wrong match when overwriting selection with closing parenthesis
enhancement:
much faster parentheses matching in very long lists without line breaks
enhancement:
Entering 0 behaves like o and 5 like s, so position of navigation stroke doesn't matter.

V2.10/8.8.1998

LispMe

enhancement:
better error message for invalid parameter
bugfix:
fixed numeric cancellation problem for certain (large) complex arguments to asin, asinh, acos and acosh
bugfix:
more precise recursion depth checking in compiler
new:
added preference setting for lefthanders
cleanup:
spacing in menus
cleanup:
renamed menu shortcuts in options menu according to Palm UI guidelines
bugfix:
update scrollbar with Parentheses Hack
PalmIII support:
small icon
PalmIII support:
correct version number in info
PalmIII support:
support new bold large font with text
PalmIII support:
twice the stack space for read, compile and GC
new:
Edit button added in load dialog. Jumps to offending source text on syntax errors.
bugfix:
applying a procedure with optional arguments modified its argument list, now copy arg list in this case
bugfix:
eqv? now returns #t for two empty strings

Parentheses Hack V1.2

bugfix:
send changed notification for scrolling

V2.20/25.8.1998

LispMe

bugfix:
GC while copying the argument list during apply created an invalid pointer.
bugfix:
Leaving LispMe when output had been truncated and restarting it overwrote one byte after the output buffer
bugfix:
Scanning problem when #\) was the first item in a list.
new:
nested defines, i.e. whereever an expression sequence is allowed, it may be preceded by local definitions
enhancement:
Hardware scroll buttons now work in Load Dialog (PalmOS2 only)
bugfix:
read raised an error when only white space was left in a memo. Now correctly returns [eof].
new:
quasiquote expressions
change:
madeappend a primitive procedure instead of library

V2.30a/12.12.1998

LispMe

bugfix:
Trying to apply a closure to a vector created an invalid pointer.
bugfix:
Atom sizes >4096 bytes aren't addressable and are now disallowed.
cleanup:
Major code cleanup and rework
enhancement:
GC while parsing or compiling now allowed
new:
Option for printing quote, quasiquote etc. expressions in short form.
optimization:
Reduced polling frequency for break button but poll after every GC or output
new:
eval
enhancement:
Now use DB records for strings just like vectors
bugfix:
Treat closures etc. as valid expressions for eval
bugfix:
Make string-append always return a copy, even if it's called with one argument
enhancement:
Increased buffer size for string->object and object->string
enhancement:
Increased maximum token length
new:
gensym
new:
Popup list with all symbols in main form
bugfix:
handle tail recursion correctly in let and letrec context
new:
none?
new:
Macros
new:
Hex syntax for character constants
bugfix:
A silly environment depth bug interfered with macro invocations in recursive contexts :-(

V2.4/13.2.1999

LispMe

bugfix:
Garbage collection problem with certain strings
bugfix:
A temporary was not properly protected against GC when compiling letrec expressions.
enhancement:
64k heap allowed
new:
bitmap
new:
event
new:
disable LispMe event handling by own-gui
new:
allow PalmOS event handler to be written in Scheme
new:
many UI access functions
enhancement:
dir accepts category argument. Also handles secret attribute correctly, as well as the load dialog.
removal:
Support for PalmOS1 (Pilot 1000 and 5000). Seeing the growing percentage of PalmOS2 and later devices and the growing memory requirements for LispMe, I think supporting LispMe on PalmOS1 isn't worth the effort anymore. RIP.

V2.5/13.5.1999

LispMe

bugfix:
Garbage collection during certain phase of string creation caused data manager index error.
bugfix (Palm III ROM bug):
Current font height was used in title bar of about box, which overwrote memory when non-standard font had been selected for text output.
enhancement:
incremental search in symbol list enabled
bugfix:
repeatedly outputting the same string didn't unlock its chunk when output was truncated
new:
Multiple sessions
cleanup:
New icon, more suited to both Scheme and Pilot spirit :-)
new:
Create launcher icons for sessions
enhancement:
Use table for session list, show icon and size
cleanup:
Now use category instead of secret bit to distinguish vectors from strings to have correct record count in appl list when privacy is turned on.
enhancement:
Allow extra chars in symbols
new:
write-record
new:
date-time

Fix a/8.6.1999

bugfix:
Wrong allocation protection made complex constants impossible in memos.

V2.6/27.11.1999

LispMe

new:
Released as Free Software according to GNU GPL
bugfix:
Euro symbol support with PalmOS 3.3
bugfix:
Don't store LocalIDs of other DBs to allow beaming of sessions etc.
new:
Reload button

Revision A

bugfix:
Trouble on a Palm IIIx or Palm V with the 3.3 update when trying to load a memo caused an exception. CategoryCreateListV10 was the reason, now replaced.

Revision B

bugfix:
gensym counter was reset at each start
bugfix:
Some broken links in the docs fixed
bugfix:
Removed reverse in theorem prover sample
enhancement:
Allow drawing in XOR-style via the pattern #n

V2.7/16.04.2000

LispMe

new:
Internal editor
enhancement:
Allow oversized memos within internal editor
enhancement:
Interrupt check after sound and wait
bugfix:
Correct handling of field/scrollbar with non-standard fonts
enhancement:
Shortcuts for button commands for GoType users
enhancement:
Ported to GCC 2.0 and SDK 3.5; made multi-segment application
new:
Support for pedit
enhancement:
Switchable case sensitivity for symbols
new:
HanDBase access functions
cleanup:
Rewrote graphics state handling
new:
Color support with OS 3.5
bugfix:
Handle incompatible sessions more gracefully
new:
Clear input and output fields menu commands
new:
Eval selection command in internal editor
new:
Explicit garbage collection gc
enhancement:
Look into all open resource DBs for icons when creating a starter app
supplement:
make-string
supplement:
set-palette
bugfix:
Crash with FrmUpdateForm on OS3.5 (debug only)

V2.8/8.11.2000

LispMe

bugfix:
Changed case of LispMe.h header for Linux
new:
Bitwise logcal operations bit-and,bit-or, bit-xor, bit-shift, and bit-not,
enhancement:
UI field clipboard operations
new:
UI scrollbar support
enhancement:
More UI field functions
bugfix:
Output truncation with message over 64 bytes
enhancement:
Bigger message output, now 256 bytes
enhancement:
Optimized list construction leading to improved performance.
bugfix:
Handle embedded NUL bytes more gracefully with read-line Thanks to James Aspnes.
enhancement:
Generalized c[ad]+r, upto 13 levels by encoding car/cdr in bitstring. Thanks to Hallvard Trætteberg
enhancement:
Menu commands Eval 2nd and Eval 3rd to evaluate 2nd or 3rd expression in input field.
enhancement:
Symbol completion and improved symbol list. Thanks to Hallvard Trætteberg
new:
launch
bugfix:
Correct marking of error position in MemoPad
new:
Support for all variants of pedit, including Memo32 source format
new:
Support loading DOC format source files
bugfix:
Record UID don't stay constant when beaming a session (possibly when Hotsyncing, too), so bus errors were possible when beaming a session containing strings or vectors. Introduced new Pickle Heap menu command for preparing a session to be sent.
enhancement:
Alternative in if now optional.
enhancement:
Step expression in do macro now optional.

V3.0/25.11.2001

LispMe

enhancement:
Integrated Hal's primitive symbols
enhancement:
Automatically select a session after creation
enhancement:
Automatically open new session dialog when there's no session
bugfix:
Any name starting with c[ad]+r was incorrectly handled
cleanup:
Totally rewritten: Standard compliant handling of builtin procedures
new:
Dialogs pick-date, pick-time, and pick-color
new:
GUI functions ctl-hit, frm-help
new:
Extension module mechanism
new:
Interface for adding foreign types
new:
Memory/GC and printing support for foreign types
cleanup:
Removed pickle menu command, pickling is now automatic
cleanup:
HandBase support totally rewritten as an extension module
new:
eqv? support for foreign types
new:
types date, time, and timestamp as foreign types in extension module
cleanup:
Database support totally rewritten as an extension module
new:
Extension module interface documentation
bugfix:
Recognize crashed sessions on reconnect to avoid havoc when unpickling :-)
enhancement:
Speed up access to global variables by embedding the value cell in the code list, thanks to Hallvard Trætteberg
optimization:
Split opcodes in major/minor parts to shorten bytecodes by embedding small integer constants
new:
History of expressions evaluated
new:
member, assoc, rassoc, equal? and length now builtin functions
new:
Check for circular lists
new:
while loop and mset!
new:
Events frm-update, frm-title-enter, and frm-title-select
bugfix:
Crash when repeatedly evaluating selection from builtin editor, also redraw main form.
enhancement:
Runtime type error messages now give better contextual information
cleanup:
Port support totally rewritten as an extension module
enhancement:
Speed up search of builtin symbols
new:
Option to rewrite redefinitions of symbols to set!
enhancement:
When any text in the input field is selected, the expression to be evaluated starts at the first selected char.
new:
Compiler extension functions, used for eval, while, and pset! now.
new:
Socket support
new:
Arglist menu command
enhancement:
Store parameter names within closures to be displayed on arglist menu command
enhancement:
newline now a builtin procedure
new:
string-tokenize procedure
cleanup:
split catalog of language elements
enhancement:
let* and reverse now builtin
bugfix:
(eval `(,cddr '(a b c))) trashed stack
new:
Allow radix specification in number syntax
cleanup:
Separate src directory
enhancement:
Option to automatically display function parameters when completing name from symbol list.
cleanup:
Generalized port datatype for all I/O operations
enhancement:
variable *outfield* to access the standard output field as a port
new:
Output to DOC files
Beta release

bugfix:
Memory corruption in bitmap
bugfix:
Memory corruption when both changing output size and heap re-init in setup dialog
bugfix:
Allow initial empty string as port read buffer
removal:
Support for PalmOS2 (Pilot Personal/Professional). Seeing the growing percentage of PalmOS3 and later devices and the growing system requirements for LispMe, I think supporting LispMe on PalmOS2 isn't worth the effort anymore. RIP.
enhancement:
Arglist display for non-native functions, events, and keywords.
new:
Functions fld-dirty? and fld-set-dirty.
new:
move now builtin function
cleanup:
Removed hard-coded function etc. help texts from resource. Replaced by dynamically generated help.
enhancement:
do now a builtin compiler extension
enhancement:
Avoid inserting the same expression into the history list twice.
enhancement:
Timeout value for frm-popup and frm-goto and associated timeout event for background processing during event handling etc.
cleanup:
finished documentation
new:
Function close-netlib

Revision A

bugfix:
Reading beyond end-of-file of a memo input port caused a fatal exception.

Parentheses Hack V1.4

cleanup:
Avoid Poser warnings about directly accessing field structure.

V3.1/23.02.2002

LispMe

new:
Low-level C datatype conversion module
enhancement:
Automatically select the next file to be loaded when re-entering the load dialog.
enhancement:
Simplified UI for sessions started via launcher icons.
enhancement:
Evaluate expression in history when tapped in the left half, copy it to input field when tapped in the right half.
enhancement:
Virtual key codes in key-down event.
enhancement:
Support GoType up/down keys in load dialog.
enhancement:
Call native functions with parameter array instead of list.
optimization:
Store index instead of UID in heap cell for array-like data (vectors, strings, bigints), giving O(1) complexity for access (was O(n) in earlier versions).
optimization:
Garbage-collecting arrays always removes records with highest index to avoid shifting existing ones.
new:
Menu command Clear history
new:
Big integers
bugfix:
Check screen depth when using color indices.
enhancement:
Set focus to input field on startup.
enhancement:
Allow bigints as vector/string indices, so max. string size is now 64k, max vector size 32k elements (dictated by the Palm's 64k memory block limit)
bugfix:
Private memos were always hidden.
new:
String array foreign datatype
bugfix/enhancement:
Use string array foreign datatype and form-associated data to allow more than one custom-filled listbox and ensure proper lifetime/garbage collection of list elements. Thanks, Hal!
new:
Access the serial port via standard Scheme ports.
bugfix:
pick-time interpreted time argument wrong
Beta release

enhancement:
Display session name as title in sessions started via icon. Also added About menu.
cleanup:
Used (big) integers where reals were used earlier because of range problems with small integers (e.g., date etc.)
cleanup:
Documentation review.
enhancement:
Close/reopen serial ports when pickling/unpickling.
new:
IR Chat sample program

V3.11/01.04.2002

LispMe

bugfix:
Inproper nesting of PROTECT/UNPROTECT in bit-shift on early return of small ints caused Fatal Exception.
enhancement:
Support 32 bit IEEE reals in C structures.
bugfix:
pair? returned #t for foreign data
new:
functions ctl-set-label and frm-get-prop
cleanup:
New internal type <id> for UI ids.
bugfix:
Internal editor didn't set dirty bit correctly.

V3.2/15.12.2003

LispMe

new:
ctl-get-label
bugfix:
(quotient -16384 16384) (and modulo, divide) gave wrong results
bugfix:
real-part, imag-part, magnitude, and angle didn't work with big integers, now redefined as builtins
new:
conjugate
new:
string-lower
enhancement:
When copying a history entry, contents are inserted instead of overwriting input field.
new:
get-sys-pref, set-sys-pref
OS5 compatibility:
add ParHack functionality to LispMe itself
OS5 compatibility:
remove MemSemaphoreReserve() and incremental search in symbol popup list
enhancement:
The Arglist button is now applicable to both the current text selection (input and output fields) and the symbol left to the cursor.
enhancement:
Either the current text selection or the symbol left to the cursor is used when positioning in the symbol popup list.
enhancement:
Split heap in cars and cdrs thus doubling maximum heap size
modification:
Several changes in signatures (e.g., GUI ids) due to reduced range of small integers.
new:
frm-alert
Beta release

bugfix:
Update scrollbars in internal editor when entering newline.
bugfix:
lookup-host returned random IP on nonexisting host with OS5
bugfix:
Crash after changing heap size/reset heap due to uninitialized outfield
bugfix:
MemSemaphore handling depending on processor type and OS
bugfix:
Invalid chunk pointer due to multiple evaluation of macro parameter in standardUnpickle()
enhancement:
Support for HanDBase V3
new:
Virtual file system API for accessing memory cards

V3.21/16.01.2004

LispMe

bugfix:
Closing memo/DOC ports crashed
bugfix:
wait did not work with OS5
bugfix:
Some invalid HTML in docs
new:
Added catalog in PalmReader format (Thanks to Ignazio Di Napoli!)

V3.22/08.08.2008

LispMe

bugfix:
do assigned instead of rebinding
enhancement:
Named let
new:
cat-get-name