-
cloud-native applications must have high availability (distributed), and handle dynamic workloads (elastic)
-
TDD and CI will be important
-
type system should make undesirable states difficult or impossible to represent
-
code must be expressive enough to solve the problem, but flexible enough to be allowed to evolve; run first, optimise later
- installation, tooling, CI
- inner development loop: write, compile, run, test
-
faster linking with lld:
# Arch: `sudo pacman -S lld clang` # Cargo.toml [target.x86_64-unknown-linux-gnu] rustflags = ["-C", "linker=clang", "-C", "link-arg=-fuse-ld=lld"]
-
project watcher:
cargo install cargo-watch cargo watch -x test -x run
-
code coverage:
cargo install cargo-tarpaulin cargo tarpaulin --ignore-tests
-
linting:
rustup component add clippy cargo clippy cargo clippy -- -D warnings
-
formatting:
rustup component add rustfmt cargo fmt cargo fmt -- --check
-
security:
cargo install cargo-audit cargo audit
-
"Production environments [focus on] running our software to make it available to our users. Anything that is not strictly related to that goal is either a waste of resources, at best, or a security liability, at worst."
-
Virtualisation (Docker) allows you to use a self-contained environment and get away with saying "it works on my machine" when you deploy. Hosting (DigitalOcean) lets you actually deploy the thing.