4 ms·
Projects like this have to update frequently, having a mechanism like npm or pip or whatever to automatically handle that is probably easier. It's not like the
by qsort 1y ago
Projects like this have to update frequently, having a mechanism like npm or pip or whatever to automatically handle that is probably easier. It's not like the program is doing heavy lifting anyway, unless you're committing outright programming felonies there shouldn't be any issues on modern hardware.
It's the only argument I can think of, something like Go would be goated for this use case in principle.
- ZeroCool2u 1y agoI feel like Cargo or Go Modules can absolutely do the same thing as the mess of build scripts they have in this repo perfectly well and arguably better.
- koakuma-chan 1y agoIf you use Node.js your program is automatically too slow for a CLI, no matter what it actually does.
- frollogaston 1y agoSo are you saying the Gemini CLI is too slow, and Rust would remedy that?
- koakuma-chan 1y agoYes
- wiseowise 1y agoIf you even sneeze into performance discussion without providing benchmarks first – you’re a tool.
- koakuma-chan 1y agoYou don't have to believe me if you don't want to. But I strongly advise everyone who still uses prettier to try a formatter written in Rust, for example dprint. It's a world of difference.
- frollogaston 1y agoIf you told me the Rust-based code linter runs 10X faster, I'd believe it, but it wouldn't matter even if it were 100X.
- masklinn 1y ago> having a mechanism like npm or pip or whatever to automatically handle that is probably easier Re-running `cargo install <crate>` will do that. Or install `cargo-update`, then you can bulk update everything. And it works hella better than using pip in a global python install (you really want pipx/uvx if you're installing python utilities globally). IIRC you can install Go stuff with `go install`, dunno if you can update via that tho.
- StochasticLi 1y agoThis whole thread is a great example of the developer vs. user convenience trade-off. A single, pre-compiled binary is convenient for the user's first install only.
- masklinn 1y agoUnless you build self-updating in, which Google certainly has experience in, in part to avoid clients lagging behind. Because aside from being a hindrance (refusing to start and telling the client to update) there's no way you can actually force them to run an upgrade command.
- MobiusHorizons 1y agoHow so? Doesn’t it also make updates pretty easy? Have the precompiled binary know how to download the new version. Sure there are considerations for backing up the old version, but it’s not much work, and frees you up from being tied to one specific ecosystem
- wiseowise 1y agoNo, it doesn’t. At work everything is locked down and you either need to have separate mechanism to deliver updates or use pip.
- berkes 1y agoThat's not an argument against the difficulty of "updating a binary file" vs "updating via pip", it's merely addressing what your work deems important and possible. (Aside from the fact that allowing "use pip" completely defeats the purpose of any other of these mechanisms, so it's a poster-child example of security-theater)
- mpeg 1y agoYou'd think that, but a globally installed npm package is annoying to update, as you have to do it manually and I very rarely need to update other npm global packages so at least personally I always forget to do it.
- drewbitt 1y agoI used to also have outdated versions until I used mise. `mise use -g npm:@google/gemini-cli` and now `mise up` will update it. cargo, pip etc too.
- frollogaston 1y agoI don't think that's the main reason. Just installed this and peaked in node_nodules. There are a lot of random deps, probably for the various local capabilities, and it was probably easier to find those libs in the Node ecosystem than elsewhere. Also, react-reconciler caught my eye. Apparently that's a dependency of ink, which lets you write text-based UIs in React. That and opentelemetry, whatever the heck that is
- js2 1y agoBuild updating into the tool. e.g. uv self update yt-dlp --update etc.