What is this?
LabLISP is a LISP interpreter written in Qt/C++. It is a code module and a GUI window that can be easily added to other Qt GUI projects with a defined way to expose the underlying program’s functionality as LabLISP functions.
Why does this exist?
For a long time, I was looking for some high-level macro language for scripting tasks in my software – which is mostly scientific code for controlling experiments, data acquisition, processing and analysis.
The general weirdness of the year 2020 presented an opportunity for starting a new project and learn new things. So I started to learn LISP by writing an interpreter for it in C++.
How Lispy it is?
Initially, I just wanted to use the lisp syntax and evaluation rules for a simplistic dialect that would be just used for scripting. Over time, and with increasing complexity of my LabLISP, it became apparent that it would make sense to stick to some standard. Since I was already reading books about Common LISP, I started to add features to LabLISP to make it more consistent with Common LISP.
LabLISP has first class function objects, lambdas, lexical closures, and separate function and value namespaces. Functions and special operators are named according to Common LISP, even sometimes have bit limited possibilities. There is minimalistic support for multiple values, and SETFable places. Symbols are organized in packages with the same mechanics as in Common LISP, apart from shadowing, which is not yet implemented.
LabLISP has macros.
What’s new in it?
Specialty of LabLISP is a native multitasking. Multiple eval processes are running in parallel in the same environment, from the same REPL. The main purpose and model use of this feature is running long experimental data acquisition script, while still being able to use the same LabLISP environment for some other scripts like data processing, formatting, exporting.
LabLISP does not have debugger, because there are no errors. Erroneous expressions eval to NIL, in a manner similar how C++ produces and treats NAN as a result of invalid math operation.
How can I get this?
Right now, the LabLISP source code is not public. Although LabLISP is in operational state and we are using it in our lab for scripting experiments, it feels still too much under development and messy to share it. If you are interested, drop me an email.