<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Rust on Benny Simmonds</title>
    <link>https://www.bencode.io/tags/rust/</link>
    <description>Recent content in Rust on Benny Simmonds</description>
    <generator>Hugo -- 0.149.1</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 21 Aug 2022 19:41:44 +1100</lastBuildDate>
    <atom:link href="https://www.bencode.io/tags/rust/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Rust cheat sheet (2022)</title>
      <link>https://www.bencode.io/posts/rust/</link>
      <pubDate>Sat, 11 Dec 2021 22:21:47 +1100</pubDate>
      <guid>https://www.bencode.io/posts/rust/</guid>
      <description>&lt;p&gt;Please refer to Don Bright&amp;rsquo;s original &lt;a href=&#34;https://github.com/donbright/rust-lang-cheat-sheet&#34;&gt;rust-lang-cheat-sheet&lt;/a&gt; which I based much of this content off, as I work through &lt;a href=&#34;https://doc.rust-lang.org/book/&#34;&gt;The Book&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#rust-in-a-nutshell&#34;&gt;Rust in a nutshell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#documentation&#34;&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#toolchain&#34;&gt;Toolchain&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#mutability-basic&#34;&gt;Mutability basic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#types-and-variables&#34;&gt;Types and variables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#operators&#34;&gt;Operators&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#run-time-errors-crashing-panic-except-unwrap-option-result&#34;&gt;Run time errors, Crashing, panic, except, unwrap, Option, Result&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#printing&#34;&gt;Printing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#loop-while-and-for&#34;&gt;loop, while and for&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#concurrency-parallel-processing&#34;&gt;Concurrency, parallel processing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#functions-and-closures&#34;&gt;Functions and closures&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#unit-tests-integration-tests&#34;&gt;Unit tests, integration tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#documentation-1&#34;&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#if-conditionals-patterns-match-control-flow&#34;&gt;If, conditionals, patterns, match, control flow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#ownership-borrowing-references-lifetimes&#34;&gt;Ownership, Borrowing, References, Lifetimes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#arrays-slices-ranges&#34;&gt;Arrays, Slices, Ranges&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#structs&#34;&gt;Structs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#enums&#34;&gt;Enums&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#collections-key-value-pairs-sets&#34;&gt;Collections, Key-value pairs, Sets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#macros&#34;&gt;Macros&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#little-programs&#34;&gt;Little programs&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#guess-a-number&#34;&gt;Guess a number&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#cool-references&#34;&gt;Cool references&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;rust-in-a-nutshell&#34;&gt;Rust in a nutshell&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Syntax similar to C&lt;/li&gt;
&lt;li&gt;Ownership of memory enforced at compile time&lt;/li&gt;
&lt;li&gt;Statically linked&lt;/li&gt;
&lt;li&gt;Functional-ish, generic-ish, not so objecty&lt;/li&gt;
&lt;li&gt;Control flow using patterns, &lt;code&gt;match&lt;/code&gt; keyword&lt;/li&gt;
&lt;li&gt;Packages: &amp;lsquo;cargo&amp;rsquo; command, &lt;a href=&#34;https://crates.io&#34;&gt;https://crates.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Testing: cargo test, &lt;code&gt;#[test]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Concurrency: ownership, mutability, channels, mutex, crossbeam + Rayon packages&lt;/li&gt;
&lt;li&gt;Auto formatter: &lt;code&gt;rustfmt filename.rs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Compiler engine: LLVM&lt;/li&gt;
&lt;li&gt;Raw pointers, low level: &lt;code&gt;unsafe{}&lt;/code&gt; keyword&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;documentation&#34;&gt;Documentation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;rustup doc&lt;/code&gt; for offline docs!&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://doc.rust-lang.org/std/&#34;&gt;doc.rust-lang.org&lt;/a&gt; standard library, primitive types, standard macros&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.rs/&#34;&gt;docs.rs&lt;/a&gt; for package documentation&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;toolchain&#34;&gt;Toolchain&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ rustup.sh               &lt;span class=&#34;c1&#34;&gt;# install rust, see rust-lang.org for details&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cargo new myproj        &lt;span class=&#34;c1&#34;&gt;# start new executable project&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cargo new --bin myproj  &lt;span class=&#34;c1&#34;&gt;# as above&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cargo new --lib myproj  &lt;span class=&#34;c1&#34;&gt;# start new library project&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; myproj               &lt;span class=&#34;c1&#34;&gt;# cd into the new directory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ ls -lR                  &lt;span class=&#34;c1&#34;&gt;# list our skeleton of files&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;src/main.rs               &lt;span class=&#34;c1&#34;&gt;# main.rs, has main() entry point&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Cargo.toml                &lt;span class=&#34;c1&#34;&gt;# Cargo.toml defines packaging&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ &lt;span class=&#34;nv&#34;&gt;$EDITOR&lt;/span&gt; Cargo.toml      &lt;span class=&#34;c1&#34;&gt;# add dependencies and other details&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cargo build             &lt;span class=&#34;c1&#34;&gt;# downloads dependencies + builds main.rs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cargo build --release   &lt;span class=&#34;c1&#34;&gt;# release build&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cargo check             &lt;span class=&#34;c1&#34;&gt;# make sure code compiles, without binary outputs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cargo update            &lt;span class=&#34;c1&#34;&gt;# ignore Cargo.lock and figure out latest versions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cargo run               &lt;span class=&#34;c1&#34;&gt;# runs program created from main.rs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cargo doc --open        &lt;span class=&#34;c1&#34;&gt;# local web based doc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cargo &lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt;              &lt;span class=&#34;c1&#34;&gt;# runs tests (in parallel by default)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cargo &lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt; -- --test-threads&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# run tests one at a time&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cargo &lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt; -- --nocapture       &lt;span class=&#34;c1&#34;&gt;# run tests, show output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cargo run --example fundemo -- --argtodemo &lt;span class=&#34;c1&#34;&gt;# run example with argument&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ rustc --explain E0384   &lt;span class=&#34;c1&#34;&gt;# eli5 what an error code means&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;mutability-basic&#34;&gt;Mutability basic&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// all variable bindings are immutable by default
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// compile error: can&amp;#39;t change an immutable binding
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;mut&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// &amp;#34;mut&amp;#34; designates a binding as mutable
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// ok, mutable binding can change;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;types-and-variables&#34;&gt;Types and variables&lt;/h2&gt;
&lt;p&gt;Rust provide two compound types; arrays and tuples.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
