[過去ログ] Rust part24 (985レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
1(2): 2024/05/27(月)06:41 ID:T4AFD1f4(1/3) AAS
公式
外部リンク:www.rust-lang.org
外部リンク:blog.rust-lang.org
外部リンク:github.com
公式ドキュメント
外部リンク:www.rust-lang.org
Web上の実行環境
外部リンク:play.rust-lang.org
※Rustを学びたい人はまず最初に公式のThe Bookを読むこと
外部リンク:doc.rust-lang.org
省8
956: 2024/07/24(水)07:25 ID:Py4dd1Kh(1) AAS
たしかにXY問題だな
「異なる型が入り乱れてイテレートしたい」←何のために?
「異なる型が入り乱れてタプルがある」←どうやってそれが出来た?
957: 2024/07/24(水)08:43 ID:NUYI7xpt(1/2) AAS
・タプルは型を混合できる
・タプルはイテレートできない
・異なる型でのイテレートがしたいなら、タプルの代わりに Box<dyn Trait> のような動的型かenum (直和型) の配列を使う
で良いんじゃない?
958: 2024/07/24(水)08:43 ID:sCVmnNU/(4/4) AAS
とりあえず出来ました
struct Hoge<'a> { t: (&str, u64, &str, &str, u64) }
impl<'a> IntoIterator for Hoge<'a> {
type Item = Fuga<'a>;
type IntoIter = std::vec::IntoIter<Self::Item>;
fn into_iter(self) -> Self::IntoIter {
vec![
Fuga::from(self.t.0),
Fuga::from(self.t.1),
Fuga::from(self.t.2),
省6
959(1): 2024/07/24(水)08:50 ID:NUYI7xpt(2/2) AAS
XY問題だとか言うけど、上のFizzBuzイテレーターなんかはXとYのどちらとも関係ないでしょ
既にあるデータに対してイテレートする方法でなく、FizzBuzを0から生成するだけだから
それをしつこく何度も書くあたりが本物
960: 2024/07/24(水)09:24 ID:eaHzhPzb(1) AAS
>>959
それな
961: 2024/07/24(水)09:30 ID:+W2StRcH(1) AAS
意味のないFizzBuzzを散々書いておいて答えられなくなったら急に質問者を攻撃する複オジくん草
962: 2024/07/24(水)12:35 ID:qFVR7Ywl(1/3) AAS
必要な個数のタプルを配列に変換するコードでいいんじゃないかな
これは長さ自由に機械的にマクロで生成できそう
struct Wrapper<A, B, C, D, E>((A, B, C, D, E));
impl<A, B, C, D, E> From<Wrapper<A, B, C, D, E>> for [Tx; 5]
where
Tx: From<A> + From<B> + From<C> + From<D> + From<E
{
fn from(x: Wrapper<A, B, C, D, E>) -> Self {
[Tx::from(x.0.0), Tx::from(x.0.1), Tx::from(x.0.2), Tx::from(x.0.3), Tx::from(x.0.4)]
}
省13
963: 2024/07/24(水)12:36 ID:qFVR7Ywl(2/3) AAS
AA省
964: 2024/07/24(水)12:38 ID:qFVR7Ywl(3/3) AAS
そうするとタプルの中の型の順番は任意でよくて
タプルをラッパーにかませるだけで利用できるよ
fn main() {
let tuple = ("abcde", 123, "nop", 0.456, 789);
for x in Wrapper(tuple) {
println!("{x}");
}
for (i, x) in Wrapper((-1, "pi", 3, 3.14159, "END")).into_iter().enumerate() {
println!("{i}: {x}");
}
省1
965: 2024/07/24(水)12:43 ID:mjGiit/q(1) AAS
効いてる効いてるw
966: 2024/07/24(水)12:49 ID:TJmYfYAi(1) AAS
「XY問題だから相手にするだけ無駄」と言い放っておいてからの〜〜
967: 2024/07/24(水)17:04 ID:1Kw3Uuff(1) AAS
もっと建設的な話題はないの?
968: 2024/07/24(水)19:14 ID:UKniupNy(2/2) AAS
5chより建設的なコミュニティを列挙し移住を検討するのが目下最も建設的な話題である
969: 2024/07/24(水)21:00 ID:bzm5y73f(1) AAS
最近出た便利クレートの話とかすれば良いんじゃね?
970: 2024/07/24(水)22:25 ID:mF9Tvkg9(1) AAS
ベストな日付処理クレートについて議論しよう
971: 2024/07/25(木)08:45 ID:q/t9CUhu(1) AAS
おすすめクレートの話はしてほしいな~
972: 2024/07/25(木)10:09 ID:P+cFrEvf(1) AAS
クレートの話をしてくれー、と
973(1): 2024/07/25(木)22:41 ID:zdgCFOr2(1/2) AAS
クレートではないけれど今日リリースのRust 1.80でLazyCell, LazyLockが安定版に入ったよ
グローバルな変数を外部クレート無しで書きやすくなる
974(1): 2024/07/25(木)22:49 ID:9YYk7vP+(1) AAS
>>973
それ、OnceCell使ってたコードは全部置き換えた方がいい奴?
975: 2024/07/25(木)23:18 ID:zdgCFOr2(2/2) AAS
>>974
自分はそれを言えるほど詳しくないけど、必ずしも必要ではないと思う
依存クレートを減らせる点で嬉しいし、今から書くコードでは新しいものにして良いと思うけど、今使ってるものをすぐに置き換える必要があるとまでは思わない
特にライブラリを作ってる場合は、rustcを今日リリースされたばかりの最新バージョンに上げないとライブラリをビルドできなくなるということなので、もう少し待った方が良いかもしれない
976: 2024/07/26(金)00:25 ID:/65SSmn2(1/2) AAS
OnceLockからLazyLockへ移行すると
変数宣言と初期化関数が離れていた可読性の問題が解決するとともに
例えばget_or_initを一箇所にするために一つ関数を用意したりするなどしていた手間も省けるようになるね
そして何よりも最大のメリットはDerefによりアクセスできる利便性
977: 2024/07/26(金)23:32 ID:/65SSmn2(2/2) AAS
とりあえず定番のこのあたりを置き換えた
static RE: LazyLock<Regex> = LazyLock::new(|| Regex::new("...").unwrap());
static SE: LazyLock<Selector> = LazyLock::new(|| Selector::parse("...").unwrap());
978(1): 2024/07/27(土)11:02 ID:WfV9QQMJ(1) AAS
LazyLockよさそうね
979(2): 2024/07/27(土)18:38 ID:U5WpGSyZ(1/2) AAS
俺の今日のハマりポイントを紹介
bindgenにC++のコンストラクタを作らせると、データが壊れる
よく調べたら公式ドキュメントのConstructor semanticsに書いてあった
外部リンク[html]:rust-lang.github.io
コンストラクタを抜けたとき、C++とちがってRustは値をムーブしちゃうので
struct内部を参照したポインタが変なところを参照してバグる
980(2): 2024/07/27(土)19:30 ID:s18eFGvS(1) AAS
C++も部分的に使えるとはいえ、FFIするならCのAPIにしておく方が無難な気はする
981: 2024/07/27(土)20:04 ID:U5WpGSyZ(2/2) AAS
>>980
bindgenはFirefoxがプロダクトでたくさん使ってるって聞いて、いけると思ったんだ
Firefoxは大半がC++だから
982: 2024/07/28(日)15:27 ID:v6kdbv5j(1/2) AAS
>>978
LazyLockさようなら
に観えた
983: 2024/07/28(日)15:29 ID:v6kdbv5j(2/2) AAS
>>979
RustとC++は相性最悪
RustとCは相性良いバッチリ
984: 2024/07/30(火)01:24 ID:xgbf/AIH(1) AAS
>>979
この件って、RustはC++と比べて無駄にムーブするから遅いってこと?
985: 2024/07/30(火)06:04 ID:RHAjweCG(1) AAS
無駄な移動は消える
cargo asmで生成コードを見ることでそれを確認できる
移動前と移動後のアドレスを表示させて最適化を阻害することで元は別々となる例も確認できる
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.012s