Esolanger

statement: Are avant-garde practices still important to you?

I see esolangs as an avant-garde of computer science, challenging the norms of programming practice and computational culture. Some go further, obliterating the definitions of programming language, code, and computer. In the machine, no data has inherent meaning; this makes the rigidity of computational thinking ripe for challenge and re-evaluation.

project: THREE POST-WHITESPACE LANGUAGES

project description:

It was accepted mostly as a clever joke when Edwin Brady and Chris Morris chose April Fool’s Day to announce a programming language written solely in tabs, spaces, and returns. But such a thing was possible: a language that can express any algorithm programmable in C++, written only with white space characters. Whatever their feeling about the language’s legacy (Brady’s current twitter bio disowns the language completely), their creation Whitespace (2003) embodied and expanded on the most challenging ideas in esoteric programming. The three languages I present here are my languages inspired by Whitespace, continuing provocations it raised – intentionally or not.

Tab, space, and return are thought of as contentless: the spaces between words. They are interchangeable in many languages – those in the legacy of C, for instance, may have conventions about when to use tab or space, but are compilable with a tab where a return might be ordinarily used; the language does not favor one over the other. Whitespace flips this, making these characters the ONLY ones with meaning; now any letter or word or punctuation can separate a space from tab, or none at all. All that matters is the order of white space characters. The language dramatizes the arbitrariness of signification. It also means that a Whitespace program can be hidden in the gaps of a C program, using just the spaces.

This arbitrariness is at the center of experimental language design. Theorist Wendy Chun calls the computer a metaphor machine, an ontological medium where nothing has intrinsic meaning and anything can be mapped to anything else. Artistic practices like glitch use sound to manipulate visual data. Malware has been hidden in just about every form of digital content, including the opacity of pixels in advertising images. Data that “means” one thing is granted a second or third meaning.

In designing programming languages, we build a metaphoric system, a plane of immanence (to borrow from Deleuze and Guattari) in which the ideas of the language find coherence. Like a natural language, a programming language has a worldview: it is just a very tiny one, required only to convey the behaviors and capabilities of a computer, and the expectations of its programmers. Whitespace reflects this arbitrariness boldly in its choice to use what is normally discarded. Brady and Morris ask, Why treat these spaces like nothing? Cruelly discarded by other programming languages, in Whitespace, they are rehabilitated, given significance.

In its annihilation of visual inscription, Whitespace poetically mirrors the dematerialization of programming languages themselves. A language, after all, is not necessarily contained in a compiler or interpreter; it may just be a set of rules about what code looks like and how it functions. The nature of programming languages is open-ended, to be explored by programmers writing code in it. Whitespace perhaps unwittingly connects to the history of “uninscribed” experimental literary and artistic works, like those in Craig Dworkin’s “No Medium,” which challenge their media by refusing to express something specific in them. Whitespace makes the case for programming languages to serve both as media themselves and pieces within the medium of computation.

Each of the three languages in this piece attempt to build on this promise, responding to the prompts Whitespace puts forward: how to put the dematerialization of computing at the center of a language, how to build semantics around “empty” signifiers, how to reduce a language to its minimal form, and how to truly empty out a language.

text:

The Folders language considers not only visible text, but even white space excessive. It does not use text at all. It even does away with program files, the ordinary containers for text or other data.

The lexicon of Folders is only the existence of folders and their containment of other folders. A program is a folder. So is a command or an expression. Each is defined by navigating the labyrinth of its subdirectories; if there is folder inside, and that first folder has four subdirectories, we can identify it as a print command.

Folders date back to the first Mac, where they appeared as the graphical symbol for the directory, the organizational structure for files (the directory itself dates back to the Xerox PARC era). Folders are only meant to organize content, they are not considered content themselves. They are structural, a place to store files. The empty folder is perhaps the universal symbol of emptiness on a computer; if a folder has no content, it appears unkempt, something to be deleted.

Pure Folders HelloWorld
Hello World in Folders
Pure Folders HelloWorld explained
Hello World marked in Folders

In the Hello World program, the root folder holds all the other folders. The commands of the program are on the first level. Every command has at least one subfolder, and the number of folders in that first subfolder determine the command type. Data is stored as bits: Each folder with a subfolder is a 1; each folder without a subfolder is a 0. So folders are not just commands but also a form of raw data. [The specifics of Folders is here. https://danieltemkin.com/Esolangs/Folders]

Abstract away a program’s lexical elements, and programs have a tree structure that mirrors the tree structure folders already have in the file system. A folder has files or folders inside of it – its children – and can also sit inside of another folder, its parent. In the file system, all parents are single parents. Likewise, in a program, a command has children, either expressions or other commands, given the recursive nature of most programming languages.

Programs in the Folders language are 0 bytes. No Folders program takes up any space at all. This means that, should you write all your code in Folders, you will have infinite storage for it.

FoldersFree
Empty folders in Windows
Mac empty folders
Mac empty folders

 

This is because Folders was created for Windows, where folders are considered to take up no room. This is not the case on, say, a Mac, where as we can see 430 empty folders take up a whopping 18k of space.

Extending the Folders language to store other kinds of data, we now have a file system, the Folders FS, where we can store as much data as we want. We have to store text in the folders file names, which runs counter to Folders’s elimination of text, but it gains us unbounded storage. These parallel file and programmatic systems can run alongside Windows, a parasitic system that only meets Windows in execution.

If you fully commit to Folders, and your folder count gets into the billions, you might notice your hard drive slowly shrinking. This is just a coincidence! For reassurance, you can always get info and see that, in fact, no space was used.

[Source code for Folders is on GitHub http://esolangs.org/wiki/Folders].

text:

text: