Older releases

Releases 4.4 and 4.5

Release 4.4 was restructured to make it easier to extend uLisp with your own functions in an extensions file. For details see Adding your own functions.

In addition, Release 4.4 had the following new features:

  • 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-protectignore-errors, and error functions provided advanced error handling.
  • Improved support for several platforms.

The ARM version of uLisp Release 4.5 added support for the two new Uno R4 boards from Arduino, based on the Renesas RA4M1 ARM Cortex M4 CPU.

AVR Release 4.4b - 3rd April 2023

AVR-Nano Release 4.4b - 3rd April 2023

ARM Release 4.5a - 16th January 2024

ESP Release 4.4d - 30th June 2023

RISC-V Release 4.4b - 3rd April 2023

Note that to keep the release numbers in sync there are no 4.5 releases for the AVR, AVR-Nano, ESP, or RISC-V versions.

Release 4.3

Release 4.3 added integral documentation for all the built-in functions, which you can display in the Arduino Serial Monitor or a terminal used with uLisp. In addition, 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

Release 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

Release 4.1

Release 4.1 of uLisp 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

ESP Release 4.1 - 18th May 2022

Release 4.0

Release 4.0 of uLisp 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

Release 3.6

ARM Release 3.6d added support for the Raspberry Pi Pico. The AVR Release 3.6 of uLisp included an AVR assembler. 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

Release 3.5

Release 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

Release 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, and 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

Release 3.3

The 32-bit version of uLisp for ARM, ESP, and RISC-V microcontroller boards extends its array support to include bit arrays.

Bit arrays will be particularly useful in the microcontroller-based applications that uLisp is aimed at as they can efficiently store the state of digital I/O lines, digital signals, or display pixels. You could use them as the basis for a data logger, low-speed logic analyzer, or other digital application.

uLisp's implementation supports bit arrays with an arbitrary number of dimensions, and packs bit arrays as efficiently as possible, so they take up a factor of 32 less storage than the equivalent-sized integer array.

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

Release 3.2

The AVR, ARM, ESP, and RISC-V versions feature a format function for convenient formatting of printed output (all platforms), multi-dimensional arrays (32-bit platforms), graphics extensions for ARM, ESP8266/32, and RISC-V boards with suitable displays, such as the Adafruit PyGamer and PyBadge, and 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

Release 3.1

ARM Release 3.1 of uLisp incorporates an ARM assembler which allows you to generate machine-code functions, integrated with Lisp, written in ARM Thumb code mnemonics.

In addition, 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

Release 3.0

Release 3.0 features 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

Release 2.9

Release 2.9 features improved versions of the mapping functions, and setq and setf. It also incorporates 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

Release 2.8

Release 2.8 features an overhaul of the error reporting, including better information about the context in which the error occurred, and the value causing the error. For more information see Error Messages.

It also includes an update to the SPI interface, which fixes 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

Release 2.7

Release 2.7 updates 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

Release 2.6

Release 2.6 has several new features and bug fixes, including:

  • 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.
  • Support for optional arguments with default values in function definitions, using the &optional keyword.
  • The additional mapcan mapping function.
  • 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).

In addition, there are 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

Release 2.5

Release 2.5 incorporates multiple minor bug fixes. Release 2.5c fixes 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

Release 2.4

The ARM version of uLisp now includes support for Adafruit's ATSAMD51-based series of boards: the Adafruit Metro M4, Adafruit ItsyBitsy M4, and Adafruit Feather M4. With 120MHz processors these are now the fastest platforms for running uLisp. For more information see Adafruit Clue.

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 with the convenience of uLisp's compact syntax

The AVR version incorporates minor bug fixes.

AVR Release 2.4 - 9th October 2018

ARM Release 2.4b - 23rd September 2018

ESP Release 2.4 - 11th October 2018

Release 2.3

The 32-bit ARM version of uLisp now includes support for floating-point numbers in addition to the 32-bit integers supported in previous versions. Programs using integers will work exactly as in previous versions, and there should be no noticeable change in performance. For more information see Floating-point features.

The ARM, AVR, and MSP430 versions of uLisp also include a new Lisp Library feature, which allows you to compile uLisp with your own Lisp extensions. For more information see Lisp Library.

AVR Release 2.3 - 2nd June 2018

ARM Release 2.3 - 2nd June 2018

MSP430 Release 2.3 - 4th June 2018

Release 2.2

uLisp ARM Release 2.2 adds support for the BBC Micro Bit; see RP2040 boards old. uLisp MSP430 Release 2.2 adds 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

