探検


Rust part38

レス数が950を超えています。1000を超えると書き込みができなくなります。
1デフォルトの名無しさん
垢版 |
2026/07/24(金) 20:04:25.76ID:24e2kQId
公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust

公式ドキュメント
https://www.rust-lang.org/learn

Web上の実行環境
https://play.rust-lang.org

※Rustを学びたい人はまず最初に公式のThe Bookを読むこと
https://doc.rust-lang.org/book/
(コミュニティによる日本語翻訳版もあります: https://doc.rust-jp.rs/book-ja/)

※Rustを学ぶ際に犯しがちな12の過ち
https://dystroy.org/blog/how-not-to-learn-rust

※Rustのasyncについて知りたければ「async-book」は必読
https://rust-lang.github.io/async-book/

※次スレは原則>>980が立てること

前スレ
Rust part37
https://mevius.5ch.io/test/read.cgi/tech/1784283151/

ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.io/test/read.cgi/tech/1514107621/
2026/09/22(火) 22:53:59.02ID:nl5zGx1z
>>892
それだと非同期機構が関与してない
2026/09/22(火) 23:07:56.50ID:DaZhbE7H
https://play.rust-lang.org/?version=stable&mode=debug&edition=2024&gist=c97f4c4b1a3a952e5ac727c78bf8ffa3

なんかStreamってあったよなってヒントを与えつつローカルのQwen3.8に書かせてみたけどこんな感じでよか?
2026/09/22(火) 23:11:57.34ID:Sxew/Luk
C++のそのco_yieldもそれだけでは非同期スケジューリングされる非同期タスクは生成されないぞ
2026/09/22(火) 23:19:14.78ID:nl5zGx1z
>>894
これいい感じ

>>895
894も882と同じだし
言語毎に非同期機構のデフォルトがeagerがlazyか違うのでそこは関係ないかと
2026/09/22(火) 23:19:55.91ID:LbBY0mHk
>>882
そのC++のコードのどこに非同期性があるんだよ
全て同期だ
2026/09/22(火) 23:23:17.72ID:nl5zGx1z
>>897
>>896

非同期機構を使って書いたコードが実際にawaitなどで非同期タスクスイッチが起こるかどうかはこのベンチマークの主眼じゃないかと
2026/09/22(火) 23:25:09.94ID:LbBY0mHk
>>893でRustのコードに対して非同期機構が関与してないと指摘してるようだが
C++のそのコードも同期のみで同じ
2026/09/22(火) 23:27:07.78ID:nl5zGx1z
>>899
もう面倒なので自分で勉強してね
2026/09/22(火) 23:35:38.48ID:/rwn5ZOW
C++は非同期ランタイムの標準化に失敗して先送りになったままだったと思う
std::executionが決まらないとC++では無理かと
2026/09/22(火) 23:38:37.68ID:nl5zGx1z
>>901
どうぞ
https://github.com/nvidia/stdexec
2026/09/22(火) 23:43:05.13ID:HA//Kc90
>>902
その非同期スケジューラーを使って非同期に書くといいんじゃね
904デフォルトの名無しさん
垢版 |
2026/09/22(火) 23:43:06.40ID:dZHoI6bq
コルーチンの比較ベンチで非同期かどうかは関係ないような
グリーンスレッドが標準化されてない環境だと重たくなるのはしかたない
RustはTokioがデファクトだからまああり
2026/09/22(火) 23:48:37.89ID:nXou4Xqi
ID:nl5zGx1zの書き込みを見てると非同期に書いたつもりになってるようだけど非同期になってないですよね
2026/09/22(火) 23:49:47.31ID:nl5zGx1z
>>905
だから勉強しなさいって
2026/09/22(火) 23:52:49.12ID:DaZhbE7H
https://play.rust-lang.org/?version=nightly&mode=debug&edition=2024&gist=9a70f86f7c3c8f25cf743142489b882f

yieldで書きたければ今のnightlyだとこれくらいまではできるみたいね
gen {}はなんかCoroutine実装してないとか言われてだめだった…
2026/09/22(火) 23:54:46.40ID:i4Iz/fDI
単なるコルーチンだな
構成要素の一部にはなり得るけど非同期とは別
2026/09/22(火) 23:55:00.59ID:nl5zGx1z
>>907
いいね
この人と>>904が話が通じる
2026/09/22(火) 23:57:44.60ID:DaZhbE7H
coro-prime-sieveって名前のベンチにコルーチンで実装するなとか言うバカ
2026/09/23(水) 00:02:30.45ID:GBFdVMdM
そうだよ
課題はコルーチン
ID:nl5zGx1z氏が非同期とコルーチンの区別をできなくて何度も非同期がー!と喚いているから話がややこしくなってる
2026/09/23(水) 00:10:01.34ID:pT5ttz8Y
>>911
非同期機構(C++ではcoroutineとpromise_type, awaiter)と
非同期実行を混同してるやつ>>905に説明したけど無理そうだった
2026/09/23(水) 00:23:03.04ID:+EITSibh
コルーチンは非同期機構ではない
非同期機構の実装の一つとしてコルーチンが使われることもある
という程度の関係しかない
同様の関係として
イテレータの実装の一つとしてコルーチンが使われることもあるが
イテレータとコルーチンは別ものである
そして互いに相手を必須とするものではない
非同期機構とコルーチンも別ものである
そして互いに相手を必須とするものではない
914デフォルトの名無しさん
垢版 |
2026/09/23(水) 00:32:06.17ID:tVLjKwnY
コルーチンで作られたジェネレータも同様だよね
どちらも非同期機構とは違う
>>882のC++プログラムはコルーチンで作らたジェネレータではあるけど非同期機構は出て来ていないね
2026/09/23(水) 00:47:12.45ID:Usd75HQH
Rustのジェネレータが安定化されていたらもう少しくらい話が通じたのかもしれない
916デフォルトの名無しさん
垢版 |
2026/09/23(水) 01:07:02.34ID:yygRtVGa
>>915
Rustでyieldを使うジェネレータfeatureは状況が変わって再構築と名前が変更されてコルーチンfeatureになったよ
いずれにせよ非同期は直接関係なくてRustでもコルーチンはasyncではない普通の関数
2026/09/23(水) 10:30:26.23ID:gAiAo47r
RustよりもC++よりテクニカルライティングよりも会話を勉強したほうがいい
2026/09/23(水) 11:13:32.24ID:j0wiXFqS
>>869>>870
草w草wおじ草w

Rustでグローバル変数と言えばstatic変数のこと
現代の言語はCのようにグローバルスコープの変数を直接定義できないから
Rustに限らず多くの言語でモジュール/ファイル/パッケージレベルでグローバルな変数を
単にグローバル変数と呼ぶようになってきてる

C言語時代の古臭い脳にそろそろパッチあてたほうがいいんじゃないかな
2026/09/23(水) 11:57:30.22ID:O23FWCkR
>>918
いやRustでもグローバルな可視性を持つ変数とプログラム全体にわたるライフタイムを持つ変数は区別するよ
最近の言語でグローバル変数というとそのどちらも十分条件ではなくて、
pub staticやシングルトンのように実質的にグローバル変数のように使用できるもの全般を指すケースが多いと思う
特定の概念を指すというよりユースケースを指す言葉だね
2026/09/23(水) 12:20:09.97ID:laP2ONXr
>>919
In Rust, global variables are called static variables.
https://doc.rust-lang.org/book/ch20-01-unsafe-rust.html

static: Global variable or lifetime lasting the entire program execution.
https://doc.rust-lang.org/book/appendix-01-keywords.html

2つ目の説明の前者はstatic変数(=グローバル変数)のこと
後者は'staticライフタイムのこと
2026/09/23(水) 12:39:07.94ID:Usd75HQH
ほな「static変数はグローバル変数ではありません」やないやないか
922デフォルトの名無しさん
垢版 |
2026/09/23(水) 12:54:47.65ID:olFgQEki
> Rust considers mutable static variables to be unsafe.
> Where possible, it’s preferable to use the concurrency techniques and thread-safe smart pointers

世間的なグローバル変数はつかうなとあるのに話するのも無駄
記憶から消してほかのことに頭をつかおう
923デフォルトの名無しさん
垢版 |
2026/09/23(水) 13:04:29.88ID:3nmH0iW1
>>920
英語が読めないの?
グローバル変数はRustではstatic変数と呼ばれるだけだよ
static変数全てがグローバル変数というわけではない
明確にするために集合で表すと「static変数⊃グローバル変数」
例えば関数内のstatic変数をグローバル変数と呼びません
static変数 ≠ グローバル変数 です
2026/09/23(水) 13:23:31.19ID:Usd75HQH
bookの作者の人そこまで考えてないと思うよ
2026/09/23(水) 13:24:51.22ID:9dxFRbkH
static変数のうちpubが付いてるものはパスさえ分かればアクセスできるからグローバル変数と呼んでもいいけど
static変数の多くは関数内やモジュール内に閉じてる用法
static変数とグローバル変数は別物ですね
2026/09/23(水) 14:08:18.38ID:ojUAHerQ
そもそもの話が、>>831のコードのように関数ローカルやモジュールローカルのstatic変数に入れることで&'static参照を得て、スレッド内やスレッド共有で使う話でしょ。
そこにはグローバル変数と呼べるstatic変数は出て来ない。
それに対して、突如グローバル変数と言い出した>>868の理解不足だと思うよ。
2026/09/23(水) 14:43:26.21ID:v9gmYAQz
お爺ちゃんたち必死過ぎて草w
現実を直視する脳細胞が死んでるww
2026/09/23(水) 15:42:14.17ID:zelG5bBH
同じ構造体の自己参照で'static偽装したことはあるな

struct Foo {
full: String,
part: &'static str // -> &self.full[range]
}

外に見せる時に&'a selfの'aで抑えれば問題ないけど
誰か(AI)が間違って&'staticで公開するリスクがあるから
今だとアンチパターンか
2026/09/23(水) 16:06:11.14ID:p1eWgEr/
>>907
そのresume()周りのごちゃごちゃしてる部分
既存のメソッド二つnext(), into_iter()定義したらシンプルになったよ
既存の関数名変数名などはそのまま

type Gen<T> = Pin<Box<dyn Coroutine<(), Yield = T, Return = ()>>>;

fn prime_generator() -> Gen<usize> {
Box::pin(#[coroutine] || {
let mut g = generate();
while let Some(prime) = g.next() {
yield prime;
g = filter(g, prime);
}
})
}

