From e375574aad9db5732cbc5d273283e018b59b4cf4 Mon Sep 17 00:00:00 2001 From: Brian McGee Date: Fri, 3 May 2024 14:15:08 +0100 Subject: [PATCH] doc: explain re-write in Go Signed-off-by: Brian McGee --- README.md | 44 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 7497710..1d20970 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,29 @@ time you switch between projects or call them manually. Formatting requires less effort if a universal formatter for multiple languages, which is also project-specific, is in place. +## Moving from Rust To Go + +You may be familiar with [Version 1], which is written in [Rust]. So, why re-write it in [Go]? + +Ultimately, `treefmt` is spending most of it's time shelling out calls to the underlying formatters. This process is +just as fast/performant in [Go] as it is in [Rust]. + +The remaining tasks are processing some cli args and parsing a config file. Do we really need something as _heavy duty_ +as [Rust] for that? + +Despite all this, you can make good, sane arguments for continuing with [Version 1] in [Rust] instead of a re-write. +So here's a _bad argument_. + +> Not everything has to be written in [Rust] + +[Brian] wanted to improve performance by moving away from a [Toml] cache file, introduce pipelines for applying multiple +formatters against the same file set, and add an extensible approach for how `treefmt` walks file systems. He knows [Go] +much better than [Rust]. + +[zimbatm] thought it was a good idea too. + +So here we are :shrug:. + ## About treefmt `treefmt` runs all your formatters with one command. It’s easy to configure and fast to execute. @@ -34,17 +57,17 @@ Its main features are: - **Providing a unified CLI and output** - You don’t need to remember which formatters are necessary for each project. - Once you specify the formatters in the config file, you can trigger all of them with one command and get a + - Once you specify the formatters in the config file, you can trigger all of them with one command and get a standardized output. - **Running all the formatters in parallel** - - A standard script loops over your folders and runs each formatter - consequentially. In contrast, `treefmt` runs formatters in parallel. This way, the formatting job takes less time. + - A standard script loops over your folders and runs each formatter sequentially. + - In contrast, `treefmt` runs formatters in parallel. This way, the formatting job takes less time. - **Tracking file changes** - - When formatters are run in a script, they process all the files they encounter, no matter - whether the code has changed. This unnecessary work can be eliminated if only the changed files are formatted. - `treefmt` caches the changed files and marks them for re-formatting. + - When formatters are run in a script, they process all the files they encounter, regardless of whether or not + they have changed. + - `treefmt` tracks file changes, and only attempts to format files which have changed. -To reformat the whole source tree, just type `treefmt` in any folder. This is a fast and simple formatting solution. +> To reformat the whole source tree, just type `treefmt` in any folder. This is a fast and simple formatting solution. ## Installation @@ -153,3 +176,10 @@ Source projects: Unless explicitly stated otherwise, any contribution intentionally submitted for inclusion will be licensed under the [MIT license](LICENSE.md) without any additional terms or conditions. + +[Brian]: https://github.com/brianmcgee +[zimbatm]: https://github.com/zimbatm +[Version 1]: https://github.com/numtide/treefmt +[Rust]: https://www.rust-lang.org/ +[Go]: https://go.dev/ +[Toml]: https://toml.io/en/ \ No newline at end of file