</HEAD>
<BODY BGCOLOR="#FFFFFF">
<BR><BR><BR>
-<TT>
<BLOCKQUOTE>
-<img src="notfunny.png" align=right>
+<P><TT>
+<img src="notfunny.png" align=right alt="Not Funny!">
Abstraction and Modularity in INTERCAL<br>
D. Alexander Garrett<br>
CS-538: Theory and Design of Programming Languages.<br clear=all>
-<P>
+</TT></P>
+<P><TT>
"<em>And remember, when you look into the pit, the pit looks back into
you.</em>"<br>
-- Anonymous INTERCAL hacker
-<P>
-
+</TT></P>
+<P><TT>
On May 26, 1972, two students at Princeton University took the
programming community if not by storm, at least by mild sprinkle when
they released INTERCAL[<A HREF="#note1">1</A>]. They were summarily
prisoners. This is, of course, strictly against the Geneva Convention,
but as you will see, INTERCAL strives to be an unconventional
language.
-<P>
+</TT></P>
+<P><TT>
Eighteen years later, while suffering from a paralytic attack of
ennui, the Mad Malvernite J. Lapin perpetrated a hack of untold
consequences upon the world by rereleasing INTERCAL under UN*X, which
wake from their sleep deep beneath the sea and shall rule over the
earth for 2^32 years, befuddling men's minds and forcing them to use
buggy overpriced software[<A href="#note2">2</A>].
-<P>
+</TT></P>
+<P><TT>
But I'm not here to talk about eschatology, I'm here to talk about
modularity and abstraction. Well, believe me, you couldn't have
designed a language more abstract than INTERCAL. To begin with, one of
and hire some junior birdman mailboy to maintain your code. INTERCAL
doesn't only hide information it actively distorts it. For example,
the easiest way to store the value of 65536 in a 32-bit INTERCAL
-variable is: <P><BLOCKQUOTE> DO:1<-#0$#256
-</BLOCKQUOTE>
-<P>
+variable is: </TT></P>
+<BLOCKQUOTE><TT>DO:1<-#0$#256</TT></BLOCKQUOTE>
+<P><TT>
If that's the easiest way, imagine the power at your fingertips if
you're trying to be deliberately obscure! To further demonstrate, if
you were to write a program in INTERCAL which reads in 32-bit unsigned
she can find gravy in a cesspool! This allows the programmer to take
even more Quake-breaks, as management doesn't dare fire such an
important asset to the company.
-<P>
+</TT></P>
+<P><TT>
In addition to information hiding, multinational support is also an
important part of abstraction. As information exchange causes the
globe to shrink,[<A HREF="#note4">4</A>] it's important that
INTERCAL would have multicultural scope, the implementors implemented
number support for input digits in Sanskrit, Basque, Tagalog,
Classical Nahuatl, Georgian, Kwakiutl, and Volapuk.
-<P>
+</TT></P>
+<P><TT>
Until the new INTERCAL compiler with better RYM[<A
HREF="#note6">6</A>] access comes out, the old compiler has no way of
knowing which language you are familiar with and thus it doesn't know
Rome was at the height of its strength, half the world was under its
dominion, so the comprehension of Roman numerals is part of our racial
memory.
-<P>
+</TT></P>
+<P><TT>
In addition to being a versatile and truly international language,
INTERCAL is also very simple. For example, in most languages the
logical operators AND, OR, and XOR are binary, i.e., they require two
#&77 (binary = 1001101) is binary 0000000000000100 = 4, #V77 is
binary 1000000001101111 = 32879, and #?77 is binary 1000000001101011 =
32875.[<A HREF="#note9">9</A>]
-<P>
+</TT></P>
+<P><TT>
Ever since Dijkstra's seminal paper "Use of GOTO Considered Harmful"
was published in Communications of the ACM, there has been a hue and
cry against the use of GOTO. INTERCAL recognises the importance of
iad</EM>[<A HREF="#note10">10</A>]. In fact, the implementors of
INTERCAL feel so strongly about the poor programming habits that GOTO
encourages, that they implemented GOTO's opposite number, COME
-FROM. Thus if you had a program which looked similar to below:
-<BLOCKQUOTE>
-(1) PLEASE <YOUR STATEMENT HERE><BR>
-<BLOCKQUOTE>
+FROM. Thus if you had a program which looked similar to below:</TT></P>
+<BLOCKQUOTE><TT>
+(1) PLEASE <YOUR STATEMENT HERE><BR>
+</TT><BLOCKQUOTE>
.<BR>
.<BR>
.
-</BLOCKQUOTE>
+</BLOCKQUOTE><TT>
(2) DO COME FROM (1)
-</BLOCKQUOTE>
+</TT></BLOCKQUOTE>
+<P><TT>
anytime the program executed the statement at label 1, it would
immediately jump to the statement at label 2 without executing any of
the intervening statements. This is very difficult to follow and
requires considerable expertise to use correctly and makes the code
almost impossible to follow. That's right, baby -- information hiding.
-<P>
+</TT></P>
+<P><TT>
One of the big changes to C that Stroustroup made when he created C++
was the use of const data types, which kept the programmer from
inadvertently changing the values of variables which shouldn't.[<A
though if used upon an IGNOREd variable will not cause a change of
state in that variable, i.e., it will still be IGNOREd.[<A
HREF="#note13">13</A>]
-<P>
+</TT></P>
+<P><TT>
INTERCAL is not even vaguely modular and nothing I can say would
-persuade you that it was.<P> INTERCAL is a very dynamic, constantly
+persuade you that it was.</TT></P>
+<P><TT> INTERCAL is a very dynamic, constantly
evolving[<A HREF="#note14">14</A>] language which shows much promise
for future generations of programmers. With languages like Visual
Basic and Java out there which allow people who can hardly tie their
is easily portable. There's even an INTERCAL major mode for emacs
which will help you maintain the proper balance of PLEASE, DO, and
PLEASE DO statements.[<A HREF="#note15">15</A>]
-<P>
-References<BR>
-<BLOCKQUOTE>
- THE INTERCAL PROGRAMMING LANGUAGE REVISED REFERENCE MANUAL, Woods,
+</TT></P>
+<P><TT>
+References</TT><BR>
+<blockquote><TT>
+THE INTERCAL PROGRAMMING LANGUAGE REVISED REFERENCE MANUAL, Woods,
Donald R. and Lyon, James M. Revised by Howell, Louis and Raymond, Eric S.
<BR>
My pineal gland.
-</blockquote>
-<P>
-Afterword<BR>
-<blockquote>
+</TT></blockquote>
+<P><TT>
+Afterword</TT><BR>
+<blockquote><TT>
The author of this paper is currently residing in a home for the
criminally insane after attempting to rewrite the Linux kernel in Object
Disoriented INTERCAL.
-</blockquote>
+</TT></blockquote>
<br><br><br>
<HR WIDTH="30%">
-<FONT SIZE=2>
+<FONT SIZE=2><TT>
[<A NAME="note1">1</A>] which stands for "Compiler Language With No Pronouncable Acronym", obviously.<BR>
[<A NAME="note2">2</A>] There's a small sect of Billyites who, pointing to Microsoft, claim that this has already happened.<br>
[<A NAME="note3">3</A>]These examples shamelessly cribbed from THE INTERCAL PROGRAMMING LANGUAGE REVISED REFERENCE MANUAL, page 2.<br>
[<A NAME="note15">15</A>]Confused? Good. Information hiding.<br>
-</BLOCKQUOTE>
+</TT></font></BLOCKQUOTE>
<BR><BR><BR>
</BODY>
</HTML>