Decision: Implementation in Go

The ebk-find program will be rewritten from Python to Go.

The name of the program will be changed to “ebk-select” to reflect the use case, rather than the mechanism and its similarity to find, fzf, etc.

ebk-find will be archived once the reimplementation reaches feature parity.

Expected benefits

Benchmark results

The Python and Go versions were benchmarked on synthetic libraries in a range of sizes up to 50 000 books. The following plots show the execution time and peak memory usage of the last Python version (ebk-find v0.4.3) and two versions of ebk-select.

Resource usage of ebk-find and ebk-select

The initial Go implementation ran faster and used less memory than ebk-find, confirming that the reimplementation delivers the expected benefits.

The benchmarks were repeated after caching had been implemented in ebk-select. This showed further improvement in both time and memory use: even the largest of personal libraries can be now searched in less than 150 ms, while using less than 25 MiB.