Homespring: "Because programming isn't like a river, but it damn well ought to be!"
Jeff Binder


News

4/15 - Minor update to the interpreter, standard and tutorial: Homespring now has a better way to deal with completely blank programs. An example of a completely blank program is now included (man, was that program easy to write). I also fixed a typo on this page.


What is Homespring?

Homespring is a bizarre programming language in the spirit of  INTERCAL and Befunge. It is designed to superficially resemble English, but hide beneath it a structure so needlessly complicated and ridiculously impractical that it brings tears to the eyes. Instead of being an excessively low-level language, like most of these efforts are, Homespring aims to be excessively high-level, as you shall see.


What does the name mean?

Homespring stands for Hatchery Oblivion through Marshy Energy from Snowmelt Powers Rapids Insulated but Not Great. Once you see the language you'll know why. One might also call it HOtMEfSPRIbNG, if one so desires. HS will do in a pinch.


What's it like?

Programming in Homespring is hard, mainly because it is so different from other languages. The language closest to Homespring is Hunter, in that it relies on autonomous agents to carry information. Although unlike Hunter, HS has the environment changing the agents, not the other way around. HS also has an extremely rigid structure that you basically have to work around.

As I've said, it's designed to resemble English. It doesn't cheat all that much either. Although it's case insensitive, the periods are lexically significant, and most of the words you see are actually keywords.

Even though the most trivial programs can be fiendishly difficult to write in Homespring, programming it is still kind of interesting and fun. It's also fun to know you've written a working program that looks like the one just below.


Is it Turing-complete?

Maybe. It hasn't been proven or disproven yet. It looks like it might be, or atleast it might be close. I plan to try and write a Turing-machine emulator in it next, so that will settle it.


What does it look like?

Here's a simple program that copies input to output:

.


(that's a period followed by a blank line.) OK, that's not a very good example. Here's a Hello World program written in Homespring:

Universe of bear hatchery says Hello. World!.
 It   powers     the marshy things;
the power of the snowmelt overrides.

Keep in mind that the spaces are all required.


What's it good for?

Writing a program that copies input to output. Actually, it's so slow it's not very good for that.


Then why?

Why not?


What documentation is there?

There's the Language Specification (pdf; 100k), but it's not very useful as a tutorial or as a reference or as anything else.

There's also the Tutorial, which is your best bet.


How about some more examples?

That's not really a question, but OK.

Here's another Hello World:

Universe of marshy force. Field sense
shallows the hatchery saying Hello,. World!.
 Hydro. Power spring  sometimes; snowmelt
      powers   snowmelt always.

Here's the 'Hi, what's your name?' 'Hi, $name!' program that's often seen in programming tutorials:

Universe marshy now. The marshy stuff evaporates downstream. Sense rapids
upstream. Killing. Device downstream. Sense shallows and say Hi,.
   That powers the     force. Field sense shallows hatchery power.
Hi .. What's. your. name?.
  Hydro. Power spring  when snowmelt then       powers
    insulated bear hatchery !.
 Powers felt;       powers feel     snowmelt themselves.

This program asks the user a question and tells them whether they answered correctly.

Universe alive with youth. Fountain bear Marshy
evaporates downstream. Sense rapids
upstream. Killing. Device downstream. Sense shallows you. lie!.
 Powers   force. Field sense shallows the hatchery but
what's. six. times. four?.
  Hydro. Power spring  with snowmelt which has
       powers enough.
        It powers    snowmelt at least.
       Marshy lock upstream. Sense bear now.
24  powers drive   snowmelt away.
   Insulated bear hatchery time, rightyo!.
 HYDRO. Power spring  with snowmelt first.

And now, the tour de force, a program that adds two single-digit numbers together. When running it, make sure you wait for the prompts to enter the numbers, and keep in mind that it's VERY slow.

Universe is marshy but evaporates downstream. Sense the rapids reverse. Down
bridge is now marsh:
Marshy marshy marshy marshy marshy marshy marshy marshy marshy marshy now.
All evaporates downstream. Sense
the rapids now:
Rapids rapids rapids rapids rapids rapids rapids rapids sensed.
Ugh +.
 Take powers from                  snowmelt  therefore;
                 the   current time is of youth. Fountain is young. Bear cannot
reverse. Down inverse. Lock young. Switch young. Range. Switch clone to the
switch itself. Now inverse. Lock narrows down:
    Powers
       to   append. Up go all young. Bear time evaporates
then. Therefore:
Spawn power. Invert evaporates it. Down force. Down reverse. Down net. The
 net reverses force.
Now try:
Add add add add add add add now.
It is not possible; now count:
0.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18+.
                                    You   can   now   pump
in reverse. Down lock goes; narrows lock down:
Inverse. Lock young. Range. Sense 0n 1n 2n 3n 4n 5n 6n 7n 8n 9n
          Powers         lock time now.
Inverse. Lock young. Range. Sense 0n 1n 2n 3n 4n 5n 6n 7n 8n 9n
          Powers            snowmelt   now.
    Powers
      all:
Bear hatchery n
 powers
               insulated bear hatchery ?.
 Hydro. Power spring as
 snowmelt         powers   snowmelt  then, and disengage.
HYDRO!!


Downloads

Download a tarball of everything
(tar.bz2; 72k). This includes an interpreter written in Guile Scheme, (which is a bit of a mess, but it works), the specification along with its LaTeX source, all of the example programs, and a copy of this Web site.


Copyright (C) 2003 Jeff Binder

Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.