From: Eric S. Raymond Date: Sun, 28 Nov 2010 22:47:16 +0000 (-0500) Subject: More adaptations for the shipper release machinery. X-Git-Tag: 0.29~9 X-Git-Url: http://thyrsus.com/gitweb/?a=commitdiff_plain;h=9700dc224b1d77dd173f67e1b8976622cf153129;p=intercal.git More adaptations for the shipper release machinery. control is the control file for shipper. It needs to see short-form news from which to generate Freshmeat announcements and notification email, so we move NEWS to HISTORY and start NEWS is format it can handle. --- diff --git a/HISTORY b/HISTORY new file mode 100644 index 0000000..de386e5 --- /dev/null +++ b/HISTORY @@ -0,0 +1,1011 @@ +This is the long-form history of the project. For the short form used +to generate release announcements, see NEWS. + +== Release 0.29 (by Alex Smith, Eric S. Raymond) == + +=== Changes by Eric S. Raymond === + +1. There is now a compiler regression-test suite, invoked through the test + production in the pit makefile. + +2. There are two new compiler error messages, E990 and E994. + +3. A new program for the pit: Brendan Gregg's guess game. + +4. The floating-point library is now automatically included if + a program NEXTs to labels in the range 5000-5999. Internally, + line-range to system library mappings are no longer hardcoded but + rather declared as an array of associations that can be easily + modified. + +5. The source now uses explicit bool, rather than using int everywhere. + +6. README, HISTORY, and BUGS are now mastered in asciidoc for easier + web-page generation. + +=== Bugs reported and changes patched by Arvid Norlander === + +7. Fixed a typo in the perpet.c version of the help information. + +8. Fixed the CREATE statement to work on 64-bit architectures. + +9. The availability of variable argument list mechanisms is now determined + automatically by the configure script, rather than relying on the old + method of checking which usually gets the wrong answer with modern + compilers, leading to build failures on many modern systems (previously + this was patched just for DJGPP, the patch now applies to all operating + systems and platforms). This bug is known to have affected the build on + DOS, FreeBSD and Mac OS X, and possibly affects other platforms. (also + reported independently by Elliott Hird) + +10. Fixed some nonsense in the -@ help screen that was generated by an errant + search-and-replace. + +11. Made several changes to bring the new Befunge-98 interface code (see + below) in line with changes in the Befunge-98 interpreter in use. + +12. Added consts and statics in the code, hopefully to make bugs easier to + notice. + +13. Refactored main(). It needed it, badly. + +=== Bugs reported by Elliott Hird === + +14. Fixed the configure script to work with the default Debian shell dash. + (also reported independently by Debian) + +15. Actually fixed unlambda.i; the fix was meant to be in 0.28, and is + described in its changelog, but for some reason never made it to + the distributed tarball. + +16. The -F option again works. (AIS: I accidentally broke it in the preceding + version, making it basically a no-op by mistake.) + +17. The build now succeeds (with warnings) when lex or yacc are missing, + rather than failing with mysterious error messages that seem to have + nothing to do with the problems. (The success is made possible by using + the prebuilt versions; see change 11 of version 0.26, this is finishing + what that started.) + +=== Bugs reported, changes requested, and patches by Joris Huizer === + +18. The [xoritself] optimiser idiom has been generalised to handle some + situations where the redundant XOR operands are on different grouping + levels; this helps to optimise some heavily inlined greater-than tests. + +19. Fixed unary operators applied to constants (AIS: it seems that my patch to + solve this issue earlier was itself buggy). + +20. The -g option now causes optimisation of the output compiled C to be + turned off, and adds comments to the output file the same way -c does. + +21. Added more optimiser idioms: [cxorand16], [cxorand32], [cfoldintoorinand], + [or16and], [xor16and], [lshift32half], [rshiftoutofneg], [andoutofneg]; + also generalised the idiom-matching code to compare 16-bit and 32-bit + constants as equal if they have the same value, and fixed some typos in + the current 16-bit complement idioms. + +22. ABSTAINING or REINSTATING are now a lot more efficient, taking an amount + of time proportional to the number of commands effected, rather than the + number of commands in the program. (AIS: I implemented this with the + algorithm in the patch Joris provided, but with different code, to make it + easier to maintain.) + +=== Changes by Stefan O'Rear === + +23. Added INTERCAL syntax highlighting information for vim. Why should Emacs + have all the fun? + +=== Changes reported by Phantom Hoover === + +24. Fixed a nasty documentation typo. + +=== Changes reported by the Debian autobuilders and Joey Hess === + +25. The build of the optimiser idioms is now split over many files, to reduce + the memory usage of gcc when it tries to compile the giant output C file. + This was a problem on ia64. (The ulimit method of preventing thrashing has + been removed, as this method works better; likewise, the optimiser + optimisation now works again.) + +=== Changes by Alex Smith === + +26. The build system has been completely redone, again; it now uses automake + as well as a much newer version of autoconf. This means that there is now + one build system that works the same way on all systems, and that all + sorts of clever tricks like out-of-tree builds, a self-rebuilding build + system, and building the distribution directly from the Makefile, are + possible. As a side effect, the directory structure looks somewhat + different to how it looked in previous versions; src, doc, etc and pit are + still there, but now there's prebuilt instead of temp, an extra directory + buildaux, and bin, lib and include have disappeared. + +27. The distribution now comes in compressed pax format. (Before anyone + complains that they have no idea what that is, or that I'm using something + strange and nonstandard, I'd like to point out that tar is no longer part + of POSIX, but that pax is. (See man 5 tar on a recent Linux system for + details of the whole mess.) Luckily, pax is forward-compatible with tar + so tar readers should be able to read it just fine, if you can't get your + hands on a pax reader.) + +28. convickt can now produce its output as INTERCAL initialisation of a tail + array. (This doesn't auto-offset between the different characters; it is + therefore mostly useful for producing Baudot arrays for CLC-INTERCAL-style + IO.) + +29. The function clock_gettime is now supported by the yuk profiler as an + alternative method of getting a high-resolution clock for profiling (it + is available on at least Linux). + +30. The profiler now autodetects the same profiling mechanism at compile + time and at run time. (It was getting confused as to what mechanism it was + using, causing some really weird bugs.) + +31. Added support for computed CREATE (the computation is done at create-time, + rather than when the unknown statement is encountered); partly because + this was rather easy, but mostly because it can be used to simulate a + computed NEXT, thus making the example expansion library compunex (which I + forgot to mention in the 0.28 release notes) redundant. Because it was + deprecated when I added it, compunex is now doubly deprecated, and anyone + tempted to use it should use computed CREATE instead. (I have always + maintained that if computed NEXT were ever added to C-INTERCAL, it would + be deprecated on arrival; the computed CREATE method implements all + features of NEXT, anyway, rather than the small subset COMPUNEX could + manage.) + +32. Plugged a couple of small memory leaks; however, there are still several + much bigger memory leaks that could do with being fixed. + +33. Added support for CREATING operators, with similar syntax to the CREATION + of commands. This requires the -ea options to be set to work properly. + +34. More file extensions are now supported by the external calls system. The + .c99 extension indicates a C99 (rather than C89) file; all .c99 files are + preprocessed as C99, and if any C99 files are used the final compilation + which compiles and links everything will be done as C99 rather than C89 + (this causes no problems for C-INTERCAL's output which is both legal C89 + and legal C99). Also, libraries can be linked in; to link in the maths + library for instance (i.e. pass -lm to gcc), write libm.a as a filename at + the end of the command line. (The file's real name is libm.a; if a + filename is in lib*.a format, then ick will look in the normal library + locations instead of the current directory.) Other .a files can be linked + in from the current directory. + +35. Fixed the handling of division by zero in the syslibc expansion library. + (The Revamped Manual states 'In all cases, division by 0 returns 0'.) + +36. Made several changes to the documentation, including fixes for some rather + nasty typos (two of the worst were specifying variables as IGNORED by + default, and stating that select acts like OR in TriIntercal!). + +37. Fixed a bug in the external calls system that made it impossible to write + a COME FROM in more than one file at a time whilst still having the + resulting program work reliably. + +38. Added support for external calls to Befunge-98 programs; however, this + distribution does not ship with a Funge-98 interpreter, so in order to use + this feature you will first have to compile a Funge-98 interpreter into a + library for use with C-INTERCAL (see README.txt or the Revamped Manual for + information on this). Also added a test program for this to the pit. + +39. Fixed some bugs in the go-away command in interfunge.i. + +40. Fixed many bugs in the optimiser, and added a fuzz-tester ("make fuzz") for + the optimiser which has a chance at finding any new optimiser bugs that may + be introduced, or any that the maintainers don't know about. + +== Release 0.28 (by Alex Smith) 1 Apr 2008 == + +=== Patches, suggestions and bugs found by Joris Huizer === + +1. Fixed a typo in the [noopxor] optimiser idiom. + +2. Added a [redundantdoublenot] optimiser idiom (a generalisation of Joris' + suggestion of and code for [triplenot]). + +3. Fixed a typo that caused the flow optimiser to optimise some errors into + non-erroring code. + +4. Fixed the [lshift16] optimiser idiom; previously it was giving incorrect + values in some cases where the bits being selected from the original + number weren't contiguous. + +5. There is now no longer a segfault when the unusual option combination -f + (without specifying -O) is used. + +6. It is again possible to recompile more than one source file at a time. + +7. The flow optimiser now recognises that comments can be reinstated in + programs where they can be reinstated. + +=== Changes by Alex Smith === + +8. Fixed some typos in the documentation. + +9. Applying an infix unary operator to a constant (as in ) now returns + the correct value; previously it returned the unary operator applied to a + sequence number that was 0 for the first unique constant that was the + argument of a unary operator, 1 for the second unique constant, and so + on. (This was a bug in the parser.) + +10. Added doc/THEORY.txt back in. (It seems that it went missing some time + between 1.26 and 0.27.) Updated it to describe the current compiler. + +11. Turned off optimisation of the optimiser, and also placed a 128MB limit on + the data segment and virtual memory it was allowed to use. This is to + prevent Linux thrashing and/or invoking the dreaded oom-killer when + recompiling idiotism.c. (This happened only rarely, but it happened to me + twice, each time making my computer unusable for about half an hour. + Therefore, a fix to prevent the situation happening again was added, + assuming your computer has at least 128MB free memory and disk space.) As + a bonus, the build process is now considerably faster, because the + optimisation of the optimiser was the slowest step of the process. + +12. Internally, all symbols that are visible globally are now name-mangled (by + using the prefix ick_). This allows other files to be linked with files + compiled from INTERCAL without namespace collisions. This does not include + symbols that are only useful in multithreading (as INTERCAL's + multithreading model is incompatible with other programs), only for the + debugger (because linking yuk into a program causes all sorts of chaos if + non-INTERCAL programs are involved), or only used by the compiler (which + hopefully should never be linked to another program that isn't + specifically designed to be linked to it). + +13. Thoroughly delinted the code, using Splint; the code is now annotated to + show Splint what is being done where (and all the non-obvious annotations + are explained so that humans can figure out what is going on as well); + over 800 warnings have been fixed, including some which identified bugs in + the original program (many of which were to do with edge cases involving + unusually long strings, and some of which were buffer overflows). All + comments from /*@ to @*/ are mine, and are annotations for Splint. + +14. Implemented external calls, which allow multiple INTERCAL programs to be + linked to each other, and/or to C programs, via the -e option and NEXT / + COME FROM / NEXT FROM / FORGET / RESUME statements. See the manual for + more details. (Note that external calls require you to use gcc, GNU cpp, + and GNU ld, because they rely on features of those programs to work.) + +15. Two other new compiler options have been added: -E (don't link system + library), and -w (enable +printflow debugging even for non-multithread + programs). +printflow has been enhanced to show what's going on in + externally-called programs to some extent, too. + +16. Added a version of the INTERCAL system library written in C, as + pit/lib/syslibc.c. A new compiler feature allows the inclusion of such + expansion libraries via the command line; to include this library, you + would write the command line as ick -eE yourprogram.i syslibc (possibly + adding other options than -eE). The main advantage of the C-based system + library is speed; also, note that an implemented-in-a-faster-language- + than-INTERCAL system library existed in the Princeton compiler (which is + possibly how the INTERCAL version managed to stay buggy for decades + without anyone noticing), so this is another case of catching up with + historically available features. (The feature is also somewhat reminicent + of CLC-INTERCAL's 'preloads', but is implemented differently, and is + useful for different things, as it doesn't affect the compiler.) + Expansion libraries are included via -e, like non-INTERCAL programs are, + but are distinguished by not having an extension. + +17. The handling of syntax errors has been improved; many lines that + previously caused E017 at compile time are now correctly interpreted as + run-time errors. The only way to cause E017 nowadays is to write a + constant out of the onespot range, and the manual description of the error + has been changed accordingly. (Note that I caused several regressions + while implementing this; I hope they're all fixed now, but there may be + some left. Please report any remaining parsing problems caused by this; + they mostly manifest as either the line after a comment being corrupted or + ignored, or as the line before a comment being taken to be part of the + comment.) + +18. A new 'just-in-case' compilation method is used for syntax errors. If a + syntax error is encountered at compile-time, and contains just capital + letters with no other meaning (i.e. they don't form keywords and none of + them is the letter V), variables, and expressions, and there are no two + consecutive expressions or variables involved (i.e. they are separated by + keywords), the compiler will compile it anyway, just in case it happens to + gain a meaning later (see the next changelog entry). This is sort of the + converse of the way CLC-INTERCAL goes about compiling things that don't + have a meaning yet (it uses a 'just-too-late' compiler which waits for the + offending statement to error out, then recompiles it to see if it's gained + a meaning in the meantime), and this difference in handling typifies the + difference between the compilers quite well. + +19. Implemented the CREATE statement, because I could (see point 18). This + allows new syntax to be created at runtime. CLC-INTERCAL also has a CREATE + statement, but its syntax is totally different (it specifies the bytecode + for the command, whereas C-INTERCAL's CREATE statement allows you to + specify what the new command does in INTERCAL itself.) A function call + ick_create is also available; it's usable from externally-called programs + and from expansion libraries, and means that INTERCAL commands can now be + defined to do things which were previously well out of INTERCAL's + reach. This makes expansion libraries act even more like CLC-INTERCAL + preloads. + +20. Fixed a strange bug in yuk when the basename of the INTERCAL program was + the same as that of a shell builtin or command on the user's path. + +21. Programs accept a new option +instapipe that causes output to be output + immediately, even if not followed by a newline, by flushing the output + after every character. This is most useful with binary output into pipes, + and occasionally useful for getting the output to very slow programs + faster. + +22. Fixed an error in an optimiser idiom that could optimise erroring code + involving mingles into non-erroring code (which is of course incorrect); + also edited unlambda.i in the pit, which was taking advantage of this + error (and erroring out if optimisation was turned off). + +23. Fixed a bug with the ON THE WAY TO line number displayed when COME FROMs + are involved that I accidentally introduced in 0.25. + +=== Changes from elsewhere === + +24. Added yet another nontrivial INTERCAL program to the pit; interfunge.i + (written by Jeffrey Lee) is a Befunge-93 interpreter written in INTERCAL. + (It appears to conform to the standard (I actually ran it against a + testsuite, and it passed); its only pecularities, apart from the language + in which it's written, appear to be the need for a blank line at the end + of the program, but no blank lines earlier (because INTERCAL can't sense + EOF, although there are plans to change that), the restriction to 80x25 is + enforced (this seems to be an implied requirement in the standard, but + most Befunge-93 interpreters don't enforce it), and numeric output is in + Roman numerals (what did you expect?).) + +== Release 0.27 (by Alex Smith) 22 Dec 2007 == + +1. Joris Huizer pointed out that the manual nowhere says that a GIVE UP line + can't be abstained from by line number. This was probably a mistake in the + INTERCAL-72 manual, but the behaviour specified by the original manual is + now implemented; after all, it wouldn't do to violate the original de facto + standard. (Note that if a GIVE UP line is abstained by line number, there + is then no way to reinstate it; also, if the -X switch for CLC-INTERCAL + compatibility is used, ABSTAINING FROM a GIVE UP line by line number is + also silently ignored.) + +2. Rewrote the optimizer in a language (OIL) invented specifically for the + purpose; the set of optimizer idioms is now in idiotism.oil, and translated + into C and linked with the rest of the compiler at metacompile time (that + is, when the compiler itself is being compiled). It contains many of the + same idioms, but some have been generalised or reduced into smaller parts + and some new ones were added. Documentation for OIL has been added as part + of the documentation for the distribution as a whole. + +3. Joris Huizer submitted a patch to fix a memory allocation bug which + occasionally caused memory corruption when a program had a number of + commands that was 1 less than a multiple of 256. + +4. Completely redid the autoconfiguration. The install should now progress + with less user interaction than before. As a bonus, if you have a range of + GNU utilities including make, sed, tr, and bash (and possibly others), it's + now possible to compile using 'sh configdj.sh' followed by 'make' under + DJGPP. (To be specific, some settings that previously sometimes had to be + set by the user, such as whether lex provided yylineno and yyrestart, are + now either detected by config.sh or no longer relevant. Other settings that + were not previously detected, such as what extension executables have, are + now detected so that the config script works on DJGPP as well, now; + compiling the config script on a non-DJGPP system seems to result in a + script that fails on DJGPP, and likewise compiling the script on DJGPP + seems to result on a script that fails on other systems, so both scripts + are provided. The autoconfigurer now also adapts coopt.sh so that -F works + on DJGPP too, sort of (or else detects that it won't work and disables it). + +5. Improved the action of 'make install', so that it actually installs + everything in the right place. It works under DJGPP, now, too, as long as + you have the programs installed that allow configdj.sh and make to work. + +6. Fixed a bug involving COME FROM in multithreaded programs; now, if a line + COMEs FROM itself (either because this is written explicitly or because it + is a computed COME FROM computing to its own line number), the loop this + creates doesn't block all the other threads in the program. + +7. Added support for statement WHILE statement, with similar semantics to CLC- + INTERCAL. (The second statement is repeated for as long as the first + statement is executing; NEXTing to the statement nexts to the first + statement and doesn't set off the loop, and COMING or NEXTING FROM the + first statement leaves the loop running until the NEXT FROM returns.) With + the current implementation, strange things happen if the same WHILE is + simultaneously run by multiple threads, although I decided to work out + exactly what the rules were anyway and document them, so those strange + things are now official. + +8. Fixed some weird bugs in the multithreader that could cause segfaults in + several situations involving backtracking; it's kind of surprising that + they didn't turn up sooner. + +9. Prevented a segfault in some situations where a syntax error was the + target of a noncomputed COME FROM or NEXT FROM. + +10. CALCULATING now includes array dimensioning. (There previously was no + gerund for this situation; the original manual doesn't say what to do but + implies that this is a special case of calculate.) + +11. Made operand overloading interact more sensibly with multithreading. + Previously, overloading information was shared between all threads, but the + stashes for operand overloading were separate in each thread. Now, the + overloading is not shared between threads, except when they are woven by a + WHILE statement. + +12. There's no longer a need to set or modify copyloc in the makefile by hand; + COPYING.txt is now found the same way as syslib and the skeleton. It's also + now copied out of the distribution to the same place as the other data + files when installing, preventing the need to keep the original + installation directory around. + +13. The compiler now actually looks for a temporary directory to place a file + in when creating a temporary file; this was meant to be fixed in 1.26, but + the fix didn't actually work. + +14. Added a new program to the pit: an Unlambda interpreter written by Oerjan + Johansen in 2001, and also a commented version as documentation. + +15. Section 23 of the release notes for version 0.26 is wrong; I was obviously + confused when I wrote them because they were speaking nonsense. For the + record: no, there is nothing special about NEXT in connection with + backtracking. It should have said "NEXT", not "choicepoint". Instead of + rewriting history, this changelog entry is added as a fix. + +16. Added an entirely new set of documentation, the Revamped Manual, which is + available in a wide range of formats and documents recent language changes, + as well as many other things INTERCAL. The Revised Manual has been + preserved, but it seems unlikely to be updated in the near future (it is + still well worth a read anyway). + +17. For compatibility, the COMMENT gerund can now be spelt COMMENTS or + COMMENTING. + +18. Corrected the Emacs INTERCAL mode to work with more recent versions of + Emacs than it previously worked with, hopefully without sacrificing too + much backward compatibility. + +19. Added a conversion program 'convickt'; it can convert between the Latin-1, + Baudot and EBCDIC character sets used by CLC-INTERCAL (Latin-1 is also + accepted by C-INTERCAL, so this gives a practical way to run CLC-INTERCAL + programs in unusual character sets on C-INTERCAL), and can also attempt to + convert into the 'Atari character set' (which uses $ instead of the cent + sign, ? instead of yen, and so on for the other characters that differ + between C-INTERCAL and CLC-INTERCAL). + +20. Reorganised the Makefile and environment variable system for finding + locations to make more logical sense; various definitions and environment + variables now do what their name suggests rather than something completely + different, a situation which confused the programmers previously. The new + version should be better at finding files that it needs, and also cuts + down on the amount of useless copying that the Makefile did (such copying + is now only done if the destination file doesn't already exist or is out + of date). + +21. Fixed some problems in the PIC-INTERCAL code: one problem with finding the + correct location for the skeleton, and some code duplication between the + two header files. Also clarified one of the comments. + +22. Added support for CLC-INTERCAL-style Baudot I/O (generalised array I/O is + currently unimplemented, though). This has a two minor differences to the + CLC-INTERCAL version: unrecognised characters, instead of causing an + error, become 0 when WRITING IN (except that tabs are translated to single + spaces) and ASCII code 26 when READING OUT. (Baudot characters not in + ASCII will be translated to Latin-1; there are more of these than might be + expected, because the CLC-INTERCAL extended Baudot is being used). + +23. The man pages and some fixes for the documentation Makefile from the + Debian package were copied into the main distribution. The man page was + written originally by Mark W. Eichin and later modified by Joey Hess (and + was further modified by me prior to placing it in the distribution); the + Makefile fixes are due to Joey Hess. Strangely, many of the changes I made + to the Makefile for this version have much the same effect as fixes that + the Debian package maintainers had come up with earlier; a new Makefile + variable ick_specific_subdir has been added to hopefully make the Debian + maintainer's job easier (it allows elimination of versioned + subdirectories, replacing them with versionless subdirectories). + +24. Added a new test program to the pit, tests/ignorret.i, that demonstrates + how the interaction between IGNORE and RETRIEVE is different between + C-INTERCAL, CLC-INTERCAL, and J-INTERCAL, and documentation showing the + results on each version. + + Release 1.26 (by Alex Smith) [a bugfix of 0.26] 3 Sep 2007 + +1. Fixed an optimizer bug (thanks to Joris Huizer for pointing it out), + relating to active-bits deduction in some expressions involving select. + +2. Fixed a bug in the flow optimizer that caused it to occasionally confuse + ABSTAIN with REINSTATE when gerunds were used. + +3. Simplified the compilation of INTERCAL files to .exe under DJGPP, to avoid + some temporary files (hopefully solving some problems users may be having + with finding which directory the temporary files are in under DJGPP); + when under DJGPP a temporary file other than .c or .exe is needed, the + compiler now looks for a directory reserved for temporary files to place it + in rather than just using the current directory. + +4. The original INTERCAL manual specifies that GIVE UP cannot be REINSTATED + or ABSTAINED FROM; this is now implemented, by taking only the original + DO/DO NOT status into account when executing a GIVE UP statement. + +5. Dealt with problems with what happens with the 'original' stdin (this + information was previously lost, making it hard for the debugger to accept + input because it had no obvious place to accept it from), and removed the + previous hacky workarounds for this problem (which were my fault). + +6. Made several improvements to the documentation, especially with respect to + installing and running under DJGPP. + +7. Modified the version number scheme, so that minor revisions and bugfixes + now increment the major version number rather than the minor version number + (it was getting a little bored stuck at 0). The next major release will be + version 0.27. + +== Release 0.26 (by Alex Smith) 1 Apr 2007 == + +1. Fixed a few bugs in the previous release (some bugfixed by Joris Huizer). + +2. Ported to DJGPP. The compiler now works on both POSIX and DJGPP systems. + +3. Reorganized the directory structure. + +4. Added support for cross-compiling to the PIC microcontroller. + +5. Added a simple test program for PIC cross-compilation. + +6. Improved further searching for skeletons and executables. + +7. Delinted some of the code, and turned up the default gcc warning level. + +8. Reformatted some of the documentation. + +9. Renamed and split files; all files used in the build now have 8.3 + filenames, to prevent any problems using DJGPP on 8.3 systems. The + optimizer was split from the code degeneration into dekludge.c (optimizer) + and feh2.c (degeneration), because feh.c was getting too large. + +10. The text documentation (README, COPYING, NEWS, and BUGS) was renamed to + end .txt (again for DJGPP compatibility); formatting changes were made to + README in addition to the addition of extra readme information. + +11. Included precompiled-to-C versions of the parser and the lexer so that + DJGPP (or I suppose, POSIX if you hacked the makefile) implementations + without bison or flex could still compile the rest of C-INTERCAL and give + a running program. + +12. Fixed a bug involving optimization of Tri-INTERCAL programs. + +13. Added to the lexer, so that it supports CLC-INTERCAL syntax for operators + that were already present in C-INTERCAL, as long as they don't conflict + with C-INTERCAL syntax. (Using the -X switch will support CLC-INTERCAL + syntax for operators that were already present in C-INTERCAL even if they + conflict with C-INTERCAL syntax.) For the symbols present in the + CLC-INTERCAL character set but not in ASCII, ISO-8859-1 is supported as an + encoding as well as UTF-8 (to increase the chance that CLC-INTERCAL + programs will run without modification); it was meant to be supported to + some extent before, but seemed not to be working. + +14. Added the COMMENT gerund, with the same semantics as in CLC-INTERCAL. + +15. Added COME FROM gerund. This suffers from the same restrictions as + computed COME FROM, in that it can't be used in PIC programs and causes + the program to end up substantially less efficient. + +16. Added support for prefix as well as infix unary operators. The rule is + that any number of prefix unary operators, but only one infix unary + operator, is allowed on each group, variable, and/or mesh. (Previously, + only infix operators were supported, and then only one per mesh.) + +17. Added positional precedences to the parser. INTERCAL still doesn't have + operator precedences (that would be completely contrary to the spirit of + INTERCAL) but it now has rules for deciding on the meaning of previously + ambiguous expressions. Chains of select and mingle operations right- + associate, and when a unary operator could legitimately be in either a + prefix or infix position, the infix position is assumed (although remember + that only one infix operator is allowed for each group, variable, and/or + mesh). + +18. Added the not character as a synonym for NOT. + +19. Added operand overloading, for onespot and twospot variables. This uses + the slat operator in almost, but not quite, the same way as + CLC-INTERCAL. Note that the width of unary operations will mostly depend + on the type a variable appears to have in an expression, rather than on + its actual bitwidth (if a onespot is overloaded to a twospot or vice + versa). Note that meshes won't change as the result of operand overloading + unless the -v option is used (an error will be generated instead). + +20. Added an option for generalised assignments. With the -v option, + expressions (rather than just variables) can appear on the left of an + assignment. Any meshes on the left of an assignment (even if in apparently + inoccuous positions) may change value as a result. (Note that such + assignments aren't always possible.) If the left-hand-side of an + expression is anything other than simply a variable or a constant, the + compiler will try to change the values of meshes and non-ignored variables + in the expression to make it fit. (In bases other than 2, it will nearly + always fail.) Unlike CLC-INTERCAL, assigning to a mesh only changes that + mesh, not line labels or other uses of the number. + +21. Restricted the compiler to just one input file at a time (it used to break + if this wasn't done anyway). + +22. Fixed a nonportability involving stdin and stdout in cesspool.c. + +23. Added support for the NEXT FROM command, with the same semantics as COME + FROM (including computed NEXT FROM and NEXT FROM gerund), except that it + saves the line that was NEXTed FROM on the choicepoint stack. + +24. Fixed a bug where the yuk debugger accessed unallocated memory. + +== Release 0.25 (by Alex Smith) 21 Jun 2006 == + +1. Added support for computed ABSTAIN and TRY AGAIN. + +2. Added support for computed COME FROM. + +3. Added support for multithread programs. This includes ONCE and AGAIN, +which also work in singlethread programs. + +4. Expanded intercal.el to support Font Lock and some utilities for + generating INTERCAL-style constants. It also works with the + compilation routines of Emacs to compile INTERCAL programs without + the need for make. Degenerated C code now has a mode line to help + with Emacs compatibility. + +5. Added a rudimentary debugger and profiler for singlethread programs. The + debugger's features include useful things like 'write out INTERCAL expression + in simpler terms' (which is only possible if -O is on). The profiler works + much like gcov, counting the length of time spent in and number of executions + of each command in the code. + +6. Changed searching for includes, libraries, syslib, skeleton. This + is so that non-root users, or people who want to evaluate ick, can + do so more simply. The compiler will search for the above files in + the directory they should have been installed in, the current + directory, and the directory in which ick's executable resides (in + that order). Skeleton problems, in particular, seem to have been a + major problem for unfamiliar users trying out ick. + +7. Added several new test programs to the Pit. + +8. Greatly expanded the original optimizer (which optimizes + expressions). It can now recognize most of the idioms in syslib, + and many idioms in other Pit programs. Also added a new optimizer, + to try to optimize program flow, which is important because + otherwise INTERCAL wouldn't have any rudimentary optimizers. There + is also the -F optimizer, which I hope will become infamous. It + creates object code which is close to maximally fast in some + specialized situations, at the expense of compile time (compilation + can take a very long time when -F is active) and object file + size. I suggest checking its effect on primes.i. + +9. Fixed the grammar (again) in a spark/ears situation involving array + subscripts, after proving that the previous fixes weren't adequate. + +10. Added support for backtracking (MAYBE, GO AHEAD, GO BACK). Note + that it is possible for multithreading, backtracking, computed + ABSTAIN, and computed COME FROM to all be used simultaneously in + the same program, to help maximize obfuscation. + +11. Added an option (-l) for generating warnings. To prevent this + actually being useful, it is designed to generate far too many + warnings, which all have to be trawled through to find the + important ones, and has no way to turn the unimportant ones off. + +12. Added the +printflow and +mystery options for executing INTERCAL programs. + Note that it is not entirely obvious what either of them do (+printflow is a + debugging aid, but the output is somewhat obfuscated, and I am not going to + explain what +mystery does in this document). + +== Release 0.24 (by Eric S. Raymond) 31 Dec 2003 == + +1. RPMs can now be built by non-root users. + +== Release 0.23 (by Eric S. Raymond) 9 Mar 2003 == + +1. More fixes by Don Knuth. He found a bug in the type-propagation logic. + +== Release 0.22 (by Eric S. Raymond) 4 Mar 2003 == + +1. Incorporated a minor fix patch from Donald Knuth. Yes, *the* +Donald Knuth. Seems he found a weakness in the code for handling +comments, and fixed it to do multiline comments properly. He also made +some improvements to intercal.el, and contributed a test program. + +2. Updated build machinery. This package now uses GNU autoconf. + +== Release 0.21 (by Eric S. Raymond) 30 July 2002 == + +1. Jonathan Nieder sent a grammar fix for BLR's old bug #5 (a bad spark-ears + interaction.) + +2. Latin-1 support and makefile fixes from Magnus Bodin. + +== Release 0.20 (by Eric S. Raymond) 16 September 1999 == + + (The following changes are due to John Cowan ) + +1. In addition to Latin-1, UTF-8 is now acceptable in source code as well. + All the numerous currency symbols of Unicode (ISO 10646) can be used as + big-money alternatives in their UTF-8 format. Indeed, a random mixture of + Latin-1 and UTF-8 also works fine; this seems very much in the spirit of + Intercal. + +2. Intercal has now been localized for the Ancient Roman as well as the + Posix/C locale. You may input numbers in Latin and write Intercal programs + using Latin keywords. See lexer.l for a list of equivalences. + +3. The Makefile in the pit directory now works like a real Makefile, and + won't compile anything that's already been compiled. + +== Release 0.19 (by Eric S. Raymond) 16 August 1998 == + +1. Fixed a code-generation error in assignments from tail and hybrid + variables. (Error pointed out by Malcom Ryan.) + +== Release 0.18 (by Eric S. Raymond) 29 April 1998 == + +(The following changes are due to John Cowan ) + +1. The source code is now POSIXly correct. By making the POSIX + variable in the Makefile undefined, you can restore the use of + , but otherwise is now used. + +2. Latin-1 (ISO 8859-1) is now the standard input charset of C-INTERCAL. + This means that the change operator (0xA2) has returned as an alternative to + big money ($). Furthermore, the quid (0xA3) and zlotnik (0xA4) are also + acceptable. For those using Latin-9 (ISO 8859-15), the euro (0xA4) will also + work. ("Euro", like "ampersand", cannot be sillified further.) + New names have been added to intercal.mm. + +3. A fortiori, input of Volap\"uk digits may now be in Latin-1 or TeX format. + +4. Yacc is now deprecated in favor of bison; some old yaccs don't do proper + error recovery, and lines like "DO ~ ERROR" failed at compile time. + +5. Some minor portability bugs on systems where ptr_diff is not the same + as int were removed by casting expressions of the form (ptr - ptr) to int. + +== Release 0.17 (by Eric S. Raymond) 27 Feb 1998 == + +Incorporates a minor bug fix by Jeff Uphoff . + +== Release 0.16 (by Brian Raiter and Eric S. Raymond) 26 May 1997 == + +This is the 25th-anniversary release of INTERCAL. This language, conceived +in irony a quarter century ago today, has outlasted many more serious and +high-minded essays in computer language design. This fact should give us +pause to reflect, or possibly frighten the crap out of us. Or both. + +1. Corrected manual bugs. + +2. Fixed over-enthusiastic install production in the Makefile. + +3. DO PLEASE is no longer accepted (Brian Raiter pointed out that the + manual does not sanction it). + +4. Fixed various bugs in the optimizer. + +5. Incorporated fixes made by William Walter Patterson for bugs that + appeared when multiple files are given on the command line. + +(The following changes are due to Brian Raiter) + +6. The system library is now available for TriINTERCAL (all bases, 3 to 7). + The compiler has been updated to use the right library automagically. + +7. The error 774 feature has been brought into conformance with the + Princeton compiler. The odds are now a flat 10% (but still 0% with -b). + +8. The compiler has been modified to allocate memory dynamically, and + the hard-coded limits on program size and number of variables has + been removed. Programs are now only limited by the amount of + available memory. + +9. Array output now fflushes after outputting newlines. + +10. Two minor bug fixes: one in wimpmode input, which was clamping + input to the signed integer range, and one in politesse checking. + The latter was causing programs to be recognized as impolite only + if their ratio was less that one-sixth, not one-fifth. (Fixing this + also necessitated adding a few PLEASEs to pit/rot13.i.) + +11. Several new programs have been tossed into the pit. + +== Release 0.15 (by Eric S. Raymond) 20 Jun 1996 == + +1. Switched the INTERCAL manual master to mgm in order to be able to handle + section crossreferences properly. The manual has now been carefully + proofread against the paper version by ESR and seems to match. It's + also been independently proofread for typos by Brian Raiter. + +2. The optimizer now does complete analysis and evaluation of constant + expressions at compile time. + +3. Added optimization templates for ~, |, &, ^ expressions. Also added + |, &, ^ idioms to the system library, and documented them. + +(The following changes are due to Brian Raiter) + +4. Every one of the INTERCAL-72 messages is now emitted when appropriate. + including the previously un-emitted E000, E197, and E200 (and see below). + +5. A close reading (while proofing) of the sections of the manual on + error messages seems to indicate that splatted lines were only + splatted in the default listing printed after a successful + compile. (This seems to be a standard feature of IBM compilers; I + remember that RPG did this as well.) My understanding of the manual is + when the syntactically offensive line is encountered at runtime, it is + printed as error E000. I have modified the code to do this. + +6. I have fixed INTERCAL in order to add another bug. Namely, I have + implemented the BUG/NOBUG option in the Princeton compiler. By + default, there is a chance that INTERCAL will randomly insert error + E774 into your executable. (The odds are 1/128 per statement, not + counting COME FROMs. Is there any way to find out what the + Princeton compiler's odds were?) The new option -b turns this + feature off. + +7. The new file pit/lib/numio.i contains routines for wimpmode I/O. + These routines are documented in the file pit/lib/numio.doc. + It is my earnest hope that C-INTERCAL programmers everywhere will + flock to these handy routines, and C-INTERCAL users will thus no + longer need to fear that they might succumb to the foul and awful + temptation to use the dastardly +wimpmode option. + +== Release 0.14 (by Eric S. Raymond) 9 Jun 1996 == + +1. The documentation has been reorganized and cleaned up (you can now + format either a C-INTERCAL or INTERCAL-72 manual from the same master). + The diagrams in the paper original have been transcribed as pic figures. + See doc/READ.ME for details. + +2. Yet more code. The pit now includes a second random-number generator, + a ROT13 filter, and even two programs in TriINTERCAL! + +3. Louis Howell's corrected system library is now included. + +4. The distribution is now formally GPLed. + +== Release 0.13 (by Eric S. Raymond) 5 Jun 1996 == + +1. I folded in patches by Brian Raiter that port + this code to Linux, ANSIfies it, and enables it to use flex. Note: This + version has been tested on Linux and SunOS but not yet elsewhere. + +2. Another piece of nontrivial INTERCAL code has been found! (Doubtless + hell is freezing over even as I write.) We've added to the pit the + `beer' program by Matt DiMeo , courtesy of the + infamous Beer List (URL:http://www.ionet.net/~timtroyr/funhouse/beer.html). + +== Release 0.12 (by Eric S. Raymond) 22 Mar 1995 == + +1. The code now compiles and runs under Linux, using bison and lex. It does + *not* yet work with flex; C.P. Osborne's patches for 0.11 turned out not + to be sufficient (at least for flex 2.4.6 under Linux using the -l option). + See the BUGS list. + +2. Note 3 under 0.11 was incorrect. We're in conformance after all. + +3. The politesse check is a little smarter about programs too small to + conform to the 1/5-to-1/3 criterion. All the pit programs have been + checked for conformance. Also, the politesse error message now tells + you the offending program's line count. + +== Release 0.11 (by Eric S. Raymond) 24 Sep 1994 == + +1. Incorporated changes by Jan-Pieter Cornet for + magical inclusion of the system library. These address an outstanding bug + + 2. (SS) The `system library' should be precompiled and `linked' to user + written code, at least optionally. Doing this with the current compiler + presents a few problems. + + which has accordingly been removed from the BUGS file. They also fix a + previously unknown bug; due to a minor oversight in the lexer, it was not + possible to ABSTAIN FROM WRITING IN or READING OUT. Jan also contributed + a test program that demonstrates gerund abstention. + +2. Despite the obvious appeal of the idea, and much discussion on + alt.lang.intercal, I decided *not* to add Klingon; maintaining two parallel + grammars just so the compiler could support SVO and OSV languages would be + too painful. There was also a minor mess near case-sensitivity in the + digits. The workaround kluges I was offered instead failed to satisfy. + +3. We fess up to a violation of the INTERCAL-72 standard. That implementation, + instead of accepting an entire multiple-digit number per line of input, + expected one digit per *card image* (input line). It is unclear how + INTERCAL-72 programs ever managed to input more than one number. + +4. Added patches by C.P.Osborne to make the lexer work + using flex, for Linux and BSD/386 support. I didn't use his error-reporting + patch, though; instead, I changed the parser to catch errors at logical-line + level. I also kept the N in `RESUBNIT'; this is a carefully preserved + feature of INTERCAL-72. + +5. Volapuk digits are now recognized on input. TO DO: Recognize Volapuk + keywords, including gerunds. + +== Release 0.10 (by Eric S. Raymond) 9 Sep 1994 == + +1. It is now possible to undo a line-number abstention with a gerund + reinstatement, or undo a gerund abstention with a line-number + reinstatement. In previous versions, gerund abstention/reinstatements and + line-number abstention/reinstatements were independent of each other. + +2. After release 0.5, I wrote in the TO DO list as follows: + + 2. (ESR) Input format internationalization -- allow WRITE IN input digits in + major languages such as Nahuatl, Tagalog, Sanskrit, and Basque. + + The twisted loons in the alt.folklore.computers crowd loved this idea, + and I actually got sent digit lists for Nahuatl, Tagalog, Sanskrit, and + Basque -- also, Kwakiutl, Georgian, Ojibwe, and Albanian. I've left + out Albanian (didn't want to keep track of the dipthong diacritical) + and Ojibwe (no zero digit). So: Nahuatl, Tagalog, Sanskrit, Basque, + Georgian, and Kwakiutl are now supported in addition to English. + +3. The THEORY document has been significantly revised. + +== Release 0.9 (by Eric S. Raymond) 5 Mar 1993 == + +1. An embarrassing port bug in the INTERCAL skeleton has been fixed + +2. Jamie Zawinski's suggestion for an improved E333 error message has + been accepted. + +3. Added and improved documentation for pit programs. + +4. The install production in the Makefile now puts lose.h in place + as well as cesspool.h. + +5. You can now set the C compiler to be used as a back end by INTERCAL + by setting the environment variable CC. The default is cc. + +== Release 0.8 (many hacks on 0.7 by Eric Raymond) 21 Jan 1992 == + +1. A previously undocumented `feature' of the Princeton compiler, + revealed by Don Woods, is now emulated. If fewer than 1/5 or more + than 1/3 of a program's statements contain the qualifier `PLEASE', the + program is rejected with an entertaining error message. Programs in pit + have been hacked to pass the politesse test. + +2. The `sample' program now works correctly, thanks to Louis Howell. Also, + he has contributed new programs to calculate pi and to search for prime + numbers. + +3. An intercal mode for GNU Emacs is included. It helps programmers deal with + the new politesse check by randomly expanding the abbrev "do" to DO PLEASE + or PLEASE DO about 1/4 of the time. + +4. Improvements in code generation for NEXT/RESUME. + +5. Fixes to the optimizer; it handles the results of optimized MINGLEs + correctly now. Also, added a rewrite rule that checks for the + equality-test idiom using XOR. + +6. The original error messages from the Princeton compiler have been restored. + +The documentation has been updated to reflect these changes. + +== Release 0.7 (by Louis Howell) 21 Dec 1991 == + +In addition to bug fixes, new features in this version include arrays, +character I/O, modified (hopefully improved!) semantics for the COME +FROM statement, extensions to bases other than 2, new INTERCAL programs, +and new documentation. + +== Release 0.6 (by Steve Swales) 5 Jan 1991 == + +1. Restored Princeton documentation (courtesy of Michael Ernst). + +2. Added -@ usage option to ick. + +3. Added [+/-]help, [+/-]traditional, and [+/-]wimpmode options for +generated programs; [+/-]traditional is a no-op at this point. + +4. Various bug fixes, esp. in lexical analysis. + +== Release 0.5 (ESR's second pre-release) 5 Jun 1990 == + +1. As a convenience to all you junior birdmen out there, `NINER' is accepted as + a synonym for `NINE' in INTERCAL input. + +2. The COME FROM statement is now compiled. + +== Release 0.3 (ESR's original pre-release) == + +The resurrection of INTERCAL from its grave took place on 12 May 1990 +when ESR released 0.3 on an unsuspecting USENET. diff --git a/NEWS b/NEWS index 326c66e..734ffb9 100644 --- a/NEWS +++ b/NEWS @@ -1,1010 +1,10 @@ -= New In This Release = + This is the short-form history of the project, + used mainly for generating release announcements + via shipper. For the long form, see the file HISTORY. -== Release 0.29 (by Alex Smith, Eric S. Raymond) == +* 0.29: 2010-11-28 + The first merged release from ESR and Alex Smith, with encouragement from + Donald Knuth. The compiler new has a regression-test suite. More error + checks (E990 and E004) hace been added. A new program, guess.i, writhes + in the pit. -=== Changes by Eric S. Raymond === - -1. There is now a compiler regression-test suite, invoked through the test - production in the pit makefile. - -2. There are two new compiler error messages, E990 and E994. - -3. A new program for the pit: Brendan Gregg's guess game. - -4. The floating-point library is now automatically included if - a program NEXTs to labels in the range 5000-5999. Internally, - line-range to system library mappings are no longer hardcoded but - rather declared as an array of associations that can be easily - modified. - -5. The source now uses explicit bool, rather than using int everywhere. - -6. README, NEWS, and BUGS are now mastered in asciidoc for easier - web-page generation. - -=== Bugs reported and changes patched by Arvid Norlander === - -7. Fixed a typo in the perpet.c version of the help information. - -8. Fixed the CREATE statement to work on 64-bit architectures. - -9. The availability of variable argument list mechanisms is now determined - automatically by the configure script, rather than relying on the old - method of checking which usually gets the wrong answer with modern - compilers, leading to build failures on many modern systems (previously - this was patched just for DJGPP, the patch now applies to all operating - systems and platforms). This bug is known to have affected the build on - DOS, FreeBSD and Mac OS X, and possibly affects other platforms. (also - reported independently by Elliott Hird) - -10. Fixed some nonsense in the -@ help screen that was generated by an errant - search-and-replace. - -11. Made several changes to bring the new Befunge-98 interface code (see - below) in line with changes in the Befunge-98 interpreter in use. - -12. Added consts and statics in the code, hopefully to make bugs easier to - notice. - -13. Refactored main(). It needed it, badly. - -=== Bugs reported by Elliott Hird === - -14. Fixed the configure script to work with the default Debian shell dash. - (also reported independently by Debian) - -15. Actually fixed unlambda.i; the fix was meant to be in 0.28, and is - described in its changelog, but for some reason never made it to - the distributed tarball. - -16. The -F option again works. (AIS: I accidentally broke it in the preceding - version, making it basically a no-op by mistake.) - -17. The build now succeeds (with warnings) when lex or yacc are missing, - rather than failing with mysterious error messages that seem to have - nothing to do with the problems. (The success is made possible by using - the prebuilt versions; see change 11 of version 0.26, this is finishing - what that started.) - -=== Bugs reported, changes requested, and patches by Joris Huizer === - -18. The [xoritself] optimiser idiom has been generalised to handle some - situations where the redundant XOR operands are on different grouping - levels; this helps to optimise some heavily inlined greater-than tests. - -19. Fixed unary operators applied to constants (AIS: it seems that my patch to - solve this issue earlier was itself buggy). - -20. The -g option now causes optimisation of the output compiled C to be - turned off, and adds comments to the output file the same way -c does. - -21. Added more optimiser idioms: [cxorand16], [cxorand32], [cfoldintoorinand], - [or16and], [xor16and], [lshift32half], [rshiftoutofneg], [andoutofneg]; - also generalised the idiom-matching code to compare 16-bit and 32-bit - constants as equal if they have the same value, and fixed some typos in - the current 16-bit complement idioms. - -22. ABSTAINING or REINSTATING are now a lot more efficient, taking an amount - of time proportional to the number of commands effected, rather than the - number of commands in the program. (AIS: I implemented this with the - algorithm in the patch Joris provided, but with different code, to make it - easier to maintain.) - -=== Changes by Stefan O'Rear === - -23. Added INTERCAL syntax highlighting information for vim. Why should Emacs - have all the fun? - -=== Changes reported by Phantom Hoover === - -24. Fixed a nasty documentation typo. - -=== Changes reported by the Debian autobuilders and Joey Hess === - -25. The build of the optimiser idioms is now split over many files, to reduce - the memory usage of gcc when it tries to compile the giant output C file. - This was a problem on ia64. (The ulimit method of preventing thrashing has - been removed, as this method works better; likewise, the optimiser - optimisation now works again.) - -=== Changes by Alex Smith === - -26. The build system has been completely redone, again; it now uses automake - as well as a much newer version of autoconf. This means that there is now - one build system that works the same way on all systems, and that all - sorts of clever tricks like out-of-tree builds, a self-rebuilding build - system, and building the distribution directly from the Makefile, are - possible. As a side effect, the directory structure looks somewhat - different to how it looked in previous versions; src, doc, etc and pit are - still there, but now there's prebuilt instead of temp, an extra directory - buildaux, and bin, lib and include have disappeared. - -27. The distribution now comes in compressed pax format. (Before anyone - complains that they have no idea what that is, or that I'm using something - strange and nonstandard, I'd like to point out that tar is no longer part - of POSIX, but that pax is. (See man 5 tar on a recent Linux system for - details of the whole mess.) Luckily, pax is forward-compatible with tar - so tar readers should be able to read it just fine, if you can't get your - hands on a pax reader.) - -28. convickt can now produce its output as INTERCAL initialisation of a tail - array. (This doesn't auto-offset between the different characters; it is - therefore mostly useful for producing Baudot arrays for CLC-INTERCAL-style - IO.) - -29. The function clock_gettime is now supported by the yuk profiler as an - alternative method of getting a high-resolution clock for profiling (it - is available on at least Linux). - -30. The profiler now autodetects the same profiling mechanism at compile - time and at run time. (It was getting confused as to what mechanism it was - using, causing some really weird bugs.) - -31. Added support for computed CREATE (the computation is done at create-time, - rather than when the unknown statement is encountered); partly because - this was rather easy, but mostly because it can be used to simulate a - computed NEXT, thus making the example expansion library compunex (which I - forgot to mention in the 0.28 release notes) redundant. Because it was - deprecated when I added it, compunex is now doubly deprecated, and anyone - tempted to use it should use computed CREATE instead. (I have always - maintained that if computed NEXT were ever added to C-INTERCAL, it would - be deprecated on arrival; the computed CREATE method implements all - features of NEXT, anyway, rather than the small subset COMPUNEX could - manage.) - -32. Plugged a couple of small memory leaks; however, there are still several - much bigger memory leaks that could do with being fixed. - -33. Added support for CREATING operators, with similar syntax to the CREATION - of commands. This requires the -ea options to be set to work properly. - -34. More file extensions are now supported by the external calls system. The - .c99 extension indicates a C99 (rather than C89) file; all .c99 files are - preprocessed as C99, and if any C99 files are used the final compilation - which compiles and links everything will be done as C99 rather than C89 - (this causes no problems for C-INTERCAL's output which is both legal C89 - and legal C99). Also, libraries can be linked in; to link in the maths - library for instance (i.e. pass -lm to gcc), write libm.a as a filename at - the end of the command line. (The file's real name is libm.a; if a - filename is in lib*.a format, then ick will look in the normal library - locations instead of the current directory.) Other .a files can be linked - in from the current directory. - -35. Fixed the handling of division by zero in the syslibc expansion library. - (The Revamped Manual states 'In all cases, division by 0 returns 0'.) - -36. Made several changes to the documentation, including fixes for some rather - nasty typos (two of the worst were specifying variables as IGNORED by - default, and stating that select acts like OR in TriIntercal!). - -37. Fixed a bug in the external calls system that made it impossible to write - a COME FROM in more than one file at a time whilst still having the - resulting program work reliably. - -38. Added support for external calls to Befunge-98 programs; however, this - distribution does not ship with a Funge-98 interpreter, so in order to use - this feature you will first have to compile a Funge-98 interpreter into a - library for use with C-INTERCAL (see README.txt or the Revamped Manual for - information on this). Also added a test program for this to the pit. - -39. Fixed some bugs in the go-away command in interfunge.i. - -40. Fixed many bugs in the optimiser, and added a fuzz-tester ("make fuzz") for - the optimiser which has a chance at finding any new optimiser bugs that may - be introduced, or any that the maintainers don't know about. - -== Release 0.28 (by Alex Smith) 1 Apr 2008 == - -=== Patches, suggestions and bugs found by Joris Huizer === - -1. Fixed a typo in the [noopxor] optimiser idiom. - -2. Added a [redundantdoublenot] optimiser idiom (a generalisation of Joris' - suggestion of and code for [triplenot]). - -3. Fixed a typo that caused the flow optimiser to optimise some errors into - non-erroring code. - -4. Fixed the [lshift16] optimiser idiom; previously it was giving incorrect - values in some cases where the bits being selected from the original - number weren't contiguous. - -5. There is now no longer a segfault when the unusual option combination -f - (without specifying -O) is used. - -6. It is again possible to recompile more than one source file at a time. - -7. The flow optimiser now recognises that comments can be reinstated in - programs where they can be reinstated. - -=== Changes by Alex Smith === - -8. Fixed some typos in the documentation. - -9. Applying an infix unary operator to a constant (as in ) now returns - the correct value; previously it returned the unary operator applied to a - sequence number that was 0 for the first unique constant that was the - argument of a unary operator, 1 for the second unique constant, and so - on. (This was a bug in the parser.) - -10. Added doc/THEORY.txt back in. (It seems that it went missing some time - between 1.26 and 0.27.) Updated it to describe the current compiler. - -11. Turned off optimisation of the optimiser, and also placed a 128MB limit on - the data segment and virtual memory it was allowed to use. This is to - prevent Linux thrashing and/or invoking the dreaded oom-killer when - recompiling idiotism.c. (This happened only rarely, but it happened to me - twice, each time making my computer unusable for about half an hour. - Therefore, a fix to prevent the situation happening again was added, - assuming your computer has at least 128MB free memory and disk space.) As - a bonus, the build process is now considerably faster, because the - optimisation of the optimiser was the slowest step of the process. - -12. Internally, all symbols that are visible globally are now name-mangled (by - using the prefix ick_). This allows other files to be linked with files - compiled from INTERCAL without namespace collisions. This does not include - symbols that are only useful in multithreading (as INTERCAL's - multithreading model is incompatible with other programs), only for the - debugger (because linking yuk into a program causes all sorts of chaos if - non-INTERCAL programs are involved), or only used by the compiler (which - hopefully should never be linked to another program that isn't - specifically designed to be linked to it). - -13. Thoroughly delinted the code, using Splint; the code is now annotated to - show Splint what is being done where (and all the non-obvious annotations - are explained so that humans can figure out what is going on as well); - over 800 warnings have been fixed, including some which identified bugs in - the original program (many of which were to do with edge cases involving - unusually long strings, and some of which were buffer overflows). All - comments from /*@ to @*/ are mine, and are annotations for Splint. - -14. Implemented external calls, which allow multiple INTERCAL programs to be - linked to each other, and/or to C programs, via the -e option and NEXT / - COME FROM / NEXT FROM / FORGET / RESUME statements. See the manual for - more details. (Note that external calls require you to use gcc, GNU cpp, - and GNU ld, because they rely on features of those programs to work.) - -15. Two other new compiler options have been added: -E (don't link system - library), and -w (enable +printflow debugging even for non-multithread - programs). +printflow has been enhanced to show what's going on in - externally-called programs to some extent, too. - -16. Added a version of the INTERCAL system library written in C, as - pit/lib/syslibc.c. A new compiler feature allows the inclusion of such - expansion libraries via the command line; to include this library, you - would write the command line as ick -eE yourprogram.i syslibc (possibly - adding other options than -eE). The main advantage of the C-based system - library is speed; also, note that an implemented-in-a-faster-language- - than-INTERCAL system library existed in the Princeton compiler (which is - possibly how the INTERCAL version managed to stay buggy for decades - without anyone noticing), so this is another case of catching up with - historically available features. (The feature is also somewhat reminicent - of CLC-INTERCAL's 'preloads', but is implemented differently, and is - useful for different things, as it doesn't affect the compiler.) - Expansion libraries are included via -e, like non-INTERCAL programs are, - but are distinguished by not having an extension. - -17. The handling of syntax errors has been improved; many lines that - previously caused E017 at compile time are now correctly interpreted as - run-time errors. The only way to cause E017 nowadays is to write a - constant out of the onespot range, and the manual description of the error - has been changed accordingly. (Note that I caused several regressions - while implementing this; I hope they're all fixed now, but there may be - some left. Please report any remaining parsing problems caused by this; - they mostly manifest as either the line after a comment being corrupted or - ignored, or as the line before a comment being taken to be part of the - comment.) - -18. A new 'just-in-case' compilation method is used for syntax errors. If a - syntax error is encountered at compile-time, and contains just capital - letters with no other meaning (i.e. they don't form keywords and none of - them is the letter V), variables, and expressions, and there are no two - consecutive expressions or variables involved (i.e. they are separated by - keywords), the compiler will compile it anyway, just in case it happens to - gain a meaning later (see the next changelog entry). This is sort of the - converse of the way CLC-INTERCAL goes about compiling things that don't - have a meaning yet (it uses a 'just-too-late' compiler which waits for the - offending statement to error out, then recompiles it to see if it's gained - a meaning in the meantime), and this difference in handling typifies the - difference between the compilers quite well. - -19. Implemented the CREATE statement, because I could (see point 18). This - allows new syntax to be created at runtime. CLC-INTERCAL also has a CREATE - statement, but its syntax is totally different (it specifies the bytecode - for the command, whereas C-INTERCAL's CREATE statement allows you to - specify what the new command does in INTERCAL itself.) A function call - ick_create is also available; it's usable from externally-called programs - and from expansion libraries, and means that INTERCAL commands can now be - defined to do things which were previously well out of INTERCAL's - reach. This makes expansion libraries act even more like CLC-INTERCAL - preloads. - -20. Fixed a strange bug in yuk when the basename of the INTERCAL program was - the same as that of a shell builtin or command on the user's path. - -21. Programs accept a new option +instapipe that causes output to be output - immediately, even if not followed by a newline, by flushing the output - after every character. This is most useful with binary output into pipes, - and occasionally useful for getting the output to very slow programs - faster. - -22. Fixed an error in an optimiser idiom that could optimise erroring code - involving mingles into non-erroring code (which is of course incorrect); - also edited unlambda.i in the pit, which was taking advantage of this - error (and erroring out if optimisation was turned off). - -23. Fixed a bug with the ON THE WAY TO line number displayed when COME FROMs - are involved that I accidentally introduced in 0.25. - -=== Changes from elsewhere === - -24. Added yet another nontrivial INTERCAL program to the pit; interfunge.i - (written by Jeffrey Lee) is a Befunge-93 interpreter written in INTERCAL. - (It appears to conform to the standard (I actually ran it against a - testsuite, and it passed); its only pecularities, apart from the language - in which it's written, appear to be the need for a blank line at the end - of the program, but no blank lines earlier (because INTERCAL can't sense - EOF, although there are plans to change that), the restriction to 80x25 is - enforced (this seems to be an implied requirement in the standard, but - most Befunge-93 interpreters don't enforce it), and numeric output is in - Roman numerals (what did you expect?).) - -== Release 0.27 (by Alex Smith) 22 Dec 2007 == - -1. Joris Huizer pointed out that the manual nowhere says that a GIVE UP line - can't be abstained from by line number. This was probably a mistake in the - INTERCAL-72 manual, but the behaviour specified by the original manual is - now implemented; after all, it wouldn't do to violate the original de facto - standard. (Note that if a GIVE UP line is abstained by line number, there - is then no way to reinstate it; also, if the -X switch for CLC-INTERCAL - compatibility is used, ABSTAINING FROM a GIVE UP line by line number is - also silently ignored.) - -2. Rewrote the optimizer in a language (OIL) invented specifically for the - purpose; the set of optimizer idioms is now in idiotism.oil, and translated - into C and linked with the rest of the compiler at metacompile time (that - is, when the compiler itself is being compiled). It contains many of the - same idioms, but some have been generalised or reduced into smaller parts - and some new ones were added. Documentation for OIL has been added as part - of the documentation for the distribution as a whole. - -3. Joris Huizer submitted a patch to fix a memory allocation bug which - occasionally caused memory corruption when a program had a number of - commands that was 1 less than a multiple of 256. - -4. Completely redid the autoconfiguration. The install should now progress - with less user interaction than before. As a bonus, if you have a range of - GNU utilities including make, sed, tr, and bash (and possibly others), it's - now possible to compile using 'sh configdj.sh' followed by 'make' under - DJGPP. (To be specific, some settings that previously sometimes had to be - set by the user, such as whether lex provided yylineno and yyrestart, are - now either detected by config.sh or no longer relevant. Other settings that - were not previously detected, such as what extension executables have, are - now detected so that the config script works on DJGPP as well, now; - compiling the config script on a non-DJGPP system seems to result in a - script that fails on DJGPP, and likewise compiling the script on DJGPP - seems to result on a script that fails on other systems, so both scripts - are provided. The autoconfigurer now also adapts coopt.sh so that -F works - on DJGPP too, sort of (or else detects that it won't work and disables it). - -5. Improved the action of 'make install', so that it actually installs - everything in the right place. It works under DJGPP, now, too, as long as - you have the programs installed that allow configdj.sh and make to work. - -6. Fixed a bug involving COME FROM in multithreaded programs; now, if a line - COMEs FROM itself (either because this is written explicitly or because it - is a computed COME FROM computing to its own line number), the loop this - creates doesn't block all the other threads in the program. - -7. Added support for statement WHILE statement, with similar semantics to CLC- - INTERCAL. (The second statement is repeated for as long as the first - statement is executing; NEXTing to the statement nexts to the first - statement and doesn't set off the loop, and COMING or NEXTING FROM the - first statement leaves the loop running until the NEXT FROM returns.) With - the current implementation, strange things happen if the same WHILE is - simultaneously run by multiple threads, although I decided to work out - exactly what the rules were anyway and document them, so those strange - things are now official. - -8. Fixed some weird bugs in the multithreader that could cause segfaults in - several situations involving backtracking; it's kind of surprising that - they didn't turn up sooner. - -9. Prevented a segfault in some situations where a syntax error was the - target of a noncomputed COME FROM or NEXT FROM. - -10. CALCULATING now includes array dimensioning. (There previously was no - gerund for this situation; the original manual doesn't say what to do but - implies that this is a special case of calculate.) - -11. Made operand overloading interact more sensibly with multithreading. - Previously, overloading information was shared between all threads, but the - stashes for operand overloading were separate in each thread. Now, the - overloading is not shared between threads, except when they are woven by a - WHILE statement. - -12. There's no longer a need to set or modify copyloc in the makefile by hand; - COPYING.txt is now found the same way as syslib and the skeleton. It's also - now copied out of the distribution to the same place as the other data - files when installing, preventing the need to keep the original - installation directory around. - -13. The compiler now actually looks for a temporary directory to place a file - in when creating a temporary file; this was meant to be fixed in 1.26, but - the fix didn't actually work. - -14. Added a new program to the pit: an Unlambda interpreter written by Oerjan - Johansen in 2001, and also a commented version as documentation. - -15. Section 23 of the release notes for version 0.26 is wrong; I was obviously - confused when I wrote them because they were speaking nonsense. For the - record: no, there is nothing special about NEXT in connection with - backtracking. It should have said "NEXT", not "choicepoint". Instead of - rewriting history, this changelog entry is added as a fix. - -16. Added an entirely new set of documentation, the Revamped Manual, which is - available in a wide range of formats and documents recent language changes, - as well as many other things INTERCAL. The Revised Manual has been - preserved, but it seems unlikely to be updated in the near future (it is - still well worth a read anyway). - -17. For compatibility, the COMMENT gerund can now be spelt COMMENTS or - COMMENTING. - -18. Corrected the Emacs INTERCAL mode to work with more recent versions of - Emacs than it previously worked with, hopefully without sacrificing too - much backward compatibility. - -19. Added a conversion program 'convickt'; it can convert between the Latin-1, - Baudot and EBCDIC character sets used by CLC-INTERCAL (Latin-1 is also - accepted by C-INTERCAL, so this gives a practical way to run CLC-INTERCAL - programs in unusual character sets on C-INTERCAL), and can also attempt to - convert into the 'Atari character set' (which uses $ instead of the cent - sign, ? instead of yen, and so on for the other characters that differ - between C-INTERCAL and CLC-INTERCAL). - -20. Reorganised the Makefile and environment variable system for finding - locations to make more logical sense; various definitions and environment - variables now do what their name suggests rather than something completely - different, a situation which confused the programmers previously. The new - version should be better at finding files that it needs, and also cuts - down on the amount of useless copying that the Makefile did (such copying - is now only done if the destination file doesn't already exist or is out - of date). - -21. Fixed some problems in the PIC-INTERCAL code: one problem with finding the - correct location for the skeleton, and some code duplication between the - two header files. Also clarified one of the comments. - -22. Added support for CLC-INTERCAL-style Baudot I/O (generalised array I/O is - currently unimplemented, though). This has a two minor differences to the - CLC-INTERCAL version: unrecognised characters, instead of causing an - error, become 0 when WRITING IN (except that tabs are translated to single - spaces) and ASCII code 26 when READING OUT. (Baudot characters not in - ASCII will be translated to Latin-1; there are more of these than might be - expected, because the CLC-INTERCAL extended Baudot is being used). - -23. The man pages and some fixes for the documentation Makefile from the - Debian package were copied into the main distribution. The man page was - written originally by Mark W. Eichin and later modified by Joey Hess (and - was further modified by me prior to placing it in the distribution); the - Makefile fixes are due to Joey Hess. Strangely, many of the changes I made - to the Makefile for this version have much the same effect as fixes that - the Debian package maintainers had come up with earlier; a new Makefile - variable ick_specific_subdir has been added to hopefully make the Debian - maintainer's job easier (it allows elimination of versioned - subdirectories, replacing them with versionless subdirectories). - -24. Added a new test program to the pit, tests/ignorret.i, that demonstrates - how the interaction between IGNORE and RETRIEVE is different between - C-INTERCAL, CLC-INTERCAL, and J-INTERCAL, and documentation showing the - results on each version. - - Release 1.26 (by Alex Smith) [a bugfix of 0.26] 3 Sep 2007 - -1. Fixed an optimizer bug (thanks to Joris Huizer for pointing it out), - relating to active-bits deduction in some expressions involving select. - -2. Fixed a bug in the flow optimizer that caused it to occasionally confuse - ABSTAIN with REINSTATE when gerunds were used. - -3. Simplified the compilation of INTERCAL files to .exe under DJGPP, to avoid - some temporary files (hopefully solving some problems users may be having - with finding which directory the temporary files are in under DJGPP); - when under DJGPP a temporary file other than .c or .exe is needed, the - compiler now looks for a directory reserved for temporary files to place it - in rather than just using the current directory. - -4. The original INTERCAL manual specifies that GIVE UP cannot be REINSTATED - or ABSTAINED FROM; this is now implemented, by taking only the original - DO/DO NOT status into account when executing a GIVE UP statement. - -5. Dealt with problems with what happens with the 'original' stdin (this - information was previously lost, making it hard for the debugger to accept - input because it had no obvious place to accept it from), and removed the - previous hacky workarounds for this problem (which were my fault). - -6. Made several improvements to the documentation, especially with respect to - installing and running under DJGPP. - -7. Modified the version number scheme, so that minor revisions and bugfixes - now increment the major version number rather than the minor version number - (it was getting a little bored stuck at 0). The next major release will be - version 0.27. - -== Release 0.26 (by Alex Smith) 1 Apr 2007 == - -1. Fixed a few bugs in the previous release (some bugfixed by Joris Huizer). - -2. Ported to DJGPP. The compiler now works on both POSIX and DJGPP systems. - -3. Reorganized the directory structure. - -4. Added support for cross-compiling to the PIC microcontroller. - -5. Added a simple test program for PIC cross-compilation. - -6. Improved further searching for skeletons and executables. - -7. Delinted some of the code, and turned up the default gcc warning level. - -8. Reformatted some of the documentation. - -9. Renamed and split files; all files used in the build now have 8.3 - filenames, to prevent any problems using DJGPP on 8.3 systems. The - optimizer was split from the code degeneration into dekludge.c (optimizer) - and feh2.c (degeneration), because feh.c was getting too large. - -10. The text documentation (README, COPYING, NEWS, and BUGS) was renamed to - end .txt (again for DJGPP compatibility); formatting changes were made to - README in addition to the addition of extra readme information. - -11. Included precompiled-to-C versions of the parser and the lexer so that - DJGPP (or I suppose, POSIX if you hacked the makefile) implementations - without bison or flex could still compile the rest of C-INTERCAL and give - a running program. - -12. Fixed a bug involving optimization of Tri-INTERCAL programs. - -13. Added to the lexer, so that it supports CLC-INTERCAL syntax for operators - that were already present in C-INTERCAL, as long as they don't conflict - with C-INTERCAL syntax. (Using the -X switch will support CLC-INTERCAL - syntax for operators that were already present in C-INTERCAL even if they - conflict with C-INTERCAL syntax.) For the symbols present in the - CLC-INTERCAL character set but not in ASCII, ISO-8859-1 is supported as an - encoding as well as UTF-8 (to increase the chance that CLC-INTERCAL - programs will run without modification); it was meant to be supported to - some extent before, but seemed not to be working. - -14. Added the COMMENT gerund, with the same semantics as in CLC-INTERCAL. - -15. Added COME FROM gerund. This suffers from the same restrictions as - computed COME FROM, in that it can't be used in PIC programs and causes - the program to end up substantially less efficient. - -16. Added support for prefix as well as infix unary operators. The rule is - that any number of prefix unary operators, but only one infix unary - operator, is allowed on each group, variable, and/or mesh. (Previously, - only infix operators were supported, and then only one per mesh.) - -17. Added positional precedences to the parser. INTERCAL still doesn't have - operator precedences (that would be completely contrary to the spirit of - INTERCAL) but it now has rules for deciding on the meaning of previously - ambiguous expressions. Chains of select and mingle operations right- - associate, and when a unary operator could legitimately be in either a - prefix or infix position, the infix position is assumed (although remember - that only one infix operator is allowed for each group, variable, and/or - mesh). - -18. Added the not character as a synonym for NOT. - -19. Added operand overloading, for onespot and twospot variables. This uses - the slat operator in almost, but not quite, the same way as - CLC-INTERCAL. Note that the width of unary operations will mostly depend - on the type a variable appears to have in an expression, rather than on - its actual bitwidth (if a onespot is overloaded to a twospot or vice - versa). Note that meshes won't change as the result of operand overloading - unless the -v option is used (an error will be generated instead). - -20. Added an option for generalised assignments. With the -v option, - expressions (rather than just variables) can appear on the left of an - assignment. Any meshes on the left of an assignment (even if in apparently - inoccuous positions) may change value as a result. (Note that such - assignments aren't always possible.) If the left-hand-side of an - expression is anything other than simply a variable or a constant, the - compiler will try to change the values of meshes and non-ignored variables - in the expression to make it fit. (In bases other than 2, it will nearly - always fail.) Unlike CLC-INTERCAL, assigning to a mesh only changes that - mesh, not line labels or other uses of the number. - -21. Restricted the compiler to just one input file at a time (it used to break - if this wasn't done anyway). - -22. Fixed a nonportability involving stdin and stdout in cesspool.c. - -23. Added support for the NEXT FROM command, with the same semantics as COME - FROM (including computed NEXT FROM and NEXT FROM gerund), except that it - saves the line that was NEXTed FROM on the choicepoint stack. - -24. Fixed a bug where the yuk debugger accessed unallocated memory. - -== Release 0.25 (by Alex Smith) 21 Jun 2006 == - -1. Added support for computed ABSTAIN and TRY AGAIN. - -2. Added support for computed COME FROM. - -3. Added support for multithread programs. This includes ONCE and AGAIN, -which also work in singlethread programs. - -4. Expanded intercal.el to support Font Lock and some utilities for - generating INTERCAL-style constants. It also works with the - compilation routines of Emacs to compile INTERCAL programs without - the need for make. Degenerated C code now has a mode line to help - with Emacs compatibility. - -5. Added a rudimentary debugger and profiler for singlethread programs. The - debugger's features include useful things like 'write out INTERCAL expression - in simpler terms' (which is only possible if -O is on). The profiler works - much like gcov, counting the length of time spent in and number of executions - of each command in the code. - -6. Changed searching for includes, libraries, syslib, skeleton. This - is so that non-root users, or people who want to evaluate ick, can - do so more simply. The compiler will search for the above files in - the directory they should have been installed in, the current - directory, and the directory in which ick's executable resides (in - that order). Skeleton problems, in particular, seem to have been a - major problem for unfamiliar users trying out ick. - -7. Added several new test programs to the Pit. - -8. Greatly expanded the original optimizer (which optimizes - expressions). It can now recognize most of the idioms in syslib, - and many idioms in other Pit programs. Also added a new optimizer, - to try to optimize program flow, which is important because - otherwise INTERCAL wouldn't have any rudimentary optimizers. There - is also the -F optimizer, which I hope will become infamous. It - creates object code which is close to maximally fast in some - specialized situations, at the expense of compile time (compilation - can take a very long time when -F is active) and object file - size. I suggest checking its effect on primes.i. - -9. Fixed the grammar (again) in a spark/ears situation involving array - subscripts, after proving that the previous fixes weren't adequate. - -10. Added support for backtracking (MAYBE, GO AHEAD, GO BACK). Note - that it is possible for multithreading, backtracking, computed - ABSTAIN, and computed COME FROM to all be used simultaneously in - the same program, to help maximize obfuscation. - -11. Added an option (-l) for generating warnings. To prevent this - actually being useful, it is designed to generate far too many - warnings, which all have to be trawled through to find the - important ones, and has no way to turn the unimportant ones off. - -12. Added the +printflow and +mystery options for executing INTERCAL programs. - Note that it is not entirely obvious what either of them do (+printflow is a - debugging aid, but the output is somewhat obfuscated, and I am not going to - explain what +mystery does in this document). - -== Release 0.24 (by Eric S. Raymond) 31 Dec 2003 == - -1. RPMs can now be built by non-root users. - -== Release 0.23 (by Eric S. Raymond) 9 Mar 2003 == - -1. More fixes by Don Knuth. He found a bug in the type-propagation logic. - -== Release 0.22 (by Eric S. Raymond) 4 Mar 2003 == - -1. Incorporated a minor fix patch from Donald Knuth. Yes, *the* -Donald Knuth. Seems he found a weakness in the code for handling -comments, and fixed it to do multiline comments properly. He also made -some improvements to intercal.el, and contributed a test program. - -2. Updated build machinery. This package now uses GNU autoconf. - -== Release 0.21 (by Eric S. Raymond) 30 July 2002 == - -1. Jonathan Nieder sent a grammar fix for BLR's old bug #5 (a bad spark-ears - interaction.) - -2. Latin-1 support and makefile fixes from Magnus Bodin. - -== Release 0.20 (by Eric S. Raymond) 16 September 1999 == - - (The following changes are due to John Cowan ) - -1. In addition to Latin-1, UTF-8 is now acceptable in source code as well. - All the numerous currency symbols of Unicode (ISO 10646) can be used as - big-money alternatives in their UTF-8 format. Indeed, a random mixture of - Latin-1 and UTF-8 also works fine; this seems very much in the spirit of - Intercal. - -2. Intercal has now been localized for the Ancient Roman as well as the - Posix/C locale. You may input numbers in Latin and write Intercal programs - using Latin keywords. See lexer.l for a list of equivalences. - -3. The Makefile in the pit directory now works like a real Makefile, and - won't compile anything that's already been compiled. - -== Release 0.19 (by Eric S. Raymond) 16 August 1998 == - -1. Fixed a code-generation error in assignments from tail and hybrid - variables. (Error pointed out by Malcom Ryan.) - -== Release 0.18 (by Eric S. Raymond) 29 April 1998 == - -(The following changes are due to John Cowan ) - -1. The source code is now POSIXly correct. By making the POSIX - variable in the Makefile undefined, you can restore the use of - , but otherwise is now used. - -2. Latin-1 (ISO 8859-1) is now the standard input charset of C-INTERCAL. - This means that the change operator (0xA2) has returned as an alternative to - big money ($). Furthermore, the quid (0xA3) and zlotnik (0xA4) are also - acceptable. For those using Latin-9 (ISO 8859-15), the euro (0xA4) will also - work. ("Euro", like "ampersand", cannot be sillified further.) - New names have been added to intercal.mm. - -3. A fortiori, input of Volap\"uk digits may now be in Latin-1 or TeX format. - -4. Yacc is now deprecated in favor of bison; some old yaccs don't do proper - error recovery, and lines like "DO ~ ERROR" failed at compile time. - -5. Some minor portability bugs on systems where ptr_diff is not the same - as int were removed by casting expressions of the form (ptr - ptr) to int. - -== Release 0.17 (by Eric S. Raymond) 27 Feb 1998 == - -Incorporates a minor bug fix by Jeff Uphoff . - -== Release 0.16 (by Brian Raiter and Eric S. Raymond) 26 May 1997 == - -This is the 25th-anniversary release of INTERCAL. This language, conceived -in irony a quarter century ago today, has outlasted many more serious and -high-minded essays in computer language design. This fact should give us -pause to reflect, or possibly frighten the crap out of us. Or both. - -1. Corrected manual bugs. - -2. Fixed over-enthusiastic install production in the Makefile. - -3. DO PLEASE is no longer accepted (Brian Raiter pointed out that the - manual does not sanction it). - -4. Fixed various bugs in the optimizer. - -5. Incorporated fixes made by William Walter Patterson for bugs that - appeared when multiple files are given on the command line. - -(The following changes are due to Brian Raiter) - -6. The system library is now available for TriINTERCAL (all bases, 3 to 7). - The compiler has been updated to use the right library automagically. - -7. The error 774 feature has been brought into conformance with the - Princeton compiler. The odds are now a flat 10% (but still 0% with -b). - -8. The compiler has been modified to allocate memory dynamically, and - the hard-coded limits on program size and number of variables has - been removed. Programs are now only limited by the amount of - available memory. - -9. Array output now fflushes after outputting newlines. - -10. Two minor bug fixes: one in wimpmode input, which was clamping - input to the signed integer range, and one in politesse checking. - The latter was causing programs to be recognized as impolite only - if their ratio was less that one-sixth, not one-fifth. (Fixing this - also necessitated adding a few PLEASEs to pit/rot13.i.) - -11. Several new programs have been tossed into the pit. - -== Release 0.15 (by Eric S. Raymond) 20 Jun 1996 == - -1. Switched the INTERCAL manual master to mgm in order to be able to handle - section crossreferences properly. The manual has now been carefully - proofread against the paper version by ESR and seems to match. It's - also been independently proofread for typos by Brian Raiter. - -2. The optimizer now does complete analysis and evaluation of constant - expressions at compile time. - -3. Added optimization templates for ~, |, &, ^ expressions. Also added - |, &, ^ idioms to the system library, and documented them. - -(The following changes are due to Brian Raiter) - -4. Every one of the INTERCAL-72 messages is now emitted when appropriate. - including the previously un-emitted E000, E197, and E200 (and see below). - -5. A close reading (while proofing) of the sections of the manual on - error messages seems to indicate that splatted lines were only - splatted in the default listing printed after a successful - compile. (This seems to be a standard feature of IBM compilers; I - remember that RPG did this as well.) My understanding of the manual is - when the syntactically offensive line is encountered at runtime, it is - printed as error E000. I have modified the code to do this. - -6. I have fixed INTERCAL in order to add another bug. Namely, I have - implemented the BUG/NOBUG option in the Princeton compiler. By - default, there is a chance that INTERCAL will randomly insert error - E774 into your executable. (The odds are 1/128 per statement, not - counting COME FROMs. Is there any way to find out what the - Princeton compiler's odds were?) The new option -b turns this - feature off. - -7. The new file pit/lib/numio.i contains routines for wimpmode I/O. - These routines are documented in the file pit/lib/numio.doc. - It is my earnest hope that C-INTERCAL programmers everywhere will - flock to these handy routines, and C-INTERCAL users will thus no - longer need to fear that they might succumb to the foul and awful - temptation to use the dastardly +wimpmode option. - -== Release 0.14 (by Eric S. Raymond) 9 Jun 1996 == - -1. The documentation has been reorganized and cleaned up (you can now - format either a C-INTERCAL or INTERCAL-72 manual from the same master). - The diagrams in the paper original have been transcribed as pic figures. - See doc/READ.ME for details. - -2. Yet more code. The pit now includes a second random-number generator, - a ROT13 filter, and even two programs in TriINTERCAL! - -3. Louis Howell's corrected system library is now included. - -4. The distribution is now formally GPLed. - -== Release 0.13 (by Eric S. Raymond) 5 Jun 1996 == - -1. I folded in patches by Brian Raiter that port - this code to Linux, ANSIfies it, and enables it to use flex. Note: This - version has been tested on Linux and SunOS but not yet elsewhere. - -2. Another piece of nontrivial INTERCAL code has been found! (Doubtless - hell is freezing over even as I write.) We've added to the pit the - `beer' program by Matt DiMeo , courtesy of the - infamous Beer List (URL:http://www.ionet.net/~timtroyr/funhouse/beer.html). - -== Release 0.12 (by Eric S. Raymond) 22 Mar 1995 == - -1. The code now compiles and runs under Linux, using bison and lex. It does - *not* yet work with flex; C.P. Osborne's patches for 0.11 turned out not - to be sufficient (at least for flex 2.4.6 under Linux using the -l option). - See the BUGS list. - -2. Note 3 under 0.11 was incorrect. We're in conformance after all. - -3. The politesse check is a little smarter about programs too small to - conform to the 1/5-to-1/3 criterion. All the pit programs have been - checked for conformance. Also, the politesse error message now tells - you the offending program's line count. - -== Release 0.11 (by Eric S. Raymond) 24 Sep 1994 == - -1. Incorporated changes by Jan-Pieter Cornet for - magical inclusion of the system library. These address an outstanding bug - - 2. (SS) The `system library' should be precompiled and `linked' to user - written code, at least optionally. Doing this with the current compiler - presents a few problems. - - which has accordingly been removed from the BUGS file. They also fix a - previously unknown bug; due to a minor oversight in the lexer, it was not - possible to ABSTAIN FROM WRITING IN or READING OUT. Jan also contributed - a test program that demonstrates gerund abstention. - -2. Despite the obvious appeal of the idea, and much discussion on - alt.lang.intercal, I decided *not* to add Klingon; maintaining two parallel - grammars just so the compiler could support SVO and OSV languages would be - too painful. There was also a minor mess near case-sensitivity in the - digits. The workaround kluges I was offered instead failed to satisfy. - -3. We fess up to a violation of the INTERCAL-72 standard. That implementation, - instead of accepting an entire multiple-digit number per line of input, - expected one digit per *card image* (input line). It is unclear how - INTERCAL-72 programs ever managed to input more than one number. - -4. Added patches by C.P.Osborne to make the lexer work - using flex, for Linux and BSD/386 support. I didn't use his error-reporting - patch, though; instead, I changed the parser to catch errors at logical-line - level. I also kept the N in `RESUBNIT'; this is a carefully preserved - feature of INTERCAL-72. - -5. Volapuk digits are now recognized on input. TO DO: Recognize Volapuk - keywords, including gerunds. - -== Release 0.10 (by Eric S. Raymond) 9 Sep 1994 == - -1. It is now possible to undo a line-number abstention with a gerund - reinstatement, or undo a gerund abstention with a line-number - reinstatement. In previous versions, gerund abstention/reinstatements and - line-number abstention/reinstatements were independent of each other. - -2. After release 0.5, I wrote in the TO DO list as follows: - - 2. (ESR) Input format internationalization -- allow WRITE IN input digits in - major languages such as Nahuatl, Tagalog, Sanskrit, and Basque. - - The twisted loons in the alt.folklore.computers crowd loved this idea, - and I actually got sent digit lists for Nahuatl, Tagalog, Sanskrit, and - Basque -- also, Kwakiutl, Georgian, Ojibwe, and Albanian. I've left - out Albanian (didn't want to keep track of the dipthong diacritical) - and Ojibwe (no zero digit). So: Nahuatl, Tagalog, Sanskrit, Basque, - Georgian, and Kwakiutl are now supported in addition to English. - -3. The THEORY document has been significantly revised. - -== Release 0.9 (by Eric S. Raymond) 5 Mar 1993 == - -1. An embarrassing port bug in the INTERCAL skeleton has been fixed - -2. Jamie Zawinski's suggestion for an improved E333 error message has - been accepted. - -3. Added and improved documentation for pit programs. - -4. The install production in the Makefile now puts lose.h in place - as well as cesspool.h. - -5. You can now set the C compiler to be used as a back end by INTERCAL - by setting the environment variable CC. The default is cc. - -== Release 0.8 (many hacks on 0.7 by Eric Raymond) 21 Jan 1992 == - -1. A previously undocumented `feature' of the Princeton compiler, - revealed by Don Woods, is now emulated. If fewer than 1/5 or more - than 1/3 of a program's statements contain the qualifier `PLEASE', the - program is rejected with an entertaining error message. Programs in pit - have been hacked to pass the politesse test. - -2. The `sample' program now works correctly, thanks to Louis Howell. Also, - he has contributed new programs to calculate pi and to search for prime - numbers. - -3. An intercal mode for GNU Emacs is included. It helps programmers deal with - the new politesse check by randomly expanding the abbrev "do" to DO PLEASE - or PLEASE DO about 1/4 of the time. - -4. Improvements in code generation for NEXT/RESUME. - -5. Fixes to the optimizer; it handles the results of optimized MINGLEs - correctly now. Also, added a rewrite rule that checks for the - equality-test idiom using XOR. - -6. The original error messages from the Princeton compiler have been restored. - -The documentation has been updated to reflect these changes. - -== Release 0.7 (by Louis Howell) 21 Dec 1991 == - -In addition to bug fixes, new features in this version include arrays, -character I/O, modified (hopefully improved!) semantics for the COME -FROM statement, extensions to bases other than 2, new INTERCAL programs, -and new documentation. - -== Release 0.6 (by Steve Swales) 5 Jan 1991 == - -1. Restored Princeton documentation (courtesy of Michael Ernst). - -2. Added -@ usage option to ick. - -3. Added [+/-]help, [+/-]traditional, and [+/-]wimpmode options for -generated programs; [+/-]traditional is a no-op at this point. - -4. Various bug fixes, esp. in lexical analysis. - -== Release 0.5 (ESR's second pre-release) 5 Jun 1990 == - -1. As a convenience to all you junior birdmen out there, `NINER' is accepted as - a synonym for `NINE' in INTERCAL input. - -2. The COME FROM statement is now compiled. - -== Release 0.3 (ESR's original pre-release) == - -The resurrection of INTERCAL from its grave took place on 12 May 1990 -when ESR released 0.3 on an unsuspecting USENET. diff --git a/README b/README index 30cd36d..fcfb962 100644 --- a/README +++ b/README @@ -27,6 +27,7 @@ The files included are: |README | this file |BUGS | current bug and to-do list |NEWS | info on features and fixes new in this release +|HISTORY | Longer-form history of the code tree |COPYING | copyright and licence information |MANIFEST | a list of all files in the distribution |doc/READ.ME | historical notes on the docs diff --git a/buildaux/Makefile.am b/buildaux/Makefile.am index 8f8268b..1873a2f 100644 --- a/buildaux/Makefile.am +++ b/buildaux/Makefile.am @@ -131,8 +131,8 @@ EXTRA_DIST = pit etc BUGS src/abcessh.in src/feh.h src/fiddle.h src/ick_ec.h \ src/sizes.h src/uncommon.h src/yuk.h src/parser.y src/lexer.l \ doc/Makefile doc/fdl-1-2.txi doc/fix83.pl doc/fixtoc.pl \ doc/ickstyle.css doc/ick.txt doc/intercal.mm doc/READ.ME \ - doc/THEORY.txt doc/tidy.cfg parser.c parser.h \ - lexer.c doc/ick.txi doc/ick.txt doc/chipspec.txt NEWS README \ + doc/THEORY.txt doc/tidy.cfg parser.c parser.h lexer.c control \ + doc/ick.txi doc/ick.txt doc/chipspec.txt HISTORY NEWS README \ buildaux/buildconfig buildaux/buildconfig.ac \ buildaux/depcomp buildaux/hostmak.in buildaux/install-sh \ buildaux/missing buildaux/ylwrap buildaux/bconfigh.in diff --git a/control b/control new file mode 100644 index 0000000..196cca5 --- /dev/null +++ b/control @@ -0,0 +1,18 @@ +# Not a real Debian control file, though the syntax is upward-compatible. +# It's project metadata for the shipper tool + +Package: intercal + +Description: a compiler for the INTERCAL language + INTERCAL is the original esoteric language, a farrago of features + that will test the mettle of any programmer and bend the minds of + most. The INTERCAL suite includes not just a compiler and debugger + for the language but most of the code ever written for it as well. + +Homepage: http://www.catb.org/~esr/intercal +XBS-Gitorious-URL: http://gitorious.org/intercal +XBS-Project-Tag-List: language, retrocomputing, parody, hacker culture +Destinations: mailto:mam@theory.stanford.edu + mailto:ais523@bham.ac.uk, + mailto:design@adastragames.com, + mailto:albaugh@employees.org