All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog. This project uses Semantic Versioning in the following ways:
After nearly a year without updates, Funlisp v1.2.0 is released! This release brings several new language features and API additions. On top of that, I've moved the main development Git host to Sourcehut, although the GitHub repository will continue to act as a mirror. Releases will still have to be found on GitHub, since Sourcehut does not have a suitable system for that yet.
In a similar vein, we now have a mailing list,
~brenns10/funlisp-dev@lists.sr.ht
. This will contain version announcements,
and any patches are welcome to be submitted there! For docs on using the list,
see Sourcehut manual. TLDR:
~brenns10/funlisp-dev+subscribe@lists.sr.ht
with any subject/content
in order to subscribe.~brenns10/funlisp-dev+unsubscribe@lists.sr.ht
to unsubscribe.You may notice some test posts on the list -- no more will be posted, so it is safe to subscribe if you're interested. You need not be a member of Sourcehut to use the list, submit patches, or browse the repository.
let
statement for binding names to values. Sample usage:
(define sum-of-squares (lambda (x y)
(let ((x_sq (* x x))
(y_sq (* y y)))
(+ x_sq y_sq))))
(sum-of-squares 3 4)
-> 25
cond
statement for multi-case conditionals. Sample usage:
(define get-maintainer (lambda (file)
(cond
((eq? file "Makefile") "Stephen")
((eq? file "inc/funlisp.h") "Stephen")
(1 "Stephen"))))
Documentation for the macro
statement which existed in 1.1 is now present on
the documentation site + manual page.
Modules!
Use (import module)
to either load the builtin "module" or read
"module.lisp" and access its defined symbols.
C API for creating builtin modules exists, and is documented.
First module, os
, containing getenv
function, is created. I have not yet
figured out a solid standard library documentation system, so consider the
builtin modules and their functions to be provisional.
(import os) (os.getenv "HOME") -> "/home/stephen"
macro
construct was incorrectly evaluating its arguments prior to execution.
This change is breaking, but since it reflects major incorrect behavior, it
will be released in a minor version bump.lisp_list_append()
and lisp_list_set_{left|right}
for mutating and
constructing lists more easily.First 1.0 release. The API should now be stable enough for you to use!
;
) characterprogn
- allows sequences of multiple expressions to be evaluatedquasiquote
- quote an expression, except for instances of unquote
unquote
- embed an evaluated expression within a quasiquote
assert
- raise an error if the value of an expression is "false" (the
integer 0, or not an integer at all)assert-error
- assert than evaluating an expression results in an errormacro
- similar to lambda, but evaluates to code which is then evaluatedquote
builtinfunlisp
binary, which aims to be a complete, user-friendly repl and
script runner.lisp_version
, a string containing the funlisp version.macro
builtin, which is identical to lambda
, but
instead returns code which should be evaluated.lisp_enable_symcache()
and lisp_enable_strcache()
.lisp_parse()
and added lisp_parse_value()
, as well as lisp_parse_progn()
and
lisp_parse_progn_f()
. This change is backward incompatible.Initial release! This is the first release with a source tarball and the capability to be installed system-wide. It is a beta release, so the API is not yet fully stable. Currently included in this release:
See the Github issue tracker for planned features, especially in the Initial release milestone.