RSSAmplifier

Blog

Expressions of Change

expressionsofchange.orgRSS feed ↗18 posts

Latest posts

Homoiconicity revisited

In an earlier article , I concluded that you probably shouldn’t use the word “homoiconic”: starting with the original definition of the word, I noted that this this definition is problematic for a number of reasons, and that the best we can say is that there is a degree to which a language is homoiconic: languages that have a smaller conceptual distance between their program text and machine…

Animating history: Implementation

What are history-animations? History-animations build on the following feature (one that was already existing): whenever we select an s-expression in our “tree” (the structural view on the right hand side of the window) we show the history of that particular s-expression in the panel on the left. That is, whenever we change the cursor in the tree, we switch what is shown in the history. The…

Animating history transitions

In Expressions of Change we take modifications to programs to be the primary building block of program construction. We do this in the expectation that that the availability of well-structured historic information across our toolchain will prove invaluable when facing the typical challenges of program modification. One of the first such benefits is the ability to inspect history at any level of…

Source code published

We can distinguish 2 projects, “ nerf0 ” and “ nerf1 ” 1 The brief summary of which project to refer to is: Nerf 0: Static Analysis (first steps) mini-interpreter Alternative Clef, in which a note Replace may replace a given node with one that can be constructed from an arbitrary history (not just a history that’s the result of extending the given history) – this approach also has consequences on…

Talk at the European Lisp Symposium

The video of the talk at The European Lisp Symposium is live. The associated paper may be downloaded using the link below: Clef design: Thoughts on the Formalization of Program Construction The relevant bibtex entry may be found below. @INPROCEEDINGS{VanSchelven2018, author = "Klaas van Schelven", pages = {"94-101"}, title = {Clef Design, Thoughts on the Formalization of Program Construction},…

ELS 2018: Paper accepted

The European Lisp Symposium takes place on April 16th - April 17th in Marbella, Spain. The paper may be downloaded using the link below: Clef design: Thoughts on the Formalization of Program Construction The relevant bibtex entry may be found below. @INPROCEEDINGS{VanSchelven2018, author = "Klaas van Schelven", pages = {"94-101"}, title = {Clef Design, Thoughts on the Formalization of Program…

Talk at Clojure Meetup

The audience was very much involved, which led to some interesting discussions. Unfortunately, no recording of the screen was made while giving the demo; the resulting resolution is probably not good enough to follow along; I’ve kept this section in anyway to preserve the discussion with the audience. A video of this event is posted below. Talk at Clojure Meetup was originally published by Klaas…

Don't say “Homoiconic”

What is homoiconicity then? Typical definitions state that it is simply “code as data”, will point to a relationship between a program’s structure and syntax or note that the program source is expressed in a primitive data-type of the language. In the below, we will show that none of these definitions make much sense. Before that, however, we’ll return to the original definition, to ensure we have…

Lambda Days 2018

Lambda Days is a “one of a kind experience in the functional world.” It was held on 22 & 24 February 2018 in Kraków, Poland. Lambda Days 2018 was originally published by Klaas van Schelven at Expressions of Change on February 26, 2018.

Expressions of Change in under 15 minutes

This video started out as a practice run for a 3 minute lightning talk. I didn’t make it in 3 minutes. On the upside, there’s about 5 times more information in this talk than in the lightning talk it was a practice run for. Expressions of Change in under 15 minutes was originally published by Klaas van Schelven at Expressions of Change on February 20, 2018.

Constructing S-Expressions

Putting the methods of construction more central does not mean we can ignore the programs that are constructed by them. For example: when we edit a program, the programmer is still presented with an actual program on the screen, when we evaluate a program, it is a single particular program that’s being evaluated rather than a history of programs etc. In short: an essential piece of any set of…

Catamorphisms and change

Let us first establish an informal notion of a catamorphism. Some recursive algorithms on hierarchical data structures (i.e. trees) have the property that they are expressed as a function which [1] does a single recursive function call on each of its children, and [2] that this call takes no parameters other than the child node. The below is an example of such an algorithm in Python. It takes as…

Static Form Analysis

To understand what we mean by form-analysis, and why it could be useful, consider again the model for evaluation presented in the previous article , which provides a definition of evaluation of s-expressions in environments. A first step in this evaluation is a case-analysis on the form of the s-expression. For each evaluated s-expression, we first check whether the s-expression is an…

L - A toy language

The editor that is part of this project puts changes to documents more centrally in the editing experience than traditional editors. In defining a language for static analysis, however, we shall start by focusing on the structure that can be constructed from these changes: an s-expression. S-expressions are perhaps most well-known for being the basic building block of the syntax of Lisp and its…

Static Analysis - Introduction

Static program analysis is the analysis of computer programs that is performed without actually executing programs. Some examples are: identifying variables that are declared, but never used; identifying variables that are used, but never declared; any kind of type-checker. Such analyses are useful in helping the programmer identify potential errors as soon as possible. Case in point: running a…

Constraints on Replace

Let’s start with some quick pointers to important background information. The context of this article is an editor of s-expressions in which the primitives are the mechanisms of construction rather than the resulting structures. Important examples of such primitives are the operations ( Insert , Delete and Replace ). These primitives may be composed; a list of them is called a history. The…

T-Indices

Let’s start with some terminology. An s-expression is a notation for tree-structured data. Each s-expression is either an atom or a list of s-expressions. Using this recursive definition arbitrary tree-structures can be formed. Because it is the tree-like properties that we’re interested in in this article, we will use the terminology of trees (nodes, children, parents) in the below. We will…

Git is ignorant by design

An example The concept is best explained using an example. Consider the following output of git show , which shows a change to a piece of Python code: commit 9dadc2......... Author: ...... Date: ...... Refactoring: move method_c and method_d These methods are moved from OneClass to AnotherClass, as the latter is the correct location because of some reasons that would certainly exist if this wasn't…