All Posts

In the previous article we have seen how we can show animations in the history pane of the editor to subtly illustrate how the construction of different levels of our program relate to each other. Here we provide some notes on these animations are implemented.

When asked what’s so great about Lisp, many aficionados will say that the language is Homoiconic, and that this property gives it certain magical advantages over other languages. When asked what homoiconic means, however, the answer is often much less clear.

In Expressions of Change mechanisms of construction are put center stage. The first and most practical application of such methods is the actual construction of s-expressions; an algorithm is presented and its performance characteristics explored.

Some recursive functions can be described as catamorphisms; in the context of controlled modification of the input data structure, efficient mechanisms for recalculation are available. This article describes those.

In this project, we put changes to computer programs more central in the programming experience. As a result, the ability to do static analyses is lifted from single programs to the full dimension of any program’s construction. This has some useful applications, which are demonstrated in a series of articles.

The operation Replace replaces a child node with a new one. This new node is recursively described using a history of changes. In this article we compare two scenarios: in one we impose the constraint that the new history must be an continuation of the history so far. In the other we don’t impose this constraint, which is to say that the new history may be anything.

The editor presented on this website is an editor of s-expressions that treats modifications to those expressions as first level citizens. This opens up the possibility to reference the children of a given list-expression by their order of appearance.

The ship of Theseus is an ancient thought experiment that poses some questions about the nature of identity of changing objects. In this article we examine the real life implications of this riddle on modeling the world in computer programs.

In the 1980 article “Programs, Life Cycles, and Laws of Software Evolution” by Meir Lehman, a classification of computer programs into 3 types (S, P & E) is put forth. This classification forms a useful background against which to understand software evolution.

Many of the advantages of Command Line Interfaces can be attributed to the fact that they reify the user interaction: the interaction itself is made into something that’s visible and can be interacted with.

Approximately two years before his death, Edsger Dijkstra was interviewed by the Dutch television program Noorderlicht. On that occasion he made an interesting comparison between two programming styles, which he characterized as Mozart versus Beethoven.

The first step towards making expressions of change available in some programming language is to build an editor that can construct them. The first steps towards this editor have been made and are presented here.

Because dealing with change of the software itself is such a central part of the challenge of software development, a myriad of tools to manage these changes has sprung up. Examples are version control systems, build systems, provisioning tools and package management.

The undo command is probably one of the most powerful commands in any document editor. It is hard to imagine an editor without undo to be taken seriously, let alone gain any popularity - be it an editor of text, images, movies or any other kind of document.

Self applicability is one of the most powerful ideas in computer science. In this article we’ll see how this idea can be applied to Expressions of Change such as Version Control, and how this compares to existing solutions such as Git.

The state of the art of running a small website is to build once, manually maintain forever. This burden of maintenance is largely caused by changes in other software, as opposed to changes in our own requirements.