(2021-12-27)
気づきとかいろいろ
エラーハンドリング (2021-12-27)
Result<T, E>とOption<T>がある (2021-12-27)
okとok_or(T)で相互変換可能- また下の
anyhowで提供されているanyhow::contextを使うことでOptionをResultにできるみたい
汎用的なエラーはResult<T, Box<dyn std::error::Error>> (2021-12-27)
- Boxはヒープ領域
?演算子を使ったときにBox::newがいらないのはなぜ?
dyn Errorの意味はあとで調べる
と思ったけどanyhowがよさそう?
anyhow::Result<T>で上とほぼ同じことができる- さらに
anyhow::anyhow!マクロで手軽にエラーメッセージを作れる。これは便利
? 演算子 (2021-12-27)
ResultやOptionを返す関数の中で使うとNoneやErrのときに早期リターンできる- 関数をreturnするのでブロックの値を返すためには使えない(tauriのcommandsはserdeでエンコードできるものでないといけないから恐らく上のanyhowは使えない?)
例: これはaにResultが入るわけではない
- なので即時関数を使う
参照:
Rustのクロージャを嗜む - Qiita
はじめに この記事では、Rustのクロージャに関する奇抜な(JavaScriptのパラダイムに似た)応用を紹介していきます。 Rustらしくない書き方だと思うので、こんなこともできるんだ程度に思ってもらえれば幸いです! Rustにおけるクロージャ Rustのクロージャは...
qiita.com
非同期 (2021-12-27)
(2021-12-27)
- 非同期関数は
async fn(T) -> Uと宣言する。- jsのPromiseみたいに
Promise<T>と包むのではなく非同期な返り値をそのまま書くみたい
- jsのPromiseみたいに
f().awaitで呼び出す- Futureがなんなのかよくわかんない
- jsではPromiseに相当するもの?
-
JavaScriptな人のためのRustのFuture入門 - Qiita
RustでI/Oを扱うプログラムを書く機会がありました。非同期I/Oのほうがパフォーマンスがよくなるらしく、tokio というフレームワークがよく使われているとのこと。tokio では Future をベースとして非同期処理を書くようです。明るい Future を生み出して...qiita.com
- jsとは違ってポーリングで非同期処理をしてる。へー
- 昔はfutureというクレートもあったが今は
std::futureで十分?
ライブラリ (2021-12-27)
- async構文自体は言語仕様だがそれを実装するライブラリが必要?よくわかってない
async-stdというものもあったがやっぱりデファクトスタンダードはtokioだと思われる
クロージャ (2021-12-27)
async || {}という書きかたはunstableらしい。- なので
|| async {}と書く - 即時関数なら
(|| async{})().await
- なので
reqwest (2021-12-27)
- 高レベルなHTTPクライアント
ファイルに保存する方法
- streamがよくわかってないけどとりあえずこれでいける
futures_utilはなんだろう
- 最後のところを
Ok(path_str)に変えたらなにかエラーがでた- おそらくライフタイム関連の何かだと思うが・・・今は解決できないので保留
非同期handler関数を引数として受けとりさらにそれをtokioでspawnさせる (2022-03-20)
under - Rust
docs.rs
このクレートをパク…参考にした
使用側:
正直なんでこれで動くかはよくわかってない
Pinに対する知識が足りてない