araq
8299401888
IC: render every module's .c in one emit process
...
`emit` is the one backend stage with nothing to get wrong. It loads no
module graph — it derives its output path rather than resolving it — and
`renderCFromArtifact` filters text against the merge decision without
touching an AST. It is a pure function of one `.c.nif` and one global
artifact, so grouping the calls cannot change what comes out.
Measured rather than assumed: 67 separate emit processes and one process
with all 67 members produce byte-identical `.c`, in 0.502 s against
0.041 s. So emit takes a single nifmake rule covering every live module.
Where that shows up is narrower than the 12x suggests. Cold serial 8.21 s
-> 7.82 s; cold parallel 2.81 s -> 2.83 s, i.e. nothing, because 0.46 s
spread over 16 cores is already invisible. An edit to `system.nim` is
2.15 s either way: emit was never what made that slow. The honest case is
CPU rather than wall clock, plus one fewer thing to pay for on a machine
that is not idle — the fire-all is structural (every `emit` re-fires
whenever `merge` rewrites the decision, by design) and now costs one
process start instead of 67.
Also fixes a bug this exposed: `isMain` was a per-BATCH flag. That is the
right question for `lower`/`cg`, where main loads the whole program and
is never batched with anything, but emit batches freely — and main in a
mixed batch had its `.c` path derived from its module SUFFIX instead of
its source file, so it was never written at all.
`-d:icBatchSize:N` still splits emit the old way, for comparing against
the fan-out. ic 40/40, `koch boot -d:release` equal executables, and the
67 generated `.c` are byte-identical to the previous commit's.
2026-08-31 13:59:46 +02:00
..
2026-08-28 23:13:16 +02:00
2025-11-13 21:31:24 +01:00
2026-08-21 21:57:51 +08:00
2026-08-17 23:37:46 +02:00
2026-08-31 09:30:12 +02:00
2026-08-30 16:16:08 +02:00
2026-08-30 15:43:14 +02:00
2026-08-30 08:07:38 +02:00
2024-04-16 12:46:59 +02:00
2026-06-11 14:10:42 +02:00
2023-10-11 17:44:14 +02:00
2026-08-30 23:09:32 +02:00
2026-08-30 14:21:52 +02:00
2026-02-10 13:21:35 +01:00
2024-11-19 08:51:54 +01:00
2026-08-25 11:59:19 +02:00
2024-11-18 17:34:37 +01:00
2024-11-18 17:34:37 +01:00
2026-08-30 20:38:00 +02:00
2026-08-30 16:07:20 +02:00
2026-08-30 15:43:14 +02:00
2022-11-30 21:51:13 +01:00
2026-08-29 06:57:55 +02:00
2026-08-30 15:43:14 +02:00
2026-06-25 23:20:34 +02:00
2026-08-30 15:43:14 +02:00
2026-08-30 15:43:14 +02:00
2026-08-30 10:23:43 +02:00
2026-08-31 11:18:45 +02:00
2026-08-31 10:18:09 +02:00
2026-08-25 11:59:19 +02:00
2026-07-24 14:06:27 +02:00
2026-06-24 21:58:51 +02:00
2026-08-27 19:35:11 +02:00
2026-08-31 10:53:14 +02:00
2023-06-18 16:06:14 +02:00
2026-08-28 22:31:58 +02:00
2026-02-01 17:06:33 +01:00
2017-01-07 22:35:09 +01:00
2022-06-10 20:40:08 +02:00
2023-10-29 14:48:11 +01:00
2026-08-31 13:59:46 +02:00
2026-08-21 21:57:51 +08:00
2026-08-17 15:02:49 +02:00
2026-08-17 15:02:49 +02:00
2026-08-25 11:59:19 +02:00
2023-11-20 21:12:13 +01:00
2025-12-11 18:22:38 +01:00
2025-12-11 18:22:38 +01:00
2024-08-28 20:46:36 +02:00
2025-07-14 23:14:06 +02:00
2023-10-29 14:48:11 +01:00
2023-10-29 14:48:11 +01:00
2023-10-29 14:48:11 +01:00
2026-05-27 23:29:27 +02:00
2025-11-21 21:26:43 +01:00
2026-08-27 19:35:11 +02:00
2026-07-03 15:52:41 +02:00
2026-07-04 10:13:39 +02:00
2026-08-31 00:44:23 +02:00
2023-10-29 14:48:11 +01:00
2026-07-09 22:13:39 +02:00
2026-05-08 06:50:13 +02:00
2020-06-01 19:21:41 +02:00
2026-08-28 22:26:18 +02:00
2025-11-25 12:49:23 +01:00
2025-10-13 13:47:06 +02:00
2026-08-17 15:02:49 +02:00
2024-12-27 19:42:18 +01:00
2026-06-14 22:35:06 +02:00
2026-08-26 18:01:06 +02:00
2025-07-14 23:15:44 +02:00
2026-08-26 12:12:51 +02:00
2026-08-25 11:59:19 +02:00
2026-08-03 12:15:44 +02:00
2026-08-17 15:02:49 +02:00
2026-08-25 11:59:19 +02:00
2025-12-11 18:22:38 +01:00
2026-06-08 09:00:00 +02:00
2026-01-23 22:50:00 +01:00
2026-04-02 07:19:43 +02:00
2026-06-14 22:35:06 +02:00
2026-06-25 23:20:34 +02:00
2021-01-12 09:36:51 +01:00
2026-03-07 07:39:57 +01:00
2026-08-27 19:35:11 +02:00
2026-08-28 20:03:14 +02:00
2026-08-31 09:30:12 +02:00
2026-01-09 13:10:04 +01:00
2026-06-14 22:35:06 +02:00
2026-08-17 15:02:49 +02:00
2026-08-31 13:59:46 +02:00
2026-07-03 15:52:41 +02:00
2026-08-31 09:30:12 +02:00
2026-06-08 09:00:00 +02:00
2026-06-29 18:24:49 +02:00
2026-08-27 19:35:11 +02:00
2023-12-15 08:13:25 +01:00
2026-06-24 21:58:51 +02:00
2025-11-13 21:31:24 +01:00
2023-10-29 14:48:11 +01:00
2023-10-29 14:48:11 +01:00
2025-12-11 18:22:38 +01:00
2026-08-30 16:25:13 +02:00
2023-10-29 14:48:11 +01:00
2024-08-12 15:33:26 +02:00
2023-04-17 20:55:22 +02:00
2025-04-03 12:54:00 +02:00
2026-08-31 10:53:14 +02:00
2023-08-06 14:26:21 +02:00
2026-08-17 15:02:49 +02:00
2025-09-24 06:29:57 +02:00
2026-06-14 22:35:06 +02:00
2022-08-24 09:44:16 +02:00
2026-01-16 12:19:17 +01:00
2023-10-29 14:48:11 +01:00
2025-04-12 08:39:11 +02:00
2026-08-31 09:30:12 +02:00
2026-08-17 15:02:49 +02:00
2026-06-11 23:49:50 +02:00
2018-05-27 19:19:12 +02:00
2026-02-10 13:21:35 +01:00
2023-10-29 14:48:11 +01:00
2026-08-17 15:02:49 +02:00
2024-09-03 09:19:52 +02:00
2023-07-02 22:36:05 +02:00
2026-08-17 15:02:49 +02:00
2023-10-29 14:48:11 +01:00
2025-04-12 08:39:11 +02:00
2026-08-17 15:02:49 +02:00
2023-08-10 14:26:40 +02:00
2020-09-11 01:04:07 +02:00
2026-02-10 00:04:11 +01:00
2026-08-17 15:02:49 +02:00
2026-08-25 11:59:19 +02:00
2026-08-11 22:27:49 +02:00
2026-08-25 11:59:19 +02:00
2025-12-11 18:22:38 +01:00
2026-08-17 15:02:49 +02:00
2026-08-26 08:40:57 +02:00
2026-08-25 11:59:19 +02:00
2025-12-11 18:22:38 +01:00
2026-08-27 19:35:11 +02:00
2026-08-17 15:02:49 +02:00
2025-12-11 18:22:38 +01:00
2026-08-25 11:59:19 +02:00
2026-08-29 14:40:46 +02:00
2022-12-11 16:58:50 +01:00
2026-08-17 15:02:49 +02:00
2026-08-25 11:59:19 +02:00
2026-08-25 11:59:19 +02:00
2026-08-28 22:33:20 +02:00
2026-08-28 22:31:58 +02:00
2025-12-26 21:59:38 +01:00
2026-06-13 10:17:44 +02:00
2026-08-17 15:02:49 +02:00
2026-08-17 15:02:49 +02:00
2026-06-24 21:58:51 +02:00
2025-07-18 08:44:36 +02:00
2024-04-10 14:41:16 +02:00
2023-08-10 14:26:40 +02:00
2026-08-30 21:10:49 +02:00
2026-08-30 15:43:14 +02:00
2026-08-25 11:59:19 +02:00
2026-03-30 15:09:11 +02:00
2026-08-25 11:59:19 +02:00
2026-08-30 15:43:14 +02:00
2023-10-29 14:48:11 +01:00
2026-08-03 12:02:29 +02:00
2026-08-17 15:02:49 +02:00
2023-12-12 16:54:50 +01:00
2026-06-13 07:04:17 +02:00
2026-03-09 11:59:12 +01:00
2026-08-17 15:02:49 +02:00
2023-08-10 14:26:40 +02:00
2024-04-10 14:41:16 +02:00
2026-08-17 15:02:49 +02:00
2026-08-17 15:02:49 +02:00
2026-08-25 11:59:19 +02:00
2023-12-25 07:12:54 +01:00