fn generate() -> Gen<usize> {
Box::pin(#[coroutine] || {
for i in 2.. {
yield i;
}
})
}

fn filter(g: Gen<usize>, prime: usize) -> Gen<usize> {
Box::pin(#[coroutine] move || {
for i in g.into_iter() {
if i % prime != 0 { yield i; }
}
})
}
2026/09/23(水) 16:45:30.26ID:Usd75HQH
>>928
うっかりムーブしちゃうと壊れるというのもあるのでpinを使うのじゃ
https://doc.rust-lang.org/std/pin/index.html
https://tech-blog.optim.co.jp/entry/2020/03/05/160000
2026/09/23(水) 16:59:35.09ID:p1eWgEr/
>>929 メソッド定義と残り
#![feature(coroutines, coroutine_trait, yield_expr)]

use std::ops::{Coroutine, CoroutineState};
use std::pin::Pin;

// due to orphan rule
trait CoroutineExt: Coroutine<(), Return = ()> + Unpin + Sized {
fn into_iter(mut self) -> impl Iterator<Item = Self::Yield> {
std::iter::from_fn(move || self.next())
}
fn next(&mut self) -> Option<Self::Yield> {
match Pin::new(self).resume(()) {
CoroutineState::Yielded(n) => Some(n),
_ => None,
}
}
}
impl<C: Coroutine<(), Return = ()> + Unpin + Sized> CoroutineExt for C {}

