• What is a programmable programming language?

    When I was still researching this fabled obscure language called Lisp one thing people kept saying about it is that “Lisp is a programmable programming language”, but I could never figure out what they meant by that. It sounds like a smug buzzword or like a gimmick from an academic toy language. Lisp programmers have gotten so used to metaprogramming in Lisp that they seem to forget that it is either an entirely alien concept to people, or something people have been burned by too often (like every C programmer).

    Continue reading…

  • Introducing Guile.vim

    Vim has good support for Scheme, but the problem with Scheme is that every implementation adds its own features to the language. My guile.vim plugin aims to improve support for GNU Guile by augmenting these settings. It can attempt to detect when a Scheme file is Guile-specific and it adds syntax highlighting for Guile-specific forms.

    Continue reading…

  • Singleton objects in Guile Scheme

    When I wrote guile-messagepack I needed an object to represent the nil value, which embodies the concept of "nothingness" or "no value" in MessagePack. None of the existing objects like #f or '() were adequate, so I decided to make a new one: nothing. It does not make sense for there to be multiple instance of nothing, so it had to be a singleton. In this blog post I will describe a way of creating such a singleton.

    Continue reading…

  • Implementing MsgPack.rkt, part 2

    In this part of the series I want to go into how to pack data to bytes in MessagePack. We will see how to dynamically dispatch on type and how to pack a selection of particular types.

    Continue reading…

  • Implementing MsgPack.rkt, part 1

    When I originally set out to write MsgPack.rkt, a Racket implementation of the MessagePack protocol, I had a hard time wrapping my mind around where to begin. I had no experience in writing a serialisation library, and reading the source code of existing implementations only revealed the what, but not the why. This is why I'm starting this short mini-series of blog posts to provide a commentary on my implementation. I hope that it will serve other people who are looking for a starting point to their own implementations.

    Continue reading…

  • Neovim channel for GNU Guix

    I have set up a channel for GNU Guix to build Neovim. This channel serves as an experimental staging ground for porting Neovim (and perhaps other related projects in the future) to the Guix functional package manager. When the packages are deemed stable and correct enough they will be submitted to Guix proper.

    Continue reading…

  • Introducing Quicklisp.nvim

    One of the new features of Neovim is its ability to write plugins in any programming language, provided that there is a plugin host available. I have wanted to play around with the Common Lisp host for a while, and I like for something useful to come out of it in the end, so I created Quicklisp.nvim, a plugin which allows users to manage Common Lisp libraries from inside Neovim.

    Continue reading…

  • A new static site generator

    Over two years already without rewriting the workshop? I have to rectify this, with the greatest rewrite yet! I have abandoned Pelican because I constantly had to adjust things manually after the build process, and even then there were parts of the website that weren't working. This put me off from blogging, since after each post I would have to stitch everything back together by hand. Seeing that no static site generator would be able to meet my needs I decided to instead write my own in Scheme.

    Continue reading…