{"id":6800,"date":"2020-08-26T08:31:22","date_gmt":"2020-08-26T06:31:22","guid":{"rendered":"https:\/\/blog.via-internet.de\/?p=6800"},"modified":"2024-05-15T09:15:54","modified_gmt":"2024-05-15T07:15:54","slug":"rust-get-started","status":"publish","type":"post","link":"https:\/\/via-internet.de\/blog\/2020\/08\/26\/rust-get-started\/","title":{"rendered":"Rust | Getting Started"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2024\/05\/Learning-Rust-in-7-Days.webp\" alt=\"\" class=\"wp-image-10217\" srcset=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2024\/05\/Learning-Rust-in-7-Days.webp 1024w, https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2024\/05\/Learning-Rust-in-7-Days-300x300.webp 300w, https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2024\/05\/Learning-Rust-in-7-Days-150x150.webp 150w, https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2024\/05\/Learning-Rust-in-7-Days-768x768.webp 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"introduction\">Introduction<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">From <a href=\"https:\/\/en.wikipedia.org\/wiki\/Rust_(programming_language)\">Wikipedia<\/a>, the free encyclopedia:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Rust<\/strong>\u00a0is a\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Multi-paradigm_programming_language\">multi-paradigm<\/a>\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Programming_language\">programming language<\/a>\u00a0focused on\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Computer_performance\">performance<\/a>\u00a0and\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Memory_safety\">safety<\/a>, especially safe\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Concurrency_(computer_science)\">concurrency<\/a>. Rust is\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Syntax_(programming_languages)\">syntactically<\/a>\u00a0similar to\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/C%2B%2B\">C++<\/a>,\u00a0and provides\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Memory_safety\">memory safety<\/a>\u00a0without using\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Garbage_collection_(computer_science)\">garbage collection<\/a>.<\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Rust was originally designed by Graydon Hoare at\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Mozilla\">Mozilla<\/a>\u00a0Research.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It has gained increasing use in industry and is now Microsoft&#8217;s language of choice for secure and safety-critical software components.<\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Rust has been the &#8220;most loved programming language&#8221; in the\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Stack_Overflow\">Stack Overflow<\/a>\u00a0Developer Survey every year since 2016.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Rust could be used in different areas<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/rustwasm.github.io\/docs\/book\/\">Web Assembly<\/a><\/li>\n\n\n\n<li>Embedded Programming<\/li>\n\n\n\n<li>Command Line Utilities<\/li>\n\n\n\n<li>Operating System Developmend (see <a href=\"https:\/\/www.redox-os.org\/\" data-type=\"URL\" data-id=\"https:\/\/www.redox-os.org\/\">Redox OS<\/a>)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"read-more\">Read more<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>On Stack Overflow : <a href=\"https:\/\/stackoverflow.blog\/2020\/01\/20\/what-is-rust-and-why-is-it-so-popular\/#:~:text=With%20direct%20access%20to%20hardware,system%20kernels%20or%20microcontroller%20applications.\">What is Rust and why is it so popular?<\/a><\/li>\n\n\n\n<li>Awesome Lists of Rust Examples:\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/rust-unofficial\/awesome-rust\" target=\"_blank\" rel=\"noreferrer noopener\">rust-unofficial\/awesome-rust<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/not-yet-awesome-rust\/not-yet-awesome-rust\" target=\"_blank\" rel=\"noreferrer noopener\">not-yet-awesome-rust\/not-yet-awesome-rust<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/phoenixenero\">phoenixenero<\/a>\/<a href=\"https:\/\/github.com\/phoenixenero\/awesome-rust\">awesome-rust<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"installation\">Installation<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"rustup\">Rustup<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Download install script and run it<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">curl --proto '=https' --tlsv1.2 -sSf https:\/\/sh.rustup.rs | sh<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Modify .bashrc to add Rust path to PATH<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">source $HOME\/.cargo\/env<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"other-way-to-install-rust-on-macos\">Other way to install Rust on MacOS<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">brew install rust<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"create-and-run-your-first-app\">Create and run your first App<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"create-the-app\">Create the app<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ cargo new hello_world\n$ cd hello_world<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"show-folder-structure\">Show folder structure<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ tree .\n.\n\u251c\u2500\u2500 Cargo.lock\n\u251c\u2500\u2500 Cargo.toml\n\u2514\u2500\u2500 src\n    \u2514\u2500\u2500 main.rs<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">1 directory, 3 files<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"show-main-source-file\">Show main source file<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"rust\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">fn main() {\n    println!(\"Hello, world!\");\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"build-your-app\">Build your app<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ cargo build\nCompiling hello_world v0.1.0 (...\/hello_world)\nFinished dev [unoptimized + debuginfo] target(s) in 6.32s<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Or build a production ready version<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ cargo build --release&lt;br>Finished release [optimized] target(s) in 0.19s<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"run-your-app\">Run your app<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ cargo run\nFinished dev [unoptimized + debuginfo] target(s) in 0.04s\nRunning `target\/debug\/hello_world\nHello, world!<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"add-functionality-to-your-app\">Add functionality to your app<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"add-dependencies\">Add Dependencies<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Let\u2019s add a dependency to our application. You can find all sorts of libraries on&nbsp;<a href=\"https:\/\/crates.io\/\">crates.io<\/a>, the package registry for Rust. In Rust, we often refer to packages as \u201ccrates.\u201d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this project, we\u2019ll use a crate called&nbsp;<a href=\"https:\/\/crates.io\/crates\/ferris-says\"><code>ferris-says<\/code><\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In our&nbsp;<code>Cargo.toml<\/code>&nbsp;file we\u2019ll add this information (that we got from the crate page):<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"rust\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">[dependencies]\nferris-says = \"0.1\"<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"modify-main-source\">Modify main source<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Now let\u2019s write a small application with our new dependency. In our&nbsp;<code>main.rs<\/code>, add the following code:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"rust\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">use ferris_says::say; \/\/ from the previous step\nuse std::io::{stdout, BufWriter};\n\nfn main() {\n    let stdout = stdout();\n    let message = String::from(\"Hello fellow Rustaceans!\");\n    let width = message.chars().count();\n\n    let mut writer = BufWriter::new(stdout.lock());\n    say(message.as_bytes(), width, &amp;mut writer).unwrap();\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"run-app\">Run App<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ cargo build\n    Updating crates.io index\n  Downloaded object v0.20.0\n  Downloaded textwrap v0.11.0\n  Downloaded adler v0.2.3\n  Downloaded ansi_term v0.11.0\n  Downloaded miniz_oxide v0.4.1\n  Downloaded gimli v0.22.0\n  Downloaded strsim v0.8.0\n  Downloaded error-chain v0.10.0\n  Downloaded vec_map v0.8.2\n  Downloaded clap v2.33.3\n  Downloaded smallvec v0.4.5\n  Downloaded ferris-says v0.1.2\n  Downloaded backtrace v0.3.50\n  Downloaded rustc-demangle v0.1.16\n  Downloaded addr2line v0.13.0\n  Downloaded 15 crates (1.4 MB) in 1.65s\n   Compiling libc v0.2.76\n   Compiling bitflags v1.2.1\n   Compiling gimli v0.22.0\n   Compiling adler v0.2.3\n   Compiling rustc-demangle v0.1.16\n   Compiling unicode-width v0.1.8\n   Compiling object v0.20.0\n   Compiling cfg-if v0.1.10\n   Compiling strsim v0.8.0\n   Compiling vec_map v0.8.2\n   Compiling ansi_term v0.11.0\n   Compiling smallvec v0.4.5\n   Compiling textwrap v0.11.0\n   Compiling miniz_oxide v0.4.1\n   Compiling addr2line v0.13.0\n   Compiling atty v0.2.14\n   Compiling backtrace v0.3.50\n   Compiling clap v2.33.3\n   Compiling error-chain v0.10.0\n   Compiling ferris-says v0.1.2\n   Compiling hello_world v0.1.0 (...\/hello_world)\n    Finished dev [unoptimized + debuginfo] target(s) in 14.73s<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Run your app<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ cargo run\n     Finished dev [unoptimized + debuginfo] target(s) in 0.14s\n       Running`target\/debug\/hello_world`<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">----------------------------\n| Hello fellow Rustaceans! |\n----------------------------\n              \\\n               \\\n                  _~^~^~_\n              \\) \/  o o  \\ (\/\n                '_   -   _'\n                \/ '-----' \\<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"next-steps\">Next steps<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Read <a href=\"https:\/\/www.rust-lang.org\/learn\/get-started\">Getting Started<\/a> on rust homepage<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Explore <a href=\"https:\/\/www.rust-lang.org\/learn\">Learn Rust<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"next-readings\">Next Readings<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/blog.rust-lang.org\">https:\/\/blog.rust-lang.org<\/a><\/li>\n\n\n\n<li>https:\/\/blog.rust-lang.org\/inside-rust\/<\/li>\n\n\n\n<li><a href=\"https:\/\/doc.rust-lang.org\/book\/\">https:\/\/doc.rust-lang.org\/book\/<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doc.rust-lang.org\/rust-by-example\/\">https:\/\/doc.rust-lang.org\/rust-by-example\/<\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Readings<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/rust-lang\/book\">https:\/\/github.com\/rust-lang\/book<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/rust-lang\/rustlings\/\">https:\/\/github.com\/rust-lang\/rustlings\/<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/rust-cli\/book\">https:\/\/github.com\/rust-cli\/book<\/a><\/li>\n\n\n\n<li>https:\/\/github.com\/rust-unofficial\/awesome-rust<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Exercises<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/exercism.org\/tracks\/rust\">https:\/\/exercism.org\/tracks\/rust<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Introduction From Wikipedia, the free encyclopedia: Rust\u00a0is a\u00a0multi-paradigm\u00a0programming language\u00a0focused on\u00a0performance\u00a0and\u00a0safety, especially safe\u00a0concurrency. Rust is\u00a0syntactically\u00a0similar to\u00a0C++,\u00a0and provides\u00a0memory safety\u00a0without using\u00a0garbage collection. Rust was originally designed by Graydon Hoare at\u00a0Mozilla\u00a0Research. It has gained increasing use in industry and is now Microsoft&#8217;s language of choice for secure and safety-critical software components. Rust has been the &#8220;most loved programming language&#8221; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":8391,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[68],"tags":[],"class_list":["post-6800","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-rust"],"jetpack_featured_media_url":"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/08\/rust-cookbook-1.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/posts\/6800","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/comments?post=6800"}],"version-history":[{"count":5,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/posts\/6800\/revisions"}],"predecessor-version":[{"id":10218,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/posts\/6800\/revisions\/10218"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/media\/8391"}],"wp:attachment":[{"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/media?parent=6800"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/categories?post=6800"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/tags?post=6800"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}