As a response of https://blog.rust-lang.org/2018/12/06/call-for-rust-2019-roadmap-blogposts.html for tooling improvement. Nice to see rust improved so much these few years on productivity but I think there is room for improvement. This would be my first post about Rust after hanging around for quite some time.
cargo is a nice tool for Rust despite the confusion that it is being separated from
rustup (I did get confused by
rustup +nigthly doc), I think I have heard something about
rustup being merged into
cargo. Wait, continue on, I am not discussing that in this post.
4 working groups have been formed this year and some interesting library have been coming up. Most library in specific domain area are interesting but most of them come at the expense of setting up redundant code from scratch by reading the tutorial or guide such as rocket web framework.
This may be a good approach for beginners to get started but not for those who want to try out a framework or simply want get things bootstrapped fast. Hence, the rise of some repository that people could get online to bootstrap their project such as Rust-webpack-starter. The same goes to CLI working group and others.
As of today,
cargo provides two way to bootstrap a project. Either
cargo new --lib or
cargo new --bin even though there are previous attempt to fix this problem as in https://github.com/pwoolcoc/cargo-template. Looking from the standpoint of a huge package manager for
yarn), despite their success people still tries to implement similar function for easy update such as
ng update (from Angular).
Just maybe… the one proposed above looks quite interesting though. I wish that there are
cargo new --template=rocket for bootstrapping project and such that was maintain by the community maybe under a mono repository validated by the community (I forgot that crate)? Haven’t think much about that though. Maybe we would not stop just here yet, most projects took it further ahead.
What about automated scaffolding like
vue create or angular schematics? Could we make use of it to reduce build time dependencies. Here is a real world example, starting a project with
quicli but only utilizing
serde? Maybe just taking zero-cost ahead, reducing the compilation time and avoiding unnecessary installs.
If it were to be implemented, there are problems that would arise based on existing framework. Such as updating the current project for a template (as in Rust 2015 -> Rust 2018), maybe an integration with
rustfix would be nice so the transition may be smoother, some people might not know if they should add
edition = '2018' to
Cargo.toml or run
cargo fix first.
What about updating the project with the same template? When I was developing angular projects and trying to keep them up-to-date, the most often approach that I would use is that I create another new project and then diff both of them, then manually modify the base files.
Oh, I just noticed that cargo template have been removed from one of the issue after writing this article. Maybe this might not be the best to start from
cargo? Like similar approach to the rust project taken (inspired by
#[async]). Let it be a community crate for experimentation (or taking over the existing crate?).