996
|
1 CLC-INTERCAL 1.-94.-2
|
|
2
|
|
3 "human beings are given free will in order to choose between
|
|
4 insanity on the one hand and lunacy on the other"
|
|
5 Aldous Huxley
|
|
6
|
|
7 -- - --------
|
|
8 -2 - Contents
|
|
9 -- - --------
|
|
10
|
|
11 -2 - Contents
|
|
12 -1 - Foreword
|
|
13 0 - Introduction to CLC-INTERCAL pre-pre-escape 1.-94.-2
|
|
14 1 - What has changed since CLC-INTERCAL 0.05
|
|
15 2 - How to install this escape
|
|
16 3 - How to modify the compiler(s)
|
|
17 4 - Licence
|
|
18
|
|
19
|
|
20 -- - --------
|
|
21 -1 - Foreword
|
|
22 -- - --------
|
|
23
|
|
24 A few years ago, I had, for several reasons, decided to completely GIVE UP
|
|
25 working on INTERCAL or, if you prefer, ABSTAIN FROM developing CLC-INTERCAL
|
|
26 any farther.
|
|
27
|
|
28 Of course, the flesh is weak and here I am at it again. It just so happens
|
|
29 that I am using the "compiler compiler compiler compiler" for a serious
|
|
30 project, so I am going to develop it further.
|
|
31
|
|
32
|
|
33 - - ------------ -- ------------ -------------- --------
|
|
34 0 - Introduction to CLC-INTERCAL pre-pre-escape 1.-94.-2
|
|
35 - - ------------ -- ------------ -------------- --------
|
|
36
|
|
37 It has been decided during the development of CLC-INTERCAL 0.06 that there
|
|
38 would be no further releases of CLC-INTERCAL. However, the compiler has
|
|
39 been left unattended on an FTP server, and appears to have escaped. For this
|
|
40 reason, we refer to this as an "escape" rather than a "release".
|
|
41
|
|
42 Additionally, development of CLC-INTERCAL version 0 has effectively stopped
|
|
43 before the escape of 0.06; a new versioning scheme has been introduced for
|
|
44 CLC-INTERCAL version 1. The main points to note are:
|
|
45
|
|
46 * The term "version" has been replaced by "perversion" for correctness
|
|
47 * The perversion number consists of a floating-point number with
|
|
48 independent signs for the integer and fractional part. Negative
|
|
49 fractions indicate pre-escapes (so 1.-94 means "94 pre-escapes to
|
|
50 go before 1.00". Or you can just add the numbers together and get
|
|
51 0.06, which is entirely a coincidence since 0.06 is not being
|
|
52 developed)
|
|
53 * The fractional part of a perversion number can be integer or floating
|
|
54 point, with a similar meaning for the parts. The current pre-escape is
|
|
55 1.-94.-2 which means "2 pre-pre-escapes to go before pre-escape 1.-94".
|
|
56
|
|
57 The fact that the compiler has escaped does not allow you to use without
|
|
58 reference to its licence: see the end of this document or the file COPYING.
|
|
59
|
|
60 Since this is a pre-pre-escape, there are parts which are unimplemented
|
|
61 or partially implemented. The file "MISSING" describes what is missing.
|
|
62 There might also parts which are implemented but are intended to be left
|
|
63 implemented: these will be removed from the final escapes.
|
|
64
|
|
65
|
|
66 - - ---- --- ------- ----- ------------ ----
|
|
67 1 - What has changed since CLC-INTERCAL 0.05
|
|
68 - - ---- --- ------- ----- ------------ ----
|
|
69
|
|
70 Just about everything. See the file "Changes" for a complete list, or see
|
|
71 the following executive summary.
|
|
72
|
|
73 The code is a complete rewrite. The "CREATE" statement which was documented
|
|
74 but not implemented has now been implemented (in a different form) and not
|
|
75 documented. This means that the compiler only needs to know about one
|
|
76 statement, "CREATE", and everything else can be created on-the-fly. This is
|
|
77 why the compiler itself and the various compatibility modules now include
|
|
78 INTERCAL source code consisting almost exclusively of "CREATE" statements.
|
|
79
|
|
80 This made it a lot easier to extend the language by specifying new features
|
|
81 in INTERCAL instead of Perl. Most statements have been modified to allow
|
|
82 creation of quantum bits. For example, it is possible to create 16 quantum
|
|
83 bits in one operation by assigning to a register while not assigning to it.
|
|
84 It goes without saying that the practice is not recommended if you don't
|
|
85 actually possess a quantum computer.
|
|
86
|
|
87 A new statement, "NEXT FROM", combines all the advantages of "COME FROM" and
|
|
88 "NEXT". It has been implemented essentially to provide a system call
|
|
89 interface, where the operating system is supposed to have a "NEXT FROM"
|
|
90 lurking in its darkest corner. See the last entry in the file "Changes"
|
|
91 for a complete description of the system call interface. Since this is
|
|
92 INTERCAL, the syscall interface is entirely system independent. System
|
|
93 dependent system calls are not supported.
|
|
94
|
|
95 All old programs should work unchanged (modulo the unimplemented parts, but
|
|
96 this is due to change as the perversion number progresses towards 1.00).
|
|
97 Programs intended for different compilers can also be compiled by selecting
|
|
98 a different compiler object (for example, "ick.iacc" provides compatibility
|
|
99 with the C-INTERCAL compiler "ick", and "1972.iacc" with the original
|
|
100 Princeton compiler). All these compiler object must be first compiled using
|
|
101 "iacc.iacc", the INTERCAL Astonishing Compiler Compiler, which is also used to
|
|
102 compile itself before compiling other compilers. A pre-compiled version is
|
|
103 provided in this escape otherwise you'll never get started.
|
|
104
|
|
105 The command-line compiler "oo, ick" and the inline module "Language::INTERCAL"
|
|
106 are not currently provided. They have been replaced by the compiler "sick"
|
|
107 and the module "Language::INTERCAL::Sick" respectively, which have a rather
|
|
108 different usage. A compatibility "oo, ick" and "Language::INTERCAL" is
|
|
109 intended to appear in a future pre-escape, and certainly before the escape.
|
|
110
|
|
111 The former "on-line reference", has been included in the distribution in
|
|
112 directory doc/html; it has been adapted for CLC-INTERCAL 1.-94; however
|
|
113 some new features might be still undocumented or underdocumented. Some of
|
|
114 the HTML documents are included as templates: the actual documentation
|
|
115 will be produced in blib/htmldoc
|
|
116
|
|
117
|
|
118 - - --- -- ------- ---- ------
|
|
119 2 - How to install this escape
|
|
120 - - --- -- ------- ---- ------
|
|
121
|
|
122 To unpack the distribution you need the following:
|
|
123
|
|
124 * A command interpreter compatible with the Bourne shell
|
|
125 * the "dd" program
|
|
126 * optionally, gzip and/or bzip2
|
|
127
|
|
128 If necessary, uncompress the distribution:
|
|
129
|
|
130 gzip -d CLC-INTERCAL-1.-94.-2.ddsh.gz
|
|
131
|
|
132 or:
|
|
133
|
|
134 bzip2 -d CLC-INTERCAL-1.-94.-2.ddsh.bz2
|
|
135
|
|
136 Unpack the distribution:
|
|
137
|
|
138 sh CLC-INTERCAL-1.-94.-2.ddsh
|
|
139
|
|
140 Create the Makefile:
|
|
141
|
|
142 cd CLC-INTERCAL-1.-94.-2
|
|
143 perl Makefile.PL
|
|
144
|
|
145 Build the compilers:
|
|
146
|
|
147 make
|
|
148
|
|
149 See if everything works:
|
|
150
|
|
151 make test
|
|
152
|
|
153 And install:
|
|
154
|
|
155 make install
|
|
156
|
|
157 It is possible that, by the time you read this, we have provided two
|
|
158 alternative versions of some modules: pure Perl and Perl-with-C. The latter
|
|
159 is likely to be better in some way (speed, size), otherwise we would not
|
|
160 provide it. If Makefile.PL finds that alternative versions are available,
|
|
161 it will ask which one you want to install. In general, the pure Perl versions
|
|
162 will work as long as your Perl installation works; the Perl-with-C should
|
|
163 work but might break because your C compiler is not the same as mine, or
|
|
164 simply because it's C and it's more self-obfuscating than INTERCAL. If it
|
|
165 does not work, install the pure Perl version. If that does not work either,
|
|
166 you have found an unimplemented feature. Congratulations.
|
|
167
|
|
168 The "make" and "make test" will take some time: "make" will run IACC (the
|
|
169 INTERCAL Astonishing Compiler Compiler) to build itself and all the other
|
|
170 compilers, and this is not quite a quick job. The "make test" will test
|
|
171 all parts of the compiler, including the Virual Machine, the Quantum
|
|
172 Emulator and the Just-Too-Late compiler. Have a coffee break, or read the
|
|
173 source code and try to figure out how it works. If you can figure out how
|
|
174 it works, please tell me, because I cannot.
|
|
175
|
|
176
|
|
177 - - --- -- ------ --- -----------
|
|
178 3 - How to modify the compiler(s)
|
|
179 - - --- -- ------ --- -----------
|
|
180
|
|
181 The compiler and the compiler compiler are currently underdocumented
|
|
182 (which means that there is no documentation whatsoever). If you feel
|
|
183 the urge to modify the compiler itself, ignore the Perl runtime library
|
|
184 and edit the file "sick.iacc", which would have been installed somewhere
|
|
185 system dependent. If you have write permission to this system dependent
|
|
186 location and your command interpreter is compatible with the Bourne Shell,
|
|
187 you can locate the file and edit it by simply typing (all in one line, we
|
|
188 show it in separate lines for readability):
|
|
189
|
|
190 sh -c '${EDITOR-vi} `sick -vo/dev/null sick.iacc 2>&1 |
|
|
191 head -1 | sed -e "s/\.\.\. \[.*$//"`'
|
|
192
|
|
193 If you would rather not type the above, or you have no write permission to
|
|
194 the appropriate place (or if you have an inferior command interpreter), try:
|
|
195
|
|
196 sick -vo/dev/null sick.iacc
|
|
197
|
|
198 The complete path will appear in the first line of the output, so you can copy
|
|
199 or edit it. You do want to copy it in case you break it:
|
|
200
|
|
201 sh -c 'cp `sick -vo/dev/null sick.iacc 2>&1 |\
|
|
202 head -1 | sed -e "s/\.\.\. \[.*$//"` iacc.io.SAFE'
|
|
203
|
|
204 When you have edited the file, rebuild the compiler object with:
|
|
205
|
|
206 sick sick.iacc
|
|
207
|
|
208 If you have edited a copy, type that from the directory where you left the
|
|
209 edited copy, or "sick" won't find it (but see the "-I" command line option)
|
|
210
|
|
211 A similar consideration applies to rebuilding IACC (the INTERCAL Astonishing
|
|
212 Compiler Compiler). However, in this case you need to make a copy of "iacc.io"
|
|
213 as well as "iacc.iacc":
|
|
214
|
|
215 sh -c 'cp `sick -vo/dev/null iacc.iacc 2>&1 |\
|
|
216 head -1 | sed -e "s/\.\.\. \[.*$//"` iacc.io.SAFE'
|
|
217 sh -c 'cp `sick -vo/dev/null iacc.io 2>&1 |\
|
|
218 head -1 | sed -e "s/\.\.\. \[.*$//"` iacc.io.SAFE'
|
|
219 sh -c '${EDITOR-vi} `sick -vo/dev/null iacc.iacc 2>&1 |\
|
|
220 head -1 | sed -e "s/\.\.\. \[.*$//"`'
|
|
221 sick iacc.iacc
|
|
222
|
|
223 If you break "iacc.io" you won't be able to recompile "iacc" unless you
|
|
224 re-install CLC-INTERCAL or use the copy you just made.
|
|
225
|
|
226
|
|
227 - - -------
|
|
228 4 - Licence
|
|
229 - - -------
|
|
230
|
|
231 Copyright (c) 2006-2008 Claudio Calvelli <intercal@sdf.lonestar.org>
|
|
232 (Please include the word INTERLEAVING in the subject when emailing that
|
|
233 address, or the email may be ignored)
|
|
234
|
|
235 In addition to the above, permission is hereby granted to use, misuse,
|
|
236 modify, distribute, break, fix again, etcetera CLC-INTERCAL-1.-94.-2
|
|
237 provided that the following conditions are met:
|
|
238
|
|
239 1. Redistributions of source code must retain the above copyright
|
|
240 notice, this list of conditions and the following disclaimer.
|
|
241 2. Redistributions in binary form must reproduce the above copyright
|
|
242 notice, this list of conditions and the following disclaimer in the
|
|
243 documentation and/or other materials provided with the distribution.
|
|
244 3. Neither the name of the Author nor the names of its contributors
|
|
245 may be used to endorse or promote products derived from this software
|
|
246 without specific prior written permission.
|
|
247
|
|
248 THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
249 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
250 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
251 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
252 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
253 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
254 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
255 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
256 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
257 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
258 SUCH DAMAGE.
|
|
259
|