Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

The survey: Prokop’s programs through iecf

Prokop is iecf’s first user. Its toolchain tests feed matiec’s iec2c every program they build; survey.py capture runs them with a stand-in iec2c that keeps a copy of each, and survey.py run builds each with matiec and with iecf build, says where iecf stops, and runs each that both build side by side (iecf-harness compare), every variable compared for 40 scans on pseudo-random inputs.

survey.py capture ~/Workspace/Repos/prokop ~/Workspace/External/matiec WORK
survey.py run ~/Workspace/External/matiec WORK > table.md

The programs are Prokop’s, and stay out of this repository: a program is named by the first 12 hex digits of its SHA-1, which capture gives again from the same Prokop commit. results.md is the last run. Some programs are tests that give matiec a wrong one on purpose; those are “reference fails” (matiec, the reference compiler, refused it) and do not count.

2026-11-07, Prokop e61378c9, iecf (every variable, array element, field and block member compared), matiec 7949c0b.

What does not build: IL (il_div, il_mod), not iecf’s - Ed.4 without IL (PROPOSAL.md §6.1).

Of those both build, each that does not run the same, and why - each where iecf decided differently, or matiec’s side cannot run it:

  • c583e73f52a4, Prokop’s SFC demo: iecf runs the actions before the transitions, with a final scan (docs/dependencies.md, SFC).
  • 7d80e41fddc8: dout0 AT %QX0.0 and pv AT %QW0 overlap; iecf’s image is one memory, matiec keeps a variable per address.
  • d779cf508890: its test expects matiec’s text, '16#ff' and 'TOD#12:34:56.500000'; iecf writes '255' and 'TOD#12:34:56.500' (docs/dependencies.md, conversions to and from STRING).
  • de13ecfb543e: divides by zero; iecf faults, matiec goes on.
  • 255308ff121c: divides by zero; matiec’s C dies of SIGFPE.
  • 64523234ff8c: declares one address twice, which the harness’s matiec host cannot hold.

55 programs; 51 build with the reference compiler; 50 of those iecf builds; 44 of those run the same, every variable compared

programiecffirst thing it stops at, or how it runs beside matiec
0510d587a215E0005an expression on its own is not a statement: assign it with ‘:=’, or call a function or block
179bdd6fe9b3reference fails179bdd6fe9b3.st:7: error: invalid specification in global variable declaration.
1ce81a4aa3fcreference fails1ce81a4aa3fc.st:4: error: invalid variable(s) declaration.
248d0c3dc6e5reference fails248d0c3dc6e5.st:4: error: invalid expression after ‘:=’ in ST assignment statement.
2c61deb63dc2reference fails2c61deb63dc2.st:4: error: invalid expression after ‘:=’ in ST assignment statement.
7d80e41fddc8buildsdiffers at tick 0: matiec RES0.INSTANCE0.DOUT0 0, iecf RES0.INSTANCE0.DOUT0 1
d779cf508890buildsdiffers at tick 0: matiec RES0.INSTANCE0.OK_DWORD 1, iecf RES0.INSTANCE0.OK_DWORD 0
c583e73f52a4buildsdiffers at tick 4: matiec 4 Q 01 01 00 M, iecf 4 Q 00 00 00 M
de13ecfb543ebuildsiecf faults at tick 0: 0 Q M fault 1 RATIO 12
64523234ff8cbuildsreference fails: cc
255308ff121cbuildsreference fails: the host (signal: 8 (SIGFPE) (core dumped))
230769e20509buildssame (40 ticks, 1 variables)
3ad71432cf5cbuildssame (40 ticks, 1 variables)
18c8c52b215ebuildssame (40 ticks, 10 variables)
5d9cc678a7bbbuildssame (40 ticks, 10 variables)
1e6bcc1d3c5abuildssame (40 ticks, 11 variables)
2a0e80d6c30cbuildssame (40 ticks, 11 variables)
bfb5e586cc47buildssame (40 ticks, 11 variables)
982a05cc407fbuildssame (40 ticks, 15 variables)
0c84b3c7c398buildssame (40 ticks, 2 variables)
0ef1d1027ab4buildssame (40 ticks, 2 variables)
497b4eace0babuildssame (40 ticks, 2 variables)
74423056b107buildssame (40 ticks, 2 variables)
7833ba53e5f5buildssame (40 ticks, 2 variables)
794d4d8bf3d7buildssame (40 ticks, 2 variables)
a6b137a4922cbuildssame (40 ticks, 2 variables)
ad18002b9ab6buildssame (40 ticks, 2 variables)
e083218e28b5buildssame (40 ticks, 2 variables)
e2e500751e1abuildssame (40 ticks, 2 variables)
fb5e1709002abuildssame (40 ticks, 2 variables)
a08a5c3a375ebuildssame (40 ticks, 23 variables)
5ea551f0ca8cbuildssame (40 ticks, 24 variables)
7ceadb39147fbuildssame (40 ticks, 29 variables)
03a46577ef84buildssame (40 ticks, 32 variables)
34cd70a978b2buildssame (40 ticks, 4 variables)
3e9f8d035dfcbuildssame (40 ticks, 4 variables)
464b42244ca3buildssame (40 ticks, 4 variables)
74940fbd8c9dbuildssame (40 ticks, 4 variables)
91702e819e6cbuildssame (40 ticks, 4 variables)
a938c7dd8ee2buildssame (40 ticks, 4 variables)
f1251103eedabuildssame (40 ticks, 4 variables)
2f3e6e7f563abuildssame (40 ticks, 5 variables)
adc5e97901d9buildssame (40 ticks, 5 variables)
aea623321632buildssame (40 ticks, 5 variables)
51ec13ab65f5buildssame (40 ticks, 6 variables)
f4297b60aff7buildssame (40 ticks, 6 variables)
ff2742d2d583buildssame (40 ticks, 6 variables)
8b5aba97b8e3buildssame (40 ticks, 69 variables)
4fc729c06cf9buildssame (40 ticks, 7 variables)
51fc2c5b2de6buildssame (40 ticks, 7 variables)
a2a5a26b53e9buildssame (40 ticks, 7 variables)
d3f6f71ca368buildssame (40 ticks, 7 variables)
f751e9830fc3buildssame (40 ticks, 8 variables)
c0169b32e6e3buildssame (40 ticks, 9 variables)
33310c6a515abuildssame (40 ticks, 99 variables)