detached abb6a3f

docs(readme): pin benchmark table to v0.1.2

commit
abb6a3f2c7982e140d530fcccea5d99109805c0b
author
brice · · 2026-10-10 07:23 UTC
parent
1e7884d
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
1 file · +9 -9
M README.md +9 -9
@@ -21,7 +21,7 @@ output.DP-1.scale = 1.5
2121 - **Safe for real configs**: atomic saves, symlinked dotfiles, editors that
2222 save by rename, missing directories, broken files that keep the last good
2323 config, and warnings that never print values (they may be secrets).
24-- **Fast**: about 750 MB/s to parse, 2 allocations per reported change
24+- **Fast**: about 1 GB/s to parse, 2 allocations per reported change
2525 (see [Performance](#performance)).
2626
2727 ```sh
@@ -110,23 +110,23 @@ skips saves that change no value.
110110
111111 ## Performance
112112
113-Measured at `v0.1.1` (`ebc8127`, 2026-10-10) with Go 1.27.1 on linux/amd64
114-with an AMD Ryzen 9 7900X3D. Values are medians of 6 runs. The input is a
113+Measured at `v0.1.2` (`1e7884d`, 2026-10-10) with Go 1.27.1 on linux/amd64
114+with an AMD Ryzen 9 7900X3D. Values are medians of 10 runs. The input is a
115115 realistic ~2.9 KB config of 100 lines with comments, 60 binds and 8 outputs.
116116
117117 | Benchmark | Time/op | Throughput | Bytes/op | Allocs/op |
118118 |---|---:|---:|---:|---:|
119-| `Parse` (file to entries) | 3.9 µs | 744 MB/s | 10.4 KiB | 5 |
120-| `Unmarshal` (file to struct, maps included) | 12.2 µs | 238 MB/s | 21.7 KiB | 47 |
121-| `Decode` (5 scalar entries) | 171 ns | | 112 B | 1 |
122-| `Marshal` (struct to file) | 11.6 µs | | 15.5 KiB | 19 |
123-| `Set` (edit one key in place) | 2.5 µs | | 10.5 KiB | 5 |
119+| `Parse` (file to entries) | 2.9 µs | 992 MB/s | 7.0 KiB | 2 |
120+| `Unmarshal` (file to struct, maps included) | 8.3 µs | 351 MB/s | 13.4 KiB | 16 |
121+| `Decode` (5 scalar entries) | 173 ns | | 112 B | 1 |
122+| `Marshal` (struct to file) | 8.6 µs | | 6.8 KiB | 10 |
123+| `Set` (edit one key in place) | 2.6 µs | | 10.5 KiB | 5 |
124124 | `Watch` (one write to one report, inotify) | 5.3 µs | | 256 B | 2 |
125125
126126 Reproduce with:
127127
128128 ```sh
129-go test -run '^$' -bench . -benchmem -count 6 .
129+go test -run '^$' -bench . -benchmem -count 10 .
130130 ```
131131
132132 ## License
@@ -21,7 +21,7 @@ output.DP-1.scale = 1.5
21 - **Safe for real configs**: atomic saves, symlinked dotfiles, editors that21 - **Safe for real configs**: atomic saves, symlinked dotfiles, editors that
22 save by rename, missing directories, broken files that keep the last good22 save by rename, missing directories, broken files that keep the last good
23 config, and warnings that never print values (they may be secrets).23 config, and warnings that never print values (they may be secrets).
24-- **Fast**: about 750 MB/s to parse, 2 allocations per reported change24+- **Fast**: about 1 GB/s to parse, 2 allocations per reported change
25 (see [Performance](#performance)).25 (see [Performance](#performance)).
26 26
27 ```sh27 ```sh
@@ -110,23 +110,23 @@ skips saves that change no value.
110 110
111 ## Performance111 ## Performance
112 112
113-Measured at `v0.1.1` (`ebc8127`, 2026-10-10) with Go 1.27.1 on linux/amd64113+Measured at `v0.1.2` (`1e7884d`, 2026-10-10) with Go 1.27.1 on linux/amd64
114-with an AMD Ryzen 9 7900X3D. Values are medians of 6 runs. The input is a114+with an AMD Ryzen 9 7900X3D. Values are medians of 10 runs. The input is a
115 realistic ~2.9 KB config of 100 lines with comments, 60 binds and 8 outputs.115 realistic ~2.9 KB config of 100 lines with comments, 60 binds and 8 outputs.
116 116
117 | Benchmark | Time/op | Throughput | Bytes/op | Allocs/op |117 | Benchmark | Time/op | Throughput | Bytes/op | Allocs/op |
118 |---|---:|---:|---:|---:|118 |---|---:|---:|---:|---:|
119-| `Parse` (file to entries) | 3.9 µs | 744 MB/s | 10.4 KiB | 5 |119+| `Parse` (file to entries) | 2.9 µs | 992 MB/s | 7.0 KiB | 2 |
120-| `Unmarshal` (file to struct, maps included) | 12.2 µs | 238 MB/s | 21.7 KiB | 47 |120+| `Unmarshal` (file to struct, maps included) | 8.3 µs | 351 MB/s | 13.4 KiB | 16 |
121-| `Decode` (5 scalar entries) | 171 ns | | 112 B | 1 |121+| `Decode` (5 scalar entries) | 173 ns | | 112 B | 1 |
122-| `Marshal` (struct to file) | 11.6 µs | | 15.5 KiB | 19 |122+| `Marshal` (struct to file) | 8.6 µs | | 6.8 KiB | 10 |
123-| `Set` (edit one key in place) | 2.5 µs | | 10.5 KiB | 5 |123+| `Set` (edit one key in place) | 2.6 µs | | 10.5 KiB | 5 |
124 | `Watch` (one write to one report, inotify) | 5.3 µs | | 256 B | 2 |124 | `Watch` (one write to one report, inotify) | 5.3 µs | | 256 B | 2 |
125 125
126 Reproduce with:126 Reproduce with:
127 127
128 ```sh128 ```sh
129-go test -run '^$' -bench . -benchmem -count 6 .129+go test -run '^$' -bench . -benchmem -count 10 .
130 ```130 ```
131 131
132 ## License132 ## License

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 1

Tags 3

↑↓ moveenter openesc close