1つのrustプログラミングチュートリアル

6249 ワード

rustの公式文書を参照して作成https://rinthel.github.io/rust-lang-book-ko/

Rust


C/C++などの低レベルプログラミング言語
利点:他の低レベル言語と同様に、速度が速く、C/C++のメモリ安定性の問題を解決できるなど...
短所:難しい...
Rustについて:
1.メモリの安定性の問題は、所有権の概念によって解決されたようですか?
2.コンパイラはよさそうです.新体操の部分などに長所があるようです
3.gccのようなプリコンパイルプロセスが必要

Rustのインストールと実行(Windows)

  • https://play.rust-lang.org/>インターネットide環境
  • https://rinthel.github.io/rust-lang-book-ko/ch01-01-installation.html>>Windowsではwslがベストらしい
  • https://docs.microsoft.com/ko-kr/windows/dev-environment/rust/setup>ビジュアルスタジオや拡張パッケージも使用可能
  • インストールはコマンドラインとrustupで行います.wsl 2を使用していますが、エラーは発生しません.インストール完了後
    コマンドラインに$rustc-versionを入力してバージョン情報を表示すると、正常にインストールされます.

    Rust Hello Worldで!しゅつりょく


    rustroファイルの作成と実行にはmainの2つの方法があります.これはrsファイルを作成してコンパイルして実行する方法で、残りの1つはcargoを使用して作成します.後者の方法が主に使われているそうです.

    1. main.rsに出力


    main.rsの作成

    fn main(){
        println!("Hello, World!");
    }
    そして端末に次の内容を入力します:Hello,world!出力します.
    $ rustc main.rs
    $ ./main
    Hello, world!
    まず、fnでコードセクションを表示すると、関数名がmainとして宣言されていることがわかります.
    rust内でmain関数は実行可能なrustプログラム内で最初に実行される部分である.
    値とパラメータを返さないmain関数は、{}カッコで囲まれています.
    コードの内容から見ると、2つの特殊な点があります.
    まず、1つ目はrastがtabをインデントするのではなく、4つの空間をインデントすることです.
    2つ目は他の言語とは異なりprintlnの後ろにあります!あります!プラスprintln!暗黙マクロと呼ばれる
    後で処理します.
    さび病つまりセミコロンを使います.

    コンパイル


    $ rustc main.rs
    $ ls
    main main.rs
    コンパイルセクションでは、コマンドラインのrustcからmainが表示されます.プライマリコンパイルrsが表示されます.
    実際には、コンパイル後にlsコマンドで表示すると、新しいプライマリファイルが表示されます.
    ./mainコマンドmainを使用します.rsではなくプライマリファイルが実行されていることがわかります.
    rustcにコンパイルされたプライマリファイルは実行可能なバイナリファイルであり、rustをインストールする必要はありません.
    これは可能です.これをahead-of-timeコンパイル言語と呼びます.

    2.Cargoに出力


    公式文書によると、Cargoはrustの構築システムとパッケージマネージャだという.なぜなら、ライブラリや依存性など、ドキュメントの内容が優れているため、より便利と考えられるからです.
    Cargoはrustのインストール時に自動的にインストールされ、$cargo--versionでインストールミューを表示することができます.

    Cargoを使用したプロジェクトの作成


    $ cargo new hello_cargo --bin
    $ cd hello_cargo
    コマンドラインに上記のコマンドを入力すると、作業中のディレクトリにhello cargoというディレクトリと実行可能なバイナリファイルが作成されます.binパラメータは、ライブラリではなくアプリケーションにすることができます.hello cargoというディレクトリに行くと.git, .gitignore, Cargo.toml、srcなどのファイルとディレクトリが作成され、srcディレクトリにmainがあることがわかります.rsという名前のファイルを自動的に生成します.main.rsのコードから見ると,生成と同時に1.main.rsで記述されたhello,worldを出力できるコードが含まれている.
    帰ってきたら先にカーゴへtomlファイルをテキストエディタと見なしている場合は、次の内容が表示されます.
    [package]
    name = "hello_cargo"
    version = "0.1.0"
    edition = "2021"
    See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
    [dependencies]
    Cargo.tomlではtomlはCargoの優先パラメータフォーマットと呼ばれるTOML(Tom's Obvious,Minimal Language)形式で記述されている.
    最初の行の[package]は、その下の行から優先パラメータ部分であることを示す始点である.
    以下は環境設定の内容で、公式ファイルにはname、version、authorsと書いてありますが、なぜ違うのか分かりません.
    [dependencies]セクションは、プロジェクトが依存する依存性のリストです.後述する場合があります.
    src/main.rsのコードは、Cargoで作成された場合、scrにプライマリコードファイルがあり、cargoとは異なる.toml環境設定など.ビジュアルスタジオでCargoで仕事をしていれば、それをより見やすく見ることができます.

    コンパイル


    $ cargo build
    Compiling hello_cargo v0.1.0 (/home/arhan/projects/hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 0.55s
    hello cargoディレクトリで$cargo buildでコンパイルできます.次に、現在のディレクトリを置き換えます.
    target/debug/hello cargoに実行可能ファイルを作成します.実際にはtargetというディレクトリが生成されます.
    興味深い点は、3行目の出力がunoptimizedであることです.これは、現在作成されている実行可能ファイルを意味します.
    成功しなかった.これについて、再度説明する.
    これらのファイルが作成されている場合は、ファイルを実行して出力できます.
    $ ./target/debug/hello_cargo
    Hello, world!
    またはCargo runコマンドで実行できます.
    $ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.0 secs
    Running 'target/debug/hello_cargo'
    Hello, world!
    buildとは異なり、build以来ファイルが変更されていないため、Compilingという文は表示されません.
    バイナリが実行されていることがわかります.ファイルが変更されたら
    $ cargo run
    Compiling hello_cargo v0.1.0 (file:///projects/hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 0.33 secs
    Running 'target/debug/hello_cargo'
    Hello, world!
    このように出力します.
    Cargoのもう一つのコマンドにはcheckがあり、作成したファイルがコンパイルされているかどうかを確認します.
    このコマンドはrunとは異なり、ファイルを実行せず、runコマンドよりも高速です.Error Check Kingを行うためだけであれば
    checkコマンドはrunより適切です
    $ cargo check
    Compiling hello_cargo v0.1.0 (file:///projects/hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 0.32 secs
    実際には、実行が出力されないことがわかります.

    Release


    ファイルを最終的に配置するには、ファイルをコンパイルするだけでなく、最適化する必要があります.
    これは$cargo build−releaseによって実現できる.
    cargo build --release
    Compiling hello_cargo v0.1.0 (/home/arhan/projects/hello_cargo)
    Finished release [optimized] target(s) in 0.14s
    これは最適化されており,以前とは異なりunoptimizedからoptimizedに変わったことがわかる.
    --releaseオプションは、/targetでdebugおよびその他のreleaseディレクトリを作成し、最適化されたファイルを保存します.
    最適化されたファイルを実行するには、実行後も--値を解放します.実行のみの場合は/target/releaseではありません
    /target/debugの最適化されていないファイルを実行します.
    cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s
    Running 'target/debug/hello_cargo'
    Hello, world!
    cargo run --release
    Finished release [optimized] target(s) in 0.00s
    Running './hello_cargo'
    Hello, world!

    Summary

  • Cargoコマンドによるファイル管理・実行
  • ・通過cargo new生成項目;・通過cargo buildコンパイル
  • 通過
  • cargo run実行
  • --release最適化