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