Release history
4.8g
- Added a separate pstrstream() function to build strings for with-output-to-string, to allow string functions such as string to be used within a with-output-to-string form. It uses a new global variable GlobalStringStreamTail. Thanks to Daniel Mewes for suggesting this.
- Fixed a bug affecting the edit function that required an extra return to be typed.
- Added a function gserial_flush() to fix a bug that caused read or readbyte used in the REPL to return immediately.
- Eliminated compiler warnings "'result' might be clobbered by 'longjmp' or 'vfork'" generated by sp_unwindprotect() and sp_ignoreerrors().
- Removed the error "read can only be used with one stream at a time" which could be produced erroneously.
AVR Release 4.8g - 2nd December 2025
ESP Release 4.8g - 28th November 2025
ARM Release 4.8g - 27th November 2025
4.8e, 4.8f
- Redefined keywordp to return the value of a built-in keyword, such as :led-builtin, rather than just t.
- Improved truncate, floor, and ceiling to always return exact results when the parameters are integers.
- Added support for the Adafruit Fruit Jam.
ARM Release 4.8e - 28th August 2025
ESP Release 4.8f - 28th August 2025
4.8c, 4.8d
- Added support for the Adafruit PixelTrinkey.
ARM Release 4.8c - 31st May 2025
4.8a, 4.8b
- Fixed a bug in compactimage() that affected platforms with a large amount of workspace, such as with PSRAM.
- Minor improvements to the stream functions.
ARM Release 4.8a - 26th May 2025
4.8
- An improved implementation of streams which is more efficient, and provides the additional benefit that you can extend uLisp by defining custom streams in an Extensions File.
ARM Release 4.8 - 25th May 2025
4.7
- Allowed you to display a backtrace in each error message, showing the sequence of function calls that caused the error.
- Also featured several other improvements including a major speed improvement to save-image, and support for PSRAM on the RP2350.
4.6b
- Added an optional parameter to gc which, if set to nil, suppresses the printing of the space and time.
4.6
- A *features* variable that returns a list of keywords representing the capabilities of the version of uLisp.
- A copy-list function that returns a copy of a list.
- The flexible do and do* constructs that allow an unlimited number of loop variables, each with an optional initial value and optional step-form, and an end test.
- Three additional map functions: mapcon, mapl, and maplist.
- Three additional string comparison functions: string/=, string<=, and string>=.
- A :test keyword parameter allows you to specify an alternative test function for assoc, member, and search.
- You can use setf to modify a character in a string.
- User-defined keywords are recognised as keywords that evaluate to themselves.
AVR Release 4.6 - 13th June 2024
AVR-Nano Release 4.6 - 13th June 2024
ARM Release 4.6c - 6th October 2024
ESP Release 4.6d - 25th August 2024
RISC-V Release 4.6a - 2nd August 2024
4.5
- The ARM version added support for the two new Uno R4 boards from Arduino, based on the Renesas RA4M1 ARM Cortex M4 CPU.
ARM Release 4.5a - 16th January 2024
4.4
- uLisp was restructured to make it easier to extend uLisp with your own functions in an extensions file.
- The equal function compared strings and lists, in addition to the objects handled by eq.
- The subseq function could be used to create subsequences of lists as well as strings.
- The search function let you search for a pattern in string or list
- The apropos function let you search for built-in and user-defined functions and symbols matching a specified substring
- The unwind-protect, ignore-errors, and error functions provided advanced error handling
- Improved support for several platforms.
AVR Release 4.4b - 3rd April 2023
AVR-Nano Release 4.4b - 3rd April 2023
ESP Release 4.4d - 30th June 2023
RISC-V Release 4.4b - 3rd April 2023
4.3
- Integral documentation for all the built-in functions.
- The AVR version of uLisp was split into two versions, AVR and AVR-Nano.
AVR Release 4.3 - 15th September 2022
AVR-Nano Release 4.3a - 8th December 2022
ARM Release 4.3a - 18th September 2022
ESP Release 4.3b - 8th March 2023
RISC-V Release 4.3a - 26th September 2022
4.2
- ARM Release 4.2 added Wi-Fi extensions to support the Raspberry Pi Pico W, a pin-compatible version of the Raspberry Pi Pico that adds 802.11n single-band 2.4 GHz WiFi with WPA3 and a Soft Access Point supporting up to 4 clients.
ARM Release 4.2 - 19th August 2022
4.1
- Added a register function to allow you to read the values of peripheral registers, or write values to the registers. It allowed you to control the peripherals in the processor from a Lisp program, or interactively experiment with the peripherals by giving commands at the uLisp prompt.
AVR Release 4.1a - 30th December 2021
4.0
- Overhauled the way that symbols are implemented. It now uses the same representation for long symbols as for strings, making the symbol table unnecessary.
AVR Release 4.0b - 31st August 2021
ARM Release 4.0b - 2nd August 2021
ESP Release 4.0b - 20th October 2021
RISC-V Release 4.0a - 9th July 2021
3.6
- ARM Release 3.6d added support for the Raspberry Pi Pico.
- AVR Release 3.6 of uLisp included support for entering and executing machine code using the defcode form, which could be used with an AVR assembler written in Lisp.
- All versions of uLisp 3.6 automatically turn off echo when pasting a program into the Serial Monitor.
AVR Release 3.6 - 4th April 2021
ARM Release 3.6e - 19th May 2021
ESP Release 3.6b - 20th June 2021
RISC-V Release 3.6 - 4th April 2021
3.5
- Incorporated several bug fixes, and a few minor new features.
AVR Release 3.5b - 19th March 2021
ARM Release 3.5a - 19th March 2021
ESP Release 3.5 - 16th February 2021
RISC-V Release 3.5a - 27th February 2021
3.4
- AVR Release 3.4 added support for Microchip's AVR DA and DB series Curiosity Nano boards for the AVR128DA48 and AVR128DB48.
- ARM Release 3.4 added support for the BBC Micro:bit Version 2.
- On all platforms it supported keywords as a more convenient way of specifying options in Arduino functions, such as :input-pullup in pinmode.
- There are several other minor improvements and bug fixes.
AVR Release 3.4a - 5th January 2021
ARM Release 3.4 - 4th January 2021
ESP Release 3.4 - 4th January 2021
RISC-V Release 3.4 - 7th January 2021
3.3
- The 32-bit version of uLisp for ARM, ESP, and RISC-V microcontroller boards extends its array support to include bit arrays.
AVR Release 3.3 - 1st June 2020
ARM Release 3.3a - 1st June 2020
ESP Release 3.3 - 1st June 2020
RISC-V Release 3.3 - 1st June 2020
3.2
- Added a format function for convenient formatting of printed output (all platforms)
- Added multi-dimensional arrays on 32-bit platforms.
- Added graphics extensions for ARM, ESP8266/32, and RISC-V boards with suitable displays, such as the Adafruit PyGamer and PyBadge.
- Added better support for using uLisp from a serial terminal, including line editing and parenthesis matching.
- The AVR version of uLisp still supports the ATmega328P on the Arduino Uno, and in addition now supports the ATmega4809-based Arduino Nano Every.
AVR Release 3.2 - 29th April 2020
ARM Release 3.2 - 29th April 2020
ESP Release 3.2 - 29th April 2020
RISC-V Release 3.2 - 29th April 2020
3.1
- ARM Release 3.1 of uLisp included support for entering and executing ARM machine code using the defcode form, which could be used with an ARM Thumb code assembler written in Lisp.
- Release 3.1 features graceful recovery from stack overflows, support for the CLUE and ItsyBitsy Adafruit nRF52840 boards, support for SPI1 where available, new functions set and boundp, more efficient use of symbols, and in-line comments.
ARM Release 3.1 - 20th February 2020
RISC-V Release 3.1a - 29th March 2020
3.0
- Featured bug fixes.
- Release 3.0a adds the #. read-time eval macro.
AVR Release 3.0b - 11th January 2020
ARM Release 3.0c - 11th January 2020
ESP Release 3.0b - 11th January 2020
2.9
- Featured improved versions of the mapping functions, and setq and setf.
- Also incorporated bug fixes affecting trace and return.
- The AVR version added support for the ATtiny3216 and ATmega4809 microcontrollers.
AVR Release 2.9c - 2nd October 2019
ARM Release 2.9b - 25th September 2019
STM32 Release 2.9 - 25th September 2019
ESP Release 2.9 - 25th September 2019
2.8
- Featured an overhaul of the error reporting, including better information about the context in which the error occurred, and the value causing the error.
- Also included an update to the SPI interface, which fixed problems preventing it from working correctly on 32-bit platforms.
AVR Release 2.8a - 6th August 2019
ARM Release 2.8d - 8th September 2019
STM32 Release 2.8a - 6th August 2019
ESP Release 2.8a - 6th August 2019
2.7
- Updated uLisp to use Lexical Scoping, like current dialects of Lisp including Common Lisp and Scheme. Previously uLisp used Dynamic Scoping, like older dialects of Lisp.
AVR Release 2.7c - 20th June 2019
ARM Release 2.7c - 20th June 2019
STM32 Release 2.7c - 20th June 2019
ESP Release 2.7c - 20th June 2019
MSP430 Release 2.7c - 20th June 2019
2.6
- Added an extension to the Lisp Library to allow you to load individual function or variable definitions with require, and list the contents of the library with list-library.
- Added support for optional arguments with default values in function definitions, using the &optional keyword.
- Added the additional mapcan mapping function.
- Added support for saving the Lisp image to an SD card on platforms with an SD card interface, as an alternative to saving it to non-volatile memory (eg. EEPROM or DataFlash).
- Many bug fixes and minor improvements.
AVR Release 2.6a - 19th April 2019
ARM Release 2.6a - 19th April 2019
STM32 Release 2.6a - 20th April 2019
ESP Release 2.6a - 19th April 2019
MSP430 Release 2.6 - 18th April 2019
2.5
- Incorporated multiple minor bug fixes.
- Release 2.5c fixed a bug in printing floating-point numbers.
- A new STM32 version was released which supported the STM32 Maple Mini and Blue Pill platforms.
AVR Release 2.5 - 30th November 2018
ARM Release 2.5c - 7th February 2019
STM32 Release 2.5c - 7th February 2019
ESP Release 2.5c - 7th February 2019
2.4
- The ARM version of uLisp now included support for Adafruit's ATSAMD51-based series of boards: the Adafruit Metro M4, Adafruit ItsyBitsy M4, and Adafruit Feather M4.
- A new ESP version of uLisp was released which supports the popular ESP8266 and ESP32-based boards. The ESP8266/ESP32 version includes wi-fi networking commands to allow you to take advantage of the wi-fi capabilities of the ESP8266 or ESP32.
- The AVR version incorporated minor bug fixes.
AVR Release 2.4 - 9th October 2018
ARM Release 2.4b - 23rd September 2018
ESP Release 2.4 - 11th October 2018
2.3
- The 32-bit ARM version of uLisp added support for floating-point numbers in addition to the 32-bit integers supported in previous versions. Programs using integers work exactly as in previous versions.
- The ARM, AVR, and MSP430 versions of uLisp also included a new Lisp Library feature, which allows you to compile uLisp with your own Lisp extensions.
AVR Release 2.3 - 2nd June 2018
ARM Release 2.3 - 2nd June 2018
MSP430 Release 2.3 - 4th June 2018
2.2
- ARM Release 2.2 added support for the BBC Micro Bit.
- MSP430 Release 2.2 added support for the MSP430 FR5994 LaunchPad board.
AVR Release 2.2 - 19th May 2018
ARM Release 2.2a - 21st May 2018
MSP430 Release 2.2 - 19th May 2019
2.1
- Reduced the amount of workspace memory used by programs by about 25%. More of the example programs can now be run on an Arduino Uno.
- Also added a sleep function, which puts the processor into low-power mode for a specified time.
AVR Release 2.1 - 21st April 2018
2.0
- Added an SD card interface to allow you to read from and write to SD cards.
AVR Release 2.0 - 10th February 2018
ARM Release 2.0 - 10th February 2018
1.9
- Added a number of new features, including: support for characters and the character functions char, char-code, code-char, and characterp
- Added additional string functions string<, string>, read-from-string, prin1-to-string, and princ-to-string
- Added the additional I/O functions read-line, write-line, and write-string which support input/output via serial, SPI, and I2C where appropriate
- Added a sort function.
AVR Release 1.9b - 3rd September 2017
ARM Release 1.9a - 9th August 2017
1.8
- Allowed arbitrary symbol names on platforms with more than the minimum 2Kbytes of RAM.
- Added support for the MSP430F5529 and MSP430FR5969 LaunchPad boards, using the Energia IDE.
AVR Release 1.8 - 15th April 2017
MSP430 Release 1.8 - 15th April 2017
1.7
- Added the pretty printer function pprint, which allows you to print functions in a nicely formatted way, and a trace feature using trace and untrace, allowing you to trace the calls to and returns from up to three functions at a time.
- Fixes a long-standing bug which could give incorrect results when two functions using the same symbols called each other.
AVR Release 1.7 - 27th March 2017
1.6
- Added the &rest keyword to defun and lambda to allow you to define a function with a variable number of arguments, and adds the string functions concatenate and read-line.
- Improved the efficiency of save-image.
AVR Release 1.6 - 4th March 2017
1.5
- Added support for strings, allowing you to write programs that prompt the user for input, or manipulate strings. It includes the string functions subseq for extracting a substring from a string, string= for comparing strings, length for finding the length of a string, and stringp for testing for strings.
- Includes several minor bug fixes.
- 1.5a fixes a problem affecting save-image/load-image.
AVR Release 1.5a - 2nd March 2017
1.4
- Added a built-in program editor edit that lets you step through a function definition, editing it a bit at a time, using a set of simple single-key editing commands you type at the keyboard.
- Added room, which returns the number of free Lisp cells remaining.
AVR Release 1.4 - 18th October 2016
1.3
- Adds setf which allows you to modify lists in place, allowing you to use lists as index-addressible arrays, and use association lists for efficient data storage.
- The other in-place operations push, pop, incf, and decf have been extended in the same way.
- Fixes two bugs that affected append with null arguments, and with-spi.
AVR Release 1.3 - 24th July 2016
1.2
- A simple, unified I2C and SPI interface using read-byte and write-byte to transmit data via the appropriate interface, and streams to identify which interface is being used. For more details see I2C and SPI serial interfaces.
- The bitwise logical operators logand, logior, logxor, lognot, logbitp, and the bitwise shift operator ash.
- 1.2a included a minor change that fixed a subtle problem affecting dolist.
AVR Release 1.2a - 18th June 2016
1.1
- Added save-image and load-image to allow you to save the uLisp image to EEPROM and reload it.
- #x, #o, and #b allowed you to enter numbers in hexadecimal, octal, or binary respectively.
- note now supports the ATmega1284P.
AVR Release 1.1 - 6th June 2016
1.0
AVR Release 1.0 - 25th May 2016
