Homespring is an esoteric programming language based on metaphors and trees. Learning this language enough to write two basic programs was a fun challenge. On this page are the two programs and their explanations (within the context of the language)!

Program

The following Homespring program prints “Hello, World!”. Trust me.

homespring
lol bear the universe hatchery
fear Hello,.   Hydro. Power pump pump pump pump future
       powers World!
 never trust the marshy marshy marshy marshy snowmelt

Structure

I’ve illustrated below how the Homespring interpreter sees the program as a tree.

                                              Hello,
                                             /
                                        fear - hydro power - pump - pump - pump - pump - future
                                       /
lol - bear - the - universe - hatchery - powers - World!
                                               \
                                                 never - trust - the - marshy - marshy - marshy - marshy - snowmelt

Explanation

Here is a metaphor-laden explanation of how the program works.

Salmon begin spawning in the hatchery on the first tick. The first salmon swims toward “Hello,” where it spawns and creates a young salmon named “Hello,”. This salmon makes it back to the hatchery on the tick before the water from the spring named future activates the hydro power, which powers fear. Fear blocks the remaining salmon in the “Hello,” branch, and redirects the stream of hatchery salmon toward “World!”. The young salmon named “Hello,” makes it past the bear to the ocean. The homeless salmon that was with it is eaten by the bear. The first redirected salmon spawns at “World!”, and the young spawn makes it past the bear to the ocean. At this point, the snowmelt is out of the marsh and destroys the universe, terminating the program.

Challenge: Wait for Two Inputs

The following is a program I wrote that waits for two lines of input from stdin, then prints out both lines together.

homespring
lo, inverse. Lock narrows bird
  hydro. Power insulated evaporates Young. sense powers rapids
   spring

Structure

                    narrows - bird
                   /
lo, - inverse lock - hydro power - insulated - evaporates - young sense - powers - rapids
                                                         \
                                                          spring

Explanation

Lo, stdin waits for input. When the first input is received, creating a mature upstream salmon with its name, the mature salmon reaches a fork, and decides to visit the narrows before attempting the hydro power. The salmon makes it to the bird, where it spawns, creating a young fish, which is immediately eaten by the bird. The mature fish switches to traveling downstream, only to find itself blocked from entering the unpowered inverse lock. At this point, a second line of input may have been received, and a new salmon created. This one, however, reaches the inverse lock and must go to hydro power. This is because it cannot fit through the narrows, where the first salmon is waiting patiently. The second salmon swims through the hydro power, past evaporates, which is currently evaporating all watershed from the appropriately named spring. The salmon continues to rapids, where it spawns. The salmon and its young begin to swim downstream, but the young salmon is delayed one tick by the rapids. The young salmon does reach young sense, though, blocking the electricity from powers. Evaporates stops evaporating the spring water for one tick, long enough for the water to get past it. The water gurgles downstream, ultimately powering hydro power, unlocking the inverse lock with just enough time to let both the 1st and 2nd salmon through. By the time the young salmon from rapids get there, though, it is trapped once again, as it has passed young sense, and powers is once again allowing evaporates to evaporate the spring water, which stops the hydro power from keeping the inverse lock activated. The mature salmon whose names are the two lines from stdin reach the ocean, and print their names to stdout.

Uh, that’ll do.