Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

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

20 views
Skip to first unread message

Claudio Calvelli

unread,
Oct 22, 2023, 4:17:17 AM10/22/23
to
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.

0 new messages