Minimum Supported Rust Version
## What
Once Cuprate stabilizes, we should set a Minimum Supported Rust Version (MSRV) and `#![deny]` code using future features.

An initial CI failure on a MSRV violation would start a discussion if that particular situation is worth upgrading for. 

The benefit would be that older toolchains would be able to compile Cuprate.

For context, the current Rust version on [Debian stable is `1.63.0`](https://packages.debian.org/bookworm/rust-all).

[`Rust 2024`](https://blog.rust-lang.org/inside-rust/2022/04/04/lang-roadmap-2024.html) which is soon approaching is bound to contain many changes, but that may be a topic for another time.

## Current
As of `2023-12-16` on commit 34dd105a0c585dc34ba0a1ace625663bde00a1dc the effective MSRV is `1.74.0` caused by [`monero-serai v0.1.4-alpha`](https://github.com/cuprate/serai.git?rev=4a5d860#4a5d8601).

This can be checked with [`cargo msrv`](https://github.com/foresterre/cargo-msrv). 

## Version Candidates
This list will be updated to contain versions that could be considered for usage as Cuprate's MSRV, ending at the current minimum effective MSRV.

Features of interest that could be used in Cuprate are also listed per version, bolded means very applicable in Cuprate's case.

Rust changes can be viewed in the [release changelogs](https://github.com/rust-lang/rust/releases) or on [`releases.rs`](https://releases.rs/docs/1.75.0).

#### [`1.76.0 (February 8, 2024)`](https://releases.rs/docs/1.76.0)
- Stabilize C string literals (`c"this_is_a_cstr"`)

#### [`1.75.0 (December 23, 2023)`](https://releases.rs/docs/1.75.0)
- **Stabilize `async fn` and return-position `impl Trait` in trait**
- Windows: Support sub-millisecond sleep
- Allow partially moved values in `match`

#### [`1.74.0 (November 16, 2023)`](https://releases.rs/docs/1.74.0)
- impl Step for IP addresses
- Stabilize the `Saturating` type