fn main() {
let n = std::env::args_os()
.nth(1)
.and_then(|s| s.into_string().ok())
.and_then(|s| s.parse().ok())
.unwrap_or(100);

for prime in prime_generator().into_iter().take(n) {
print!("{prime} ");
}
println!();
}
2026/09/23(水) 21:30:11.15ID:p1eWgEr/
このアルゴリズムだとn個の素数を求めるためにそれ以前のn-1個の素数で割っていくコルーチンが同期的に次々と並行に走るから
そのためのBoxもn-1個確保されてそのメモリ上で各コルーチンが動くことになるね
2026/09/23(水) 22:01:17.21ID:YqaKhsFb
Rustってクソめんどくさいんだね
2026/09/23(水) 22:02:29.76ID:tU27HCH7
どこが面倒くさい?
2026/09/23(水) 22:25:00.98ID:p1eWgEr/
このアルゴリズムは2で割るコルーチン、3で割るコルーチン、5で割るコルーチン、…とマトリョーシカのように入れ子状にコルーチンが増えていく
どの言語でも陽に暗に次々と各コルーチンのためのメモリを確保していきながら動作する点は同じではないかと思われる
2026/09/23(水) 22:32:59.48ID:p1eWgEr/
Rustはスタック以外にメモリを確保するなら明示的に書くことでコードを明瞭化させる方針の言語
プログラム>>929でRust固有な部分はBox::pinでメモリを確保するところ
その内側のコルーチン記述は他の言語と同じ
2026/09/23(水) 23:05:16.58ID:h0nxR6zJ
素数10000個求めたいなら9999個のコルーチンが入れ子になって動くんだろ
遊びや実験ならともかく現実問題としては悪手なコード
2026/09/23(水) 23:14:28.87ID:JQawscX8
話の流れとしてはこうだよな
元コードは>>887にあるPythonコード
そのアルゴリズムのままC++に移植したコードが>>882
そのアルゴリズムのままRustに移植されて整理されたコードが>>929
2026/09/23(水) 23:19:23.52ID:Usd75HQH
Rustで書き直されてやっと理解できたからって1日遅れで急に仕切り出したぞ
2026/09/23(水) 23:20:11.22ID:eCJ10viG
トイプログラム好きだな
2026/09/23(水) 23:22:32.17ID:SKOtO2VA
面倒ってBoxでくるむだけだろ
2026/09/23(水) 23:46:57.88ID:p1eWgEr/
Boxが必要になるのは入れ子になる時や異なる型を同じ扱いにするためdynを使う時のみだよ
そうでない普通のコルーチン返すならこれだけ

