Few years back I took CS50 certificate course form Harvard University, that sparked my interest in compiled programming languages. The course mainly used C
Language to teach many programming concepts.
The course is available here if you are interested CS50’s Introduction to Computer Science
.
Recently I have started learning rust
programming language.
rust
is compiled statically typed, safe language that aims to catch many bugs at compile time,
according to their website:
Rust is a systems programming language that runs blazingly fast, prevents segfaults, and guarantees thread safety.
So far I have been learning the basics of rust
and it has been a great experience. I like the fact that the language takes very good reasonable defaults that are quite unique. i.e. all variables are immutable by default you will have to use mut
keyword if you need it to change in future
let name = "Unison";
name = "Unite"; // not allowed compile time error
let mut industry = "childcare";
industry = "Hospitality"; // fine to do
One of the unique and most powerful feature of rust
is its memory management by Ownership system. In short, there are three rules of rust Ownership.
- Each value in Rust has a variable that is called its owner.
- There can only be one owner at a time.
- When the owner goes out of scope, the value will be dropped.
for example
{
let v1 = String::from("hello"); // allocates memory on heap under the hood
let v2 = v1; // s1 no longer own the string, ownership has moved to s2
println!("{}, world!", v1); // compiler error here
} // v2 is dropped here and memory freed
println!("{}, world!", v2); // v2 is not valid anymore
rust
takes a radically different approach than C
when it comes to variables, pointers and memory management. More abut ownership and moves will be discussed in another post. In the mean time I will try to redo all the CS50 problem sets in rust
instead of C
.