Changes by Eric S. Raymond
-1. There is now a compiler regression-test suite, invoked through the test
- production in the pit makefile
+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.
+2. There are two new compiler error messages, E990 and E994.
-3. A new program for the pit: Brendan Gregg's guess game.
+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.
+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.
Bugs reported and changes patched by Arvid Norlander
-1. Fixed a typo in the perpet.c version of the help information.
+6. Fixed a typo in the perpet.c version of the help information.
-2. Fixed the CREATE statement to work on 64-bit architectures.
+7. Fixed the CREATE statement to work on 64-bit architectures.
-3. The availability of variable argument list mechanisms is now determined
+8. 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
DOS, FreeBSD and Mac OS X, and possibly affects other platforms. (also
reported independently by Elliott Hird)
-4. Fixed some nonsense in the -@ help screen that was generated by an errant
+9. Fixed some nonsense in the -@ help screen that was generated by an errant
search-and-replace.
-5. Made several changes to bring the new Befunge-98 interface code (see
+10. Made several changes to bring the new Befunge-98 interface code (see
below) in line with changes in the Befunge-98 interpreter in use.
-6. Added consts and statics in the code, hopefully to make bugs easier to
+11. Added consts and statics in the code, hopefully to make bugs easier to
notice.
-7. Refactored main(). It needed it, badly.
+12. Refactored main(). It needed it, badly.
Bugs reported by Elliott Hird
-8. Fixed the configure script to work with the default Debian shell dash.
+13. Fixed the configure script to work with the default Debian shell dash.
(also reported independently by Debian)
-9. Actually fixed unlambda.i; the fix was meant to be in 0.28, and is
+14. 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.
-10. The -F option again works. (AIS: I accidentally broke it in the preceding
+15. The -F option again works. (AIS: I accidentally broke it in the preceding
version, making it basically a no-op by mistake.)
-11. The build now succeeds (with warnings) when lex or yacc are missing,
+16. 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
Bugs reported, changes requested, and patches by Joris Huizer
-12. The [xoritself] optimiser idiom has been generalised to handle some
+17. 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.
-13. Fixed unary operators applied to constants (AIS: it seems that my patch to
+18. Fixed unary operators applied to constants (AIS: it seems that my patch to
solve this issue earlier was itself buggy).
-14. The -g option now causes optimisation of the output compiled C to be
+19. 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.
-15. Added more optimiser idioms: [cxorand16], [cxorand32], [cfoldintoorinand],
+20. 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.
-16. ABSTAINING or REINSTATING are now a lot more efficient, taking an amount
+21. 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
Changes by Stefan O'Rear
-17. Added INTERCAL syntax highlighting information for vim. Why should Emacs
+22. Added INTERCAL syntax highlighting information for vim. Why should Emacs
have all the fun?
Changes reported by Phantom Hoover
-18. Fixed a nasty documentation typo.
+23. Fixed a nasty documentation typo.
Changes reported by the Debian autobuilders and Joey Hess
-19. The build of the optimiser idioms is now split over many files, to reduce
+24. 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
Changes by Alex Smith
-20. The build system has been completely redone, again; it now uses automake
+25. 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
still there, but now there's prebuilt instead of temp, an extra directory
buildaux, and bin, lib and include have disappeared.
-21. The distribution now comes in compressed pax format. (Before anyone
+26. 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
so tar readers should be able to read it just fine, if you can't get your
hands on a pax reader.)
-22. convickt can now produce its output as INTERCAL initialisation of a tail
+27. 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.)
-23. The function clock_gettime is now supported by the yuk profiler as an
+28. 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).
-24. The profiler now autodetects the same profiling mechanism at compile
+29. 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.)
-25. Added support for computed CREATE (the computation is done at create-time,
+30. 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
features of NEXT, anyway, rather than the small subset COMPUNEX could
manage.)
-26. Plugged a couple of small memory leaks; however, there are still several
+31. Plugged a couple of small memory leaks; however, there are still several
much bigger memory leaks that could do with being fixed.
-27. Added support for CREATING operators, with similar syntax to the CREATION
+32. Added support for CREATING operators, with similar syntax to the CREATION
of commands. This requires the -ea options to be set to work properly.
-28. More file extensions are now supported by the external calls system. The
+33. 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
locations instead of the current directory.) Other .a files can be linked
in from the current directory.
-29. Fixed the handling of division by zero in the syslibc expansion library.
+34. Fixed the handling of division by zero in the syslibc expansion library.
(The Revamped Manual states 'In all cases, division by 0 returns 0'.)
-30. Made several changes to the documentation, including fixes for some rather
+35. 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!).
-31. Fixed a bug in the external calls system that made it impossible to write
+36. 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.
-32. Added support for external calls to Befunge-98 programs; however, this
+37. 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.
-33. Fixed some bugs in the go-away command in interfunge.i.
+38. Fixed some bugs in the go-away command in interfunge.i.
+
+39. 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
This implementation was created by Eric S. Raymond <esr@snark.thyrsus.com>
during a fit of lunacy from which he has since mostly recovered. It has been
considerably hacked upon and improved by Steve Swales, Michael Ernst, Louis
-Howell, Brian Raiter, Alex Smith, Joris Huizer and others. For detailed
+Howell, Brian Raiter, Joris Huizer and others. Alex Smith took over as
+maintainer from version 0.25 onwards; this release, 0.29, is a unified deforking
+of C-INTERCAL with Alex Smith and Eric S. Raymond as comaintainers. For detailed
credits see NEWS.
FILES
doc/ick.txi -- the Revamped Manual sources, a newer manual
doc/fdl-1-2.txi -- the GNU FDL version 1.2 in Texinfo format
doc/ick.txt -- the Revamped Manual in plain text format
-doc/ick.info -- the Revamped Manual in Info format
+doc/ick.info* -- the Revamped Manual in Info format
doc/ickstyle.css -- styling rules for the Revamped Manual in HTML
doc/tidy.cfg -- HTML tidying rules for the Revamped Manual
doc/fix83.pl -- script to fixup the HTML output for 8.3 systems
+doc/fixtoc.pl -- script to format the manual table of contents
doc/intercal.mm -- the old manual in groffable form
doc/Makefile -- makefile to build old and new manuals
doc/THEORY.txt -- some notes on the internals of the INTERCAL compiler
src/bin2c.c -- creates C code representations of binary files
src/cesspool.c -- the INTERCAL runtime support code
src/clc-cset.c -- compatibility code for CLC-INTERCAL character sets
-src/csetstub.c -- small file to allow convickt to link
-src/configh.in -- config.h template generated by autoheader
-src/configdj.h -- config.h substitute for DJGPP without config.sh
src/convickt.c -- command line character set converter
-src/coopt.sh -- script to help out the -F optimizer (POSIX only)
+src/cooptsh.in -- template for script to help out the -F optimizer
src/dekludge.c -- INTERCAL optimizer wrapper and utility functions
src/feh.h -- interface to INTERCAL-to-C code generator
src/feh2.c -- INTERCAL-to-C code generator
etc/cftoec.sh -- script to convert cfunge to a library (see below)
etc/IFFI* -- input to that script
etc/cfunge.patch -- more input to that script
-etc/temp -- temporary directory used by that script
configure -- GNU Autoconf script that generates a Makefile
configure.ac -- autoconf source for configure
Makefile.in -- template Makefile for compiling C-INTERCAL
Makefile.am -- automake source for Makefile.in
-buildaux/* -- helper scripts for the build provided by automake
+buildaux/* -- helper scripts and templates used by the build
aclocal.m4 -- helper file needed to build the build system itself
pit/* -- sample INTERCAL code; see pit/CATALOG
pit/tests/* -- INTERCAL code provided specifically for testing
pit/explib/* -- source code for expansion libraries
+pit/lib/*.i -- sample INTERCAL libraries
pit/lib/syslib*.*i -- source code for the system libraries
+pit/*.doc -- documentation for sample INTERCAL code
+pit/*.tst -- sample inputs for sample INTERCAL code
+pit/*.chk -- sample outputs for sample INTERCAL code
HOW TO GET STARTED
First, note that there is a much fuller manual than this file available. For
full information about C-INTERCAL, including extensive installation and usage
-instructions, see that one; run `info -f doc/ick.inf', or failing that read
+instructions, see that one; run `info -f doc/ick.info', or failing that read
the plain text version at doc/ick.txt. (You can build a variety of other
formats as well, such as HTML and PDF, using the Makefile in the doc
directory.) After C-INTERCAL is installed, the manual is also available with
SPREADING THE BLAME
-There is an INTERCAL Resource Page at http://www.catb.org/intercal, and
-another at http://intercal.freeshell.org. Both point at the same C-INTERCAL
-repository, which lives at git://gitorious.org/intercal/intercal.git;
+There is an INTERCAL Resource Page at http://www.catb.org/intercal, and another
+at http://intercal.freeshell.org; http://c.intercal.org.uk contains a few
+bare-bones details about this compiler in particular. All point at the same
+C-INTERCAL repository, which lives at git://gitorious.org/intercal/intercal.git;
the freeshell page also distributes CLC-INTERCAL, a variant implementation.
There is, in addition, an occasionally active USENET newsgroup devoted to the