fn count_up() -> impl Coroutine<Yield = usize> {
let mut counter = 0;
#[coroutine] move || {
loop {
yield counter;
counter += 1;
}
}
}
2026/09/23(水) 23:58:53.86ID:p1eWgEr/
中身はコルーチンそのままでコルーチンであることを露出させずにイテレータとして見せる時はこう書けば動くね

#![feature(gen_blocks)]

fn count_up() -> impl Iterator<Item = usize> {
let mut counter = 0;
gen move {
loop {
yield counter;
counter += 1;
}
}
}
2026/09/24(木) 01:23:44.57ID:LHcl3oiz
中でローカル変数の参照が保持されるならアドレス固定(pin)必須では
実行時のスタック位置が不定になるのは非同期と一緒でしょ
2026/09/24(木) 02:54:57.22ID:R69CFsX0
>>944
コルーチンを定義する側ではpin不要
コルーチンを利用する側ではresumeがpin必須
コルーチンをイテレータのインターフェースで利用するなら>>931のようにpinとresumeは内部に隠蔽されるためpinは出て来ない
したがってコルーチンをgenブロックの形で使えば定義する側でも利用する側でもpinとresumeは隠蔽されて出て来ないことになりそれがgenブロックの目的なのかと
2026/09/24(木) 03:22:52.92ID:t+PtJvb3
んわけあるかw
2026/09/24(木) 06:12:19.77ID:LNll9yPz
coroutineをstaticにすることで解決できる
困ったときはstatic
948デフォルトの名無しさん
垢版 |
2026/09/24(木) 12:23:37.08ID:W+Ki5+Za
&'static str なんて定数なんだからグローバル変数などと呼ぶな
2026/09/24(木) 12:31:00.85ID:LqB172fI
定数ではなく実行時に決まる値をstatic変数に格納すると&'static参照を得られるというRustの基本の話だろ
2026/09/24(木) 12:35:53.06ID:g4g++t5G
staticおじさんとバカにされるから &'static は使わない方がいい
2026/09/24(木) 12:45:17.36ID:0FopOT7u
プログラム終了まで変化しない値はstatic変数に入れるのが最善策
ファイルから読み出すデータであっても通信で得られる値であっても計算で算出される値であっても同じ
2026/09/24(木) 12:53:47.13ID:UBCFj8UU
>>938
コード3つとも読んだがコルーチンの同期呼び出しとイールドしかないな
非同期ではない
2026/09/24(木) 15:07:51.81ID:F20bNgyq
>>928
struct Foo<'a> {
full: &'a String,
part: &'a str // &self.full[..]
}
これでも面倒じゃないし大して違わんと思う
なぜ敢えて &'static str 使いたがるのか
2026/09/24(木) 15:44:26.32ID:hOmIiEqo
そもそもasyncやコルーチンってまだ必要なのかねえ
今はまだAIのRLHFの過程で人間にとって分かりやすいコードを書くように教育されてるけど、その重要性は人間がコードを見なくなるにつれて確実に下がっていくわけで、
いずれそういう頭悪い人間のための補助器具的な機能は全く使われなくなりそうだ
2026/09/24(木) 16:32:23.32ID:kE4lFg9x
分かり易さというのは主に複雑さを抑えることだ。
それは AI にとっても有利な条件になりうる。
(変数名の付け方なんかは人間固有の性質かもしれんが。)
複雑さを抑える方法論を全く無視したら必要な計算量が一気に爆発して手に負えないよ。
計算量の爆発ってのは百倍とか万倍とかいうレベルじゃなくて無量大数倍とかそれよりもっとのレベルで差が出たりする。
(だから巨大なシステムを AI ならたとえばアセンブラで余裕で作れるってわけではない。)

