IRP (Internet Relay Programming) is an esoteric programming language designed by Gregor Richards that uses a cooperative programming approach. There are several variations, but the most common is IRP#IRP.

To program in IRP#IRP, join the #IRP channel on irc.freenode.net, then simply write, in plain English, in polite command form, what you intend for your program to do. If other IRP programmers (knowingly or not!) are on the channel, and are in a good mood, you should get the appropriate response.

Make sure you ask politely and thank your fellow IRP programmers for their assistance!

Turing-completeness

IRP is probably not Turing-complete due to the limited faculty of the human brain (unless they're allowed to keep notes on paper -- and even then, let us give some thought of the stress that computing Ack(m,n) for large m would put on the forestry industry.) However, it can quite trivially be proven to be a Bounded-storage machine. The proof itself is left as an exercise to the reader.

Examples

Hello, World!

<GregorR> Please say "Hello, World!" <jix> Hello, World!

Fibonacci sequence

<GregorR> Please, someone write the first 16 numbers of the Fibonacci Sequence. <calamari> 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610

Quine

<GregorR> Please write this exact line to this channel. <jix> Please write this exact line to this channel.

Due to IRP's nature, any quine is potentially a severe DDOS worm.

Safe quine

<linde> Please write this exact line unless it has been written more than once before. <boom> Please write this exact line unless it has been written more than once before.

Note that this quine's behaviour is at present undefined, as it has now been written more than once before.

Iterating quine

<CakeProphet> Could someone please ask someone to repeat this request? <pikhq> Could someone please repeat the previous request? <RodgerTheGreat> Could someone please ask someone to repeat this request?

The only real problem with a quine in this format is that it could easily lead to infinite recursion, until the interpreters get bored. Another potential problem is THE INTERPRETER BEING A NOOB AND PUTTING QUOTATIONS AROUND THE ORIGINAL REQUEST... however this can be prevented by changing the source to

<CakeProphet> Could someone please ask someone to repeat this request WITHOUT BEING A NOOB AND PUTTING QUOTATION MARKS AROUND IT <RodgerTheGreat> ERROR 8: DON'T_BE_A_DOUCHE_TO_YOUR_INTERPRETER ERROR

Or not.

Reverse quine

<Moth_> Could someone please write the reverse of this message? <IdleBot_bc6a1134> ?egassem siht fo esrever eht etirw esaelp enoemos dluoC

99 bottles

Due to a bug in the IRP interpreter, it is very difficult to produce a working implementation of the 99 bottles of beer program in this language. Shown below is a typical result of this bug.

<GregorR> Please, write the lyrics to the song 99 Bottles of Beer on the Wall. <memonic> go to hell

Lightbulb change

Note that this tends to be inefficient; timing information is added here.

[16:04:45] <ais523> Would someone here please change a lightbulb? [16:13:51] <MichaelRaskin_> #Done [16:14:07] <MichaelRaskin_> #No observable effects for you, though

Documentation

< Stephen> Could someone please provide a link to an example of the usefulness of this system? < Shrdlu> http://esoteric.voxelperfect.net/wiki/IRP#Documentation

User Iteration

<bb010g> bumbar: Message the next person (alphabetically) with the body of this message. <bumbar> FireFly, Message the next person (alphabetically) with the body of this message. <FireFly> FreeFull: Message the next person (alphabetically) with the body of this message. <FreeFull> goldkatze: Message the next person (alphabetically) with the body of this message.

Note that this will only work completely if you are alphabetically first and go on or are last and go back. If you want everyone, do something like

<Tear> Typo: Message the next person (alphabetically) with the body of this message except if you are Tear.

Implementations

Implementations in other programming languages such as C, tcl, or perl are easy to come by, but tend to be quite flawed, implementing only a very incomplete subset of the language and sometimes requiring awkward syntax in statements. A self-hosted implementation has been theorized to be possible by giving IRP an instruction such as: "Could someone please make an implementation of IRP?", however such an implementation has never been completed.

Accidental Implementation

IRP is known as the first language to ever have interpreters accidentally created for it. These interpreters include (among others) such programs as Skype, AIM, MSN Messenger, iMessage, etc. However the speed, and effectiveness of these interpreters is questionable due to the limitations some impose on the number of processors (correspondents) that can be used to complete instructions.

See also