by the way, I'm pretty sure self-replicating programs do exist in Trianguish, for much the same reason that TC languages generally have quines, but they'd almost certainly be too large to run in the JS interpreter
but the secondary constructors are easier to build than I anticipated because you don't have to build the logic that determines whta to build, you can just leave that in its original location and send the instructions along a wire
this is unless the length of the output is implied by the length of the input, in which case obviously it doesn't get any shorter because the particularly-compressed encodings are all being used for shorter strings
even if the compression method isn't random, we're assuming that pi is, so the probability of hitting an particularly compressible sequence doesn't depend on which sequences it is that are particularly compressible
assuming that pi is random, statistically the most-compressible 100-digit substring of the first 10^14 digits of pi probably compresses to 86 or 87 bytes
I'm not sure if it's so interesting for the answerers, the theoretically optimal strategy is probably either "brute-force digits of pi until you find a particularly compressible string" or just calculating pi from the start
also I made a few changes to my local copy of the Trianguish interpreter in order to make it a bit more usable when working with larger programs: nethack4.org/pastebin/…; I don't know whether you'd be interested in them or not
unfortunately a full construction is a) so large and b) so slow that I haven't been able to build a full program, but there's a working demonstration of the only non-obvious piece, everything else is straightforward
(and sandsifter apparently found one in 2017, but it was kept secret for fear it might be used maliciously – I wonder if it's been fixed yet, and when it'll become public)
huh, after looking up encodings for the halt-and-catch-fire instruction (defined as anything that requires at least a power cycle to get the processor back to working order), it seems that 0x0f 0x04 did that on the 286, and the opcode in question is still unused on Intel processors even nowadays
although, the reason they provide these things is to allow programmers to figure out what their program is bottlenecked on at the machine-code/microcode level, thus allowing them to work around the flaws of the processor and thus produce better benchmark results
but it's frustrating, because you can only check things that the processor manufacturer thought to measure, and often you have to rely on measurements that don't measure exactly what you want
modern processors have a range of performance counters that just count various things happening internally, you can monitor up to four of them at a time
there's also the perf command (Linux-specific, there's probably a Windows equivalent) which lets you see what the processor is doing via collecting statistics on various parts of the internals, it can be a lot of fun