もちろん人間向けが AI 向けに常に有用なわけじゃないだろうけど分かり易くするという指針は AI 向けにも意味がある。
2026/09/24(木) 17:48:38.53ID:WPDA7dcV
>>954
直バイナリ論者ですか?
2026/09/24(木) 18:10:22.84ID:cfDvkPR6
railsの偉い人が、もうAIにRust書かせればええやんと発言したらしいな
2026/09/24(木) 19:24:10.63ID:XT9+idok
Rustで修行した結果一周回って安全にCもC++もunsafe Rustも書けるようになった
そう言える境地を目指したい
2026/09/24(木) 19:30:30.09ID:CIaIJhOO
割と好き、遠回りする人
近くに環境設定職人とかがいると助かるし
2026/09/24(木) 19:59:22.66ID:kE4lFg9x
人はわかってても間違うものなので理解できたら安全に書けるというものではない。
もちろん目指す自由はあるし目指す過程で身に付くことは無駄ではないだろうけどさ。
2026/09/24(木) 21:31:56.17ID:1vuznb8V
>>954
asyncが何かもわかっていなさそうだな
962デフォルトの名無しさん
垢版 |
2026/09/24(木) 21:43:58.61ID:DmkfGnEv
>>961
同等な状態マシンと周辺コードを書けば不要ってことでしょ
実際は>>955のとおりそうでないけど
2026/09/24(木) 22:01:14.20ID:bOwxTNbA
下のcoro_fibが実行時にシングルスレッド非同期スケーリングやマルチスレッドスケーリングが発動するかは
Task<T>の実装しだいなのであって、コルーチンと言う機構を用いて「非同期」を抽象化しているのよ

