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.
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
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.
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
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!)
LispMe
- bugfix:
- do assigned instead of rebinding
- enhancement:
- Named let
- new:
- cat-get-name