996
|
1 NEW IN THIS RELEASE
|
|
2
|
|
3 Release 0.29 (by Alex Smith)
|
|
4
|
|
5 Bugs reported and changes patched by Arvid Norlander
|
|
6
|
|
7 1. Fixed a typo in the perpet.c version of the help information.
|
|
8
|
|
9 2. Fixed the CREATE statement to work on 64-bit architectures.
|
|
10
|
|
11 3. The availability of variable argument list mechanisms is now determined
|
|
12 automatically by the configure script, rather than relying on the old
|
|
13 method of checking which usually gets the wrong answer with modern
|
|
14 compilers, leading to build failures on many modern systems (previously
|
|
15 this was patched just for DJGPP, the patch now applies to all operating
|
|
16 systems and platforms). This bug is known to have affected the build on
|
|
17 DOS, FreeBSD and Mac OS X, and possibly affects other platforms. (also
|
|
18 reported independently by Elliott Hird)
|
|
19
|
|
20 4. Fixed some nonsense in the -@ help screen that was generated by an errant
|
|
21 search-and-replace.
|
|
22
|
|
23 5. Made several changes to bring the new Befunge-98 interface code (see
|
|
24 below) in line with changes in the Befunge-98 interpreter in use.
|
|
25
|
|
26 6. Added consts and statics in the code, hopefully to make bugs easier to
|
|
27 notice.
|
|
28
|
|
29 7. Refactored main(). It neeeded it, badly.
|
|
30
|
|
31 Bugs reported by Elliott Hird
|
|
32
|
|
33 8. Fixed the configure script to work with the default Debian shell dash.
|
|
34 (also reported independently by Debian)
|
|
35
|
|
36 9. Actually fixed unlambda.i; the fix was meant to be in 0.28, and is
|
|
37 described in its changelog, but for some reason never made it to
|
|
38 the distributed tarball.
|
|
39
|
|
40 10. The -F option again works. (AIS: I accidentally broke it in the preceding
|
|
41 version, making it basically a no-op by mistake.)
|
|
42
|
|
43 11. The build now succeeds (with warnings) when lex or yacc are missing,
|
|
44 rather than failing with mysterious error messages that seem to have
|
|
45 nothing to do with the problems. (The success is made possible by using
|
|
46 the prebuilt versions; see change 11 of version 0.26, this is finishing
|
|
47 what that started.)
|
|
48
|
|
49 Bugs reported, changes requested, and patches by Joris Huizer
|
|
50
|
|
51 12. The [xoritself] optimiser idiom has been generalised to handle some
|
|
52 situations where the redundant XOR operands are on different grouping
|
|
53 levels; this helps to optimise some heavily inlined greater-than tests.
|
|
54
|
|
55 13. Fixed unary operators applied to constants (AIS: it seems that my patch to
|
|
56 solve this issue earlier was itself buggy).
|
|
57
|
|
58 14. The -g option now causes optimisation of the output compiled C to be
|
|
59 turned off, and adds comments to the output file the same way -c does.
|
|
60
|
|
61 15. Added more optimiser idioms: [cxorand16], [cxorand32], [cfoldintoorinand],
|
|
62 [or16and], [xor16and], [lshift32half], [rshiftoutofneg], [andoutofneg];
|
|
63 also generalised the idiom-matching code to compare 16-bit and 32-bit
|
|
64 constants as equal if they have the same value, and fixed some typos in
|
|
65 the current 16-bit complement idioms.
|
|
66
|
|
67 16. ABSTAINING or REINSTATING are now a lot more efficient, taking an amount
|
|
68 of time proportional to the number of commands effected, rather than the
|
|
69 number of commands in the program. (AIS: I implemented this with the
|
|
70 algorithm in the patch Joris provided, but with different code, to make it
|
|
71 easier to maintain.)
|
|
72
|
|
73 Changes by Stefan O'Rear
|
|
74
|
|
75 17. Added INTERCAL syntax highlighting information for vim. Why should Emacs
|
|
76 have all the fun?
|
|
77
|
|
78 Changes reported by the Debian autobuilders and Joey Hess
|
|
79
|
|
80 18. The build of the optimiser idioms is now split over many files, to reduce
|
|
81 the memory usage of gcc when it tries to compile the giant output C file.
|
|
82 This was a problem on ia64. (The ulimit method of preventing thrashing has
|
|
83 been removed, as this method works better; likewise, the optimiser
|
|
84 optimisation now works again.)
|
|
85
|
|
86 Changes by Alex Smith
|
|
87
|
|
88 19. The build system has been completely redone, again; it now uses automake
|
|
89 as well as a much newer version of autoconf. This means that there is now
|
|
90 one build system that works the same way on all systems, and that all
|
|
91 sorts of clever tricks like out-of-tree builds, a self-rebuilding build
|
|
92 system, and building the distribution directly from the Makefile, are
|
|
93 possible. As a side effect, the directory structure looks somewhat
|
|
94 different to how it looked in previous versions; src, doc, etc and pit are
|
|
95 still there, but now there's prebuilt instead of temp, an extra directory
|
|
96 buildaux, and bin, lib and include have disappeared.
|
|
97
|
|
98 20. The distribution now comes in compressed pax format. (Before anyone
|
|
99 complains that they have no idea what that is, or that I'm using something
|
|
100 strange and nonstandard, I'd like to point out that tar is no longer part
|
|
101 of POSIX, but that pax is. (See man 5 tar on a recent Linux system for
|
|
102 details of the whole mess.) Luckily, pax is forward-compatible with tar
|
|
103 so tar readers should be able to read it just fine, if you can't get your
|
|
104 hands on a pax reader.)
|
|
105
|
|
106 21. convickt can now produce its output as INTERCAL initialisation of a tail
|
|
107 array. (This doesn't auto-offset between the different characters; it is
|
|
108 therefore mostly useful for producing Baudot arrays for CLC-INTERCAL-style
|
|
109 IO.)
|
|
110
|
|
111 22. The function clock_gettime is now supported by the yuk profiler as an
|
|
112 alternative method of getting a high-resolution clock for profiling (it
|
|
113 is available on at least Linux).
|
|
114
|
|
115 23. The profiler now autodetects the same profiling mechanism at compile
|
|
116 time and at run time. (It was getting confused as to what mechanism it was
|
|
117 using, causing some really weird bugs.)
|
|
118
|
|
119 23. Added support for computed CREATE (the computation is done at create-time,
|
|
120 rather than when the unknown statement is encountered); partly because
|
|
121 this was rather easy, but mostly because it can be used to simulate a
|
|
122 computed NEXT, thus making the example expansion library compunex (which I
|
|
123 forgot to mention in the 0.28 release notes) redundant. Because it was
|
|
124 deprecated when I added it, compunex is now doubly deprecated, and anyone
|
|
125 tempted to use it should use computed CREATE instead. (I have always
|
|
126 maintained that if computed NEXT were ever added to C-INTERCAL, it would
|
|
127 be deprecated on arrival; the computed CREATE method implements all
|
|
128 features of NEXT, anyway, rather than the small subset COMPUNEX could
|
|
129 manage.)
|
|
130
|
|
131 24. Plugged a couple of small memory leaks; however, there are still several
|
|
132 much bigger memory leaks that could do with being fixed.
|
|
133
|
|
134 25. Added support for CREATING operators, with similar syntax to the CREATION
|
|
135 of commands. This requires the -ea options to be set to work properly.
|
|
136
|
|
137 26. More file extensions are now supported by the external calls system. The
|
|
138 .c99 extension indicates a C99 (rather than C89) file; all .c99 files are
|
|
139 preprocessed as C99, and if any C99 files are used the final compilation
|
|
140 which compiles and links everything will be done as C99 rather than C89
|
|
141 (this causes no problems for C-INTERCAL's output which is both legal C89
|
|
142 and legal C99). Also, libraries can be linked in; to link in the maths
|
|
143 library for instance (i.e. pass -lm to gcc), write libm.a as a filename at
|
|
144 the end of the command line. (The file's real name is libm.a; if a
|
|
145 filename is in lib*.a format, then ick will look in the normal library
|
|
146 locations instead of the current directory.) Other .a files can be linked
|
|
147 in from the current directory.
|
|
148
|
|
149 27. Fixed the handling of division by zero in the syslibc expansion library.
|
|
150 (The Revamped Manual states 'In all cases, division by 0 returns 0'.)
|
|
151
|
|
152 28. Made several changes to the documentation, including fixes for some rather
|
|
153 nasty typos (two of the worst were specifying variables as IGNORED by
|
|
154 default, and stating that select acts like OR in TriIntercal!).
|
|
155
|
|
156 29. Fixed a bug in the external calls system that made it impossible to write
|
|
157 a COME FROM in more than one file at a time whilst still having the
|
|
158 resulting program work reliably.
|
|
159
|
|
160 30. Added support for external calls to Befunge-98 programs; however, this
|
|
161 distribution does not ship with a Funge-98 interpreter, so in order to use
|
|
162 this feature you will first have to compile a Funge-98 interpreter into a
|
|
163 library for use with C-INTERCAL (see README.txt or the Revamped Manual for
|
|
164 information on this). Also added a test program for this to the pit.
|
|
165
|
|
166 31. Fixed some bugs in the go-away command in interfunge.i.
|
|
167
|
|
168 Release 0.28 (by Alex Smith) 1 Apr 2008
|
|
169
|
|
170 Patches, suggestions and bugs found by Joris Huizer
|
|
171
|
|
172 1. Fixed a typo in the [noopxor] optimiser idiom.
|
|
173
|
|
174 2. Added a [redundantdoublenot] optimiser idiom (a generalisation of Joris'
|
|
175 suggestion of and code for [triplenot]).
|
|
176
|
|
177 3. Fixed a typo that caused the flow optimiser to optimise some errors into
|
|
178 non-erroring code.
|
|
179
|
|
180 4. Fixed the [lshift16] optimiser idiom; previously it was giving incorrect
|
|
181 values in some cases where the bits being selected from the original
|
|
182 number weren't contiguous.
|
|
183
|
|
184 5. There is now no longer a segfault when the unusual option combination -f
|
|
185 (without specifying -O) is used.
|
|
186
|
|
187 6. It is again possible to recompile more than one source file at a time.
|
|
188
|
|
189 7. The flow optimiser now recognises that comments can be reinstated in
|
|
190 programs where they can be reinstated.
|
|
191
|
|
192 Changes by Alex Smith
|
|
193
|
|
194 8. Fixed some typos in the documentation.
|
|
195
|
|
196 9. Applying an infix unary operator to a constant (as in ) now returns
|
|
197 the correct value; previously it returned the unary operator applied to a
|
|
198 sequence number that was 0 for the first unique constant that was the
|
|
199 argument of a unary operator, 1 for the second unique constant, and so
|
|
200 on. (This was a bug in the parser.)
|
|
201
|
|
202 10. Added doc/THEORY.txt back in. (It seems that it went missing some time
|
|
203 between 1.26 and 0.27.) Updated it to describe the current compiler.
|
|
204
|
|
205 11. Turned off optimsation of the optimiser, and also placed a 128MB limit on
|
|
206 the data segment and virtual memory it was allowed to use. This is to
|
|
207 prevent Linux thrashing and/or invoking the dreaded oom-killer when
|
|
208 recompiling idiotism.c. (This happened only rarely, but it happened to me
|
|
209 twice, each time making my computer unusable for about half an hour.
|
|
210 Therefore, a fix to prevent the situation happening again was added,
|
|
211 assuming your computer has at least 128MB free memory and disk space.) As
|
|
212 a bonus, the build process is now considerably faster, because the
|
|
213 optimisation of the optimiser was the slowest step of the process.
|
|
214
|
|
215 12. Internally, all symbols that are visible globally are now name-mangled (by
|
|
216 using the prefix ick_). This allows other files to be linked with files
|
|
217 compiled from INTERCAL without namespace collisions. This does not include
|
|
218 symbols that are only useful in multithreading (as INTERCAL's
|
|
219 multithreading model is incompatible with other programs), only for the
|
|
220 debugger (because linking yuk into a program causes all sorts of chaos if
|
|
221 non-INTERCAL programs are involved), or only used by the compiler (which
|
|
222 hopefully should never be linked to another program that isn't
|
|
223 specifically designed to be linked to it).
|
|
224
|
|
225 13. Thoroughly delinted the code, using Splint; the code is now annotated to
|
|
226 show Splint what is being done where (and all the non-obvious annotations
|
|
227 are explained so that humans can figure out what is going on as well);
|
|
228 over 800 warnings have been fixed, including some which identified bugs in
|
|
229 the original program (many of which were to do with edge cases involving
|
|
230 unusually long strings, and some of which were buffer overflows). All
|
|
231 comments from /*@ to @*/ are mine, and are annotations for Splint.
|
|
232
|
|
233 14. Implemented external calls, which allow multiple INTERCAL programs to be
|
|
234 linked to each other, and/or to C programs, via the -e option and NEXT /
|
|
235 COME FROM / NEXT FROM / FORGET / RESUME statements. See the manual for
|
|
236 more details. (Note that external calls require you to use gcc, GNU cpp,
|
|
237 and GNU ld, because they rely on features of those programs to work.)
|
|
238
|
|
239 15. Two other new compiler options have been added: -E (don't link system
|
|
240 library), and -w (enable +printflow debugging even for non-multithread
|
|
241 programs). +printflow has been enhanced to show what's going on in
|
|
242 externally-called programs to some extent, too.
|
|
243
|
|
244 16. Added a version of the INTERCAL system library written in C, as
|
|
245 pit/lib/syslibc.c. A new compiler feature allows the inclusion of such
|
|
246 expansion libraries via the command line; to include this library, you
|
|
247 would write the command line as ick -eE yourprogram.i syslibc (possibly
|
|
248 adding other options than -eE). The main advantage of the C-based system
|
|
249 library is speed; also, note that an implemented-in-a-faster-language-
|
|
250 than-INTERCAL system library existed in the Princeton compiler (which is
|
|
251 possibly how the INTERCAL version managed to stay buggy for decades
|
|
252 without anyone noticing), so this is another case of catching up with
|
|
253 historically available features. (The feature is also somewhat reminicent
|
|
254 of CLC-INTERCAL's 'preloads', but is implemented differently, and is
|
|
255 useful for different things, as it doesn't affect the compiler.)
|
|
256 Expansion libraries are included via -e, like non-INTERCAL programs are,
|
|
257 but are distinguished by not having an extension.
|
|
258
|
|
259 17. The handling of syntax errors has been improved; many lines that
|
|
260 previously caused E017 at compile time are now correctly interpreted as
|
|
261 run-time errors. The only way to cause E017 nowadays is to write a
|
|
262 constant out of the onespot range, and the manual description of the error
|
|
263 has been changed accordingly. (Note that I caused several regressions
|
|
264 while implementing this; I hope they're all fixed now, but there may be
|
|
265 some left. Please report any remaining parsing problems caused by this;
|
|
266 they mostly manifest as either the line after a comment being corrupted or
|
|
267 ignored, or as the line before a comment being taken to be part of the
|
|
268 comment.)
|
|
269
|
|
270 18. A new 'just-in-case' compilation method is used for syntax errors. If a
|
|
271 syntax error is encountered at compile-time, and contains just capital
|
|
272 letters with no other meaning (i.e. they don't form keywords and none of
|
|
273 them is the letter V), variables, and expressions, and there are no two
|
|
274 consecutive expressions or variables involved (i.e. they are separated by
|
|
275 keywords), the compiler will compile it anyway, just in case it happens to
|
|
276 gain a meaning later (see the next changelog entry). This is sort of the
|
|
277 converse of the way CLC-INTERCAL goes about compiling things that don't
|
|
278 have a meaning yet (it uses a 'just-too-late' compiler which waits for the
|
|
279 offending statement to error out, then recompiles it to see if it's gained
|
|
280 a meaning in the meantime), and this difference in handling typifies the
|
|
281 difference between the compilers quite well.
|
|
282
|
|
283 19. Implemented the CREATE statement, because I could (see point 18). This
|
|
284 allows new syntax to be created at runtime. CLC-INTERCAL also has a CREATE
|
|
285 statement, but its syntax is totally different (it specifies the bytecode
|
|
286 for the command, whereas C-INTERCAL's CREATE statement allows you to
|
|
287 specify what the new command does in INTERCAL itself.) A function call
|
|
288 ick_create is also available; it's usable from externally-called programs
|
|
289 and from expansion libraries, and means that INTERCAL commands can now be
|
|
290 defined to do things which were previously well out of INTERCAL's
|
|
291 reach. This makes expansion libraries act even more like CLC-INTERCAL
|
|
292 preloads.
|
|
293
|
|
294 20. Fixed a strange bug in yuk when the basename of the INTERCAL program was
|
|
295 the same as that of a shell builtin or command on the user's path.
|
|
296
|
|
297 21. Programs accept a new option +instapipe that causes output to be output
|
|
298 immediately, even if not followed by a newline, by flushing the output
|
|
299 after every character. This is most useful with binary output into pipes,
|
|
300 and occasionally useful for getting the output to very slow programs
|
|
301 faster.
|
|
302
|
|
303 22. Fixed an error in an optimiser idiom that could optimise erroring code
|
|
304 involving mingles into non-erroring code (which is of course incorrect);
|
|
305 also edited unlambda.i in the pit, which was taking advantage of this
|
|
306 error (and erroring out if optimisation was turned off).
|
|
307
|
|
308 23. Fixed a bug with the ON THE WAY TO line number displayed when COME FROMs
|
|
309 are involved that I accidentally introduced in 0.25.
|
|
310
|
|
311 Changes from elsewhere
|
|
312
|
|
313 24. Added yet another nontrivial INTERCAL program to the pit; interfunge.i
|
|
314 (written by Jeffrey Lee) is a Befunge-93 interpreter written in INTERCAL.
|
|
315 (It appears to conform to the standard (I actually ran it against a
|
|
316 testsuite, and it passed); its only pecularities, apart from the language
|
|
317 in which it's written, appear to be the need for a blank line at the end
|
|
318 of the program, but no blank lines earlier (because INTERCAL can't sense
|
|
319 EOF, although there are plans to change that), the restriction to 80x25 is
|
|
320 enforced (this seems to be an implied requirement in the standard, but
|
|
321 most Befunge-93 interpreters don't enforce it), and numeric output is in
|
|
322 Roman numerals (what did you expect?).)
|
|
323
|
|
324 Release 0.27 (by Alex Smith) 22 Dec 2007
|
|
325
|
|
326 1. Joris Huizer pointed out that the manual nowhere says that a GIVE UP line
|
|
327 can't be abstained from by line number. This was probably a mistake in the
|
|
328 INTERCAL-72 manual, but the behaviour specified by the original manual is
|
|
329 now implemented; after all, it wouldn't do to violate the original de facto
|
|
330 standard. (Note that if a GIVE UP line is abstained by line number, there
|
|
331 is then no way to reinstate it; also, if the -X switch for CLC-INTERCAL
|
|
332 compatibility is used, ABSTAINING FROM a GIVE UP line by line number is
|
|
333 also silently ignored.)
|
|
334
|
|
335 2. Rewrote the optimizer in a language (OIL) invented specifically for the
|
|
336 purpose; the set of optimizer idioms is now in idiotism.oil, and translated
|
|
337 into C and linked with the rest of the compiler at metacompile time (that
|
|
338 is, when the compiler itself is being compiled). It contains many of the
|
|
339 same idioms, but some have been generalised or reduced into smaller parts
|
|
340 and some new ones were added. Documentation for OIL has been added as part
|
|
341 of the documentation for the distribution as a whole.
|
|
342
|
|
343 3. Joris Huizer submitted a patch to fix a memory allocation bug which
|
|
344 occasionally caused memory corruption when a program had a number of
|
|
345 commands that was 1 less than a multiple of 256.
|
|
346
|
|
347 4. Completely redid the autoconfiguration. The install should now progress
|
|
348 with less user interaction than before. As a bonus, if you have a range of
|
|
349 GNU utilities including make, sed, tr, and bash (and possibly others), it's
|
|
350 now possible to compile using 'sh configdj.sh' followed by 'make' under
|
|
351 DJGPP. (To be specific, some settings that previously sometimes had to be
|
|
352 set by the user, such as whether lex provided yylineno and yyrestart, are
|
|
353 now either detected by config.sh or no longer relevant. Other settings that
|
|
354 were not previously detected, such as what extension executables have, are
|
|
355 now detected so that the config script works on DJGPP as well, now;
|
|
356 compiling the config script on a non-DJGPP system seems to result in a
|
|
357 script that fails on DJGPP, and likewise compiling the script on DJGPP
|
|
358 seems to result on a script that fails on other systems, so both scripts
|
|
359 are provided. The autoconfigurer now also adapts coopt.sh so that -F works
|
|
360 on DJGPP too, sort of (or else detects that it won't work and disables it).
|
|
361
|
|
362 5. Improved the action of 'make install', so that it actually installs
|
|
363 everything in the right place. It works under DJGPP, now, too, as long as
|
|
364 you have the programs installed that allow configdj.sh and make to work.
|
|
365
|
|
366 6. Fixed a bug involving COME FROM in multithreaded programs; now, if a line
|
|
367 COMEs FROM itself (either because this is written explicitly or because it
|
|
368 is a computed COME FROM computing to its own line number), the loop this
|
|
369 creates doesn't block all the other threads in the program.
|
|
370
|
|
371 7. Added support for statement WHILE statement, with similar semantics to CLC-
|
|
372 INTERCAL. (The second statement is repeated for as long as the first
|
|
373 statement is executing; NEXTing to the statement nexts to the first
|
|
374 statement and doesn't set off the loop, and COMING or NEXTING FROM the
|
|
375 first statement leaves the loop running until the NEXT FROM returns.) With
|
|
376 the current implementation, strange things happen if the same WHILE is
|
|
377 simultaneously run by multiple threads, although I decided to work out
|
|
378 exactly what the rules were anyway and document them, so those strange
|
|
379 things are now official.
|
|
380
|
|
381 8. Fixed some weird bugs in the multithreader that could cause segfaults in
|
|
382 several situations involving backtracking; it's kind of surprising that
|
|
383 they didn't turn up sooner.
|
|
384
|
|
385 9. Prevented a segfault in some situations where a syntax error was the
|
|
386 target of a noncomputed COME FROM or NEXT FROM.
|
|
387
|
|
388 10. CALCULATING now includes array dimensioning. (There previously was no
|
|
389 gerund for this situation; the original manual doesn't say what to do but
|
|
390 implies that this is a special case of calculate.)
|
|
391
|
|
392 11. Made operand overloading interact more sensibly with multithreading.
|
|
393 Previously, overloading information was shared between all threads, but the
|
|
394 stashes for operand overloading were separate in each thread. Now, the
|
|
395 overloading is not shared between threads, except when they are woven by a
|
|
396 WHILE statement.
|
|
397
|
|
398 12. There's no longer a need to set or modify copyloc in the makefile by hand;
|
|
399 COPYING.txt is now found the same way as syslib and the skeleton. It's also
|
|
400 now copied out of the distribution to the same place as the other data
|
|
401 files when installing, preventing the need to keep the original
|
|
402 installation directory around.
|
|
403
|
|
404 13. The compiler now actually looks for a temporary directory to place a file
|
|
405 in when creating a temporary file; this was meant to be fixed in 1.26, but
|
|
406 the fix didn't actually work.
|
|
407
|
|
408 14. Added a new program to the pit: an Unlambda interpreter written by Oerjan
|
|
409 Johansen in 2001, and also a commented version as documentation.
|
|
410
|
|
411 15. Section 23 of the release notes for version 0.26 is wrong; I was obviously
|
|
412 confused when I wrote them because they were speaking nonsense. For the
|
|
413 record: no, there is nothing special about NEXT in connection with
|
|
414 backtracking. It should have said "NEXT", not "choicepoint". Instead of
|
|
415 rewriting history, this changelog entry is added as a fix.
|
|
416
|
|
417 16. Added an entirely new set of documentation, the Revamped Manual, which is
|
|
418 available in a wide range of formats and documents recent language changes,
|
|
419 as well as many other things INTERCAL. The Revised Manual has been
|
|
420 preserved, but it seems unlikely to be updated in the near future (it is
|
|
421 still well worth a read anyway).
|
|
422
|
|
423 17. For compatibility, the COMMENT gerund can now be spelt COMMENTS or
|
|
424 COMMENTING.
|
|
425
|
|
426 18. Corrected the Emacs INTERCAL mode to work with more recent versions of
|
|
427 Emacs than it previously worked with, hopefully without sacrificing too
|
|
428 much backward compatibility.
|
|
429
|
|
430 19. Added a conversion program 'convickt'; it can convert between the Latin-1,
|
|
431 Baudot and EBCDIC character sets used by CLC-INTERCAL (Latin-1 is also
|
|
432 accepted by C-INTERCAL, so this gives a practical way to run CLC-INTERCAL
|
|
433 programs in unusual character sets on C-INTERCAL), and can also attempt to
|
|
434 convert into the 'Atari character set' (which uses $ instead of the cent
|
|
435 sign, ? instead of yen, and so on for the other characters that differ
|
|
436 between C-INTERCAL and CLC-INTERCAL).
|
|
437
|
|
438 20. Reorganised the Makefile and environment variable system for finding
|
|
439 locations to make more logical sense; various definitions and environment
|
|
440 variables now do what their name suggests rather than something completely
|
|
441 different, a situation which confused the programmers previously. The new
|
|
442 version should be better at finding files that it needs, and also cuts
|
|
443 down on the amount of useless copying that the Makefile did (such copying
|
|
444 is now only done if the destination file doesn't already exist or is out
|
|
445 of date).
|
|
446
|
|
447 21. Fixed some problems in the PIC-INTERCAL code: one problem with finding the
|
|
448 correct location for the skeleton, and some code duplication between the
|
|
449 two header files. Also clarified one of the comments.
|
|
450
|
|
451 22. Added support for CLC-INTERCAL-style Baudot I/O (generalised array I/O is
|
|
452 currently unimplemented, though). This has a two minor differences to the
|
|
453 CLC-INTERCAL version: unrecognised characters, instead of causing an
|
|
454 error, become 0 when WRITING IN (except that tabs are translated to single
|
|
455 spaces) and ASCII code 26 when READING OUT. (Baudot characters not in
|
|
456 ASCII will be translated to Latin-1; there are more of these than might be
|
|
457 expected, because the CLC-INTERCAL extended Baudot is being used).
|
|
458
|
|
459 23. The man pages and some fixes for the documentation Makefile from the
|
|
460 Debian package were copied into the main distribution. The man page was
|
|
461 written originally by Mark W. Eichin and later modified by Joey Hess (and
|
|
462 was further modified by me prior to placing it in the distribution); the
|
|
463 Makefile fixes are due to Joey Hess. Strangely, many of the changes I made
|
|
464 to the Makefile for this version have much the same effect as fixes that
|
|
465 the Debian package maintainers had come up with earlier; a new Makefile
|
|
466 variable ick_specific_subdir has been added to hopefully make the Debian
|
|
467 maintainer's job easier (it allows elimination of versioned
|
|
468 subdirectories, replacing them with versionless subdirectories).
|
|
469
|
|
470 24. Added a new test program to the pit, tests/ignorret.i, that demonstrates
|
|
471 how the interaction between IGNORE and RETRIEVE is different between
|
|
472 C-INTERCAL, CLC-INTERCAL, and J-INTERCAL, and documentation showing the
|
|
473 results on each version.
|
|
474
|
|
475 Release 1.26 (by Alex Smith) [a bugfix of 0.26] 3 Sep 2007
|
|
476
|
|
477 1. Fixed an optimizer bug (thanks to Joris Huizer for pointing it out),
|
|
478 relating to active-bits deduction in some expressions involving select.
|
|
479
|
|
480 2. Fixed a bug in the flow optimizer that caused it to occasionally confuse
|
|
481 ABSTAIN with REINSTATE when gerunds were used.
|
|
482
|
|
483 3. Simplified the compilation of INTERCAL files to .exe under DJGPP, to avoid
|
|
484 some temporary files (hopefully solving some problems users may be having
|
|
485 with finding which directory the temporary files are in under DJGPP);
|
|
486 when under DJGPP a temporary file other than .c or .exe is needed, the
|
|
487 compiler now looks for a directory reserved for temporary files to place it
|
|
488 in rather than just using the current directory.
|
|
489
|
|
490 4. The original INTERCAL manual specifies that GIVE UP cannot be REINSTATED
|
|
491 or ABSTAINED FROM; this is now implemented, by taking only the original
|
|
492 DO/DO NOT status into account when executing a GIVE UP statement.
|
|
493
|
|
494 5. Dealt with problems with what happens with the 'original' stdin (this
|
|
495 information was previously lost, making it hard for the debugger to accept
|
|
496 input because it had no obvious place to accept it from), and removed the
|
|
497 previous hacky workarounds for this problem (which were my fault).
|
|
498
|
|
499 6. Made several improvements to the documentation, especially with respect to
|
|
500 installing and running under DJGPP.
|
|
501
|
|
502 7. Modified the version number scheme, so that minor revisions and bugfixes
|
|
503 now increment the major version number rather than the minor version number
|
|
504 (it was getting a little bored stuck at 0). The next major release will be
|
|
505 version 0.27.
|
|
506
|
|
507 Release 0.26 (by Alex Smith) 1 Apr 2007
|
|
508
|
|
509 1. Fixed a few bugs in the previous release (some bugfixed by Joris Huizer).
|
|
510
|
|
511 2. Ported to DJGPP. The compiler now works on both POSIX and DJGPP systems.
|
|
512
|
|
513 3. Reorganized the directory structure.
|
|
514
|
|
515 4. Added support for cross-compiling to the PIC microcontroller.
|
|
516
|
|
517 5. Added a simple test program for PIC cross-compilation.
|
|
518
|
|
519 6. Improved further searching for skeletons and executables.
|
|
520
|
|
521 7. Delinted some of the code, and turned up the default gcc warning level.
|
|
522
|
|
523 8. Reformatted some of the documentation.
|
|
524
|
|
525 9. Renamed and split files; all files used in the build now have 8.3
|
|
526 filenames, to prevent any problems using DJGPP on 8.3 systems. The
|
|
527 optimizer was split from the code degeneration into dekludge.c (optimizer)
|
|
528 and feh2.c (degeneration), because feh.c was getting too large.
|
|
529
|
|
530 10. The text documentation (README, COPYING, NEWS, and BUGS) was renamed to
|
|
531 end .txt (again for DJGPP compatibility); formatting changes were made to
|
|
532 README in addition to the addition of extra readme information.
|
|
533
|
|
534 11. Included precompiled-to-C versions of the parser and the lexer so that
|
|
535 DJGPP (or I suppose, POSIX if you hacked the makefile) implementations
|
|
536 without bison or flex could still compile the rest of C-INTERCAL and give
|
|
537 a running program.
|
|
538
|
|
539 12. Fixed a bug involving optimization of Tri-INTERCAL programs.
|
|
540
|
|
541 13. Added to the lexer, so that it supports CLC-INTERCAL syntax for operators
|
|
542 that were already present in C-INTERCAL, as long as they don't conflict
|
|
543 with C-INTERCAL syntax. (Using the -X switch will support CLC-INTERCAL
|
|
544 syntax for operators that were already present in C-INTERCAL even if they
|
|
545 conflict with C-INTERCAL syntax.) For the symbols present in the
|
|
546 CLC-INTERCAL character set but not in ASCII, ISO-8859-1 is supported as an
|
|
547 encoding as well as UTF-8 (to increase the chance that CLC-INTERCAL
|
|
548 programs will run without modification); it was meant to be supported to
|
|
549 some extent before, but seemed not to be working.
|
|
550
|
|
551 14. Added the COMMENT gerund, with the same semantics as in CLC-INTERCAL.
|
|
552
|
|
553 15. Added COME FROM gerund. This suffers from the same restrictions as
|
|
554 computed COME FROM, in that it can't be used in PIC programs and causes
|
|
555 the program to end up substantially less efficient.
|
|
556
|
|
557 16. Added support for prefix as well as infix unary operators. The rule is
|
|
558 that any number of prefix unary operators, but only one infix unary
|
|
559 operator, is allowed on each group, variable, and/or mesh. (Previously,
|
|
560 only infix operators were supported, and then only one per mesh.)
|
|
561
|
|
562 17. Added positional precedences to the parser. INTERCAL still doesn't have
|
|
563 operator precedences (that would be completely contrary to the spirit of
|
|
564 INTERCAL) but it now has rules for deciding on the meaning of previously
|
|
565 ambiguous expressions. Chains of select and mingle operations right-
|
|
566 associate, and when a unary operator could legitimately be in either a
|
|
567 prefix or infix position, the infix position is assumed (although remember
|
|
568 that only one infix operator is allowed for each group, variable, and/or
|
|
569 mesh).
|
|
570
|
|
571 18. Added the not character as a synonym for NOT.
|
|
572
|
|
573 19. Added operand overloading, for onespot and twospot variables. This uses
|
|
574 the slat operator in almost, but not quite, the same way as
|
|
575 CLC-INTERCAL. Note that the width of unary operations will mostly depend
|
|
576 on the type a variable appears to have in an expression, rather than on
|
|
577 its actual bitwidth (if a onespot is overloaded to a twospot or vice
|
|
578 versa). Note that meshes won't change as the result of operand overloading
|
|
579 unless the -v option is used (an error will be generated instead).
|
|
580
|
|
581 20. Added an option for generalised assignments. With the -v option,
|
|
582 expressions (rather than just variables) can appear on the left of an
|
|
583 assignment. Any meshes on the left of an assignment (even if in apparently
|
|
584 inoccuous positions) may change value as a result. (Note that such
|
|
585 assignments aren't always possible.) If the left-hand-side of an
|
|
586 expression is anything other than simply a variable or a constant, the
|
|
587 compiler will try to change the values of meshes and non-ignored variables
|
|
588 in the expression to make it fit. (In bases other than 2, it will nearly
|
|
589 always fail.) Unlike CLC-INTERCAL, assigning to a mesh only changes that
|
|
590 mesh, not line labels or other uses of the number.
|
|
591
|
|
592 21. Restricted the compiler to just one input file at a time (it used to break
|
|
593 if this wasn't done anyway).
|
|
594
|
|
595 22. Fixed a nonportability involving stdin and stdout in cesspool.c.
|
|
596
|
|
597 23. Added support for the NEXT FROM command, with the same semantics as COME
|
|
598 FROM (including computed NEXT FROM and NEXT FROM gerund), except that it
|
|
599 saves the line that was NEXTed FROM on the choicepoint stack.
|
|
600
|
|
601 24. Fixed a bug where the yuk debugger accessed unallocated memory.
|
|
602
|
|
603 Release 0.25 (by Alex Smith) 21 Jun 2006
|
|
604
|
|
605 1. Added support for computed ABSTAIN and TRY AGAIN.
|
|
606
|
|
607 2. Added support for computed COME FROM.
|
|
608
|
|
609 3. Added support for multithread programs. This includes ONCE and AGAIN,
|
|
610 which also work in singlethread programs.
|
|
611
|
|
612 4. Expanded intercal.el to support Font Lock and some utilities for generating
|
|
613 INTERCAL-style constants. It also works with the compilation routines of Emacs
|
|
614 to compile INTERCAL programs without the need for make. Degenerated C code now
|
|
615 has a mode line to help with Emacs compatibility.
|
|
616
|
|
617 5. Added a rudimentary debugger and profiler for singlethread programs. The
|
|
618 debugger's features include useful things like 'write out INTERCAL expression
|
|
619 in simpler terms' (which is only possible if -O is on). The profiler works
|
|
620 much like gcov, counting the length of time spent in and number of executions
|
|
621 of each command in the code.
|
|
622
|
|
623 6. Changed searching for includes, libraries, syslib, skeleton. This is so that
|
|
624 non-root users, or people who want to evaluate ick, can do so more simply. The
|
|
625 compiler will search for the above files in the directory they should have been
|
|
626 installed in, the current directory, and the directory in which ick's
|
|
627 executable resides (in that order). Skeleton problems, in particular, seem to
|
|
628 have been a major problem for unfamiliar users trying out ick.
|
|
629
|
|
630 7. Added several new test programs to the Pit.
|
|
631
|
|
632 8. Greatly expanded the original optimizer (which optimizes expressions). It
|
|
633 can now recognize most of the idioms in syslib, and many idioms in other Pit
|
|
634 programs. Also added a new optimizer, to try to optimize program flow, which is
|
|
635 important because otherwise INTERCAL wouldn't have any rudimentary optimizers.
|
|
636 There is also the -F optimizer, which I hope will become infamous. It creates
|
|
637 object code which is close to maximally fast in some specialized situations, at
|
|
638 the expense of compile time (compilation can take a very long time when -F is
|
|
639 active) and object file size. I suggest checking its effect on primes.i.
|
|
640
|
|
641 9. Fixed the grammar (again) in a spark/ears situation involving array
|
|
642 subscripts, after proving that the previous fixes weren't adequate.
|
|
643
|
|
644 10. Added support for backtracking (MAYBE, GO AHEAD, GO BACK). Note that it is
|
|
645 possible for multithreading, backtracking, computed ABSTAIN, and computed COME
|
|
646 FROM to all be used simultaneously in the same program, to help maximize
|
|
647 obfuscation.
|
|
648
|
|
649 11. Added an option (-l) for generating warnings. To prevent this actually
|
|
650 being useful, it is designed to generate far too many warnings, which all have
|
|
651 to be trawled through to find the important ones, and has no way to turn the
|
|
652 unimportant ones off.
|
|
653
|
|
654 12. Added the +printflow and +mystery options for executing INTERCAL programs.
|
|
655 Note that it is not entirely obvious what either of them do (+printflow is a
|
|
656 debugging aid, but the output is somewhat obfuscated, and I am not going to
|
|
657 explain what +mystery does in this document).
|
|
658
|
|
659 Release 0.24 (by Eric S. Raymond) 31 Dec 2003
|
|
660
|
|
661 1. RPMs can now be built by non-root users.
|
|
662
|
|
663 Release 0.23 (by Eric S. Raymond) 9 Mar 2003
|
|
664
|
|
665 1. More fixes by Don Knuth. He found a bug in the type-propagation logic.
|
|
666
|
|
667 Release 0.22 (by Eric S. Raymond) 4 Mar 2003
|
|
668
|
|
669 1. Incorporated a minor fix patch from Donald Knuth. Yes, *the*
|
|
670 Donald Knuth. Seems he found a weakness in the code for handling
|
|
671 comments, and fixed it to do multiline comments properly. He also made
|
|
672 some improvements to intercal.el, and contributed a test program.
|
|
673
|
|
674 2. Updated build machinery. This package now uses GNU autoconf.
|
|
675
|
|
676 Release 0.21 (by Eric S. Raymond) 30 July 2002
|
|
677
|
|
678 1. Jonathan Nieder sent a grammar fix for BLR's old bug #5 (a bad spark-ears
|
|
679 interaction.)
|
|
680
|
|
681 2. Latin-1 support and makefile fixes from Magnus Bodin.
|
|
682
|
|
683 Release 0.20 (by Eric S. Raymond) 16 September 1999
|
|
684
|
|
685 (The following changes are due to John Cowan <cowan@ccil.org>)
|
|
686
|
|
687 1. In addition to Latin-1, UTF-8 is now acceptable in source code as well.
|
|
688 All the numerous currency symbols of Unicode (ISO 10646) can be used as
|
|
689 big-money alternatives in their UTF-8 format. Indeed, a random mixture of
|
|
690 Latin-1 and UTF-8 also works fine; this seems very much in the spirit of
|
|
691 Intercal.
|
|
692
|
|
693 2. Intercal has now been localized for the Ancient Roman as well as the
|
|
694 Posix/C locale. You may input numbers in Latin and write Intercal programs
|
|
695 using Latin keywords. See lexer.l for a list of equivalences.
|
|
696
|
|
697 3. The Makefile in the pit directory now works like a real Makefile, and
|
|
698 won't compile anything that's already been compiled.
|
|
699
|
|
700 Release 0.19 (by Eric S. Raymond) 16 August 1998
|
|
701
|
|
702 1. Fixed a code-generation error in assignments from tail and hybrid
|
|
703 variables. (Error pointed out by Malcom Ryan.)
|
|
704
|
|
705 Release 0.18 (by Eric S. Raymond) 29 April 1998
|
|
706
|
|
707 (The following changes are due to John Cowan <cowan@ccil.org>)
|
|
708
|
|
709 1. The source code is now POSIXly correct. By making the POSIX
|
|
710 variable in the Makefile undefined, you can restore the use of
|
|
711 <varargs.h>, but otherwise <stdarg.h> is now used.
|
|
712
|
|
713 2. Latin-1 (ISO 8859-1) is now the standard input charset of C-INTERCAL.
|
|
714 This means that the change operator (0xA2) has returned as an alternative to
|
|
715 big money ($). Furthermore, the quid (0xA3) and zlotnik (0xA4) are also
|
|
716 acceptable. For those using Latin-9 (ISO 8859-15), the euro (0xA4) will also
|
|
717 work. ("Euro", like "ampersand", cannot be sillified further.)
|
|
718 New names have been added to intercal.mm.
|
|
719
|
|
720 3. A fortiori, input of Volap\"uk digits may now be in Latin-1 or TeX format.
|
|
721
|
|
722 4. Yacc is now deprecated in favor of bison; some old yaccs don't do proper
|
|
723 error recovery, and lines like "DO ~ ERROR" failed at compile time.
|
|
724
|
|
725 5. Some minor portability bugs on systems where ptr_diff is not the same
|
|
726 as int were removed by casting expressions of the form (ptr - ptr) to int.
|
|
727
|
|
728 Release 0.17 (by Eric S. Raymond) 27 Feb 1998
|
|
729
|
|
730 Incorporates a minor bug fix by Jeff Uphoff <juphoff@tarsier.cv.nrao.edu>.
|
|
731
|
|
732 Release 0.16 (by Brian Raiter and Eric S. Raymond) 26 May 1997
|
|
733
|
|
734 This is the 25th-anniversary release of INTERCAL. This language, conceived
|
|
735 in irony a quarter century ago today, has outlasted many more serious and
|
|
736 high-minded essays in computer language design. This fact should give us
|
|
737 pause to reflect, or possibly frighten the crap out of us. Or both.
|
|
738
|
|
739 1. Corrected manual bugs.
|
|
740
|
|
741 2. Fixed over-enthusiastic install production in the Makefile.
|
|
742
|
|
743 3. DO PLEASE is no longer accepted (Brian Raiter pointed out that the
|
|
744 manual does not sanction it).
|
|
745
|
|
746 4. Fixed various bugs in the optimizer.
|
|
747
|
|
748 5. Incorporated fixes made by William Walter Patterson for bugs that
|
|
749 appeared when multiple files are given on the command line.
|
|
750
|
|
751 (The following changes are due to Brian Raiter)
|
|
752
|
|
753 6. The system library is now available for TriINTERCAL (all bases, 3 to 7).
|
|
754 The compiler has been updated to use the right library automagically.
|
|
755
|
|
756 7. The error 774 feature has been brought into conformance with the
|
|
757 Princeton compiler. The odds are now a flat 10% (but still 0% with -b).
|
|
758
|
|
759 8. The compiler has been modified to allocate memory dynamically, and
|
|
760 the hard-coded limits on program size and number of variables has
|
|
761 been removed. Programs are now only limited by the amount of
|
|
762 available memory.
|
|
763
|
|
764 9. Array output now fflushes after outputting newlines.
|
|
765
|
|
766 10. Two minor bug fixes: one in wimpmode input, which was clamping
|
|
767 input to the signed integer range, and one in politesse checking.
|
|
768 The latter was causing programs to be recognized as impolite only
|
|
769 if their ratio was less that one-sixth, not one-fifth. (Fixing this
|
|
770 also necessitated adding a few PLEASEs to pit/rot13.i.)
|
|
771
|
|
772 11. Several new programs have been tossed into the pit.
|
|
773
|
|
774 Release 0.15 (by Eric S. Raymond) 20 Jun 1996
|
|
775
|
|
776 1. Switched the INTERCAL manual master to mgm in order to be able to handle
|
|
777 section crossreferences properly. The manual has now been carefully
|
|
778 proofread against the paper version by ESR and seems to match. It's
|
|
779 also been independently proofread for typos by Brian Raiter.
|
|
780
|
|
781 2. The optimizer now does complete analysis and evaluation of constant
|
|
782 expressions at compile time.
|
|
783
|
|
784 3. Added optimization templates for ~, |, &, ^ expressions. Also added
|
|
785 |, &, ^ idioms to the system library, and documented them.
|
|
786
|
|
787 (The following changes are due to Brian Raiter)
|
|
788
|
|
789 4. Every one of the INTERCAL-72 messages is now emitted when appropriate.
|
|
790 including the previously un-emitted E000, E197, and E200 (and see below).
|
|
791
|
|
792 5. A close reading (while proofing) of the sections of the manual on
|
|
793 error messages seems to indicate that splatted lines were only
|
|
794 splatted in the default listing printed after a successful
|
|
795 compile. (This seems to be a standard feature of IBM compilers; I
|
|
796 remember that RPG did this as well.) My understanding of the manual is
|
|
797 when the syntactically offensive line is encountered at runtime, it is
|
|
798 printed as error E000. I have modified the code to do this.
|
|
799
|
|
800 6. I have fixed INTERCAL in order to add another bug. Namely, I have
|
|
801 implemented the BUG/NOBUG option in the Princeton compiler. By
|
|
802 default, there is a chance that INTERCAL will randomly insert error
|
|
803 E774 into your executable. (The odds are 1/128 per statement, not
|
|
804 counting COME FROMs. Is there any way to find out what the
|
|
805 Princeton compiler's odds were?) The new option -b turns this
|
|
806 feature off.
|
|
807
|
|
808 7. The new file pit/lib/numio.i contains routines for wimpmode I/O.
|
|
809 These routines are documented in the file pit/lib/numio.doc.
|
|
810 It is my earnest hope that C-INTERCAL programmers everywhere will
|
|
811 flock to these handy routines, and C-INTERCAL users will thus no
|
|
812 longer need to fear that they might succumb to the foul and awful
|
|
813 temptation to use the dastardly +wimpmode option.
|
|
814
|
|
815 Release 0.14 (by Eric S. Raymond) 9 Jun 1996
|
|
816
|
|
817 1. The documentation has been reorganized and cleaned up (you can now
|
|
818 format either a C-INTERCAL or INTERCAL-72 manual from the same master).
|
|
819 The diagrams in the paper original have been transcribed as pic figures.
|
|
820 See doc/READ.ME for details.
|
|
821
|
|
822 2. Yet more code. The pit now includes a second random-number generator,
|
|
823 a ROT13 filter, and even two programs in TriINTERCAL!
|
|
824
|
|
825 3. Louis Howell's corrected system library is now included.
|
|
826
|
|
827 4. The distribution is now formally GPLed.
|
|
828
|
|
829 Release 0.13 (by Eric S. Raymond) 5 Jun 1996
|
|
830
|
|
831 1. I folded in patches by Brian Raiter <breadbox@muppetlabs.com> that port
|
|
832 this code to Linux, ANSIfies it, and enables it to use flex. Note: This
|
|
833 version has been tested on Linux and SunOS but not yet elsewhere.
|
|
834
|
|
835 2. Another piece of nontrivial INTERCAL code has been found! (Doubtless
|
|
836 hell is freezing over even as I write.) We've added to the pit the
|
|
837 `beer' program by Matt DiMeo <mdimeo@brooktree.com>, courtesy of the
|
|
838 infamous Beer List (URL:http://www.ionet.net/~timtroyr/funhouse/beer.html).
|
|
839
|
|
840 Release 0.12 (by Eric S. Raymond) 22 Mar 1995
|
|
841
|
|
842 1. The code now compiles and runs under Linux, using bison and lex. It does
|
|
843 *not* yet work with flex; C.P. Osborne's patches for 0.11 turned out not
|
|
844 to be sufficient (at least for flex 2.4.6 under Linux using the -l option).
|
|
845 See the BUGS list.
|
|
846
|
|
847 2. Note 3 under 0.11 was incorrect. We're in conformance after all.
|
|
848
|
|
849 3. The politesse check is a little smarter about programs too small to
|
|
850 conform to the 1/5-to-1/3 criterion. All the pit programs have been
|
|
851 checked for conformance. Also, the politesse error message now tells
|
|
852 you the offending program's line count.
|
|
853
|
|
854 Release 0.11 (by Eric S. Raymond) 24 Sep 1994
|
|
855
|
|
856 1. Incorporated changes by Jan-Pieter Cornet <cornet@OTech.fgg.EUR.nl> for
|
|
857 magical inclusion of the system library. These address an outstanding bug
|
|
858
|
|
859 2. (SS) The `system library' should be precompiled and `linked' to user
|
|
860 written code, at least optionally. Doing this with the current compiler
|
|
861 presents a few problems.
|
|
862
|
|
863 which has accordingly been removed from the BUGS file. They also fix a
|
|
864 previously unknown bug; due to a minor oversight in the lexer, it was not
|
|
865 possible to ABSTAIN FROM WRITING IN or READING OUT. Jan also contributed
|
|
866 a test program that demonstrates gerund abstention.
|
|
867
|
|
868 2. Despite the obvious appeal of the idea, and much discussion on
|
|
869 alt.lang.intercal, I decided *not* to add Klingon; maintaining two parallel
|
|
870 grammars just so the compiler could support SVO and OSV languages would be
|
|
871 too painful. There was also a minor mess near case-sensitivity in the
|
|
872 digits. The workaround kluges I was offered instead failed to satisfy.
|
|
873
|
|
874 3. We fess up to a violation of the INTERCAL-72 standard. That implementation,
|
|
875 instead of accepting an entire multiple-digit number per line of input,
|
|
876 expected one digit per *card image* (input line). It is unclear how
|
|
877 INTERCAL-72 programs ever managed to input more than one number.
|
|
878
|
|
879 4. Added patches by C.P.Osborne <boris@ibmpcug.co.uk> to make the lexer work
|
|
880 using flex, for Linux and BSD/386 support. I didn't use his error-reporting
|
|
881 patch, though; instead, I changed the parser to catch errors at logical-line
|
|
882 level. I also kept the N in `RESUBNIT'; this is a carefully preserved
|
|
883 feature of INTERCAL-72.
|
|
884
|
|
885 5. Volapuk digits are now recognized on input. TO DO: Recognize Volapuk
|
|
886 keywords, including gerunds.
|
|
887
|
|
888 Release 0.10 (by Eric S. Raymond) 9 Sep 1994
|
|
889
|
|
890 1. It is now possible to undo a line-number abstention with a gerund
|
|
891 reinstatement, or undo a gerund abstention with a line-number
|
|
892 reinstatement. In previous versions, gerund abstention/reinstatements and
|
|
893 line-number abstention/reinstatements were independent of each other.
|
|
894
|
|
895 2. After release 0.5, I wrote in the TO DO list as follows:
|
|
896
|
|
897 2. (ESR) Input format internationalization -- allow WRITE IN input digits in
|
|
898 major languages such as Nahuatl, Tagalog, Sanskrit, and Basque.
|
|
899
|
|
900 The twisted loons in the alt.folklore.computers crowd loved this idea,
|
|
901 and I actually got sent digit lists for Nahuatl, Tagalog, Sanskrit, and
|
|
902 Basque -- also, Kwakiutl, Georgian, Ojibwe, and Albanian. I've left
|
|
903 out Albanian (didn't want to keep track of the dipthong diacritical)
|
|
904 and Ojibwe (no zero digit). So: Nahuatl, Tagalog, Sanskrit, Basque,
|
|
905 Georgian, and Kwakiutl are now supported in addition to English.
|
|
906
|
|
907 3. The THEORY document has been significantly revised.
|
|
908
|
|
909 Release 0.9 (by Eric S. Raymond) 5 Mar 1993
|
|
910
|
|
911 1. An embarrassing port bug in the INTERCAL skeleton has been fixed
|
|
912
|
|
913 2. Jamie Zawinski's suggestion for an improved E333 error message has
|
|
914 been accepted.
|
|
915
|
|
916 3. Added and improved documentation for pit programs.
|
|
917
|
|
918 4. The install production in the Makefile now puts lose.h in place
|
|
919 as well as cesspool.h.
|
|
920
|
|
921 5. You can now set the C compiler to be used as a back end by INTERCAL
|
|
922 by setting the environment variable CC. The default is cc.
|
|
923
|
|
924 Release 0.8 (many hacks on 0.7 by Eric Raymond) 21 Jan 1992
|
|
925
|
|
926 1. A previously undocumented `feature' of the Princeton compiler,
|
|
927 revealed by Don Woods, is now emulated. If fewer than 1/5 or more
|
|
928 than 1/3 of a program's statements contain the qualifier `PLEASE', the
|
|
929 program is rejected with an entertaining error message. Programs in pit
|
|
930 have been hacked to pass the politesse test.
|
|
931
|
|
932 2. The `sample' program now works correctly, thanks to Louis Howell. Also,
|
|
933 he has contributed new programs to calculate pi and to search for prime
|
|
934 numbers.
|
|
935
|
|
936 3. An intercal mode for GNU Emacs is included. It helps programmers deal with
|
|
937 the new politesse check by randomly expanding the abbrev "do" to DO PLEASE
|
|
938 or PLEASE DO about 1/4 of the time.
|
|
939
|
|
940 4. Improvements in code generation for NEXT/RESUME.
|
|
941
|
|
942 5. Fixes to the optimizer; it handles the results of optimized MINGLEs
|
|
943 correctly now. Also, added a rewrite rule that checks for the
|
|
944 equality-test idiom using XOR.
|
|
945
|
|
946 6. The original error messages from the Princeton compiler have been restored.
|
|
947
|
|
948 The documentation has been updated to reflect these changes.
|
|
949
|
|
950 Release 0.7 (by Louis Howell) 21 Dec 1991
|
|
951
|
|
952 In addition to bug fixes, new features in this version include arrays,
|
|
953 character I/O, modified (hopefully improved!) semantics for the COME
|
|
954 FROM statement, extensions to bases other than 2, new INTERCAL programs,
|
|
955 and new documentation.
|
|
956
|
|
957 Release 0.6 (by Steve Swales) 5 Jan 1991
|
|
958
|
|
959 1. Restored Princeton documentation (courtesy of Michael Ernst).
|
|
960
|
|
961 2. Added -@ usage option to ick.
|
|
962
|
|
963 3. Added [+/-]help, [+/-]traditional, and [+/-]wimpmode options for
|
|
964 generated programs; [+/-]traditional is a no-op at this point.
|
|
965
|
|
966 4. Various bug fixes, esp. in lexical analysis.
|
|
967
|
|
968 Release 0.5 (ESR's original pre-release) 5 Jun 1990
|
|
969
|
|
970 1. As a convenience to all you junior birdmen out there, `NINER' is accepted as
|
|
971 a synonym for `NINE' in INTERCAL input.
|
|
972
|
|
973 2. The COME FROM statement is now compiled.
|
|
974
|
|
975 -------------
|
|
976
|
|
977 The resurrection of INTERCAL from its grave took place on 12 May 1990
|
|
978 when ESR released 0.3 on an unsuspecting USENET.
|
|
979
|