Rust vs C++
Package Manager
Cargo is Rust’s build system and package manager, https://crates.io/ is the registry.
C++ does not have an official package manager.
Standard Library
Both have a standard library, and used like std::
Memory Safety
Rust provides memory safety without using garbage collection: it uses a system of ownership, which enforces and improves its memory safety across the board. It essentially removes the need for any manual memory management procedures. Rust supplies the built-in features for management procedures while C++ leaves that to you.
Recent updates to C++ has had new features like RAII (Resource Acquisition is Initialization) to get rid of manual memory management.
Pointers and references
- C++:
std::shared_ptrandstd::unique_ptrcan be used like smart pointers.std::unique_ptr<T>is similar to Rust'sBox<T>
- Rust:
- has several smart pointers in its standard library, like the reference counting smart pointer type.
- does not allow null or dangling pointers.
- "borrow" = reference (e.g.
r = &n), the word "borrow" signifies that it does not own the variable.- mutable:
let r = &mut n - immutable:
let r = &n
- mutable:
Lifetime and Scope
Lifetime vs Scope
- Scope: compile time concept, the block in which an identifier is defined.
- Lifetime: run time concept, the sequence of instruction executions.
Lifetime issues can be detected at compile time in Rust, e.g. Rust compiler will capture this use after move error:
let r;
{
let n = 1;
// r is a reference of n.
r = &n;
}
// n is destroyed.
print!("{}", *r)
// Compiler error: `n` does not live long enough
While in C++ it can compile but can cause unpredicatable result at run-time.
int* r;
{
int n = 1;
r = &n;
}
cout << *r;
use and using
Rust use is similar to C++ using.
Strings
- Rust:
- immutable string:
let a: &str = "abcd" - mutable string:
let mut a: String = "abcd".to_string();
- immutable string:
- C++:
- immutable string:
- with const:
const std::string - string view:
std::string_view
- with const:
- mutable string:
std::string
- immutable string:
Rust &str is not a normal reference, it is a pointer plus a length. The pointer points to the beginning of the string buffer, length is the num of bytes (similar to C++ std::string_view). To get the size of &str: size_of_val(&&a).
Collections
| C++ | Rust |
|---|---|
array<T> |
[T] |
vector<T> |
Vec<T> |
stack<T> |
~ Vec<T> |
deque<T> |
VecDeque<T> |
queue<T> |
~ VecDeque<T> |
list<T> |
LinkedList<T> |
forward_list<T> |
~ LinkedList<T> |
priority_queue<T> |
BinaryHeap<T> |
set<T> |
BTreeSet<T> |
multiset<T> |
~ BTreeMap<T, u32> |
map<K,V> |
BTreeMap<K,V> |
unordered_set<T> |
HashSet<T> |
unordered_map<K,V> |
HashMap<K,V> |
- 32-bit vs 64-bit
- AES vs RSA
- Agent vs Agentless
- Annotations vs Decorators
- Terraform vs Ansible
- BASH vs ZSH
- BigQuery vs Bigtable
- Block Storage vs File Storage vs Object Storage
- Canvas vs SVG
- cgroupfs vs systemd
- Constructor vs Init() vs Factory
- Container Image vs Helm Chart vs OCI Bundle
- Containers vs Virtual Machines (VMs)
- C vs C++
- Java vs C++
- Rust vs C++
- crictl vs ctr
- Dagger vs Guice
- DMA vs RDMA
- DOM vs Virtual DOM vs Shadow DOM
- DQL vs DDL vs DCL vs DML
- eBPF vs Sidecar
- Flux vs Redux
- Full Disk Encryption vs Partition Encryption
- Gatekeeper vs OPA
- Google vs Open Source
- Why MCP uses JSON-RPC 2.0 instead of grpc
- gRPC vs OpenAPI
- gtag.js vs Google Tag Manager (GTM)
- Versus
- Kotlin vs Java
- Jetty vs Netty
- .js vs .jsx vs .ts vs .tsx
- Kata Containers vs KubeVirt
- Linux Namespace vs Kubernetes Namespace
- Linux vs BSD
- LLVM vs JVM
- Data Mining vs Machine Learning vs Artificial Intelligence vs Data Science
- Managed Kubernetes vs Self-managed Kubernetes
- Management Plane vs Control Plane vs Data Plane
- Microcontroller vs Microprocessor vs Computer
- MMU vs IOMMU
- Single-tenant vs Multi-tenant vs Multi-single-tenant
- Multithreading vs Multiprocessing vs Distributed Systems
- Node.js vs Erlang
- OCI Image vs Docker Image
- OCI vs CRI
- OpenSSH vs OpenSSL
- Pass-by-value vs Pass-by-reference
- Podman vs nerdctl
- POSIX vs SUS vs LSB
- Private Key vs Public Key vs Certificate
- Proto Edition 2024 vs Proto Edition 2023
- Proto2 vs Proto3 vs Proto Editions
- Message Queue vs PubSub
- React vs Flutter vs Angular
- REST vs SOAP
- RSA vs ECDSA
- select vs. poll vs. epoll
- SLI vs SLO vs SLA
- Spanner vs Bigtable
- Static Site Generation vs Server-side Rendering vs Client-side Rendering
- Stack based VM vs Register based VM
- Stateless vs Stateful
- Strong Consistency vs Eventual Consistency
- stubs vs mocks vs fakes
- Subroutines vs Coroutines vs Generators
- Software Engineer vs Site Reliability Engineer
- Symlinks vs Hard Links
- JAX vs Tensorflow
- Tensorflow vs PyTorch
- Terminal vs Shell
- Throttling vs Load Shedding
- Unix Domain Sockets vs Network Sockets
- Unix Domain Sockets vs Shared Memory
- URI vs URN vs URL vs URC
- Valkey vs Redis vs Memcached
- Vi vs Vim vs gVim vs Neovim
- WAL vs rollback journal