Task<size_t> coro_fib(size_t n) {
if (n < 2) co_return 1;
co_return co_await coro_fib(n - 2) + co_await coro_fib(n - 1);
}

こう書いたら実行も再帰コールになるけど
size_t fib(size_t n) {
if (n < 2) return 1;
return fib(n - 2) + fib(n - 1);
}

coro_fibの方はTaskの実装次第でシングルループ化させることが出来るわけよ
2026/09/24(木) 22:04:06.10ID:ZSFNfhd0
>>962
非同期の極一部のawaitを実現する方法の一つとして状態マシンを使うという程度の関係しかなくない?
pollの状態は各外部に左右されるものであるし
965デフォルトの名無しさん
垢版 |
2026/09/24(木) 22:08:06.04ID:GuSMxCg9
>>963
非同期の実装の方法としてコルーチンを使う場合もあるというだけにすぎない
コルーチン自体には昔から非同期の機能はありません
2026/09/24(木) 22:17:25.97ID:Mi6Yp/2I
コルーチンはサブルーチンと対になる位置づけ
サブルーチンが毎回最初から実行するのに対して
コルーチンは前回戻った地点から実行するそれだけの違い
どちらも普通のものは同期的に実行される
2026/09/24(木) 22:22:14.12ID:bOwxTNbA
昔話をされても困るな
少なくともC++20以降の視点が無いとね

co_await resume_background();
(ここはスレッドプールで実行)
co_await resume_foreground(..);
(ここはメインスレッドで実行)
2026/09/24(木) 22:30:50.25ID:tuxkN518
それはC++という変わった変な言語の混乱
一般的なコルーチンの話がなされている場で邪道なものを持ち出すのは愚かとしか言いようがない
2026/09/24(木) 22:35:34.58ID:bOwxTNbA
言語毎の違い包括して元素還元したのがC++20
2026/09/24(木) 22:36:25.48ID:sZV5pNkP
>>967
おまえバカだろ
コルーチンにawaitなんて機能はない
awaitが登場するのはどの言語でも非同期の機能
両者の区別もできないのか?
2026/09/24(木) 22:41:14.95ID:bOwxTNbA
こう言う>>966 表素的な把握だとyieldとawaitが不可分だとは想像できないかも
2026/09/24(木) 22:48:25.18ID:8PK738S5
>>971
それはレイヤーが全く異なる
Rustでは非同期関数の内部実装としてスタックレス・コルーチンが使われているが
階層が異なるため内部実装にすぎないコルーチンが直接露出することはない
きちんと区別されている
2026/09/24(木) 22:57:16.07ID:bOwxTNbA
どの言語でも、とは...
2026/09/24(木) 23:06:36.40ID:bOwxTNbA
少なくとも現状の主要言語で
suspend可能ポイントでsuspendするかしないか
suspendしたらなにをするか
resumeしたらなにをするか
yieldで戻り値を受け取る仕組み( new_input_from_caller = co_yield value )
これらを制御出来るのはC++しかないわけで良い学習になると思うよ
2026/09/24(木) 23:16:49.81ID:pH7KZ+VO
>>929とかのコードは途中でsuspendする必要全然ないから同じアルゴリズムでもコルーチン使わないイテレータ版で十分
2026/09/24(木) 23:27:27.51ID:8iK3IjqY
>>975
それはみなが承知してるが
コルーチンを使って書けという課題らしい
2026/09/24(木) 23:48:40.03ID:YddBzynh
>>975
イテレータとの折衷案はいかが
一応coro-prime-sieveと書かれているから
yieldを使うコルーチンを使って
篩法で実装されていればいいと解釈すると
これがシンプルでよいかと

