Bordeaux Threads APIv2

From APIv1 to v2 Sometime last year I took a look at the bug reports and feature requests that had accumulated on Bordeaux-Threads and I decided it was time to bring the code back into shape. The code had insufficient test coverage, which had allowed bugs to make their way into releases, with some egregious examples like with-lock-held having incongruent signatures on some implementations. That wasn’t the only case though: join-thread was inconsistently implemented, in some cases returning only the first value or none at all.

Read more...

Distributing binaries with Common Lisp and foreign libraries

The ability to create a new binary executable by simply “dumping” to disk the code in a running Common Lisp executable is one of the features that makes Common Lisp well suited for rapid development. That ease of development breaks down when using foreign libraries (usually written in C/C++): in the most popular Common Lisp implementations, the Foreign Function Interface loads foreign libraries using dlopen() and stores their paths in the Lisp image, so that the resulting binary can start from their previous state.

Read more...

On New IDEs

There has been some brouhaha about the state of Common Lisp IDEs, and a few notable reactions to that, so I’m adding my two Euro cents to the conversation. What is a community ? It’s a common mistake to refer to some people doing a certain thing as a “community”, and it’s easy to imagine ridiculous examples: the community of suburban lawn-mowing dwellers, the community of wearers of green jackets, the community of programmers-at-large etc…

Read more...

Native TravisCI Support for Common Lisp

Being used to Continuous Integration at work, I wanted to use it for my Lisp projects too. Looking around, the choice was pretty easy: TravisCI is a very nice platform developed by a company in Berlin, which offers free testing for open-source projects hosted at Github. I saw that Luís Oliveira preceded me, so I followed the instructions at cl-travis and created a .travis.yml for all my libraries. Cl-travis contains a script that is run in the setup phase of the test and relies on CIM to provide a wrapper for common command line parameters of Lisp compilers.

Read more...

Controlling compiler-macro expansion

One of my projects, static-vectors, makes extensive use of compiler macros which I need to test in addition to the main function definition. As far as I know, there’s no standard way to inhibit or force compiler-macro expansion and mucking with INLINE, NOTINLINE and SPEED declarations may or may not work, so are there implementation-specific ways to achieve that ? I could cleverly use (FUNCALL (COMPILER-MACRO-FUNCTION …)) to test the compiler macro, but in testing the main function there’s no guarantee that a compiler won’t use the compiler-macro in a (FUNCALL #‘FUNCTION) or (FUNCALL (FDEFINITION ‘FUNCTION).

Read more...

IOLib@ILC2012 slides

I’m at ECLM in Madrid and I realized that I didn’t publish the slides from the IOLib talk at ILC 2012, so here they are.

The why of version.lisp-expr

In all projects I manage, instead of including the version string verbatim in .asd files, I relegate it to an external file named version.lisp-expr which I then include in all .asd files, typically at least two: 1;; foo.asd 2 3(asdf:defsystem :foo 4 :version #.(with-open-file (f (merge-pathnames "version.lisp-expr" 5 (or *compile-file-pathname* 6 *load-truename*))) 7 (read f)) 8...) 9 10;; and version.lisp-expr 11 12;; -*- lisp -*- 13"0.0.1" Q: Why this approach ?

Read more...

Today's round of releases

I just released Split-sequence 1.1, Parse-number 1.3, FiveAM 1.0, Static-Vectors 1.4 and Bordeaux-Threads 0.8.2 If you can’t wait until the next Quicklisp update, download them and let me know if you encounter any issues

The Future of Fiveam

FiveAM is my favorite and one of the best testing frameworks for Common Lisp; it has gone undeveloped for the past 3 years but now its author, Marco Baringer, has kindly accepted to let me take over the project and continue its development. I created a new project for it on common-lisp.net with its own mailing list, converted the sources to git and put them on github. I’ll slowly integrate the various forks and patches I found around so if you have feature requests or you’re just interested join fiveam-devel.

Read more...
1 of 1