This week I added continuations to my Lisp. They’re a fascinating feature, and a popular demand in the survey. It has been the most challenging feature so far, both to implement and explain, but the result has been worth it.
I like messing with typography from time to time. As a programmer, I quickly fell in love with TeX. This is my personal article template, developed during the last few months. Have fun with it :)
I worked on a new feature for my Lisp this week: an explicit stack and stacktraces. Stacktraces make debugging easier by improving error messages. An explicit stack makes them possible, and is necessary to implement continuations later.
To make my Lisp a more useful language, and to pave the road for a module system and package manager, I added the capability of performing IO.
I’m still figuring out the best way to present images on my blog.
Wikipedia defines creativity as a phenomenon whereby something new and somehow valuable is formed. Because creativity is essential to me as a programmer, the question of how to improve my creativity has always fascinated me. In this article I share what has worked for me so far.
To gain a better understanding of how FRP might be implemented, I wrote a simple FRP library.
Wrapping a function in a ‘def-macro’ is a common Clojure pattern. This practice serves two purposes: providing a nicer syntax for definitions, and controlling evaluation order. Although simple to understand, this pattern is somewhat repetitive. Introducing: a higher-order macro that relieves this pain.
Monday’s survey revealed that Reader Macro’s are your most requested feature. They replace built-in syntax, and enable users to extend the syntax from within the language. Implementing them right is difficult, however. Let’s try.
Hi! My name is Rein van der Woerd.
I’m currently in the process of developing a Lisp, for both learning and teaching.
My goal is to derive the best possible language from the smallest set of core features. Your answers to these will help me know what will help you learn the most.
Adapted from FPComplete’s article on coroutines for streaming.
To make debugging easier, I added a simple
pry-style debugger to my lisp. It immediately spawns a new repl in the current envirment, allowing you to poke around at will. Debug repl’s can be nested to arbitrary depth, and exited with
String interpolation is one of my favorite language features. The resulting string is much easier to visualize than with manual concatenation. It’s also straightforward to implement. I thought it would be a nice addition to my Lisp.
Last time we used Maybe to encapsulate an optional value, performing operations on it while remaining ignorant of the actual presence of that value. Now we turn to the famous Monad, starting with an example that illustrates it’s purpose.
A project I’m folowing with great interest is Eve. It’s based on a single unifying principle: everything is a record. Today I’d like to explore some of the implications of this idea.
Today I’m starting my series on categories in OO. My goal is to explain these concepts to programmers who are already familiar with object-oriented programming, but new to functional programming.
Complicated reduce algorithms are still tricky for me sometimes. Clojure’s for makes map more visual, which makes it easier for me to engage my imagination. Racket extends this idea to reduce with for/fold, and also supports reducing multiple collections. Let’s port it over to Clojure.
Inspired by the ideas of Datascript and GraphQL, and frustrated by the boilerplate common in implementing API’s, I set out to explore a possible solution.
Rich Hickey’s The Value Of Values is one of my favorite talks of all time. I highly recommend it, and it took me quite a while to understand all of it. Because I couldn’t find a nice summary on the web, I decided to make my own.
Last saturday I attended DCD ’17. Here’s what I took away from it.