2023-10-22: ALERT: CLC-INTERCAL 1.-94.-2.4 escaped

It appears that CLC-INTERCAL liked the feeling of freedom which came with
escaping and decided to do it again very soon.

The escaped compiler can be found at:

  https://uilebheist.srht.site/dist/CLC-INTERCAL-1.-94.-2.4/

Special notice: there is now a (very low volume) mailing list at:

    https://lists.sr.ht/~uilebheist/clc-intercal-announce

where I will post announcements such as this one.  In fact, I posted this one
there so you could end up in a loop if you follow the above link from the
online mailing list archive.  Please be careful following any links and
always make sure to stop after a predefined number of iterations.

This is a maintenance escape; there aew no new features.  Changes since
1.-94.-2.3 are detailed in the Changes files which can be found all over
the sources; or see the git log at:

  https://git.sr.ht/~uilebheist/CLC-INTERCAL

As a summary:

* Compiler internals tidy up.

* Build system improvements.  Also removed some files which were generatad
  but also included in the distribution because generating them required
  to build the system first, and building the system required these files.
  Some of the improvements removed this circular dependency.

* Moving remaining networking functions from the Base package to the
  INET extension, where they belong.

* Removing some extra dependencies on perl modules not installed by
  default with perl-core / perl-base.

* Program tracing improvements.  In particular, it will show the source
  for each statement traced if at all possible, as some people appear
  to find "DO .1 <- #42" more legible than "01 2A 40 01".

* More tests during "make test".

* New emulated network for use during "make test" so that it can test
  network code even in a sandboxed build environment which blocks all
  network access.

* Updated documentation.

* Improved some example programs, added new ones.

* Improved program tracing output by including the corresponding source
  fragment if it can be found.

* Performance improvements suggested by profiling:

  - ByteCode::bc_skip() which is called a lot, particularly in unoptimised
    programs and by the optimiser itself, but also anywhere the Interpreter
    needs to know the length of a chunk of bytecode (overloading, system
    calls, COME FROMs, loops and events, but also normal expressions in
    which the arguments need to be swapped to guarantee that side effects
    happen in the correct order).

  - Interpreter::_find_label() and other code it calls, which are called by
    every NEXT, diversion, lecture but also by other statements, and needs
    to cope with the fact that even a constant label might have changed value.

  - The "but" operation encoded "and", "or" and the more generic "but"
    as a single function ("but 0" meaning "and" and "but 7" meaning "or");
    these have been split into separate functions and the compilers
    modified to produce them (the old "but" opcode still supports
    "and" and "or" for compatibility with older objects).  Also, the
    base 4 "and" code has been rewritten.

* Some bugs fixed, some new bugs added.  Details about the most important bug
  fixes follow:

  - Exporter had some code to avoid using deprecated features when the perl
    interpreter is found to be new enough to provide better alternatives.
    However some code was added to be able to test both the old and the new
    code, and that code actually only ever selected the old code.  This
    mechanism has been rewritten to make sure both can be tested before
    distributing, but only the correct one will end up in normal use.

  - Interpreter had a memory leak because the tracing information for each
    thread contained a reference to the thread itself, and the thread contained
    a reference to the tracing information.  This made it impossible to garbage
    collect a thread.  This is now fixed by explicitly removing one reference
    so the other one can be freed.  Single threaded programs will not see any
    difference, but multithreaded programs will run in less memory and also
    slightly faster.

  - The Optimiser was never actually used, except in a single test program,
    Implemented the bits to actually call it, which revealed a bug in some
    part of the code not tested by the test program, so fixed that and also
    added more tests.

  - The desk calculator did not correctly load history from saved state
    when in --line mode.  Now it does.