fn prime_generator() -> impl Iterator<Item = usize> {
gen {
let mut primes = Vec::new();
for i in 2.. {
if primes.iter().all(|&prime| i % prime != 0) {
primes.push(i);
yield i;
}
}
}
}
2026/09/24(木) 23:52:54.34ID:bOwxTNbA
>>977
それは綺麗だけど
原型のGoが各素数に付き一つのチャンネルを割り当てているから却下かと
2026/09/25(金) 00:00:41.38ID:XiQqzC/u
>>978
Goってこれかい?
https://github.com/hanabi1224/Programming-Language-Benchmarks/blob/main/bench/algorithm/coro-prime-sieve/1.go

チャネル通信を使っていて本来のコルーチンから大きく逸脱しているような
2026/09/25(金) 00:03:44.75ID:6QEnbgiE
チャネル使わないと却下だったら最初の書き味がどうとかいう問題提起は何だったんだんだよw
2026/09/25(金) 00:13:33.47ID:XiQqzC/u
書き味って検索するとこの件の一番最初の>>882の書き込みのことか
Rust版はGo版に倣ってチャネルで実装してるから合格?
C++版はチャネルを使ってないから却下?
2026/09/25(金) 00:14:29.90ID:HYpG20BO
書き方間違えた
原型のGoが各素数に付き一つのゴールーチンを割り当てているから却下かと
2026/09/25(金) 00:19:36.77ID:6QEnbgiE
それならまあはい
2026/09/25(金) 00:21:53.77ID:9fX7qPMO
性能面が悪化しても読みやすくなるとかアルゴリズムがシンプルになるとか何かメリットがあるならまだいいがデメリットしかないやり方をあーだこーだいっても時間の無駄じゃね?

何がそんなにうれしいの?
2026/09/25(金) 00:29:25.84ID:6QEnbgiE
引くに引けなくなっちゃったんでしょ
2026/09/25(金) 00:34:27.08ID:HYpG20BO
このベンチはコルーチンを使う事での性能劣化やそれを緩和する最適化を見る為かと
劣化がゼロなんてことは無いよ
.net10のruntime asyncもその辺の最適化かと
2026/09/25(金) 00:36:42.45ID:a68xiBXa
このスレ、こんなのばっかだな
2026/09/25(金) 00:37:52.42ID:TSMdoI71
>>947
それマジでコンパイル通らないコルーチンにstatic指定したらコンパイル通るようになった
参照&aがyieldまたぎして使われてるこれ
static指定なしだとコンパイルエラー
static指定ありだとコンパイル通る

fn foo() -> impl Coroutine<Yield = ()> {
#[coroutine] static || {
let a = 123;
let pa = &a;
yield ();
if *pa == 123 {
yield ();
}
}
}
989sage
垢版 |
2026/09/25(金) 01:39:36.08ID:HWQunSxT
Rust part39
https://mevius.5ch.io/test/read.cgi/tech/1790267803/
990980
垢版 |
2026/09/25(金) 01:43:53.65ID:6QEnbgiE
何勝手に立ててんの? なんでID全部違うの?
2026/09/25(金) 02:03:58.64ID:IvpgLRRa
>>988
全ての正解はstaticに通じる
2026/09/25(金) 02:38:46.72ID:9+eTuYed
>>1
>(コミュニティによる日本語翻訳版もあります: https://doc.rust-jp.rs/book-ja/)

(コミュニティによる日本語翻訳版もありますがもう更新されていませんので日本語が必要なら公式版をAI翻訳して読むことをお勧めします: https://doc.rust-jp.rs/book-ja/)

次スレから↑これな
レス数が950を超えています。1000を超えると書き込みができなくなります。

ニューススポーツなんでも実況