Closed8

Rustを学習する

kotakota

#[~~] アトリビュート

https://doc.rust-jp.rs/rust-by-example-ja/attribute.html

アトリビュートはモジュール、クレート、要素に対するメタデータです。以下がその使用目的です。

  • コンパイル時の条件分岐
  • クレート名、バージョン、種類(バイナリか、ライブラリか)の設定
  • リントの無効化
  • コンパイラ付属の機能(マクロ、グロブ、インポートなど)の使用
  • 外部ライブラリへのリンク
  • ユニットテスト用の関数を明示
  • ベンチマーク用の関数を明示

関数やmoduleの上にある#[cfg~~]等はアトリビュートでメタデータを指定している。
ink!の#[ink(contract)]もアトリビュートと言えよう。

https://zenn.dev/link/comments/72a79839d33f7b

trait トレイト

https://qiita.com/Papillon6814/items/97c175fd94f0107d3821
https://doc.rust-jp.rs/book-ja/ch10-02-traits.html
https://zenn.dev/anchor_cable/articles/b073d510c6ff9ff7111e#fn-eb34-1
traitとimplの使い分けが難しい。両方、structに対してinterfaceのようになっている。

! マクロ

https://doc.rust-jp.rs/book-ja/ch19-06-macros.html

println!
vec!

はマクロを使っているので、!をつけている。

kotakota

学習

Rustの基本的な書き方は、
https://doc.rust-jp.rs/book-ja/title-page.html
を読めばいい。
書き方は他の言語と変わりないので、
https://www.tohoho-web.com/ex/rust.html
でサッと学ぶのも良い。

しかし、他のコードを読むと、当たり前のように!や#[~~]が出てきて、それが何なのかを理解しないと、読むことが厳しい。

書き方の例

https://doc.rust-jp.rs/rust-by-example-ja/index.html

webassembly

https://moshg.github.io/rustwasm-book-ja/game-of-life/hello-world.html

kotakota

cfg

状況に応じたコンパイルをするためのもの。

// This function only gets compiled if the target OS is linux
// この関数はターゲットOSがLinuxの時のみコンパイルされる。
#[cfg(target_os = "linux")]
fn are_you_on_linux() {
   println!("You are running linux!");
}
~~~~

std feature が有効化されていないとき、コンパイラに std ライブラリを使わないよう伝える。 これはクレー>ト全体に反映されるべき設定なので #![] で書く

// 
#![cfg_attr(not(feature = "std"), no_std)]

引用元・参考
https://doc.rust-jp.rs/rust-by-example-ja/attribute/cfg.html
https://lo48576.gitlab.io/rust-custom-slice-book/nostd-support/how-to.html

kotakota

webassembly(WASM)の学習

https://moshg.github.io/rustwasm-book-ja/introduction.html

上記に従って進めていく。

use of unstable library feature 'bool_to_option' エラー

cargo install cargo-generatorで上記のエラーになる。(rustc 1.61.0)
rustのバージョンを最新にすると解決した。(rustc 1.65.0)

$ rustup update
$ cargo -version
$ rustc -V
$ rustup -V
kotakota

vscode でuse を使用しても補完が効かない

extern crateを使うと良い。

extern crate hoge;
use hoge::hoge;

ただ、もう使わなくてもいいらしい。
mod hoge {}を使うと、そのままuseで行ける。
ただ、私の環境だと、lib.rsにmod hoge;と書かないと補完が効かなかった。
https://doc.rust-jp.rs/edition-guide/rust-2018/path-changes.html

あとは環境変数の設定が間違っているとか

$ rustc --print sysroot
/~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu

https://github.com/rust-lang/rust-analyzer/issues/4343

pub use について

use crate::hogeでmodで定義されたものを展開してくれる。
pub useはそれをさらに外から使えるようにしてくれる。
https://zenn.dev/fraternite/articles/7d030a90165e6a

kotakota

Option<T>

Option 型はオプションの値を表します。すべての Option は Some で値を含むか、 None で値を含まないかのどちらかです。Option型はRustのコードでは非常によく使われます。
引用:訳

typescriptとかの<String | undefined>みたいな感じ。
未登録時はNoneにしたいときとか。
https://doc.rust-lang.org/nightly/core/option/index.html

unwrap()

Option<T>での返り値はsome(x) or None()であり、some(x)からxを取り出すときにunwrap()を使用する

kotakota

Cargoについて

rustのパッケージマネージャ。yarnみたいなもの。

cargo clean

ビルドとかきれいにしてくれる

cargo run

ビルドして実行する

cargo build

ビルドする

cargo build --release

最適化してビルドする

このスクラップは2022/12/13にクローズされました