Release 2.1

uLisp Release 2.1 reduces the amount of workspace memory used by programs by about 25%. More of the example programs can now be run on an Arduino Uno.

Release 2.1 also adds a sleep function, which puts the processor into low-power mode for a specified time.

ATmega Release 2.1 - 21st April 2018

Release 2.0

uLisp Release 2.0 added an SD card interface to allow you to read from and write to SD cards. This allows applications such as:

  • Logging data to an SD card.
  • Reading and processing data from an SD card.
  • Reading uLisp programs from an SD card and adding them to the current workspace.

uLisp ATmega Release 2.0 - 10th February 2018

uLisp SAM/SAMD Release 2.0 - 10th February 2018

Release 1.9

uLisp Release 1.9 adds a number of new features, including: support for characters and the character functions charchar-codecode-char, and characterp; additional string functions string<string>read-from-stringprin1-to-string, and princ-to-string; the additional I/O functions read-linewrite-line, and write-string which support input/output via serial, SPI, and I2C where appropriate; and a sort function.

uLisp ATmega Release 1.9b - 3rd September 2017

uLisp SAM/SAMD Release 1.9a - 9th August 2017

Release 1.8

uLisp Release 1.8 allows arbitrary symbol names on platforms with more than the minimum 2Kbytes of RAM.

It also supports the MSP430F5529 and MSP430FR5969 LaunchPad boards, using the Energia IDE.

AVR Release 1.8 - 15th April 2017

uLisp MSP430 Release 1.8 - 15th April 2017

Release 1.7

uLisp Release 1.7 adds 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.

It also fixes a long-standing bug which could give incorrect results when two functions using the same symbols called each other.

uLisp Release 1.7 - 27th March 2017

Release 1.6

uLisp Release 1.6 adds 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.

It also improves the efficiency of save-image.

uLisp Release 1.6 - 4th March 2017

Release 1.5

uLisp Release 1.5 adds 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. It also includes several minor bug fixes.

1.5a fixes a problem affecting save-image/load-image.

uLisp Release 1.5a - 2nd March 2017

Release 1.4

uLisp Release 1.4 adds 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; see Using the program editor.

It also includes room, which returns the number of free Lisp cells remaining.

uLisp Release 1.4 - 18th October 2016

Release 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 pushpopincf, and decf have been extended in the same way.
  • Fixes two bugs that affected append with null arguments, and with-spi.

uLisp Release 1.3 - 24th July 2016

Release 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 logandlogiorlogxorlognotlogbitp, and the bitwise shift operator ash.
  • 1.2a included a minor change that fixed a subtle problem affecting dolist.

uLisp Release 1.2a - 18th June 2016

Release 1.1

  • save-image and load-image allow you to save the uLisp image to EEPROM and reload it.
  • #x#o, and #b allow you to enter numbers in hexadecimal, octal, or binary respectively.
  • note now supports the ATmega1284P.

uLisp Release 1.1 - 6th June 2016

Release 1.0

Release 1.0 was the first Release of uLisp.

uLisp Release 1.0 - 25th May 2016

Other platforms

Boards supported by earlier releases of uLisp:

Arduino Due. This board is based on the AT91SAM3X8E ARM Cortex-M3 core and provides 512 Kbytes of flash, 96 Kbytes of RAM, and an 84 MHz clock. It is supported by the ARM version of uLisp up to Release 3.0c.

ESP8266 boards. These boards are based on the 32-bit Tensilica Xtensa L106 microprocessor running at 80 MHz, with 4 Mbytes of flash and 80 Kbytes of RAM. They include integrated Wi-Fi. They are supported by the ESP version of uLisp up to Release 4.4d.

STM32 version

STM32 boards. The STM32 Maple Mini and Blue Pill boards are based on the STM32F103 ARM Cortex-M3 processor running at 72 MHz, with 128 Kbytes of flash and 20 Kbytes of RAM.

MSP430 version

The MSP430 version of uLisp supports the following boards:

MSP430 F5529 LaunchPad. This uses the flash memory for saving images, and provides enough memory for a fairly complex application.

MSP430 FR5969 LaunchPad. This version uses the FRAM for the workspace, and for saving images, giving a generous amount of memory.

MSP430 FR5994 LaunchPad. This version uses the FRAM for the workspace, and for saving images, giving a generous amount of memory.

MSP430 FR6989 LaunchPad. This version uses the FRAM for the workspace, and for saving images, and supports writing text to the on-board LCD display.