Chapter 0103 done

This commit is contained in:
Xavier Brinon 2024-02-11 17:20:22 +00:00
parent 27287dead0
commit 1492157392
3 changed files with 132 additions and 7 deletions

View File

@ -0,0 +1,13 @@
[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"
authors = ["HaQadosch Berraka <haqadosch+rust@pm.me>"]
description = "displays hello world"
documentation = "./docs/ref.org"
readme = "./docs/readme.org"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

View File

@ -0,0 +1,3 @@
fn main() {
println!("Hello, world!");
}

View File

@ -1,3 +1,6 @@
:PROPERTIES:
:header-args:shell: :results output
:END:
#+title: RustBook
#+author: HaQadosch Berraka
#+date: [2024-02-09 Fri]
@ -8,7 +11,7 @@
* Getting Started
** Chapter 01: Installation
Recommendation is to use ~rustup~ using the command:
Recommendation is to use *rustup* using the command:
#+name: install rustup
#+begin_src shell
curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
@ -23,18 +26,16 @@ To confirm it's installed:
#+RESULTS: confirm rustup installed
: rustup 1.26.0 (5af9b9484 2023-04-05)
*** Update
To update ~rustup~ and please do regularly
To update *rustup* and please do regularly
#+name: update rustup
#+begin_src shell :results output
rustup update
#+end_src
#+RESULTS: update rustup
:
: stable-x86_64-unknown-linux-gnu unchanged - rustc 1.76.0 (07dca489a 2024-02-04)
:
: stable-x86_64-unknown-linux-gnu unchanged - rustc 1.76.0 (07dca489a 2024-02-04)
*** Documentation
~rustup~ comes with documentation, just type
*rustup* comes with documentation, just type
#+begin_src shell
rustup doc
#+end_src
@ -67,10 +68,118 @@ To execute this program:
#+RESULTS: 0102 call main
: Hello, World!
The program wordes, I'm now done.
The program works, I'm now done.
*** Note
All rust program starts by calling the function ~main~.
Functions with ~!~ appended to their name, like ~println!~, are macros.
** Chapter 03: Hello, Cargo!
:PROPERTIES:
:header-args:shell: :dir ./Projects/hello_cargo :results output
:END:
Make sure *Cargo* is installed
#+name: cargo version
#+begin_src shell
cargo --version
#+end_src
#+RESULTS: cargo version
: cargo 1.76.0 (c84b36747 2024-01-18)
*** New project with *Cargo*
#+name: new cargo
#+begin_src shell
cargo new Projects/hello_cargo
tree Projects/hello_cargo
#+end_src
#+RESULTS: new cargo
: Projects/hello_cargo
: ├── Cargo.toml
: └── src
: └── main.rs
:
: 2 directories, 2 files
*Cargo* creates:
- a directory with the project name given,
- and a project with the same name
The *Cargo* configuration file =Cargo.toml= in the root folder and
the projcet code in the =src/= directiory is what makes it a *Rust* project.
*** Building with Cargo
From the root folder, run
#+name: buiild cargo
#+begin_src shell
cargo build
#+end_src
#+RESULTS: buiild cargo
This will create a =Cargo.lock= file in the root directory, and
an executable in =src/target/debug/hello_cargo=.
Which means you can display the text "hello, World!" by calling directly the file
#+name: direct call
#+begin_src shell
./target/debug/hello_cargo
#+end_src
#+RESULTS: direct call
: Hello, world!
*** Running a cargo
You can both build and run the program with
#+name: run hello_cargo
#+begin_src shell
cargo run
#+end_src
#+RESULTS: run hello_cargo
: Hello, world!
*** Checking a cargo
*Cargo* can check if the program can compile. It doesn't execute it.
#+name: check hello_cargo
#+begin_src shell
cargo check
#+end_src
#+RESULTS: check hello_cargo
: Finished dev [unoptimized + debuginfo] target(s) in 0.01s
: [ Babel evaluation exited with code 0 ]
*** Releasing a cargo
To build a cargo with an optimised build, run
#+name: release hello_cargo
#+begin_src shell
cargo build --release
tree
#+end_src
#+RESULTS: release hello_cargo
#+begin_example
.
├── Cargo.lock
├── Cargo.toml
├── src
│   └── main.rs
└── target
├── CACHEDIR.TAG
└── release
├── build
├── deps
│   ├── hello_cargo-ac6d8d77e18d4d6b
│   └── hello_cargo-ac6d8d77e18d4d6b.d
├── examples
├── hello_cargo
├── hello_cargo.d
└── incremental
8 directories, 8 files
#+end_example
The build results are in the folder =target/release/= now.