[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 11/05 10:37 / Filesize : 296 KB / Number-of Response : 1021
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Rust part15



1 名前:デフォルトの名無しさん mailto:sage [2022/05/12(木) 18:28:20.99 ID:cuIcFT6k.net]
公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust

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

日本語の情報
https://rust-jp.rs/

※Rustを学びたい人はまず最初に公式のThe Bookを読むこと
https://doc.rust-lang.org/book/

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

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

※C++との比較は専用スレへ
C++ vs Rust
https://mevius.5ch.net/test/read.cgi/tech/1619219089/

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

前スレ
Rust part14
https://mevius.5ch.net/test/read.cgi/tech/1644596656/

141 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 01:39:04.90 ID:f3pwm4rC.net]
>>138
それもforが二重となっていて全体でO(n^2)だから同じく悪手

142 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 02:09:27.74 ID:XQuKTBpO.net]
>>131
なら尚のことジェネリックにする意味ないよね?

143 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 03:45:23.95 ID:jyObMdH0.net]
>>137,139
悪手ってなにをもって悪手だよ
一般項の導出は高校生でもできるレベルで、そうすればO(log(n))で求められるし、つまらん計算量改善のためだけのアルゴリズム議論はもうやめろ
これ以上計算量の話をするなら別のスレでやってくれ

144 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 04:01:44.79 ID:f3pwm4rC.net]
>>141
mainに既にforループがある
だから個々をO(n)で求めると全体でO(n^2)となる
もし個々をO(log(n))で求めたとしても全体でO(n✕log(n))となる
一方で>>133は優れていて全体でO(n)だから圧倒的に良手

145 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 08:08:36.85 ID:SnnzWk5R.net]
まあ(usize) -> usizeのインターフェースを持たせつつ逐次処理したければメモ化が楽だわな
Rustとは特に関係の無いアルゴリズム一般論の話だけど

146 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 12:20:27.39 ID:TVQgVkXp.net]
なんでmainのループまで計算量に入れてるの?
今やってるのはフィボナッチ数列の計算量の話でしょ
余計なところまで話し広げてどうするの?

147 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 12:42:29.01 ID:Y0RaHe9J.net]
いい加減こんな語り尽くされた話終わってろ
何スレだよここ

148 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 12:44:11.02 ID:2eGzkY/T.net]
>>143
メモ化は良いが>>133のコードはインターフェースがあまりよくない
逆に>>138のコードはn個の列挙にO(n^2)も費やしている
以下のように書けばn個の列挙がO(n)に収まり、個別f(n)もO(n)で両立できる

fn main() {
println!("f(77) = {}", f(77));
for (n, f) in fibonacci_iter().enumerate() {
println!("f({n}) = {f}");
}
}

fn f(n: usize) -> usize {
fibonacci_iter().nth(n).unwrap()
}

fn fibonacci_iter() -> impl Iterator<Item=usize> {
let mut p = 0;
let mut q = 1;
std::iter::from_fn(move || {
let r = p;
p = q;
q += r;
Some(r)
})
}

149 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 12:47:27.97 ID:wYj4kQtM.net]
僕チンすごい!ってホルホルしたいんだろうけど

脳のワーキングメモリーが減ってこの程度の内容でしかコードが書けないんだろうな



150 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 13:06:09.75 ID:TVQgVkXp.net]
まず計算量にmainのループを勘定してる時点で…

151 名前:デフォルトの名無しさん [2022/05/19(木) 13:18:54.57 ID:u56F2Ocx.net]
>>144
> 今やってるのはフィボナッチ数列の計算量の話でしょ

その通りでアンタが正しい

>>148
フィボナッチ『数列』の計算量だから
mainのループを勘定するのは当然
f(0)、f(1)、f(2)、…、f(n)がフィボナッチ『数列』

152 名前:デフォルトの名無しさん [2022/05/19(木) 18:50:45.11 ID:j8hvvms1.net]
イテレーターにするとメリット多いんだな
Rustと相性いい

153 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 19:01:17.07 ID:SnnzWk5R.net]
>>146はメモ捨ててるから計算済みのf(n)引っ張ってくるのに毎回O(n)かかる

154 名前:けどね
イテレータと相性良いように見えるとしたら0..nループと組み合わせることしかしてこなかったmainが見せる幻想

そろそろRustの話に戻ってもらっていいですか?
[]
[ここ壊れてます]

155 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 19:56:30.02 ID:X9gr9ket.net]
>>151
マジで>>133のメモ化が好ましいと思っているのか?
イテレータはメモ化とも相性が良い
例えば>>146のfibonacci_iter()を含むイテレータ汎用メモ化は即席でこんな感じ

fn main() {
let mut memo = IterMemo::new(fibonacci_iter());
assert_eq!(memo.nth(10), Some(55));
assert_eq!(memo.nth(0), Some(0));
assert_eq!(memo.nth(30), Some(832040));
assert_eq!(memo.nth(5), Some(5));
assert_eq!(memo.nth(50), Some(12586269025));
}

struct IterMemo<I> {
iter: I,
memo: Vec<usize>,
}

impl<I: Iterator<Item=usize>> IterMemo<I> {
fn new(iter: I) -> Self {
IterMemo { iter, memo: Vec::new() }
}
fn nth(&mut self, n: usize) -> Option<usize> {
for _i in self.memo.len()..=n {
if let Some(x) = self.iter.next() {
self.memo.push(x);
}
}
self.memo.get(n).cloned()
}
}

156 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 21:07:44.82 ID:wYj4kQtM.net]
汚いな

157 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 21:11:33.57 ID:+7PnyNeM.net]
複オジは何が問題だと指摘されてるのか理解しないんだよなぁ
頭悪いのにとにかくマウントだけ取りたがって恥の上塗り上塗り上塗り
何回塗るねんっw

158 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 21:20:54.65 ID:5LQoe3Bs.net]
ほらなw
ぼくのかんがえたさいきょうのひぼなっちいてれーた!
どや!? どやどやどや!!?
これで1000まで行くよw

159 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 21:27:22.70 ID:SnnzWk5R.net]
どうしてもイテレータが欲しいなら>>133に建て増ししたほうがよっぽど整理されていいよ
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=86c556a9709d959e8b9ecff08223b099



160 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 21:29:51.14 ID:u7/IlrFk.net]
>>152
イテレータの規約に反したオレオレnth()はやめてくれ
IterMemoなんて名前の構造体にnth()が実装されてればイテレータのnth()と勘違いしてしまう

161 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 21:34:02.60 ID:wYj4kQtM.net]
その前に単純にバグ入りだけど

162 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 21:51:56.08 ID:MGh63lg3.net]
メモ化と個別機能が完全に分離できている>>152の方が良さげ

163 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 21:55:11.08 ID:wYj4kQtM.net]
このスレだけでなくRust書く人間はコケ前提なのが馬鹿らしい
未知の計算するのに対策してない馬鹿野郎ども

164 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 21:56:15.85 ID:wYj4kQtM.net]
目が覚めろ
目が覚めろ

コケ前提は恥ずかしい

165 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 21:56:34.11 ID:iLpWQ9zs.net]
>>159
分離できてねーよw
アホだろ

イテレータ使ったことないのか?

166 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 21:58:30.11 ID:wYj4kQtM.net]
Rust書く人間はレベルが低いと思われても平気なのか?

167 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 22:05:28.50 ID:+v1Fmw4c.net]
>>156は普通にフィボナッチ数列を順に表示するだけでも常にVecを使ったメモ化を伴うので筋がよくない
>>152はメモ化を付け外し可能で問題点も特に無いようだが

168 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 22:13:58.00 ID:G2OEvBhv.net]
「Rustでドヤりたい素人が犯しがちな12の過ち」
みたいな記事が捗りそう

169 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 22:18:44.85 ID:iQApRYmM.net]
>>164
関数の設計ができない人の発想



170 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 22:22:18.18 ID:z7fdj+fO.net]
>>164
なんでIDコロコロ変えてるの?

171 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 22:27:10.61 ID:2ZXoSlQ2.net]
>>165
複オジ特有の妄想を一般化するなよ
「複オジがドヤ顔で晒した恥ずかしい勘違い12選」にしとけ
需要ないけどな

172 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 22:29:47.42 ID:EaXeIbDt.net]
こんな数列ごときでヒープ必須の>>156はプログラミングが下手

173 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 22:47:12.76 ID:AQMm07Qd.net]
数列ごときのプログラムしか書けない複製おじさん……

174 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 23:33:01.93 ID:wYj4kQtM.net]
cargo run --releaseで予測した動きをしないコードを書くなよ
速やかにバグを取れ

175 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 23:33:20.92 ID:vqaI/jC6.net]
Rust 1.61.0

176 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 23:35:03.68 ID:wYj4kQtM.net]
このスレの底辺のコーダーもどき全員ゴミ
まともなコードすらかけないでiterが~とか言ってんじゃねえよ
バカども

177 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 00:27:37 ID:xM0P3yOr.net]
拗らせくんもいるのか

178 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 00:53:44 ID:syYn06qN.net]
このスレを見る限りRustプログラマは低レベルの人間ばかり
まともに動きもしないものでああだこうだ言いあってるだけだ

179 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 00:53:59 ID:obugnqXb.net]
フィボナッチ数列議論スレでやれ



180 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 00:54:42 ID:syYn06qN.net]
オーバーフローのまともな対処すら知らない馬鹿ばかり

181 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 01:04:06 ID:syYn06qN.net]
俺が小学生の頃はBASICで整数オーバーフロー考慮したプログラムは書いていた
多倍長整数演算も自分で考案して天文計算もやっていた

このスレの連中は小学生の頃の俺に負けるレベルの奴しかいない
Rustを書く人間はその程度のレベルばかり

182 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 01:16:05.19 ID:P7xg55cn.net]
エイリアン vs アバター

183 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 02:33:24.77 ID:g6eOZZWy.net]
天文計算なら多倍長じゃなくて浮動小数みたいに指数部と仮数部だけ保持しておくほうがいいだろう

184 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 07:35:06.49 ID:SXN+DpBP.net]
>>177
>>146のオーバーフロー対策をしてみた
これでいい?

fn fibonacci_iter() -> impl Iterator<Item=usize> {
let mut op: Option<usize> = Some(0);
let mut oq: Option<usize> = Some(1);
std::iter::from_fn(move || {
op.take().map(|p| {
op = oq.take().map(|q| {
oq = q.checked_add(p);
q
});
p
})
})
}

fn main() {
for (n, f) in fibonacci_iter().enumerate() {
println!("f({n}) = {f}");
}
}

185 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 08:11:12.19 ID:YZ72zuyX.net]
必要ないOptionまで追加してtake.mapのネストは汚すぎる
事前に設計せずコンパイラ駆動だけで書くと汚いコードになりがち

186 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 08:24:34.35 ID:5N9lui0T.net]
>>179
勝手に戦えww
複製おじさん vs 100点おじさん

187 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 08:33:57.56 ID:7pe7/3hl.net]
>>168
1レスで晒したこの4つの無知は外せないww

(1) ムーブでビットパターンのコピーは発生しない -> ムーブ無知
(2) ビットパターンのコピーが発生するのは引数の値渡し等であってムーブとは関係ない -> 値渡し無知
(3)さらに引数の値渡しでのでビットパターンのコピーとCopyのコピーも全く異なる -> Copy無知
(4)Copyのコピーはディープであって高コスト -> ディープコピー無知

188 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 08:44:11.52 ID:SXN+DpBP.net]
>>182
フラグは必要
それをOptionで簡潔に表現した
批判したいならば代替コードを出すべき

189 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 08:52:03.20 ID:Te9amNUZ.net]
フィボナッチ数列を他の計算の入力として使わないのなら何番目まで必要なのかをusizeとかで受け取ってBigUintのイテレータ返すので十分かな



190 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 08:54:16.47 ID:Te9amNUZ.net]
うげ
俺が出したのは>>185の言う代替案じゃないから
勘違いしそうだから念のため

191 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 09:01:03.34 ID:SXN+DpBP.net]
>>186
うん
今回はオーバーフローの対処をしろと言う>>177のリクエストに応じたのみ

192 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 09:03:09.77 ID:SXN+DpBP.net]
>>182
mapのネストが苦手と言うならば
mapを使わないバージョンも用意したのでどうぞ

fn fibonacci_iter() -> impl Iterator<Item=usize> {
let mut op: Option<usize> = Some(0);
let mut oq: Option<usize> = Some(1);
std::iter::from_fn(move || {
let p = op.take()?;
op = (|| {
let q = oq.take()?;
oq = q.checked_add(p);
Some(q)
})();
Some(p)
})
}

193 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 09:18:53.35 ID:qCLhnuk6.net]
firefoxってどのへんにrust使ってるんだっけ

194 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 10:35:37.22 ID:t0eTe6yv.net]
>>189
さらに汚くしてどうすんのw

195 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 10:55:09.60 ID:SXN+DpBP.net]
>>191
汚いと言うならば同じ動作をするもっと美しいコードを出そう
「汚い」と言う人はいつもコードを出せない人だから負け惜しみで言っているのかと

196 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 10:59:18.09 ID:6DrTvbrK.net]
>>185
unfold使ってた時と同じでフラグという捉え方がコードが汚くなる原因
命名を疎かにせず変数や関数の型を考えよう
そうすればOptionが必要なものと不要なものくらいは区別できるはず
ヒント終わり


コンパイルができた動けばいいだけのコードからは早めに卒業しようね

197 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 11:03:32.49 ID:WF81UNfB.net]
>>192
君のコードを汚いという人間は一人や二人ではないだろう?
それがなぜなのか?
なぜ汚いと言われるのか?
自分で考えて足掻いてこそ成長するんだよ

198 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 11:08:36.62 ID:5NF4cE9g.net]
>>192
ちなみに汚いコードの反対は汚くないコード
美しいコードである必要はない
実践で重要なのは美しいコードよりも汚くないコードを書くこと

199 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 11:16:04.61 ID:SXN+DpBP.net]
>>193
有無を表現することが必要だからOptionを使うのが最適
Optionを使わずに書けるのならばコードを出そう

>>194
今まで言われたことない
今回言われたから、いつも汚いを連呼しているがコードを出せないダメな人かなと
反論があるならばコードで示そう



200 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 11:26:17.74 ID:SXN+DpBP.net]
>>195
その通りだよ
だから汚くなく、簡素でわかりやすく、無駄をせずに効率も良いコードを>>189に出した
同じ動作と同じ効率でもっと簡素に書けるのならばコードを出してごらん

201 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 11:47:37.20 ID:hTlaNj/P.net]
ベンチも取らずに効率とな?

202 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 11:48:38.99 ID:50J2u53j.net]
>>184
その4つは全部並んでたからインパクト強いけど
個々で見るとムーブや値渡しの間違った理解は複オジ特有じゃないからちょっと弱いな

203 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 12:16:58.58 ID:lLMUMPSU.net]
>>196
>今まで言われたことない
すごーいwww
お薬必要ですね

204 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 12:28:38.69 ID:pMSjr2Vl.net]
後出しでどんどん条件が変わっていくから話がまとまる訳がない
これ以上続けたいならソース貼るときは前提条件を共有した上でコンパクトに議論を終わらせてくれ

205 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 19:05:29.84 ID:eTvpznuT.net]
複オジは断念したみたいだから
俺の考える汚くないコードを参考までに貼っとく
https://play.rust-lang.org/?edition=2021&gist=cb739f9fa655a73ced7e87e681237d9f

206 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 19:24:47 ID:P7xg55cn.net]
まずイテレータやめろや

207 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 19:37:01 ID:0DaneQt4.net]
 
 __     __  ___ _____  _____     ___ ___    ___
 |   |    /  /  |  //       | /__  __/ [][] _| |_| |__ _| |_
 |   |.   /  /  /  / /   / ̄ ̄|. l    / /     |    _  | |_  レ'~ ̄|
 |   |  /  /  /  / /   /.  / /    |  |___      ̄|  | / / /   /| |
 |   |  /  /  /  / /    ̄ ̄ /     \__|     |  |  ̄ /_  /  | |_
 |   |. /  /  /  / /   / ̄ ̄ ̄                |_|     |__|   \/
 |   |/  /  /  /. /   /  
 |.     /  /  /  /   / 
 |    /. /   | ./   /  
  ̄ ̄ ̄   ̄ ̄ ̄.  ̄ ̄ 

208 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 21:06:57.55 ID:/0md/MJf.net]
tauriどうよ

209 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 21:13:38.21 ID:zMcvGPNW.net]
>>202
successorsバージョンはシンプルでいいね



210 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 21:27:07.51 ID:P7xg55cn.net]
>>190
https://wiki.mozilla.org/Oxidation#Shipped
話題になったServo関連はもちろんとして、他は文字エンコーディングとか言語関連での採用が多いみたいね

https://4e6.github.io/firefox-lang-stats/
行数ではGecko全体の10%程度

211 名前:デフォルトの名無しさん [2022/05/20(金) 21:57:08.66 ID:j6iPiVjl.net]
RustとC++を学ぼうと思ってるプログラミング初心者です。
両方ともそのうち学ぶとして、どっちを先にした方がいい感じですか?

212 名前:デフォルトの名無しさん [2022/05/20(金) 21:59:12.98 ID:j6iPiVjl.net]
あ、スレチだったかも...すみません

213 名前:デフォルトの名無しさん [2022/05/20(金) 22:06:04.12 ID:j6iPiVjl.net]
連投すみません...
C++ vs Rustのスレ終わってたから一応どっちにすべきかここで聞きたい
ちなみに自分の中では
・C++のほうがほんの少しだけ速い
・Rustのほうが書くのとかメモリとか楽
・C++のほうが実行環境とか充実してる
みたいな認識になってます。よろしくお願いします

214 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 23:40:49.05 ID:1Ryh5lzf.net]
>>207
ほー
ありがとう

215 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 00:10:36.10 ID:gcU5DXZF.net]
>>210
どういう領域のプログラムを作りたいかでどっちが適してるか変わるからもうちょっと学ぶ背景とか教えて

216 名前:デフォルトの名無しさん [2022/05/21(土) 01:38:57.59 ID:qnjM1Lxc.net]
>>210
仕事で使うほう

217 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 01:45:27.47 ID:7bviEaCH.net]
なんのために学ぶのかにもよるけど、なんにせよC言語とJavaScriptはエンジニアなら全員勉強すべき
急いでないなら、そのあとでC++とRustを選んでもいい

218 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 01:46:40.74 ID:t6WWJYF7.net]
まぁC言語だよな

219 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 01:58:05.82 ID:y9SWDgH5.net]
せっかくRustのスレに来たんだしRustをやりなよ
C++をかじるのはいいけど仕事で使うわけでないなら
じゃじゃ馬を飼い馴らすバッドノウハウを今更学ぶ必要はないよ



220 名前:デフォルトの名無しさん [2022/05/21(土) 07:32:51.54 ID:yS5lPrM7.net]
回答ありがとうございます…
とりあえずRustにしておこうと思います

221 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 09:16:08.98 ID:iurUdiXY.net]
>>217
Rustの入門書をぱらぱらと何冊か見たけど計算の優先順位の話とか普通のプログラム入門は全く書かれてないよね
C++の方は確実に書かれてる

入門はCやC++の方がいいと思うよ

222 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 09:22:23.20 ID:iurUdiXY.net]
個人的にRust以外にやったほうがいいと思う言語
C C++(深入りしない) java

多分必用になる(と思われる)言語
javascript python

223 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 09:40:03.63 ID:wAUuWoIP.net]
Cをざっと学んでからRustかな
C++は(深入りしない)が重要なんだけど、初心者が自分で判断するのは厳しい
既存の資料もC++98から20まで玉石混交という感じだし

224 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 09:44:15.57 ID:iurUdiXY.net]
自分はOOPは学んだほうがいいと思う派なのでRustだけでは不十分だと感じる
絶対業務で必要になるし
C++ java C# 学んだほうがいいと思う

225 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 10:11:16 ID:gcU5DXZF.net]
いろんなパラダイムの言語を触るのが良いよ

226 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 10:19:06 ID:5oK/i29u.net]
Rustを学ぶならばほとんどの分野でC++とJavaは不要
C言語は実用とは別に最初に基礎教養として学んでおいたほうがRustの理解が早い
C→Rustも可能だが、その前にスクリプト言語などでオブジェクト指向(のうちインスタンスとメソッド呼び出し等)と、非同期(async/await)をそれぞれ学んでおくと楽だと思う
その場合のスクリプト言語はJavaScript(ただしHTML/CSSに踏み込まなくて済むNode.js)がオススメかな

227 名前:はちみつ餃子 mailto:sage [2022/05/21(土) 10:46:13.19 ID:JD6rd3hb.net]
単に習得するためなら Rust を学ぶために他の言語を先に知っておく必要はないが、
C++ を先に使っていると Rust の「ありがたみ」に納得しやすいという意見はあるみたいだね。
まあ C が基礎教養であるというのは私も同意。

228 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 10:50:44.47 ID:iurUdiXY.net]
Rustだけを学ぼうとしてもその環境が整ってないんですよ

さっきも書いたけど入門書に演算子の優先順位とかそのレベルの話がどこにも書かれてない
他の言語に乗っかって入門するしかない

229 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 10:59:08.26 ID:5oK/i29u.net]
>>224
C++は不要
Cを習得しておけばRustのありがたみがわかる



230 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 11:34:26.44 ID:jUaeJjgy.net]
>>225
演算子の優先順位の話はオライリー本には書いてあるよ
プログラミングを初めて学ぶ人間がRustから始めるべきじゃないというのは完全同意だけど

231 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 11:47:35.41 ID:vC8/2hE9.net]
ぼくはガベージコレクションが嫌いです

232 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 11:50:19.62 ID:KkLFGMWv.net]
オライリー本もヒープとかスタックとか出てくるあたり、CやC++で動的メモリ確保の面倒くささを知ってる人向けだと思う

233 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 11:50:43.88 ID:uR6sIAw1.net]
メモリ管理まわりの勉強はcで必須

234 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 11:56:37.53 ID:5oK/i29u.net]
逆に考えよう
C→Rustと進むだけで十分であり、何か困ることある?
困ることないよな

235 名前:デフォルトの名無しさん [2022/05/21(土) 12:04:35.32 ID:CYzzzsUy.net]
ゴミ集めてどうするんだっていう。

236 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 12:06:48.99 ID:gyqhSlT2.net]
十分かどうかはさておき
そもそもCをすべきかどうかというと微妙かもしれない
Cしかやってなさそうな人特有の
・変数がたくさんとっちらかった
・変数名が暗号めいてて
・ifやforが多重になってて
・グローバル変数を平気で使っちゃってる
コードみたことあるでしょ
それはそうするしかやり方を知らないから

一方、抽象度の高い言語からやった人は先にそっちに慣れるんで
List(8, 9, 3, 1).sorted.reverse.foreach(print)
こういうふうにスッキリ書けるのを目指してくれる

237 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 12:09:45.76 ID:0tb1eDc3.net]
オブジェクト指向がいちばん大事

238 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 12:10:08.62 ID:Uoz2jgaJ.net]
格下相手の話だけイキイキするな

239 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 12:12:07.01 ID:5oK/i29u.net]
>>233
それは同感で非常に重要
だから最初に>>223でCとJavaScriptを先に学ぶのをオススメと書いた



240 名前:デフォルトの名無しさん [2022/05/21(土) 12:39:26.68 ID:5HpZ3As+.net]
ありがたみなんて知る必要ないでしょ
典型的な老害だな

241 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 12:39:58.62 ID:0jWT+RR4.net]
>>221
C++ と java はやったけど C# 必要ですか?

242 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 13:06:24.69 ID:dZzrxVLl.net]
Rustは、プログラミング経験者向けの情報が多い気がするから、PythonとかJavascript辺りをサラッと試してからでも良い気はする。

コンパイルとはとか、型って何?とか。

243 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 14:18:25 ID:2XTF0B5o.net]
>>235
それな
自演ネタふりの可能性すらある

244 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 14:45:48 ID:is6KmnjI.net]
いつも同じパターン
質問や

245 名前:相談があると、答えたり情報を出したりせずに、それらをしている人たちをバカにする
コードが出ると、代案コードを出すわけでもなく、とにかく批判のみ行なう
[]
[ここ壊れてます]

246 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 14:51:09.52 ID:/NlDQvZW.net]
プログラミング初心者は言語知識よりも
プログラミングという行為がどういうものなのか
どういうことを考える必要があるかというメタ認知を得ることが最も重要

メタ認知を獲得するために最も効果・効率ともに高い方法は
考えて・書いて・動かして結果を確認するというフィードバックサイクルをとにかく繰り返し回すこと

初心者は上記のサイクルが回しやすい言語から始めると後々の成長が早い
C/C++/Rustはサイクルを回すために越えなければならないハードルが相対的に高いため
現代では初心者向け言語ではない

247 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 14:57:49.13 ID:7TYnpeBW.net]
>>241
被害妄想はげしくね?
代案も代替コードもそれなりに出てるよね?
それに悪い物を悪い(汚い物を汚い)というためだけに毎回代案を用意する必要なんて全くないよ

248 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 15:08:42.12 ID:d40Kl4Hf.net]
意訳:
ぼくちゃんがかいたさいきょうのコードをひはんしないでくだしゃい
ぼくのかんがえたやつがさいきょうなんでしゅから

249 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 15:15:12.95 ID:terB7Bhw.net]
なでしこ(プログラミング言語)も使ってあげて、、



250 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 15:15:33.24 ID:lzMNCHOR.net]
お前ら>>205みたいなのにも反応してやれよ

251 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 15:46:51.93 ID:zcBlczkH.net]
>>246
前スレがいしゅつ

252 名前:デフォルトの名無しさん [2022/05/21(土) 16:45:07.99 ID:dBYh2+4n.net]
>>218
そのかかれてるC++入門本のタイトルあげてみろ

253 名前:デフォルトの名無しさん [2022/05/21(土) 16:48:39.25 ID:dBYh2+4n.net]
>>225
お前、>>218 で *計算*の優先順位って書いてるじゃん。
>>225 でしれっと演算子の優先順位にしてんじゃねーよ。

254 名前:デフォルトの名無しさん [2022/05/21(土) 16:54:22.75 ID:dBYh2+4n.net]
お前ら新しい言語勉強する時に本読まないの?
たいていの本には想定する読者ってのが最初のほうに書いているだろ。
現在出版されてるRustの本で他の言語全く使った事ない読者を想定してる本はあるのか?

255 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 17:14:51.81 ID:is6KmnjI.net]
>>246
Tauriではなくweb-view crateがシンプルで良いと思う

256 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 17:17:44.98 ID:is6KmnjI.net]
>>250
新たなプログラミング言語を学ぶために本を読んだことがないのでRustについてもわからん
わざわざ本を買って学習する人は少数派ではないか?

257 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 17:21:24.15 ID:7bviEaCH.net]
おれは基本は本を読む派だけど、読まない派のほうが多そう

258 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 17:23:04.81 ID:mDh+ij7H.net]
昔は本買うか図書館行くかしかなかったもんね
二十年くらい前からこっちはもう本イランけど
ネットで見れるでしょ何もかも

259 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 17:26:29.76 ID:ImS18vsK.net]
最近はもっぱら言語公式のチュートリアル。Rustだと「the book」



260 名前:はちみつ餃子 mailto:sage [2022/05/21(土) 17:33:54.80 ID:JD6rd3hb.net]
>>252
必ずしも本でなくてもいいが……。 体系的にまとめられた入門用の文書は読むべきだと思う。
Rust に関して言えば >>1-3 で挙げられているような文書があるからありがたく利用させてもらう。

基礎が身についてない段階で詰まるたびにググるみたいな学び方だと個々の情報の断片を
自分の理屈で勝手に (誤った形で) 結び付けてにっちもさっちもいかなくなってるのはよく見る。

261 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 17:59:31.75 ID:WnQbOX9f.net]
確かにこのスレではよく見る
>>112,113

262 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 18:16:32.63 ID:5PeJx3n4.net]
複オジは本を読まないのが原因とは違うと思うぞ
本を読んでも自分勝手な理屈を脳内補完してそれが正しいと思い込むタイプ

263 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 18:31:09.43 ID:Uoz2jgaJ.net]
>>251
実際使ってるの?
github HEADの最終更新11ヶ月前とかだけど

264 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 18:55:12.40 ID:is6KmnjI.net]
>>259
web-view crateは非常にシンプルで
最初のwebviewビルダーと
JavaScript側からのRustの呼び出しと
Rust側でJavaScriptの実行の三つだけをサポート
学習コストもほぼゼロ
だから更新するようなことがほとんど無い
それでも例えばHTMLのonclick等でRust側を呼び出せてRust側で処理してJSで反映ということが出来てうれしい

265 名前:デフォルトの名無しさん [2022/05/21(土) 19:02:17.99 ID:qnjM1Lxc.net]
>>252
じゃあ >>208 から始まる話題にはお前はおそらく不適切だからレスすんなよ。

266 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 19:12:43.38 ID:is6KmnjI.net]
>>261
唐突にポカーンだけど
そういった、人への批判は意味がなく荒れるだけで誰の役にも立たないので止めたほうがいいよ

267 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 19:21:14.01 ID:v1GULhnc.net]
たしかに
「そういった人」への批判は意味がなくて、荒れるだけで、誰の役にも立たない

268 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 19:27:36.73 ID:tJscH9kk.net]
「そういった」がかかるのは「人」ではなく「批判」じゃないのかな

269 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 19:30:02.17 ID:gcU5DXZF.net]
元のレスをもじっただけで
唐突に殴りかかってくる人には何を言っても無駄だよと諭してるだけでは



270 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 19:32:49.23 ID:VA28KJC+.net]
多くの人は良い人たちだが
残念ながらこのスレにも他人を叩いたり言いがかりを付けたりするのが好きなアレな人が紛れ込んでいる

271 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 19:43:36.19 ID:7bviEaCH.net]
そういうのは反応を見て楽しもうとしてるだけだろうから、無視するしかない

272 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 21:18:46 ID:3ug0n3Zl.net]
>>260
tauriも同じようなもんじゃないの?

273 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 23:40:28.85 ID:GKlgLxBR.net]
今流行のアプリをweb-viewのテストで作ってみたがこんな感じなのか

const HTML: &str = r#"
なぜかHTML部分はセキュリティうんぬん言われて貼れないので略
"#;

fn main() {
struct Fibonacci { index: usize, cur: usize, pre: usize }
let fibonacci = std::sync::Mutex::new(Fibonacci { index: 0, cur: 0, pre: 1 });
let webview = web_view::builder()
.content(web_view::Content::Html(HTML))
.invoke_handler(|webview, arg| {
match arg {
"next" => {
let mut f = fibonacci.lock().unwrap();
(f.index, f.cur, f.pre) = (f.index + 1, f.cur + f.pre, f.cur);
webview.eval(&format!("show({}, {})", f.index, f.cur))?;
},
"exit" => webview.exit(),
_ => unimplemented!(),
};
Ok(())
})
.user_data(()).build().unwrap().run().unwrap();
}

274 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 13:23:37.89 ID:kzep88by.net]
MozilaはFirefoxを丸ごとRustに書き換える予定はあるん?
今はまだ一部だけだよねRustになってるの

275 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 14:00:05.26 ID:IGyJdnKj.net]
>>270
そうなの?

276 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 14:06:50.95 ID:1cbV2u9G.net]
FirefoxはレンダリングエンジンをRustでゼロから作ってるんじゃないの?

277 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 14:11:38.83 ID:s/f+VQic.net]
自分で確かめて
https://github.com/mozilla/gecko-dev

278 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 14:14:17.72 ID:pc68DccV.net]
servoはまだ実験段階だったと思う

279 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 14:54:56.44 ID:kzep88by.net]
>>273
ありがとう~



280 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 15:29:45.38 ID:srSb/t9O.net]
>>270
特にそういう予定はないと思う
servo自体も別に次世代Firefoxを目指してるとかではなく、Rustでwebブラウザを書く実験プロジェクトという感じ
その実験でうまく行ったコンポーネントを徐々にFirefoxに移植していっている

281 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 15:57:34.13 ID:pc68DccV.net]
アプローチとしては正しい姿なんだろうな

282 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 17:29:35.11 ID:1mUE50i3.net]
暇を持て余した神々の遊び

servoと言うよりモンスターエンジンだね…

283 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 17:37:14.17 ID:7nmc6Bff.net]
>>270
C++で書かれてる部分は置き換えられるかも知れないけどJSで書かれてる部分までは置き換えしないんでないかな

284 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 19:19:39.37 ID:9fWZc0TE.net]
JSとか言ってるのは君だけだと思うよ

285 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 19:22:44.24 ID:7nmc6Bff.net]
>>280
FirefoxではC++と同じくらいJS使われてるよ
https://www.openhub.net/p/firefox/analyses/latest/languages_summary

286 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 19:25:56.61 ID:nrxT1a+p.net]
JSの部分を置き換えるなんてはなから誰も思ってないってことだと思うが

287 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 19:26:01.69 ID:LKVhbTwj.net]
意訳すると「JSで書かれてる部分まで置き換えるとか言ってるのは君だけだと思うよ」かな?
言ってないね

288 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 19:29:03.65 ID:7TIjBb30.net]
>>282
正解

>>283
アホ
JSで書かれてる部分まで置き換えるかどうかとか言ってるのは君だけだと思うよ

289 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 19:33:12.87 ID:LKVhbTwj.net]
>>284
じゃ>>280で「言ってる」とか書くな
ボケ



290 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 19:46:00.83 ID:u+qheqhP.net]
>>285
はあ?
JSって言ってるよね?
バカなの?

>>279 JSで書かれてる部分までは置き換えしないんでないかな

291 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 19:56:58.26 ID:nleMAmaj.net]
>>270 が「Firefox を "丸ごと" 書き換える」と言っていたので全部はRustにならないよと伝えたんだけどなんかお気に召さなかった?

292 名前:デフォルトの名無しさん [2022/05/22(日) 20:16:58.99 ID:KMOjS2oh.net]
>>270が言うのはservoのことでquantumの動機がcssパーサrustで書いたら
安全だったからC++で書かれたコンポーネント置換しよだからjs出る余地ないじゃん。
>>282で終わった話。

293 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 20:17:09.14 ID:M3jNarf6.net]
そうだね、そんなふうに言われたらシェルスクリプトやMakefileまでrustで置き換えるんじゃないかって思っちゃうよね。


馬鹿なん?

294 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 20:36:16 ID:7nmc6Bff.net]
FirefoxはXULのイメージがあってJSも主要な構成要素だと思ってたから変なレスつけちゃったね
皆さんの機嫌害しちゃって申し訳ない

295 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 20:54:23.92 ID:KMOjS2oh.net]
よく見たらID変えて暴れてるやつまだ居座ってるのか。

>>290
XULはだいぶ前に死んだよ。
XULRunnerが単体で利用困難な問題が解決できなくて存在意義を失った。

296 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 22:32:56.13 ID:7nmc6Bff.net]
>>291
XUL完全になくなったの?
XBLは完全に消えたって聞いたけどXULは細々と生き残ってるものだと思っていた

297 名前:デフォルトの名無しさん [2022/05/23(月) 01:12:40.07 ID:436cwmll.net]
>>290
ほんと反省しろよ

298 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 02:27:31.54 ID:n+tkR/ue.net]
反省してま~す

299 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 19:27:40.26 ID:qJLEBqNZ.net]
>>189
おまえら全員そうだがフィボナッチ数列でusize固定はおかしいだろ
コード自体は問題ないが <T: Zero + One + CheckedAdd> を付けろ
あとは0と1をT::zero()とT::one()へ置き換えればi8型からBigUintまで何でも動作するようになる
https://play.rust-lang.org/?edition=2021&gist=929f3df48db39182558dfad6fe8d1cda

さらに今回はfrom_fn()利用をそのままsuccessors()利用へ変換できるので見やすくなる
fn fibonacci_iter<T: Zero + One + CheckedAdd>() -> impl Iterator<Item = T> {
let mut oq = Some(T::one());
iter::successors(Some(T::zero()), move |p| {
let q = oq.take()?;
oq = q.checked_add(p);
Some(q)
})
}
ちなみにCloneを要求しないためBigIntなどでも無駄なコスト増とならない

>>202
そのコードは暗黙のコピーが発生している
from_fn()使用版のコードはcurrがキャプチャ変数なので「let n = curr?;」でコピー発生
successors()使用版のコードはクロージャ引数「|&curr: &usize|」の「&」でコピー発生
usizeならば問題はないがBigIntなどでそのコードは動かないので劣る



300 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 19:52:54.51 ID:aUQlcplw.net]
暗黙のコピー発生って気にするべき?
!Copyならコンパイルエラーになるしこれまで気にしたことなかった

あとcurrはmoveでキャプチャされるからcurr?で発生するのはmove(とそれに伴うmemcpy)だけど、moveのコストも気にすべき?

301 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 20:00:24.28 ID:pMTVA02Y.net]
>>296
それは逆
そのキャプチャされた変数はクロージャが呼ばれるたびに何度も使われる
つまりムーブされてはいけない、つまりムーブ禁止となる
したがって n = curr? で currの中身は nへムーブされずコピーとなる

302 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 20:11:34.97 ID:aUQlcplw.net]
>>297

303 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 20:12:20.25 ID:PbQSFqOo.net]
>>296
必ずCopy前提の型しか扱わないときは気にしなくていい
しかし今回は!Copyの数値型でも動かないと話にならないからコピーが起きるコードを避けないと

304 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 20:19:20.85 ID:aUQlcplw.net]
>>299
!Copyの場合はコンパイルエラーになるからわざわざ人間が注意を払う必要はないと思うが、気にすべき?
usizeしか使わなくてもTに置き換えた場合を想定してコードを書くべきということ?

305 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 20:27:05.01 ID:PbQSFqOo.net]
>>300
u128を使ってもf(200)がオーバフローするような今回の案件でCopy型が前提のコードはよくない
案件次第だけど今回はコピーの有無を気にすべき案件

306 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 20:43:27.72 ID:4RywOifH.net]
>>295
自分のレスに他人のふりしてレスするキチガイ汚コーダーこと複オジさんちぃーすっ

307 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 20:49:26.67 ID:iRCkPDCQ.net]
>>296
それはmoveの意味を間違えているぞ
>>202のcurr?はコピーが発生する
FnOnceじゃないんだからcurrの値がmoveされたら次に使えなくなる
move禁止となりCopy型ならコピーが発生し!Copy型ならエラーとなるコード

308 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 21:10:50.44 ID:aUQlcplw.net]
>>301
copyを気にするのではなくusize or BigIntのどちらを使うべきか意識すべきと解釈した
usizeで良い場合はcopyは気にせずして良い

>>303
FnOnceかFnMutかFnかは関係なくて
moveなclosureでキャプチャしたらmove発生するよ
moveでキャプチャされた値をクロージャの中でさらにmoveできるか、refしかとれないかがFnOnceとFnの違い

309 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 21:18:12.89 ID:gtDJ5U8B.net]
https://www.reddit.com/r/rust/comments/3wubj0/comment/cxzlvt4/

num_traitsによるジェネリクスは絶対の正解ではないから適当なところで諦めようね



310 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 21:23:42.08 ID:iRCkPDCQ.net]
>>304
それは別の話でその違いを理解できていないようにみえる
クロージャへのmoveはクロージャが作られた時に終っていてクロージャ内のコードでの動作なは関係ない
間違っているのは後者の話でこの部分

>>296
> curr?で発生するのはmove(とそれに伴うmemcpy)

curr?でmoveは起きない
curr?で起きるのはコピーである(!Copy型ならエラー)

311 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 21:33:03.23 ID:9psioJ1p.net]
>>296
コピーもmoveも同じでそれがボトルネックかどうかが重要
数値プリミティブの場合はコピーを他の方法に変えたところでボトルネックが解消されることはまずないから気にする必要はない

BigUint前提ならVecと同じでmoveやクローンやのオーバーヘッドはそれなりに気にした方がいい
逆に現実的にはオーバーフロー考慮する必要がなくなるからCheckedAddが余計なオーバーヘッドになる

特性の違う物をジェネリック等でまとめたほうがいい場面なのかそれぞれ別の実装を用意したほうがいい場面なのか判断できることが大事

312 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 21:43:43.53 ID:Ayvhc9bp.net]
>>307
それは間違ってるぜ
BigUintのchecked_add()は常にSomeを返すためにチェックとSomeは消えてオーバーヘッドとならない
さらにRustのジェネリックは各型にmonomorphizationされるためジェネリックで書いてもプリミティブ型やBigUint型のコードはそれぞれに最適化される

313 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 22:04:52.01 ID:gtDJ5U8B.net]
ヒント:
Ratio<T> where T: Integer + Clone + CheckedAdd + CheckedMulは>>295の条件を満たす

314 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 22:25:54.83 ID:xQdLaNrd.net]
fibonacci_iter::<Ratio<u8>>()すると
ちゃんと最後233で止まるのね
ジェネリック凄い

315 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 22:34:47.31 ID:gtDJ5U8B.net]
ククク……RatioのCheckedAddの実装を見ても果たして同じことが言えるかな

316 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 22:37:22.49 ID:HY9DKb05.net]
汚染が始まった!

317 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 22:55:06.68 ID:GQTw0VDg.net]
>>311
たしかにRatioの実装が悪いな
まずAddと同様に
if self.denom == rhs.denom {の分岐をし
そして1の場合は
self.numberとrhs.numberでchecke_addするくらいはしないとな

318 名前:デフォルトの名無しさん [2022/05/23(月) 23:14:26.50 ID:bbzZFnmN.net]
ジェネリックに書いてもRatio専用コードを書いても
どちらもRatioの実装を使わざるをえないのだから同じ結果となる

そしてRatio専用コードを書こうとしても外部からは工夫のしようがないため
ジェネリックからコンパイル時にモノモーフィゼーションされるコードと全く同じになる

319 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 23:46:45.42 ID:lhQpV8J5.net]
このスレごちゃごちゃした書き込み多すぎ



320 名前:デフォルトの名無しさん mailto:sage [2022/05/24(火) 00:53:51 ID:PPYrRT7r.net]
各型を個別に確認しないと良いか悪いか判断できないならジェネリックにしちゃだめでしょ

321 名前:デフォルトの名無しさん mailto:sage [2022/05/24(火) 01:46:13.03 ID:Y7WsYtba.net]
>>316
そんな個別に確認しなきゃいけないことは起きないから大丈夫
Rustの標準ライブラリも大半はジェネリックに書かれている

322 名前:デフォルトの名無しさん mailto:sage [2022/05/24(火) 07:59:54.71 ID:fUfb5k5z.net]
>>307
>特性の違う物をジェネリック等でまとめたほうがいい場面なのかそれぞれ別の実装を用意したほうがいい場面なのか判断できることが大事
禿同だわ
コードパズルやってるやつにいつも感じる違和感の原因はこれだな
こういう能力って何て言うんだろ?

323 名前:デフォルトの名無しさん mailto:sage [2022/05/24(火) 08:06:11.71 ID:eTAydD0N.net]
>>318
でも今回の件の数列ならばジェネリックが正解やろな
わざわざ各数値型に個別に実装しなくて済む
分けるほうが不自然で手間

324 名前:デフォルトの名無しさん mailto:sage [2022/05/24(火) 08:45:23.72 ID:ie6AbIfB.net]
男の人って気持ち悪い…
どうして少女をそんなに汚したがるの?
お母さんに悪いとわおもわないの?

325 名前:デフォルトの名無しさん mailto:sage [2022/05/24(火) 08:52:13.15 ID:anVhILE8.net]
>>318
広く言えば設計能力
狭く言えば実装パターンの選択能力

総合的な能力だから一朝一夕には身に付かない
実装パターンの整理が進んでないRustだと特に

326 名前:デフォルトの名無しさん mailto:sage [2022/05/24(火) 11:37:27.58 ID:0VHIsXBI.net]
KISS原則だろ

327 名前:デフォルトの名無しさん mailto:sage [2022/05/24(火) 19:12:35.28 ID:VR6742Ui.net]
>>202のlet n = curr?;の部分を
>>189はlet n = curr.take()?;としてコピーになるのを回避しているだけかと思ったら
両者が全く異なるアルゴリズムを採用していることに気付いた
>>202のアルゴリズムだとどうやってもコピーを避けられないから詰んでるね

328 名前:デフォルトの名無しさん mailto:sage [2022/05/24(火) 22:16:43.51 ID:oAG0OLUi.net]
prev, currの状態管理だとcurrの値をprevに代入するのと戻り値として使うのと2箇所に必要になるからね
curr, nextで管理すればいい

329 名前:デフォルトの名無しさん mailto:sage [2022/05/24(火) 22:24:27.19 ID:LZzc/1GO.net]
アルゴリズムというほど大げさな話ではないだろ
f(n)を求めるnext()が呼ばれた時に

>>189は内部にf(n)とf(n+1)を持っていて、足し算してf(n+2)を作る
そして内部にf(n+1)とf(n+2)を残して、f(n)を返す

>>202は内部にf(n-1)とf(n)を持っていて、足し算してf(n+1)を作る
そして内部にf(n)とf(n+1)を残して、f(n-1)は捨てて、f(n)をコピーして返す
つまりムダ

>>324
同意



330 名前:デフォルトの名無しさん mailto:sage [2022/05/24(火) 23:52:58.32 ID:m/W944BH.net]
フィボナッチ数のような単純な問題でもプログラミングセンスに差が出るものなんだな

331 名前:デフォルトの名無しさん [2022/05/25(水) 09:34:10.65 ID:veJPShsI.net]
>>218
まずはCから始めるのは間違ってない
Cは仕様が小さいからひと通り学ぶのにそんなに時間は掛からないからね

332 名前:デフォルトの名無しさん mailto:sage [2022/05/25(水) 13:26:51.10 ID:4b57184O.net]
Webシステム中心ならRustとRails どっちを中心に勉強すればいい?

どうせ仕事で使うのPHPとjsだけど

333 名前:デフォルトの名無しさん mailto:sage [2022/05/25(水) 13:32:36.84 ID:pqSOGvoX.net]
RustでETみたいなのって書けるん?
てかテンプレートはC++みたいに汎用性高いの?
それともC#みたいに適用範囲絞ってる?

334 名前:はちみつ餃子 mailto:sage [2022/05/25(水) 13:40:48.57 ID:9QZiEKx+.net]
>>329
C++ で言うところのテンプレートは Rust には無いよ。 ジェネリクスは ML 風の型システムでやってる。
マクロは Lisp 風と言えると思うけどトークンが型付けされてるから Template Haskell とかのほうが近いかもしれない。

335 名前:デフォルトの名無しさん [2022/05/25(水) 20:05:45 ID:G6RbJxKu.net]
なんだじゃあRustだめじゃん。

336 名前:デフォルトの名無しさん mailto:sage [2022/05/25(水) 20:20:43.79 ID:2d7iZvnp.net]
>>331
むしろC++のテンプレートよりもRustのの方がほとんどの利用方法で便利かつプログラミングしやすく快適になった

337 名前:デフォルトの名無しさん mailto:sage [2022/05/25(水) 20:47:56.26 ID:L8VrP5Wq.net]
>>331
そうだよ。ダメだから君もRustは使わないほうがいい

338 名前:デフォルトの名無しさん mailto:sage [2022/05/25(水) 21:47:24.60 ID:pqSOGvoX.net]
行列クラスを作って

X += A*(B+C)/D

みたいな演算子の多重定義して、すっきり1式で書くことできますか?

339 名前:デフォルトの名無しさん mailto:sage [2022/05/25(水) 22:02:04.30 ID:pqSOGvoX.net]
Matrix<Complex> X(2,2 );
Matrix<double> Y(2,2 );

Y << 1., 2.,
3., 5.;

X = (double)(Y^3);

みたいなことrustで書きたい



340 名前:デフォルトの名無しさん mailto:sage [2022/05/25(水) 22:12:09.13 ID:L8VrP5Wq.net]
>>335
もちろんできる
こういうのがほしいんでしょ
https://docs.rs/simple-matrix/latest/simple_matrix/

初心者の題材としては

341 名前:適切そうだから、自分で実装してみてはいかがか []
[ここ壊れてます]

342 名前:デフォルトの名無しさん mailto:sage [2022/05/25(水) 22:17:54.75 ID:pqSOGvoX.net]
スマソ
X=(Complex)Y^3
だた

343 名前:デフォルトの名無しさん mailto:sage [2022/05/25(水) 22:26:34.33 ID:pqSOGvoX.net]
>>332
そこんとこ詳しく
解説サイトでもいいけど

344 名前:デフォルトの名無しさん mailto:sage [2022/05/25(水) 22:36:32.50 ID:9QZiEKx+.net]
とりあえず一度は the book を読め。
根本的な言語デザインが違うからそこだけ抜き出して詳しい説明なんてできないよ

345 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 00:08:48 ID:U/g7+l0+.net]
rustてこんなコードも許すんだな

fn main() {
println!("Hello, world!");
main();
}

https://play.rust-lang.org/
でやってみるとスタック溢れて死んだけど一応実行できるのねww

346 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 07:58:26.46 ID:a0cw3gsx.net]
そんなことで草生やすのはおそらくキミひとり
他の人らは真顔でキミの発言を見守ってるよ

347 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 08:48:32 ID:8L/oafM1.net]
>>341
いや、そんなふうに思ってるのはキミひとりだから

348 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 09:21:13.14 ID:U/g7+l0+.net]
エントリポイントであるmainの停止条件のない再帰が
何のerrorもwarningもなくコンパイルできてしまい、
当然スタックオバフロで停止してしまうなんて間抜けすぎると思ったんだけどね
これが先進言語なのか?ww

349 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 09:45:45 ID:wRvm8KMl.net]
>>343
最適化したら、ループに変換されて死ななくなるとか?



350 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 10:23:40.75 ID:m4beE+3q.net]
Go でやってみたら gopls(Language Server)で infinite recursive call って warning が出た
実行できるけど、

runtime: goroutine stack exceeds 1000000000-byte limit

と表示されて強制終了

351 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 10:39:49.31 ID:EVCXwRA4.net]
>>343
警告出るよ

https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=2c7c027a6cf5a2e1c065faaad3a63680

warning: function cannot return without recursing

352 名前:デフォルトの名無しさん [2022/05/26(木) 18:28:21.56 ID:MJ/jCOeZ.net]
じゃあGoのほうが良いんじゃん。

353 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 19:07:49.07 ID:wwtlTazs.net]
そこに気づくとはやはり天才か

354 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 19:23:40.54 ID:0K7pUhl0.net]
>>347
RustもGoもどちらもwarningが出る
そして実行するとスタックが溢れて止まる
完全に同じ

355 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 21:03:33.74 ID:TOBg/lde.net]


356 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 21:33:44.65 ID:F8bskD+f.net]
イキッてスタックを増し続ける再帰を書くのは愚か、まともなら限界値でブレイクする、天才と努力家は末尾再帰でスタックを増やさない

357 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 21:43:27.13 ID:BmMYHIjm.net]
リリースビルドだと最適化されてスタックオーバーフローにならない
loopと同じになる
fn main() {
loop{ println!("Hello, world!"); }
}

358 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 21:45:32.94 ID:p077Q+tt.net]
あれ?
前にRustは末尾呼び出し最適化はしないって聞いたけど

359 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 21:53:44.25 ID:BmMYHIjm.net]
言語仕様的に最適化を保証してるわけではないというだけでは?
LLVMがある程度やってくれる
https://godbolt.org/z/os9YMfozf



360 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 22:19:48.49 ID:LHrMwKV/.net]
わかりやすい例
確実にスタックが溢れるusize::MAX回の再帰

fn main() {
assert_eq!(usize::MAX, count(usize::MAX));
}

fn count(n: usize) -> usize {
// println!("{:p}", &n);
match n {
0 => 0,
n => 1 + count(n - 1),
}
}

①デバッグモードだとスタックオーバフロー
②リリースモードだと溢れずアサートも通る
③リリースモードでもコメントになっているprintlnの//を外すと最適化されなくなるようでスタックオーバフロー

361 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 22:41:19.49 ID:chFOJ7KS.net]
>>355
わかりやすい?
println入れるとなぜ最適化されなくなるの?

362 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 23:01:45.92 ID:LHrMwKV/.net]
>>356
再帰だと&nは毎回異なる
つまり再帰をループ化する阻害要因

363 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 23:18:51 ID:LHrMwKV/.net]
ごめん
n表示だけでもあかんわ
ループ化されず溢れる
調査のために、printよりもっと軽くて最適化で消えない操作、何かないかな

364 名前:デフォルトの名無しさん [2022/05/27(金) 10:47:17 ID:KGTH7nqA.net]
>>358
ターミナルが標準出力に出てきたのを表示するのがボトルネックになってるだろうな
./a.out > /dev/null するか、printlnの代わりにファイル書き込みするのが手っ取り早い

365 名前:デフォルトの名無しさん mailto:sage [2022/05/27(金) 23:42:23.72 ID:QNNDwom0.net]
traitでasync fnなメソッドを宣言してはいけない理由を教えてください

366 名前:デフォルトの名無しさん mailto:sage [2022/05/28(土) 00:48:37.27 ID:1czNjiXi.net]
https://github.com/rust-lang/rfcs/issues/2739

367 名前:デフォルトの名無しさん mailto:sage [2022/05/28(土) 18:21:29.07 ID:DPDd3/od.net]
async fnはsyntax sugarだから例えば以下は同じ

async fn delayed_add(a: i32, b: i32) -> i32 {
sleep(Duration::from_secs(5)).await;
a + b
}

fn delayed_add(a: i32, b: i32) -> impl Future<Output = i32> {
async move {
sleep(Duration::from_secs(5)).await;
a + b
}
}

つまり現在のRustコンパイラではまだimpl Traitを使える場所が限定されているというもっと大きな問題のために今は使えない
GATsなど現在進行中の諸問題が解決すればいずれ使えるようになるはず

368 名前:デフォルトの名無しさん mailto:sage [2022/05/28(土) 18:34:44.90 ID:DPDd3/od.net]
現状の対策方法としてはimpl FutureをdynにしてBox::pinして返す

trait Foo {
fn delayed_add(a: i32, b: i32) -> Pin<Box<dyn Future<Output = i32>>>;
}

impl Foo for () {
fn delayed_add(a: i32, b: i32) -> Pin<Box<dyn Future<Output = i32>>> {
Box::pin(async move {
sleep(Duration::from_secs(5)).await;
a + b
})
}
}

fn main() {
block_on(async {
let x = <() as Foo>::delayed_add(1, 2).await;
println!("x = {x}");
});
}

これでtraitにて非同期関数を使える

369 名前:デフォルトの名無しさん mailto:sage [2022/05/28(土) 18:41:39.92 ID:DPDd3/od.net]
それを手動で変換するのは面倒かつコードも見にくいので自動変換してくれる#[async_trait]を使えばasync fnと書ける

use async_trait::async_trait;

#[async_trait]
trait Foo {
async fn delayed_add(a: i32, b: i32) -> i32;
}

#[async_trait]
impl Foo for () {
async fn delayed_add(a: i32, b: i32) -> i32 {
sleep(Duration::from_secs(5)).await;
a + b
}
}



370 名前:デフォルトの名無しさん mailto:sage [2022/05/28(土) 19:10:23.06 ID:Hw+E7BcY.net]
おじさん調査お疲れ様でした。

371 名前:デフォルトの名無しさん [2022/05/28(土) 19:23:54.07 ID:6Sv+ENTH.net]
・塩野義製薬が週休3日制導入へ 来年4月、副業も解禁
・塩野義製薬が「週休3日」選択可能に 給与は『週休2日の8割』副業や学び直しを支援
・【フォーカス】サタケ/週休3日制 通年導入めざし夏季のみ試行中 交代制で水曜を休日に
・旅館なのに週休3日!?陣屋・若女将の常識を覆した組織改革
・“時代錯誤”から残業ゼロ、週休3日に! 鳥取の不動産会社が
 レガシー企業からDX先進企業になれたワケ
・ネクスウェイ、週休4日制・1日3時間勤務

372 名前:選択できる勤務体系を導入
・日本初「週休4日制度」で、優秀な人材を採用するしくみとは? ?
 ナレッジソサエティ久田社長に聞いてみた
[]
[ここ壊れてます]

373 名前:デフォルトの名無しさん [2022/05/28(土) 20:19:11 ID:NcTZ/5Yj.net]
もう借りまっか

374 名前:デフォルトの名無しさん mailto:sage [2022/05/28(土) 21:23:09.11 ID:sd5VBl3q.net]
ジェネレーターはいつstableになりますか

375 名前:デフォルトの名無しさん mailto:sage [2022/05/28(土) 23:09:24.03 ID:Gdd1cvMp.net]
stableを期待しているということは現状の仕様で納得なんだろうけど
resumeの仕方とか値の受け取り方とか軽快じゃなくね?

let mut generator = || {
yield 1;
yield 2;
yield 3;
return "end"
};
assert_eq!(GeneratorState::Yielded(1), Pin::new(&mut generator).resume(()));
assert_eq!(GeneratorState::Yielded(2), Pin::new(&mut generator).resume(()));
assert_eq!(GeneratorState::Yielded(3), Pin::new(&mut generator).resume(()));
assert_eq!(GeneratorState::Complete("end"), Pin::new(&mut generator).resume(()));

例えばresume構文を用意して記述を見やすくするとか
return値は廃止してOption<T>で返しreturn;でNoneにするとか

376 名前:デフォルトの名無しさん mailto:sage [2022/05/28(土) 23:30:01 ID:sd5VBl3q.net]
個人的にはIteratorがyield使って実装できるようになれば満足なのでGeneratorそのものの型とかはそんなに気にしてなかった

377 名前:デフォルトの名無しさん mailto:sage [2022/05/28(土) 23:58:46.72 ID:Gdd1cvMp.net]
>>370
yieldを使うとIteratorの実装が楽になる?
from_fn()のようなfrom_generator()を用意するのかな

378 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 01:25:03.17 ID:B9rZUQzM.net]
またイテレータの話してる……

379 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 01:35:28.37 ID:crc4m1b3.net]
結局イテレータを作るには構造体か何かを用意してnext()実装するしかないぜ
それが面倒ならfrom_fnやunfoldなどの汎用イテレータ作成関数を使うしかないな
こんな感じか

fn iter_from_generator<G: Generator + Unpin>(mut generator: G) -> impl Iterator<Item = G::Yield> {
iter::from_fn(move || {
match Pin::new(&mut generator).resume(()) {
GeneratorState::Yielded(n) => Some(n),
_ => None,
}
})
}

fn main() {
let one_two_three = || {
yield 1;
yield 2;
yield 3;
};
for n in iter_from_generator(one_two_three) {
println!("{n}");
}
}



380 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 10:29:01 ID:8RN2vwsK.net]
複クンなんですぐここに貼り付けてしまうん?
それお母さんに見てもらうだけでは不満なん?

381 名前:デフォルトの名無しさん [2022/05/29(日) 16:18:25.46 ID:G8u1ZvmQ.net]
すまんが、関数とジェネリックについてわかんないんだけどさ
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=c548f2825b9f164eeabdd479c4950484
これってなんで動かないん?

382 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 16:49:19.09 ID:B9rZUQzM.net]
>>375
<T>という型情報だけじゃT{b:1}が正しい式か分からないから
値の内容にまで踏み込みたければtrait boundを付けてtraitが許す範囲内でやるしかない

383 名前:デフォルトの名無しさん [2022/05/29(日) 16:52:27.60 ID:oSeq4vhZ.net]
>>375
Tに渡されるのがいつもAだとは限らないからrustはエラーを出すんや
c++だったらエラーにならないが

384 名前:デフォルトの名無しさん [2022/05/29(日) 17:03:06.39 ID:G8u1ZvmQ.net]
そういうことなのか!ありがとう!
だからサンプルコードみんなTを引数で受け取って戻値Tを返してるのばっかなのか

385 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 17:10:58.33 ID:+aZOCBrD.net]
「(i64 の) 1 から変換可能な型」という制約を付けるのであればたとえばこんな感じかな。

https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=73e1d04ceeb2c0aff1dae461126dfb6e

386 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 18:07:23.25 ID:RPMq4FMA.net]
>>378
Tを引数に取らずにTを返すことも一般的に可能
その場合もTに何らかのトレイト境界を付けてそのトレイトのメソッドを呼ぶ形で実現する
fn c<T>() -> T {
T { b: 1 }
}
↓修整
fn c<T: Trait1>() -> T {
T::method1()
}

自分を返すmethod1()を持つトレイトTrait1を宣言しておく
trait Trait1 {
fn method1() -> Self;
}

そして型Aに対してそのトレイトを実装すれば動く
impl Trait1 for A {
fn method1() -> Self {
Self { b: 1 }
}
}
もちろんmethod1を引数付きのメソッドにしてもOK

387 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 18:42:28.03 ID:bkDUG0E+.net]
>>377
C++すごいな
なんでエラーにならんのかわからん

388 名前:デフォルトの名無しさん [2022/05/29(日) 19:12:40.72 ID:X/raLWS5.net]
>>381
Tに依存する箇所のコンパイルを保留してから、実際にT=Aとしてみてインスタンス生成するからね。
https://wandbox.org/permlink/zOH2lP3k2MEPYwsp

conceptで制限はかけられるけど本質は変わらん
https://wandbox.org/permlink/CdKBg61cUgFy2tBs

389 名前:デフォルトの名無しさん [2022/05/29(日) 19:30:37.85 ID:a9qKdJW4.net]
なんだじゃあRustダメじゃん。



390 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 20:03:03 ID:vh1lNXiO.net]
そうだよ
ダメだからお前はRust使わないほうがいいよ

391 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 20:16:50 ID:JtP99XwD.net]
どう見てもRustの方が安全安心
C++では>>382においてb以外のメンバ変数(フィールド)があっても動作してしまう
つまり初期化されていない部分が残り未定義動作となる

392 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 20:38:31 ID:ckaCEYgU.net]
未定義動作ではない。

393 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 20:38:35 ID:4wBUBbtY.net]
単一の機関が作ってるなら未定義動作なんて生じないんだけどなw

394 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 20:50:06 ID:JtP99XwD.net]
C++では未初期化部分がある時
そこを利用した全体が未定義動作となる

395 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 21:08:46.86 ID:9wc9mAAQ.net]
>>382
なるほど
俺の知ってるジェネリックの常識とは違うがある種の合理性はあるな

396 名前:デフォルトの名無しさん [2022/05/29(日) 21:14:08.45 ID:oq8K5mm2.net]
未初期化領域があっても未初期化領域を読み出さなければ未定義動作にはならない
なので後からでも読み出す前にデータを書き込めば合法

397 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 21:23:18.26 ID:B9rZUQzM.net]
そもそも初期化されます

https://ja.cppreference.com/w/cpp/language/aggregate_initialization

struct A { int x; int y; int z; };
A a{.y = 2, .x = 1}; // エラー、指示子の順序が宣言の順序と一致しません。
A b{.x = 1, .z = 2}; // OK、 b.y は 0 に初期化されます。

398 名前:デフォルトの名無しさん [2022/05/29(日) 23:05:13.03 ID:a9qKdJW4.net]
>>385
嘘つき。

399 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 23:38:42.10 ID:SnN+FeMM.net]
Rustのジェネリクスは
型Tに対してトレイト境界を増やせば増やすほど型Tを使って様々なことができるようになっていく
今回のように型Tに対してトレイト境界が何も無ければ任意の型に適用できる代わりにできることが非常に少ない

例えばC++とは異なりRustではデフォルト値で初期化することすら指定なしにはできない
Defaultトレイトをトレイト境界に持ち、さらにそのメソッドを用いてT::default()することで、
初めてようやくデフォルト値で初期化されたT型を得ることができる
これにより「ある型にとってデフォルト値とは何か」「そもそもその型にデフォルト値はあるのか」「デフォルト値が使われるのはいつか」
といった諸問題を全て解決している
C++の複雑なルールと異なりRustでは非常に簡単でわかりやすくなっている



400 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 00:14:44.37 ID:S6YD6bxt.net]
一方C++erはデフォルトコンストラクタを使ってデフォルト値を定義した

401 名前:デフォルトの名無しさん [2022/05/30(月) 00:34:37.40 ID:Wa35ZTPi.net]
長いからデフコンって略したほうが良くないっすか?

402 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 00:37:19.04 ID:QyLPQBc1.net]
全てを明瞭シンプルにしたことがRustの勝因

403 名前:デフォルトの名無しさん [2022/05/30(月) 00:39:32.57 ID:Wa35ZTPi.net]
なんだじゃあJavaと一緒じゃん。

404 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 00:45:18 ID:L0CO9j2x.net]
明示的に指示されないメンバも初期化されることに気づけなかったのはC++の仕様が複雑すぎるため
僕が悪いのではないことは明らか

405 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 02:47:26.12 ID:ccLFuKy8.net]
Rustは綺麗に整理されてるいるから複雑な個別ルールを覚えなくて済むね

406 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 08:58:04.28 ID:Pjv5EPMb.net]
トレイトを増やしすぎて普段は必要ない補完候補が気持ち悪いぐらい出てくる破綻言語

407 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 09:26:55.13 ID:PFXjMGN7.net]
C#は良い言語ですよ

408 名前:デフォルトの名無しさん [2022/05/30(月) 18:11:00.15 ID:ByAGrxv3.net]
>>400
ほんこれ

409 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 18:37:20.51 ID:9QWL5Xmb.net]
そんなに補完優秀だったっけ?
rust-analyzer?



410 名前:デフォルトの名無しさん [2022/05/30(月) 18:49:27.08 ID:FmNIm4Mv.net]
RustはDと同じ臭いがする

411 名前:デフォルトの名無しさん [2022/05/30(月) 18:56:01.15 ID:z2BzOSMS.net]
言ってることはHaskellと同じだと思います!

・コンパイルを通ればバグがないことが保証される。
・静的に解決するのでCの10倍速い。
・C++は遅い。
・C++は危険。

412 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 19:18:53.99 ID:ccLFuKy8.net]
Rust批判は専用スレでどうぞ

Rustアンチスレ
https://mevius.5ch.net/test/read.cgi/tech/1509028624/

413 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 19:34:52.16 ID:NdgJBZsO.net]
>>405
> ・静的に解決するのでCの10倍速い。
意味わからんw

414 名前:デフォルトの名無しさん [2022/05/30(月) 20:00:34.27 ID:z2BzOSMS.net]
Rust屋さんはCを目の敵にしてるから。

415 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 20:01:09.26 ID:+MhjIs8x.net]
Rust批判はこのスレでどうぞ

416 名前:デフォルトの名無しさん [2022/05/30(月) 20:02:56.21 ID:z2BzOSMS.net]
Ruby批判もこのスレで良いですか?

417 名前:デフォルトの名無しさん [2022/05/30(月) 22:52:59 ID:vE8PcjqL.net]
>>405
haskellでそんなこと聞いたこと無いが。

418 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 23:31:08.66 ID:HNl+yJ2Z.net]
>>410
それはダメ

419 名前:デフォルトの名無しさん [2022/05/30(月) 23:38:49.33 ID:cFpihliW.net]
>>369
Pinは1回だけでいい
そしてas_mutしてresumeする
let mut g = Pin::new(&mut generator);
assert_eq!(GeneratorState::Yielded(1), g.as_mut().resume(()));
assert_eq!(GeneratorState::Yielded(2), g.as_mut().resume(()));
assert_eq!(GeneratorState::Yielded(3), g.as_mut().resume(()));
assert_eq!(GeneratorState::Complete("end"), g.as_mut().resume(()));



420 名前:デフォルトの名無しさん mailto:sage [2022/05/31(火) 00:29:14.66 ID:qkI00F5r.net]
CLI向けのコマンドラインオプションと設定ファイルと環境変数統一的に扱えるライブラリとかない?
コマンドラインで指定があればそれを、なければ環境変数を、それもなければ設定ファイルを、どれもなければデフォルト値を読む
っていう動作を各オプションについてやってくれるライブラリが欲しい

421 名前:デフォルトの名無しさん mailto:sage [2022/05/31(火) 00:42:08.60 ID:M2U43b0K.net]
clap+argfileでいけるかな?

422 名前:デフォルトの名無しさん mailto:sage [2022/05/31(火) 05:48:32.37 ID:V7u6lubL.net]
大量じゃなければdotenv+clapで列挙していけばいいね

#[derive(Parser)]
struct Args {
#[clap(long, env = "TEST_NAME", default_value = "デフォルト値")]
test_name: String,
}

dotenv::from_filename("設定ファイル名").ok();
let args = Args::parse();
println!("{}", args.test_name);

argsをparseする前にdotenvで設定ファイルから環境変数へ流し込んでおくと
CLI引数→環境変数→設定ファイル→デフォルト値の順

423 名前:デフォルトの名無しさん [2022/05/31(火) 10:19:23.69 ID:aYJaA5wp.net]
>>407
全部プリプロセッサで完了するCみたいなイメージじゃね
知らんけど

424 名前:デフォルトの名無しさん mailto:sage [2022/05/31(火) 14:58:10.34 ID:qkI00F5r.net]
回答ありがとう

>>415
clapで環境変数読むの行けるのか、知らなかった
argfileはコマンドラインオプションをファイルに書くと読み込んでくれる感じなのかな

>>416
なるほど、環境変数自体を.envファイルに書いてもらってそれをコマンドラインオプションに読み替えるわけね
これは良さそうだ

425 名前:デフォルトの名無しさん mailto:sage [2022/05/31(火) 20:23:20.27 ID:/PJVfDdU.net]
env feature指定すると

426 名前:扱える
あと今時の形式>>416ではderive featureも必須
[]
[ここ壊れてます]

427 名前:デフォルトの名無しさん mailto:sage [2022/05/31(火) 21:26:01.43 ID:bCRscqs9.net]
>>404
Dust言語
あると思います

428 名前:デフォルトの名無しさん mailto:sage [2022/06/03(金) 21:24:55.91 ID:3LVnIAMZ.net]
配列の中で移動コピーする方法を教えてください
例えば
移動前 [X, X, X, X, 4, 5, 6, 7, 8, 9]
移動後 [4, 5, 6, 7, 8, 9, X, X, X, X];
Xは任意の値で構わないです
可能ならばstable safeでお願いします

429 名前:デフォルトの名無しさん mailto:sage [2022/06/03(金) 21:51:48.48 ID:zWyAdBA8.net]
複おじか?お前



430 名前:デフォルトの名無しさん mailto:sage [2022/06/03(金) 21:58:58.40 ID:58QZIwzn.net]
>>421
xs.rotate_left(4);

431 名前:デフォルトの名無しさん mailto:sage [2022/06/03(金) 22:49:16 ID:/2hdnJHh.net]
コピーとあるからcopy_within(4.., 0)でいいんじゃないか
rotate_leftだと大きな配列で後方と前方の間の小さいサイズのコピーでも全体のコピーが発生して無駄

432 名前:デフォルトの名無しさん mailto:sage [2022/06/03(金) 23:22:12.53 ID:58QZIwzn.net]
なるほど、任意の値で構わないってのはそういうことだったのか

433 名前:デフォルトの名無しさん mailto:sage [2022/06/03(金) 23:55:24.30 ID:3LVnIAMZ.net]
ありがとうございました
ところで文字列にはfindメソッドがあって便利なのですが
指定した値が配列の中で前から何番目にあるかを返すメソッドはありますか?

434 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 00:13:56.42 ID:1UnvA590.net]
>>426
slice::iter::position

435 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 00:40:32.70 ID:oXzC1k//.net]
positionでもfindでも行ける

let buf = b"abc\ndef\n";
assert_eq!(Some(3), buf.iter().position(|&b| b == b'\n'));
assert_eq!(Some(3), (0..buf.len()).find(|&i| buf[i] == b'\n'));

文字列でのこの簡潔さと比べるとスライス直結findが欲しくなるのはわかる

let str = "abc\ndef\n";
assert_eq!(Some(3), str.find('\n'));

436 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 00:48:39 ID:SnRPHFsS.net]
bikeshed

437 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 01:04:34.73 ID:oXzC1k//.net]
str::findは部分列も対応
let str = "abc\r\ndef\r\n";
assert_eq!(Some(3), str.find("\r\n"));
なぜslice::findを作らなかったのだろう?

438 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 09:04:26.92 ID:LG8suQe9.net]
出た
汚コード

439 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 09:19:04 ID:UQf/W43E.net]
Rustの仕様自体が汚いんだよ



440 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 09:34:38.78 ID:nKFWMn7j.net]
汚コードでもいいやん
反面教師になるんだから

ただし単発の短いコードに限る
フィボナッチ汚コードのペタペタ連投みたいなのはもう勘弁

441 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 09:56:15.67 ID:kJkfvymC.net]
汚コードなの?初心者だからマジわからん
docのstd::slice::iter::position をみたら似たようなコードだったけど

442 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 10:11:21.31 ID:SnRPHFsS.net]
>>430
sliceから部分sliceを探索する頻度が文字列から部分文字列を探索する頻度に比べて圧倒的に低いから、じゃないの
C++のSTLも文字列にしかメンバ関数としてのfindは無いし、これも同じ理由ではないかな

443 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 11:23:20.02 ID:HjDRTZ3n.net]
Rustのエラー表示すばらしいなほんとに
めちゃくちゃ楽だわな

444 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 12:01:38.84 ID:K/Ra00gu.net]
いつも汚コード言ってるやつはキチガイだから無視しとけ

>>430
部分スライスに対してもiterの代わりにwindowsを使えば同じようにpositionで部分文字列findと同じ結果を得られる

let buf = b"abc\r\ndef\r\n";
assert_eq!(Some(3), buf.windows(2).position(|b| b == b"\r\n"));

445 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 12:02:08.90 ID:rPOcVTB8.net]
エラー表示が出ている時点で(ry

446 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 12:43:02.16 ID:SnRPHFsS.net]
bikeshed bikeshed bikeshed

447 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 13:12:11.67 ID:sY7vYVfw.net]
文字列のPatternに相当するものがsliceになないからでは

448 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 13:40:33.24 ID:NhLlWR3w.net]
>>434
汚いかどうかの判断ができるようになるには言語に限らずその分野である程度の経験が必要

汚いなと思ってたコードが慣れるとそうでもなくなる逆の現象もある

449 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 13:47:22.44 ID:DNUj2Sn5.net]
汚コード公式汚コードですわ~!



450 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 13:57:36.96 ID:nieqt9o7.net]
>>434
公式exampleと同じなのでもちろん汚コードではない
もし何か問題がある場合は必ず誰かが代わりのコードを示すので大丈夫
汚コード連呼を相手にする必要なし

451 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 14:11:57.60 ID:QZjOvH6O.net]
こんなスレに質問しに来る初学者なんてものは最初から存在しないんだろうな

452 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 14:23:56.41 ID:ThNWOKir.net]
ん?
「初心者だからわからん」というのが汚コーダーの自演だろってこと?

453 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 14:34:25.51 ID:QAuL8N6o.net]
そうだよ

454 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 14:39:18.00 ID:xn39310Q.net]
複クンはね
みんなに見てもらいたいんよ
つきあってあげてよ

455 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 15:03:39.84 ID:Skn9YyLT.net]
なるほど言われてみればそうかも
流れ的に>>208なんかも怪しいな
気をつけよう

456 名前:434 mailto:sage [2022/06/04(土) 15:21:18.99 ID:kJkfvymC.net]
自演臭くなるからアレなんだけど
暇潰しに公式ドキュメントと照らし合わせて疑問に思ったから書き込んだだけで
ただの通りすがりだからね

457 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 15:39:42.64 ID:nieqt9o7.net]
>>449
あれは何もかも自演に見えてくる病気な人による連投だから気にする必要なし
何でもかんでも自演だ!汚コードだ!と言うダメな人

458 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 16:10:13.56 ID:VXQtFnUU.net]
書いてあるコードよりましなコードを出せずに汚コードって呟くしかない可哀想な人は暖かくスルーしてやってくださいな

459 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 16:13:38.80 ID:jusi9BoA.net]
>>448
汚いというならオマエのコードを出せとイキってたのに
実際にコードが出てきてダンマリ決め込んだタイミング・・・

ありえそう
変な初心者が来たなとは思ってたが・・・



460 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 16:30:17.39 ID:43LVHAPc.net]
汚コードを連呼してる人が初めて出したコードがこれ。>>202
しかしアルゴリズムに問題があってフルボッコにされて撃沈。
汚コードを連呼の人が普段コードを示せない理由が判明してしまった事件。

461 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 21:35:57.57 ID:Tzl373uA.net]
うわーこれ確定じゃん
複くんRustなんかやめてネトサポやれば?

462 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 23:04:11.48 ID:FBgyqIef.net]
>フルボッコにされて撃沈。
主砲「Copyはディープで高コストだから避けるべき」発射! ==> ドッカーンwww撃沈www

463 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 23:12:57.28 ID:DCKDFwmc.net]
真面目に書いとくとusizeみたいな数値プリミティブの場合はCopy前提で全く問題ないよ
気になる人はベンチにかけてね

464 名前:デフォルトの名無しさん [2022/06/04(土) 23:38:03.39 ID:UrkwxQuP.net]
>>456
一般的にはその通り
しかし今回はusizeだとすぐ溢れるからBigUintなどを見越してのコードの話
>>202への批評内容はいずれもusizeでしか通用しないアルゴリズムをわざわざ採用したという点
一方で>>202が汚コードとみなした元のコードはusizeでもBigUintでもちゃんと動作するアルゴリズムになっていた

465 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 23:52:08.43 ID:W82CC99g.net]
汚コード連呼厨は信頼できない
代わりのコードをいつも出せない
珍しく出してきたら元より劣化してた

466 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 23:57:58.57 ID:SnRPHFsS.net]
最初のコードでだいたいあってるんですよ
それを君がずっと引っ掻き回してるだけ
最初からあるんだからわざわざ出す必要もない

>>427で終わってた話を>>428で誰も求めてないfindで書き直したり

467 名前:デフォルトの名無しさん mailto:sage [2022/06/05(日) 00:16:50.25 ID:Y4E70HYz.net]
毎週This Week in Rustのリンクでも貼ればこのくだらない流れは終わるのだろうか

468 名前:デフォルトの名無しさん [2022/06/05(日) 00:46:34.90 ID:9LpkJgbZ.net]
ところでスライスへのfindメソッドなどの後付けはRustのorphan ruleを犯さずに可能なの?

469 名前:デフォルトの名無しさん mailto:sage [2022/06/05(日) 04:00:56.97 ID:4HXc2Nfq.net]
trait定義すればできる



470 名前:デフォルトの名無しさん mailto:sage [2022/06/05(日) 09:25:11.96 ID:Zl7Pb69A.net]
> 誰も求めてないfindで書き直したり

そもそも、誰ももとめてない
「ぼくのかんがえたさいきょうふぃぼなっちいてれーた」
をどんだけ貼り付けたんだろうな彼はw

誰も求めてないものを必死でシコってるからうんざりなんよ

471 名前:デフォルトの名無しさん mailto:sage [2022/06/05(日) 10:25:57.06 ID:yQi6baxx.net]
複クンはなぜ汚いと言われるのか理解しないね
言語やライブラリの制約で避けられないような汚なさならここまで言われない

472 名前:デフォルトの名無しさん mailto:sage [2022/06/05(日) 10:34:37.11 ID:g2kCstof.net]
シンプルに意図が伝わりやすい書き方が他にあっても
ぼくのかんがえたさいきょうのシコシココードを我慢出来ずに開陳しちゃうからここが汚部屋になる

473 名前:デフォルトの名無しさん mailto:sage [2022/06/05(日) 10:48:55.83 ID:REWyb6H9.net]
findバージョンで答えようとしたところで
>>427のレスがあったから「findでも行ける」に方向転換したんじゃね?
幼稚園児と同じでママン達に誉めて欲しかったのに
汚いと一蹴されて涙目

474 名前:デフォルトの名無しさん mailto:sage [2022/06/05(日) 10:54:21.85 ID:ULNisafI.net]
>>460
ブログへのリンクやアップデートはややマンネリ気味だけど
今週のcrateはいつもチェックしてる

475 名前:デフォルトの名無しさん [2022/06/05(日) 14:57:13.62 ID:1ZIcYX0i.net]
>>467
そういう話をしたいのにRustと関係ない話や批判で荒らす連中がうざい
Rustの話ならば最新動向から初心者の質問まで何でも歓迎
しかし他人叩きしている連中は邪魔

476 名前:デフォルトの名無しさん mailto:sage [2022/06/05(日) 17:36:49.26 ID:kdHlti+w.net]
可読性や汎用性を犠牲にしてもfindがpositionより優位に速いとか
ユースケース次第ではデメリットを補うだけのメリットがあるなら多少汚くても受け入れられる
フィボナッチの>>202と比較対象の>>181>>189も同様

477 名前:デフォルトの名無しさん mailto:sage [2022/06/05(日) 17:53:32.33 ID:uQ7Of1B3.net]
速度はベンチを取ってから
ユースケースは具体的に示してから
そういうことを主張してください

そして本当に互いのやり方にメリデメがあると認めているのなら、>>295のような他人叩きはやめましょうね

478 名前:デフォルトの名無しさん mailto:sage [2022/06/05(日) 18:25:46.65 ID:Zl7Pb69A.net]
まーたふぃぼなっち言ってるw
バカのひとつ覚えすなあw

479 名前:デフォルトの名無しさん [2022/06/05(日) 18:50:30.04 ID:1ZIcYX0i.net]
>>470
その>>295は他人叩きではないだろう
そのアルゴリズムではBigIntで無駄なコピーが発生するというRustで気をつけるべき技術的な問題の指摘にみえる
そして回避コードもきちんと示しているのでそういう書き込みは歓迎



480 名前:デフォルトの名無しさん mailto:sage [2022/06/05(日) 21:53:01.43 ID:ZauVJiyh.net]
>>470
何のメリットもなく汚くしてるだけだから受け入れられないという話だったんだが

481 名前:デフォルトの名無しさん mailto:sage [2022/06/05(日) 22:11:06.61 ID:ZR9IOkh3.net]
ジェネリックのフィボナッチや
ジェネリックのカウントアップみたいな
架空のユースケース

482 名前:フ話題はもういいよ []
[ここ壊れてます]

483 名前:デフォルトの名無しさん mailto:sage [2022/06/05(日) 22:14:01.51 ID:uQ7Of1B3.net]
https://play.rust-lang.org/?version=stable&mode=release&edition=2021&gist=41e1df59aeafe6f45fccaa192941d6d1

iter1とiter2は>>295からの引用
Ryzen 7 3700Xで計測
ジェネリクスへのこだわりを捨てればこのくらいは速くできるよ

fib_iter1               time:   [7.2754 ms 7.2824 ms 7.2907 ms]
Found 2 outliers among 100 measurements (2.00%)
  1 (1.00%) high mild
  1 (1.00%) high severe

fib_iter2               time:   [7.8536 ms 7.8678 ms 7.8818 ms]

fib_biguint             time:   [4.9757 ms 4.9784 ms 4.9812 ms]
Found 5 outliers among 100 measurements (5.00%)
  5 (5.00%) high mild

Playgroundでもベンチマークできればいいのになあ

484 名前:デフォルトの名無しさん mailto:sage [2022/06/05(日) 22:14:34.17 ID:IymwRCap.net]
「RustとC++を学ぼうと思ってるプログラミング初心者です。」(架空)

485 名前:デフォルトの名無しさん [2022/06/05(日) 22:24:27.68 ID:+fEwSMrP.net]
どの場でも同じだが
「技術的な話題と技術的な指摘」
「他者の話題と他者への攻撃」
この違いがわからず後者を行なうダメ人間のせいで場が荒れる

486 名前:デフォルトの名無しさん mailto:sage [2022/06/05(日) 22:25:12.37 ID:xgxgbUCt.net]
>>475
それは流石に比べる対象が違うんじゃ?
ノンジェネリック版もイテレータを返すか
ジェネリック版をフィボナッチ数を直接返すようにして比べないと

487 名前:デフォルトの名無しさん mailto:sage [2022/06/05(日) 22:36:45.16 ID:4HXc2Nfq.net]
>>475
playgroundみたいな環境でベンチマークやれたとしても結果が安定しないのでは

488 名前:デフォルトの名無しさん [2022/06/05(日) 22:40:18.97 ID:+fEwSMrP.net]
>>475
純粋にジェネリックか否かの比較をしたいならばadd_assignとaddの違いなども含めて条件を全て揃えたほうがよい
元がiter::successorsを使っているならば非ジェネリック版も同じくそれで揃えてみてはどうか

489 名前:デフォルトの名無しさん mailto:sage [2022/06/05(日) 23:17:38.06 ID:uQ7Of1B3.net]
>>478
>>480
https://play.rust-lang.org/?version=stable&mode=release&edition=2021&gist=4f477ec7bc08ea9f61f565c00beb0d19

ジェネリックなほうをできる限り揃えたけどこれでいいかい?
CheckedAddでadd_assignする方法だけ無さそうだったからアレになってるけど

fib_generic             time:   [7.4054 ms 7.4164 ms 7.4275 ms]
Found 1 outliers among 100 measurements (1.00%)
  1 (1.00%) high mild

fib_biguint             time:   [4.9527 ms 4.9591 ms 4.9655 ms]



490 名前:デフォルトの名無しさん mailto:sage [2022/06/05(日) 23:34:45.61 ID:MGWqyCtZ.net]
>>477
> 後者を行なうダメ人間
そういうのは一定数いるからスルーしてくださいな...

491 名前:デフォルトの名無しさん mailto:sage [2022/06/06(月) 00:32:35 ID:m7d3UK5s.net]
イテレータで計測してみたけど
>>295のoption::takeだとcloneしても速度変わらないな
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=283e5cd13159cab00fcc68d56952df01

492 名前:デフォルトの名無しさん [2022/06/06(月) 02:33:06.91 ID:ETmHHhEk.net]
>>483
そういう比較はそれ以外の部分のコードを揃えないと何が要因なのか判断できないよ

493 名前:デフォルトの名無しさん mailto:sage [2022/06/06(月) 03:21:12.98 ID:CfMv9iPR.net]
Rustってフィボナッチ専用言語みたいだな

494 名前:デフォルトの名無しさん mailto:sage [2022/06/06(月) 12:48:39.09 ID:fwdLGVHm.net]
>>481
addがchecked_addになることで最適化が妨げられてるみたい

結局複オジが言ってたことは全部間違いだった

495 名前:デフォルトの名無しさん mailto:sage [2022/06/06(月) 14:47:49.79 ID:bWO8YoN9.net]
premature optimizationとpremature abstructionの典型例

・具体的なユースケースを想定しない
・トレードオフを考えない
・誰も求めてない抽象化
・計測を伴わない思い込み最適化

コードの汚さと悉く間違った主張の根っこは同じ

496 名前:デフォルトの名無しさん mailto:sage [2022/06/06(月) 15:32:14.02 ID:eTH/ySe7.net]
複オジのおかげでいろんな教訓が再認識できて良かったね
反面教師の鑑
めでたしめでたし

497 名前:デフォルトの名無しさん mailto:sage [2022/06/06(月) 15:53:42.58 ID:c+f9iTO8.net]
>>487
なるほど
「早すぎる抽象化 × 早すぎる最適化 => 汚コード」ってことか
これは身に覚えがありまくる

498 名前:481 mailto:sage [2022/06/06(月) 16:16:13.39 ID:lWIakgkT.net]
>>486
正確に言えば
問題はCheckedAdd::checked_add()はselfもotherも参照で取るから、BigUintだと内部で1回clone()されてしまうということなのよね
一方でadd_assignは(桁があふれない限り)in-placeにやるから、その分のコストが発生しない
だから(compiler optimizationという意味での)最適化以前の問題だよ

https://mevius.5ch.net/test/read.cgi/tech/1509028624/153
↑のコードも参考にどうぞ
C++で二項演算子をオーバーロードするときのイディオムです
これを思い出しながら書きました

499 名前:デフォルトの名無しさん mailto:sage [2022/06/06(月) 16:52:12.73 ID:yU0i67fk.net]
>>490
ソース見るところ勘違いしてた
確かにaddでも&self使えばclone入るからchecked_add並みに遅くなった

checked_addにownedのselfを取るバージョンが追加されれば改善するだろうけど
trait定義からして対応するつもりのないユースケースかもね



500 名前:デフォルトの名無しさん [2022/06/06(月) 16:57:14 ID:+9236oDl.net]
>>491
CheckedAddAssignを導入すれば全て解決しそうだな

501 名前:デフォルトの名無しさん mailto:sage [2022/06/06(月) 17:23:25 ID:V1HrdzSd.net]
必要ならextension traitを書けばいい
そこまでしてジェネリックにする価値があるとは思えないけど

502 名前:デフォルトの名無しさん mailto:sage [2022/06/06(月) 18:19:44.52 ID:fWB2qr5d.net]
リーナスさんから受けたパニックのありがたい指摘って結局どうなったん?

503 名前:デフォルトの名無しさん mailto:sage [2022/06/06(月) 20:58:23.31 ID:gJyU9Hxy.net]
放置されてんじゃないの?
コンパイラがパニック起こさないように変えられたって聞かないし

504 名前:デフォルトの名無しさん mailto:sage [2022/06/06(月) 21:04:20.00 ID:fWB2qr5d.net]
パニックにならないオプションくらい作ってもいい気もするけどね

505 名前:デフォルトの名無しさん mailto:sage [2022/06/06(月) 21:29:53.43 ID:qARo1+y7.net]
パニック自体はもう1年前くらいに修正済み
今はv7 patchまで来ていて大きな懸念も出ていないから
そろそろマージされてもおかしくはない

506 名前:デフォルトの名無しさん mailto:sage [2022/06/06(月) 21:51:13.91 ID:gJyU9Hxy.net]
リーナスレベルに行く前に誰も問題視してなくて指摘もされてないんだろうか
みんなガバガバなんだな
panic前提のコーディング

507 名前:デフォルトの名無しさん mailto:sage [2022/06/06(月) 22:44:51.98 ID:Yvz8OCum.net]
try_reserveはstabilizeされてるよ

508 名前:デフォルトの名無しさん mailto:sage [2022/06/06(月) 23:01:32.72 ID:aWO23bGN.net]
>>498
リーナスが最終承認だけするイメージなんかな?
LKML読めば分かるけど、普通にパッチ投げるたびに突っ込んでくるよ

509 名前:デフォルトの名無しさん mailto:sage [2022/06/06(月) 23:06:15.51 ID:2Zdu7NAR.net]
ジェネリックフィボナッチと同程度にどうでもいい



510 名前:デフォルトの名無しさん mailto:sage [2022/06/06(月) 23:15:40.43 ID:HuPaBwwV.net]
>>481
1.5倍も差があるのは妙だな
Rustでは最適化されるのでジェネリックで書こうがそんな差は出ないはず
そのベンチマークの仕方がおかしい可能性があるので
ジェネリックか否か、check_addか+か、Option利用か否か、など5つのコードで順に調べてみた

ベンチマーク使用コード
https://gist.github.com/rust-play/18d303c3ec79c19c4285ed190e5b2562
(1) ジェネリック + checked_add + Option + successors 版: 元の>>295と完全に同じコード
(2) BigUint + checked_add + Option + successors 版: (1)のTをBigUintへ
(3) BigUint + add + Option + successors 版: (2)のchecked_addを'+'へ
(4) BigUint + add + Option削除 + successors 版: (3)の変数Optionを削除
(5) BigUint + add + Option削除 + from_fn 版: (4)のsuccessorsをfrom_fnへ

結果
test bench_1 ... bench: 619,527 ns/iter (+/- 18,257)
test bench_2 ... bench: 620,293 ns/iter (+/- 23,787)
test bench_3 ... bench: 624,149 ns/iter (+/- 24,388)
test bench_4 ... bench: 626,810 ns/iter (+/- 20,343)
test bench_5 ... bench: 619,675 ns/iter (+/- 30,977)

結論
いずれも誤差の範囲でほぼ同一結果
Rustではジェネリックで書いても最適化される
BigUintでchecked_addやその結果のOptionを使っても最適化される

したがってi8からBigUintまで任意に動作する>>295のジェネリックコードで問題なし、となる

511 名前:デフォルトの名無しさん [2022/06/06(月) 23:58:37.28 ID:hMQAMrNY.net]
>>502
Rust凄いな
ジェネリックもOptionも何でも最適化してくれるとは改めてRustの素晴らしさを実感

512 名前:デフォルトの名無しさん mailto:sage [2022/06/07(火) 00:13:51.07 ID:GvuMwmTL.net]
>>502
そのやり方で差が出ないのはchecked_addと同じようにcloneが発生するタイプのaddが使われてるからだよ
ジェネリックにしても差が出ない場合もあれば差が出る場合もあるということ

513 名前:デフォルトの名無しさん [2022/06/07(火) 00:16:51.98 ID:y2mAB4fu.net]
>>502
やはり同じになったか
既に>>478が指摘しているように元のコードとイテレータ同士で比較ベンチを取ろうとしないから>>475を怪しいと思ってた
ちゃんと比較ベンチすれば最適化されて同じ速さになることを知っての狼藉だったりして

514 名前:デフォルトの名無しさん mailto:sage [2022/06/07(火) 00:17:18.96 ID:YQOkxy3N.net]
https://gist.github.com/rust-play/8caca28378745b36aaba5358d2a54fe8

test bench_1 ... bench: 426,714 ns/iter (+/- 5,563)
test bench_fast ... bench: 201,510 ns/iter (+/- 2,926)

Criterion の使い方が分からなかったのかな

515 名前:デフォルトの名無しさん [2022/06/07(火) 00:19:44.22 ID:y2mAB4fu.net]
>>504
どういうこと?
具体的に>>502の各コードよりも速いコードを書けるってこと?
そのコードを示せない限り>>502のベンチ結果を覆せない

516 名前:デフォルトの名無しさん [2022/06/07(火) 00:35:03.04 ID:z0w37Unr.net]
>>506
君は全く別の問題にすり替えて誤魔化している
>>502のようにイテレーター同士でベンチマークをとるべき

517 名前:デフォルトの名無しさん mailto:sage [2022/06/07(火) 00:38:00.86 ID:wvlfxzyf.net]
まーたすがすがしいまでの自演だなぁ

518 名前:デフォルトの名無しさん mailto:sage [2022/06/07(火) 00:39:26.17 ID:r6MnfEMB.net]
>>507
>>504の指摘の何が分からないの?

519 名前:デフォルトの名無しさん mailto:sage [2022/06/07(火) 01:10:53.92 ID:YQOkxy3N.net]
https://gist.github.com/rust-play/bde9b95f9bfe4de77fad841db30222c7

test bench_1 ... bench: 420,671 ns/iter (+/- 53,102)
test bench_fast ... bench: 219,091 ns/iter (+/- 1,147)

こんな汚ないことしてまでイテレータになんかしたくないんだけど
どうせ次の文句も大体予想付くし



520 名前:デフォルトの名無しさん [2022/06/07(火) 01:35:52.48 ID:gaZATsj9.net]
この件はRustにとって重要なことだから口を挟むが、
Rustではジェネリックで書いてもmonomorphizationによって各型で書いた時と同じコードになる。
だから標準ライブラリの大半はジェネリックに書かれている。
そしてSomeなどのOptionは最適化できる時は綺麗に消えるため、
BigIntのchecked_addのように常にSomeを返す時も最適化でOptionは消えると考えられる。
いずれも抽象的に書けるのに動かすとC並に速いというRustの長所である。

つまり、>>502の結果が出たことはそれらが実証付けられたことになる。

しかし、以前からジェネリックは無駄とか遅いとかRustの長所に反する主張をする人がいるので気になっていた。
今回もRustのジェネリックは遅いと主張するために、
>>506のように、完全に異なるもの同士を比較したり、
>>511のように、Rcを返すという別仕様のものにしてまで、ジェネリックは遅いと主張し出した。
反Rustか反ジェネリックの立場なのかもしれないが、そういう捏造や詐欺のようなことはよくない。

521 名前:デフォルトの名無しさん [2022/06/07(火) 01:49:10.77 ID:eprvoL3W.net]
>>512
同意

522 名前:デフォルトの名無しさん mailto:sage [2022/06/07(火) 03:36:34.68 ID:hBVbMSyF.net]
>>512
ジェネリクスが無駄だの遅いだのはコード生

523 名前:ャの話ではなくてコードのメンテナンスコスト含めた全体の話では

例えば今回ジェネリックなコードで無駄なcloneを避けるためには CheckedAddAssign といった trait を用意し、各整数型に実装するという余計な手間が発生する
また、各整数に追加のtraitを実装したとしても固定長の整数型ではすぐに桁あふれしてしまうから、実質BigUintの実装しか意味がないものになる
だったら最初からジェネリックにせずBigUintで実装するか、BigUintやBigIntといった桁あふれしない型だけを対象にすればよい

ジェネリクスの良さを語りたいならもっと良い例があるんじゃないの
[]
[ここ壊れてます]

524 名前:デフォルトの名無しさん [2022/06/07(火) 07:03:55.78 ID:/+rlx4fZ.net]
>>511
そのコードはイテレータ内部で無理にunwrapしているためこれだけでpanicしてしまう
let mut iter = fibonacci_biguint_iter();
let first = iter.next();
let second = iter.next();
実行結果
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', src/main.rs:23:30
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
これでは反証コードになっていないので
ちゃんとimpl Iterator<Item = BigUint>を返すコードを書いたほうがいい

>>514
その無駄なcloneとは何?
ベンチ>>502のジェネリックコードを含めた5つのコードを見てみたが無駄なcloneは見当たらなかった
それらよりもベンチで速いコードが出てこない現状をみると無駄は無いのではないか
あと、BigUintを使うまでもない需要も多いのだからジェネリックに書かれたコード一つで十分と感じる

525 名前:デフォルトの名無しさん mailto:sage [2022/06/07(火) 08:13:15.84 ID:AZaNrbV3.net]
>>503
それはLLVMのおかげじゃない?
他言語でできないRustならではの優位点てあったっけ?

526 名前:デフォルトの名無しさん mailto:sage [2022/06/07(火) 08:54:11.67 ID:99FzOzNU.net]
Rustで抽象オブジェクト作るのってどうやんの?

527 名前:デフォルトの名無しさん mailto:sage [2022/06/07(火) 08:59:47.84 ID:do0qCmU/.net]
>>517
Box<dyn ...>のこと?

528 名前:デフォルトの名無しさん mailto:sage [2022/06/07(火) 11:56:38.96 ID:99FzOzNU.net]
>>518
C系だと構造体にtypeフィールド作って定数入れてその定数の値に応じて呼び出す関数変えるみたいなことやるんだけど
インタプリタの動的オブジェクトみたいなもの
Rustでもtypeフィールで条件分岐するのが普通?

529 名前:デフォルトの名無しさん mailto:sage [2022/06/07(火) 12:28:57.89 ID:do0qCmU/.net]
>>519
その用法ならたぶんenumですかね
https://doc.rust-jp.rs/book-ja/ch06-01-defining-an-enum.html



530 名前:デフォルトの名無しさん mailto:sage [2022/06/07(火) 12:30:31.93 ID:mvWCmBcR.net]
ファントムなんとかを使うんじゃないのか?

531 名前:デフォルトの名無しさん [2022/06/07(火) 12:50:46.76 ID:1EDCqMQN.net]
抽象オブジェクトと検索して出てくる例みたいなのをRustでやるならこうだな

enum Object {
Integer(i32),
Float(f32),
文字列(String),
Null,
}
use Object::{Integer, Float, 文字列, Null};

impl Object {
fn hello(&self) {
match self {
Integer(i) => println!("Hello, Intger {i} です"),
Float(f) => println!("Hello, Float {f} です"),
文字列(s) => println!("こんにちは、文字列 {s} です"),
Null => println!("Nullです"),
}
}
}

fn main() {
let object_list = [Integer(12345), Float(67.89), 文字列("ABC".into()), Null];
for object in &object_list {
object.hello();
}
}

532 名前:デフォルトの名無しさん mailto:sage [2022/06/07(火) 13:15:30.50 ID:1v+TnHgu.net]
gccではなくg++とかだとフィボナッチ数列とかは演算しないように最適化される場合がある。
Rustのようにイグノーベルの遊びのコンピューターサイエンスのようなコードをこねくり回して気持ち悪く長くて自己満足オナニーコードになるぐらいだったら
部分的にmasmで書いたほうがマシ(速度的にも、メンテナンス性も)
またRustはLLVMに執着しすぎてgccのような最適化はまだされてない、フィボナッチ数列とかのしょーもない一般的なアルゴリズムは
CPUキャッシュに乗るのにマシンコードのセクションの結果が64kbに成らなかったり

533 名前:デフォルトの名無しさん mailto:sage [2022/06/07(火) 13:48:18.23 ID:99FzOzNU.net]
>>620-522
ありがとう

534 名前:デフォルトの名無しさん [2022/06/07(火) 14:15:55.18 ID:uuz77ncq.net]
>>523
演算しないように最適化されるとか意味不明
演算はどこかで必ず発生する
コンパイル時点で演算してしまう定数化のことならばRustでも当然できる
const fn fibonacci(n: usize) -> usize {
const fn f(n: usize, a: usize, b: usize) -> usize {
match n {
0 => a,
1 => b,
_ => f(n - 1, b, a + b),
}
}
f(n, 0, 1)
}
const F77: usize = fibonacci(77);

535 名前:デフォルトの名無しさん mailto:sage [2022/06/07(火) 15:36:32.04 ID:glYADNck.net]
>>511
俺環の遅いマシンだと6倍近く速くなった
この差なら用途によっては汚くする価値が十分あるね

まあ実際のプログラムでBigUintのサイズまで一つ一つイテレータで返すような使い方をすることはまずないだろうけど

536 名前:デフォルトの名無しさん [2022/06/07(火) 15:42:23.15 ID:fRg0KLfu.net]
>>511
コードが汚い上にget_mutが失敗してpanicする欠陥コードを恥ずかしげもなく披露できるもんだな

537 名前:デフォルトの名無しさん mailto:sage [2022/06/07(火) 17:49:46.06 ID:jaUMaLrL.net]
>>525
だからそう言ってる、そして機能紹介は知ってることを言わなくてよいよ?コンパイル時実行とは違う。gcc系は数学的に既に答えが出るようなアルゴリズムを書いた場合に演算しないで低い桁で答えを持つ場合がある。
意味が分からないんだったら日本語から勉強しなおせ。それと汚いものを張り付けるな

538 名前:デフォルトの名無しさん mailto:sage [2022/06/07(火) 18:06:57.96 ID:WAenZnu4.net]
>>523
定数たたみ込みのことかな
試した限りでは gcc でも clang でも rustc でも最適化されて fib 呼び出しは消えているよ
どういうコードで問題おきるの?

gcc: https://godbolt.org/z/nx3hnsxTT
clang: https://godbolt.org/z/MYc7G9jeG
rustc: https://godbolt.org/z/x18ob3MjP

539 名前:デフォルトの名無しさん mailto:sage [2022/06/07(火) 18:10:22.54 ID:WAenZnu4.net]
>>523
あとrustがllvmに執着しているというのも間違いで
gccのcodegenを使えるようにするプロジェクトもあって活発に開発されてるよ
https://github.com/rust-lang/rustc_codegen_gcc



540 名前:デフォルトの名無しさん [2022/06/07(火) 18:17:47.44 ID:1EdYDqGn.net]
>>524
>>620 よろすく

541 名前:デフォルトの名無しさん mailto:sage [2022/06/07(火) 20:22:53.88 ID:UaJ7fd+W.net]
フィボナッチなんて普通に解析解あるんだからそれ使えばいいじゃん

542 名前:デフォルトの名無しさん mailto:sage [2022/06/07(火) 20:28:59.38 ID:ZSCymycr.net]
フィボナッチよりボイニッチを解読してくれ

543 名前:デフォルトの名無しさん mailto:sage [2022/06/07(火) 23:19:58.58 ID:bfW1tdFv.net]
ボイニッチはどうせ創作ノートでしかないし

544 名前:デフォルトの名無しさん [2022/06/07(火) 23:25:02.45 ID:lnwubCy8.net]
>>532
フィボナッチは単なる題材に過ぎないことを理解できていないのはヤバいぞ
例えば>>529の定数畳み込みや>>502のジェネリックやOptionが最適化される話などが本題
単純だが単純過ぎない題材の例としてたまたまフィボナッチ数列が使われている

545 名前:デフォルトの名無しさん mailto:sage [2022/06/07(火) 23:57:19.63 ID:YQOkxy3N.net]
ワッチョイありスレに移住してここは複おじに明け渡してやったほうがいいのかもな

546 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 00:55:31.29 ID:QhxBwpDW.net]
>>536
複おじの意味がいまだにわからないが
ジェネリックよりも速いコードがあるならきちんと示そうぜ

>>506はイテレータと関数の異種比較のイカサマ
>>511はイテレータ同士の比較へ改善されたがイテレータの中のunwrapでpanicするマガイモノ
そんなデタラメばかりしていたら信頼を失うぜ

547 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 01:35:00.04 ID:jyTDsLRS.net]
>>537
>>481は?

548 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 01:40:47.24 ID:C5b6ywPX.net]
https://play.rust-lang.org/?version=nightly&mode=release&edition=2021&gist=5180fadf9fda409e0456042fc1bccd8e

遅くなるの分かりきってたから出し渋ったつもりだったけど普通に速かったわwwwメンゴメンゴ

test bench_1 ... bench: 426,277 ns/iter (+/- 1,804)
test bench_fast ... bench: 350,928 ns/iter (+/- 2,760)

一応criterion版も貼っとく
>>502で提起されたベンチマーク不適切説の真偽が気になるなら是非実行してみてくれ
https://gist.github.com/rust-play/3bd45555b9e6faef2b1426712e4e7601

549 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 02:05:38.58 ID:jyTDsLRS.net]
>>539はin-placeなchecked_addを実現するtraitがないことで速度差大きくなってるものだよね

ジェネリクスが遅いと言ったときに、
ジェネリクスの機構自体による速度差と、ジェネリクスにまつわるエコシステムによる速度差という二通りの解釈があると思うけど、
>>537は前者のことを、>>539は後者のことを言っていて議論がかみ合っていないのではないか

ジェネリクスの機構だけの話をするなら前者の議論だけで良いけど、
メンテナンスコスト含めた実用性考えると後者の範囲も考える必要があるよね、
というのが>>514で言いたかったこと



550 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 02:17:57.20 ID:aUi5KtMm.net]
>>539
君のベンチはいつも何と何の違いを比較しようとしているのかよくわからない

一方で>>502は何と何を比較するのかを明確にした上で各項目毎に段階を経て比較しているから
仮にベンチで違いがあればその要因が明確となり知見が得られる比較となっている

君の投稿からは結果に対して何が要因なのか知見が全く得られない

551 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 02:29:17.13 ID:aUi5KtMm.net]
>>540
まず速度差がそのおっしゃっているchecked_addによるものなのかどうかを明確にしたほうが良いかと思う
>>502を見てみると(2)→(3)がchecked_addの有無になっているがベンチは同じ
その結果からchecked_addは関係ないのではないか?

552 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 04:21:09 ID:uEpi8n1p.net]
>>540
ジェネリックにやりたいならCheckedAddAssignを作ればいいんじゃん?
Rcのもジェネリックにもできるわけだし

553 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 05:52:38 ID:78wIRTgY.net]
>>540
そもそもコードが汚いという指摘が発端なので
前者が論点だと思ってる人はいないと思うよ

554 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 06:22:34.20 ID:2tL4qRNc.net]
>>544
元と同一コードを含む5種類のベンチ>>502のコードを見たけど
特に汚いコードは見当たらないんじゃない?
もしあるならば具体的にどの部分なのかを言ったほうがいいと思うよ

555 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 08:45:07.60 ID:C5b6ywPX.net]
>>541
「checked_addしてから代入」と「add_assign」の比較だよ
で現状後者はジェネリックにやるために適切なtraitが無いから、
ジェネリックな関数では性能向上に限界があるよねって話
>>540の言う通り、ジェネリック関数とmonomorphized関数をの性能を比較したいわけじゃないよ

>>542
>>490,491でも出た通り、checked_addとadd(両辺とも参照の場合)はどっちもcloneが発生する
だから(2)を(3)にしても、遅いchecked_addを遅いaddで置き換えただけなので性能向上は無い
あとclone発生してるのはここね、docs.rsの[src]からたどれば&BigUint同士のaddがこのマクロで定義されているのが分かるはず
https://docs.rs/num-bigint/latest/src/num_bigint/macros.rs.html#91-107

556 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 09:03:01.17 ID:C5b6ywPX.net]
あんまり頑固になっても聞かなさそうなんでそろそろ妥協案でも

どうしてもジェネリックでやりたかったら、num::PrimIntでも使ってればここまでの批判は無かったんじゃないですかね
BigUint/BigIntは範囲から外れるけど、それはやっぱりそういうものなんですよ

557 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 09:13:21.45 ID:2tL4qRNc.net]
>>546
あなたのコード>>539もclone()しているから
1回あたりclone()が1回発生している点で同じではないかね
そこは重要なところだから曖昧な推測で済ませずに細かい差異でベンチマークを取ったほうがいいのではないか

558 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 11:26:56.36 ID:oyhrGaRU.net]
Rustが自由自在に書けるようなプログラマになりたがったンゴねえ
ワイは低脳だから躓いてるンゴ
例えば&'static TとT: 'staticの違いがなんかあるらしいんやがわからなかったンゴ
前者はプログラム終了時まで生きる変数の参照って意味で後者はもしTに参照があったらそれは'static以上生きるって解釈であってるんか?

559 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 11:49:32.36 ID:oyhrGaRU.net]
いや理解したんご
前者は参照型しか受け付けないけど後者はそれ以上の種類の型を受け付けるンゴねえ
さらに違いがあるかもだけど勉強進めるわ
なんでもなかった



560 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 12:37:42.94 ID:C5b6ywPX.net]
>>548
そのベンチが>>539のつもりなんだけど、これにどういう問題があって具体的には何をしろと?
from_fn使ってる分(5)のほうが近いから比較対象を(1)から(5)に変えろってこと?

というかそれが分かっているなら他人にやらせるんでなく自分で検証すればいいのでは?

561 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 14:46:42.18 ID:JNpA1ROM.net]
>>551
結局、何が原因なん?
ジェネリック?それともchecked_add?あるいは変数Some?まさかのswap?
Rustスレとしてはコードよりも原因を知りたい

562 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 15:00:02.66 ID:0R8j40RZ.net]
>>502
「1.5倍も差があるのは妙だな Rustでは最適化されるのでジェネリックで書こうがそんな差は出ないはず」
これがそもそもおかしい、最適化されようが何だろうが生成されるコードは違うのでMIRなりdisamなりでインストラクション単位で目視すれば一発だろ。ベンチを取る以前の思い込み低レベルな話
そしてほぼ最適化された無駄のないコードだったとしても
>>523
ここ5年程度のCPUでは64バイトのDSB境界を持つ小さなループ呼び出しなどが単一のμopsキャッシュに収まる場合があるがコードの配置によって異なり1.5倍程度の差が出ても不思議じゃない。
言ってるのに全く聞かない

563 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 15:48:23.76 ID:kiLfNcoT.net]
>>553
その件は1.5倍差あった>>481がイテレータと関数を比較するという大チョンボをしていたことが原因と判明済
そしてジェネリックか否か自体では速度に差が出ないことを>>502のベンチが証明済

564 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 17:10:39.22 ID:C5b6ywPX.net]
>>554
よく見ろ、それは>>475の話だ
>>481は両方とも(usize) -> BigUintな関数

565 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 17:16:08.77 ID:LlAtoLIj.net]
これだけ時間をか

566 名前:けても原因すら分からずノンジェネリックとの速度差を埋められない状況をコストとして認識できてないのが恐ろしい []
[ここ壊れてます]

567 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 17:31:51.50 ID:H0oyRmek.net]
一般的に、数列を順に求めるイテレータと、
そのうちの特定の数だけを求める関数とでは、
オーダー問題もアルゴリズムも変わってくるため、
>>481はまた別の問題となっている。
イテレータ同士の比較で1.5倍となっていないことからも、
異なる問題であると理解できるはず。

>>556
ジェネリックとノンジェネリックに速度差が無いことは、
>>502で既に示されたのだから、
ジェネリックかどうかは一切関係ないと思う。
ジェネリックとは別の問題。

568 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 18:18:03.20 ID:cKPONsWM.net]
>>557
>>502はジェネリックでも実現できるコードをノンジェネリックにしただけ

ノンジェネリックならadd_assign, mem::swap, cloneで>>502のいずれよりも速いコードが書けるが
ジェネリックだとchecked_addを使わざるを得ず同じことが実現できない

569 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 18:32:47.55 ID:y1p7Fxu2.net]
>>537では「ジェネリックよりも速いコードがあるならきちんと示そうぜ」と言っていて
>>540の言う違いを理解している感じだったのに
いざ本当にコードが出てくるとジェネリクス自体のオーバーヘッドの話に限定して、差は無いと連呼

わざとやってんの?



570 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 19:11:11 ID:sj9oTS9C.net]
>>558
> ジェネリックだとchecked_addを使わざるを得ず同じことが実現できない

それは違うのではないか?
ジェネリックでも自由にCheckedAddAssign等を定義して実現することが可能という話が既に出ている >>492 >>543
一方でノンジェネリックで書いてもオーバフロー対策としてchecked_addは使わざるを得ない
つまりどちらが有利とか優れているとかいう問題ではない

571 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 19:45:52.60 ID:btlg3B6B.net]
>>560
他人の意見を鵜呑みにしてないでやってみれば?
俺はちょっと試してみたけど結局無理だと確信したよ

572 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 19:54:30.37 ID:hF0KVPZD.net]
CheckedAddAssignの定義難しいよね
cloneを減らせるうまい定義見せて欲しい

573 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 19:58:01.42 ID:hF0KVPZD.net]
>>560
> 一方でノンジェネリックで書いてもオーバフロー対策としてchecked_addは使わざるを得ない
つまりどちらが有利とか優れているとかいう問題ではない

BigUintの場合はオーバーフローを想定しなくて良いからただのAddAssignで良いよね
ジェネリックな実装の場合は考慮すべき事項が増えるというハンデを抱えている

574 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 20:09:35.76 ID:Pauu0yN9.net]
基地同士の喧嘩おもすれー

575 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 21:16:33.76 ID:zfNTYu3X.net]
ジェネリックでなくても各i8版~u128版でchecked_add要るんじゃね?

576 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 21:31:30.99 ID:uKz/tAPi.net]
>>560
CheckedAddAssignはAddAssignと同じようには実現できないよ
速度差は他の方法で工夫すれば埋めることは不可能ではない

577 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 22:52:52.99 ID:C5b6ywPX.net]
このままでは誰も気付かなさそうなのでここでネタばらし
>>539のcriterion版ですがこちらで動かすとこうなりました

fibonacci_iter_1 time: [7.3605 ms 7.3655 ms 7.3711 ms]
Found 9 outliers among 100 measurements (9.00%)
1 (1.00%) high mild
8 (8.00%) high severe

fibonacci_biguint_iter time: [7.5944 ms 7.5967 ms 7.5992 ms]
Found 2 outliers among 100 measurements (2.00%)
1 (1.00%) high mild
1 (1.00%) high severe

同程度に遅くなってしまいました
理由は>>548の通り、せっかく減らしたcloneをイテレータ化するために戻さざるを得なかったからです

一見非ジェネリックのほうが速い結果が出たのは、criterion版がN=50000としていたのに対して、
test crate版は最初に貼られたN=10000から変えずにやっていたためでした
criterion版をN=10000で、test crate版をN=50000で計測してみると大体同じような結果になりました
N<2^15あたりまでは非ジェネリックのほうがちょっとだけ速いみたいですが、まあ誤差の範疇かと思います

そういうわけで>>539で非ジェネリックのほうが速いと主張したのは嘘です
本気で信じちゃった人はごめんね

最初はcriterionとtest crateの差だと早とちりしたため、ベンチマーク不適切説とか勿体ぶった書き方をしてました
>>502で根拠も無く疑いをかけたのに対するカウンターのつもりで黙ってたんですが、不発になっちゃいました
まあでもtest crateってwarm upもしないしサンプル数固定だし、その結果ひどい場合だと>>511なんか相対誤差10%超えてるし
criterion使ったほうがいいよってのは大筋では間違ってないよね

最後に+=でイテレートするこれだけ貼っとくから
某おじはこれに相当する性能のジェネリックなイテレータが書けるまでそういったクソどうでもいい執着に人を付き合わせるんじゃないぞ
https://play.rust-lang.org/?version=stable&mode=release&edition=2021&gist=76cd0aad53f19888900a4b450fd078c5

578 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 23:10:54.19 ID:Pauu0yN9.net]
Rust使うやつは全員クズ

579 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 23:14:19.56 ID:xZpQpCco.net]
ゴミみてぇに使いにくい



580 名前:デフォルトの名無しさん mailto:sage [2022/06/08(水) 23:33:46.23 ID:1Qgkgfnu.net]
>>567
ジェネリックは遅くて使い物にならずRustはクソ言語のいい流れが出来ていたのに邪魔すんなボケ

581 名前:デフォルトの名無しさん mailto:sage [2022/06/09(木) 00:05:50.09 ID:8AO4ag5u.net]
>>567
それが本当にベンチマークしたかった内容なのかな?

Nの変化による性能差の変化が重要
Rcでイテレータ返すやつと合わせて確認すればN=50000だと差がなくなる理由も分かる

582 名前:デフォルトの名無しさん mailto:sage [2022/06/09(木) 01:08:31 ID:b8HehfnZ.net]
>>567
裏切り者め
隠し通せよ

583 名前:デフォルトの名無しさん mailto:sage [2022/06/09(木) 09:43:05.84 ID:m8hzuB37.net]
>>567
結局ジェネリックに書いても非ジェネリックでも速さはほぼ同じなのかよ
どんな方法で書いても結果を返すためにclone相当が最低1回は必要で
>>502のジェネリック版はclone相当がchecked_addでの1回のみだからこれ以上は速くできないってことか

584 名前:デフォルトの名無しさん mailto:sage [2022/06/09(木) 11:12:09.28 ID:5tn+SNbG.net]
複オジ必死やなw

585 名前:デフォルトの名無しさん mailto:sage [2022/06/09(木) 11:39:59.58 ID:gQa8Lild.net]
iterなんだけど

let v = vec![1, 2, 3, 4];

v.iter().filter(|&x| x % 2 == 0).cloned().collect();

v.iter().map(|&x| x * 2).collect();

filter()はcloned()が必要でなぜmap()は必要ないのか

586 名前:デフォルトの名無しさん mailto:sage [2022/06/09(木) 11:41:07.83 ID:gQa8Lild.net]
まちがえたこうだ

let v = vec![1, 2, 3, 4];
let result_1 = v.iter().filter(|&x| x % 2 == 0).cloned().collect();
let result_2 = v.iter().map(|&x| x * 2).collect();

587 名前:デフォルトの名無しさん mailto:sage [2022/06/09(木) 11:52:52.81 ID:WWB1ag70.net]
>>573
IteratorのItem生成のためにcloneが必要という話なので
参照返すとかRc<RefCell>にするとかすればまだ改善する余地はありそうではある

588 名前:デフォルトの名無しさん mailto:sage [2022/06/09(木) 14:32:02.03 ID:BXa7hn4f.net]
「Atom」の開発者が究極のコードエディターを目指す ~「Zed」の開発が始動
「Electron」を捨て、Rust言語を採用。GPUI、tree-sitterなどで武装し、超高速なコードエディターに
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1374986.html

589 名前:デフォルトの名無しさん mailto:sage [2022/06/09(木) 14:58:44.89 ID:G7q6UoxI.net]
「重要」でスレ内検索かけると……



590 名前:デフォルトの名無しさん mailto:sage [2022/06/09(木) 16:58:07.35 ID:/uOnDbzK.net]
>>575
Vec<i32>のiter()は&i32のイテレータ
filterした結果も&i32なのでVec<i32>でcollectしたければcopiedやclonedが必要
Vec<&i32>のままcollectするならclonedは不要

mapの例はx * 2でi32が新たに生成され
map以降は&i32ではなくi32のイテレータになるので
cloned無しでVec<i32>にcollectできる

591 名前:デフォルトの名無しさん mailto:sage [2022/06/09(木) 17:07:43.03 ID:3qzGL8h6.net]
>>577
Rc版はmake_mutにすれば呼び出し側が参照をつかんでる時だけcloneにフォールバックしてくれる
つかんでなければcloneしないので高速
全ての値をつかむようならRcを使わないやり方より少し遅くなる

592 名前:デフォルトの名無しさん mailto:sage [2022/06/09(木) 20:30:30.68 ID:sXhLSFat.net]
>>355はRustだと末尾呼び出しの最適化が効くの?
末尾呼び出し最適化必須のschemeですら自動的には最適化されず、人間が意味を解析して、アキュムレーター使って末尾再帰になるようにしましょうって練習問題になるくらいなのに。
Rust凄い!!

593 名前:デフォルトの名無しさん mailto:sage [2022/06/09(木) 21:24:26.48 ID:xbJg8ij+.net]
>>581
簡易的なstreaming iteratorにする方法もあるよ

594 名前:はちみつ餃子 mailto:sage [2022/06/09(木) 22:43:27.67 ID:k8dtcEck.net]
>>582
どういう理解をしてるのかようわからんが、 >>355 はいわゆる末尾呼出しではないよ。

595 名前:デフォルトの名無しさん mailto:sage [2022/06/10(金) 00:02:10.12 ID:/2sYVq21.net]
https://twitter.com/Ray__March/status/1523717266730151936
Crab Rave
(deleted an unsolicited ad)

596 名前:582 mailto:sage [2022/06/10(金) 12:26:19.22 ID:xMTaqdcz.net]
>>584
340くらいから末尾呼び出し最適化の話題があって、355の2で「リリースモードだとスタックが溢れない」と書いてあったので、末尾呼び出し最適化が効いたのかと思いました。
十分なスタック容量があっただけ?

1+count(n-1)

count(n-1, acc+1)
に書き換えてくれる最適化があるのかな、と思いまして

597 名前:デフォルトの名無しさん mailto:sage [2022/06/10(金) 12:39:41.49 ID:awrGQFqA.net]
>>586
生成されたバイナリを見た方が良いよ
https://godbolt.org/z/Kcd6zf68e
定数たたみ込みでnopになってるっぽい

598 名前:デフォルトの名無しさん mailto:sage [2022/06/10(金) 12:44:00.71 ID:NmVzwec3.net]
>>583
ストリーミングイテレータを試してみたけどRc使ったほうが少し速かった
ただ呼び出し側が参照をつかんだままにするとコンパイルエラーにしてくれるのでRcより望ましいケースが多々ありそう

599 名前:デフォルトの名無しさん mailto:sage [2022/06/10(金) 13:14:03.27 ID:/2sYVq21.net]
streaming iterator! そういうのもあるのか
自分への参照を返せるんだね
使うかどうかは分からんけど覚えておこう



600 名前:582 mailto:sage [2022/06/10(金) 17:55:03 ID:k70t2J8V.net]
>>587
すまん

601 名前:はちみつ餃子 mailto:sage [2022/06/10(金) 20:18:18.95 ID:din4Kjb/.net]
>>586
すでに >>587 が指摘しているが、定数畳み込みが起こっている。 入力が定数で、かつそれに対する演算が副作用のない基本的なものであった場合に定数畳み込みがされやすい。 定数ではない場合でもこの関数 count は
mov rax, rdi
ret
になってて、入力をそのまま返す形にまで最適化されるので末尾呼出しがどうこうというレベルのものではなくなっている。

最適化というのは、レジスタ割り当てなどは理論的な背景がはっきりしているが、多くの細々としたものは「大量の置き換えパターンを辞書のように持っている」という物量で押し切る泥臭いものだったりするので (それをやりやすいようなデータ構造とかに工夫はあると思うが) 結局のところは投入されたリソースが多いやつが強い。

ちなみに Scheme の末尾呼出し最適化は言語仕様で要求する最低限度がそれだけ (しかし常にやらなければならない) という意味であって、それ以上の最適化をやっちゃ駄目という意味ではないよ。 最適化をどのレベルまでやるかは処理系次第。

602 名前:デフォルトの名無しさん mailto:sage [2022/06/10(金) 20:27:25.22 ID:VliTcE7P.net]
こいつが出てくると結論が1つも分からなくなる

603 名前:デフォルトの名無しさん mailto:sage [2022/06/10(金) 21:05:43.32 ID:uz7MKgqc.net]
複オジと同じ臭い

604 名前:デフォルトの名無しさん mailto:sage [2022/06/10(金) 21:45:41.77 ID:iyAWtrh4.net]
汚文章は汚コードの兄弟
同じ親から生まれてくるもの

605 名前:デフォルトの名無しさん mailto:sage [2022/06/10(金) 22:32:01.13 ID:r0Sf5PMX.net]
最適化の話はかなりコンパイラーに詳しくないとなぜそうなるかって分からないだろうからな
コンパイラーの最適化について話せる奴はプログラミング中級者以上だろ。
(本職プログラマなら話せないと知識なさすぎと言われるだろうが)
趣味でプの俺は永遠に初心者レベルでそんな知識ないから、こいつ何を言っているんだ?だが

606 名前:デフォルトの名無しさん mailto:sage [2022/06/10(金) 22:32:11.19 ID:+N1EN6wu.net]
まぁ要するに

×××という最適化処理が処理系の規格として定められているのなら処理系の開発者(=コンパイラとか作る人)はその最適化を実現しないといけないしそれを利用するプログラマは処理系が”上手いことやってくれる”と期待していい、しかしそれが言語規格上は必須とされてない処理については処理系が“うまいことやつてくれる”と基本は期待してはいけない
けど、規格で求められてないような高度な最適化処理を“してはいけない”わけではない、最新の理論で見つかった最適化処理など取り入れる分には好きにして構わない

という意味でしょ
Haskellのメモ化処理とかでもよく出てくるよ
GHCって言うすごい処理系があってHaskellの標準規格では全然定められてないような最適化処理をバンバンやってくれるから“なんでこんなにはやいの?とりま作っただけなのに”と思うこと時々あるからな

607 名前:デフォルトの名無しさん mailto:sage [2022/06/10(金) 22:36:04.99 ID:3HE2W+m8.net]
最適化と言えば&mutがnoaliasになって高速化したコード出会ったことある人居る?

608 名前:デフォルトの名無しさん mailto:sage [2022/06/10(金) 22:56:48.93 ID:/Qg1cUoJ.net]
>>596
要するに~
元の説明より長なっとるやないかーいww
脳みそ整理整頓してこんかーいww

609 名前:デフォルトの名無しさん mailto:sage [2022/06/10(金) 23:03:01.48 ID:EifRM46R.net]
>>595
初心者自演乙オジ



610 名前:デフォルトの名無しさん mailto:sage [2022/06/10(金) 23:39:18 ID:QxuEFd4p.net]
またいつもと同じパターン
善人 = 情報や説明やコード等を書いてくれる人
悪人 = 文句や批判だけの人

>>597
Rustでは基本的に二つの & mut がaliasになることはないからnoaliasでいいけど
LLVMのバグが見つかったりやRustコンパイラの改修などで変遷を経てきてるみたいね

> Rust 1.0 ~ 1.7 noalias enabled
> Rust 1.8 ~ 1.27 noalias disabled
> Rust 1.28 ~ 1.29 noalias enabled
> Rust 1.30 ~ 1.54 noalias disabled
> Rust 1.54 ~ noalias enabled

611 名前:デフォルトの名無しさん mailto:sage [2022/06/10(金) 23:52:37.74 ID:q3uEdydr.net]
仕様ころころゴミ言語

612 名前:デフォルトの名無しさん mailto:sage [2022/06/10(金) 23:57:33.08 ID:Vy8jfUtT.net]
ソースこれですか
https://stackoverflow.com/a/57259339

613 名前:デフォルトの名無しさん mailto:sage [2022/06/11(土) 00:21:37.71 ID:nVHax23k.net]
>>602
「rust add assign optimize site:stackoverflow.com」でトップヒットだったわw
どおりでね

614 名前:デフォルトの名無しさん mailto:sage [2022/06/11(土) 00:47:00.69 ID:41aFXNPT.net]
>>601
Rustの仕様は変わっていない
LLVMへの最適化指示のうちの一つをLLVMのバグ発見のため一時的にオフとしていただけ

615 名前:デフォルトの名無しさん mailto:sage [2022/06/11(土) 00:53:30.81 ID:6T6IERuk.net]
そんなつまんねーのに反応すんなよ……

616 名前:デフォルトの名無しさん mailto:sage [2022/06/11(土) 01:51:51.23 ID:coFBEVyx.net]
マッチポンピング好きだねぇ

617 名前:デフォルトの名無しさん mailto:sage [2022/06/11(土) 11:14:20.05 ID:FpznSlgy.net]
そろそろRust製の有名なソフトウェア作ってからビックマウスしてくださいね、Firefox以外で

618 名前:デフォルトの名無しさん mailto:sage [2022/06/11(土) 11:39:14.69 ID:fd4RDbWP.net]
>>606
マッチポンプも過疎スレのにぎわい

619 名前:デフォルトの名無しさん mailto:sage [2022/06/11(土) 11:54:00.75 ID:sRR0HfwK.net]
TechEmpower Round 18で1.5倍の差を付けて堂々の1位をかっさらったactixは有名ソフトウェアではない了解



620 名前:デフォルトの名無しさん mailto:sage [2022/06/11(土) 15:51:26.10 ID:Lxou0O6d.net]
DiscordとかDropboxとか

621 名前:デフォルトの名無しさん mailto:sage [2022/06/11(土) 16:19:59.18 ID:C3/u0lQ5.net]
WinとかLinuxの中身ですでに使われてなかった?

622 名前:デフォルトの名無しさん mailto:sage [2022/06/11(土) 18:52:01.33 ID:BGPUwt90.net]
>>593
同じ臭いも何も同一人物だろ

623 名前:デフォルトの名無しさん mailto:sage [2022/06/11(土) 19:26:39.50 ID:WsHL0uxM.net]
>>611
Linuxはまだ
winは確実なソースあったっけ?
OS系だとAndroidでは使われてる(まだデフォルトで有効ではないけど)

624 名前:デフォルトの名無しさん mailto:sage [2022/06/11(土) 23:25:25.63 ID:HlAQKNMT.net]
なんでRound18なんて大昔の過去を?

625 名前:デフォルトの名無しさん mailto:sage [2022/06/12(日) 06:12:09.52 ID:6S+GFICB.net]
>>612
どうでもいい

>>613
同じくどうでもいい

626 名前:デフォルトの名無しさん mailto:sage [2022/06/12(日) 17:11:51.09 ID:tUHADwRi.net]
Rustはver2.0にはなりませんって言ってるけど実質はとっくの昔にver2.0になってる

627 名前:デフォルトの名無しさん mailto:sage [2022/06/12(日) 19:14:45.66 ID:geXDvND7.net]
>>616
どういうこと?

628 名前:デフォルトの名無しさん mailto:sage [2022/06/12(日) 20:36:02.36 ID:nrxswUhC.net]
>>562 >>566
CheckedAddAssignにこだわる必要はないため、発想を転換して、
checked_add()の原関数であるoverflowing_add()を用いることで、
overflowing_add_assign()を用意して同じようにbool値を返せば解決する

具体的には以下のように引数はadd_assign()と同じでbool値を返せばよい
trait OverflowingAddAssign {
 fn overflowing_add_assign(&mut self, rhs: &Self) -> bool;
}

オーバーフローするi8型〜u128型にはoverflowing_add()があるため実装はこうなる
 let is_overflow;
 (*self, is_overflow) = self.overflowing_add(*rhs);
 is_overflow
この3行のコードでちゃんと最適化されるかどうかを確認するため、
単純にadd_assignを用いた場合、すなわち「*self += rhs」と比較すると
https://godbolt.org/z/WP3En8xM8
のアセンブリ出力となり、オーバーフローを返す以外は同一に最適化されることが確認できる

一方でオーバーフローしないBigUintなどの型への実装はこうなる
 *self += rhs;
 false
つまりオーバーフローの結果として常にfalseを返すので、
こちらは使う側でオーバーフローの扱いが消えてadd_assign部分のみに最適化される

したがってこのOverflowingAddAssignを用いてジェネリックに書けば、
どちらの型の場合であっても、非ジェネリックに書いた時と同一コードとなる

629 名前:デフォルトの名無しさん mailto:sage [2022/06/12(日) 20:47:24.48 ID:nrxswUhC.net]
>>577
一般的に参照返すイテレータ類を実装する場合の注意点として、
 1. let x0 = x_iter.next();
 2. let x1 = x_iter.next();
 3. ここで x0 の指す値を使う
順にこのような使い方をした時の挙動として、以下4パターンが考えられる
 A. ✕ 実行時エラーとなる
 B. ✕ x0の指す値が変化してしまう (次のx1の指す値と同一になってしまう)
 C. ○ x0もx1もそれぞれ正しい値を指す
 D. ○ コンパイル時エラーとなる

Rcとget_mut()を使った>>511のコードがNGのパターンA.で、これを避けるために、
Rc<RefCell>を使う提案のようだが、それもNGのパターンB.となってしまう
Rcとmake_mut()を使えばパターンC.となり、これがRc利用の場合の解となる

しかし参照を返すイテレータ自身がmake_mut()でclone()するのは役割として過剰である
切り分けとしてはイテレータを使う側が必要に応じてclone()するのが望ましい
そういうコードへ適切に誘導できる道が、コンパイル時エラーで示すパターンD.

具体的には、似非IteratorであるStreamingIteratorを用いるか、
Rust本命のGATsを用いたLendingIterator (=GATs適用後のIterator) を用いると、
clone()が必要な場面ではコンパイル時エラーにより知らせてくれる
もちろん普通にnext()ループ内の利用ならばclone()の必要なくコンパイルが通る



630 名前:デフォルトの名無しさん mailto:sage [2022/06/12(日) 20:59:35.22 ID:nrxswUhC.net]
実際に >>618のOverflowingAddAssignを用いてLendingIteratorで実装すると
以下のようになり、GATsを用いている以外は現状のIteratorともちろん同じ形
自己参照を返せるようになった点のみ異なる

impl<T: OverflowingAddAssign> LendingIterator for Fibonacci<T> {
 type Item<'a> = &'a T where Self: 'a;

 fn next<'a>(&'a mut self) -> Option<Self::Item<'a>> {
  if self.is_overflow {
   return None;
  }
  if self.is_first {
   self.is_first = false;
  } else {
   self.is_overflow = self.p.overflowing_add_assign(&self.q);
   std::mem::swap(&mut self.p, &mut self.q);
  }
  Some(&self.p)
 }
}

is_first処理は >>511のコードでの「iter::once(p.clone()).chain(...」部分であり必須
また、前述のようにBigUintで用いれば is_overflow が常にfalseのため最適化で消えて、
値の更新部分は「self.p += &self.q」のみが残り非ジェネリックと同一コードとなる
したがって、上述のコードがどの型でも最善に動作するコードとなるだろう

631 名前:デフォルトの名無しさん mailto:sage [2022/06/12(日) 21:33:27.12 ID:HOCAPH7I.net]
NAVERまとめを彷彿とさせるレス乙
3~4日もかけて頑張って調べたのは讃えるが
特質の異なるものを必要もなくジェネリック化することがアンチパターンだということに早く気づいてね

632 名前:デフォルトの名無しさん mailto:sage [2022/06/12(日) 21:51:32.06 ID:rC/Ton17.net]
これは同じものだからジェネリックでいいんじゃね

633 名前:デフォルトの名無しさん mailto:sage [2022/06/12(日) 22:02:56.78 ID:geXDvND7.net]
>>620
構造体メンバーであるis_overflowが常にfalseであることが分かるほどコンパイラ賢いんだっけ?
実際に生成されるコード確認した?

634 名前:デフォルトの名無しさん mailto:sage [2022/06/12(日) 22:16:28.43 ID:McWr7xMA.net]
add系は#[inline]だから大丈夫

635 名前:デフォルトの名無しさん mailto:sage [2022/06/12(日) 22:22:02.34 ID:geXDvND7.net]
>>624
構造体メンバの値はグローバル変数なんかと同じで関数外で値が変更される可能性があるので
メンバが特定の値しか取らないことを暫定として最適化するためには、
crateの範囲を超えてプログラム全体で値が設定されうる箇所が他にないことを確認するか
メンバが可視な範囲で確認する必要があると思うけど、
前者をやるためにはリンク時最適化が必要だし
後者ならメンバの可視性をLLVMに渡さないといけないと思う
rustcとLLVMはそこまでやってるの?

636 名前:デフォルトの名無しさん mailto:sage [2022/06/12(日) 22:54:00.11 ID:E86JsxIR.net]
rust結構面白いからマイクロソフトがVisualStudioでRustでWindowsFormを作れるようにしてくれればなあ

637 名前:デフォルトの名無しさん mailto:sage [2022/06/12(日) 22:59:17.60 ID:MphJhZqp.net]
>>618
それが>>566の2行目で書いてる工夫のことだよ
boolではなくchecked_add使ってOption<()>返すメソッドにしておけば?演算子でシンプルに書ける

638 名前:デフォルトの名無しさん mailto:sage [2022/06/12(日) 23:07:42.57 ID:McWr7xMA.net]
>>627
assignでない演算は生成のため内部でcloneが発生して無駄と既に結論が出ている

639 名前:デフォルトの名無しさん mailto:sage [2022/06/12(日) 23:11:14.31 ID:0LaPlWrL.net]
GATがstableになるの意外と近い予定なんだな
年単位で先のことかと思ってた



640 名前:デフォルトの名無しさん mailto:sage [2022/06/12(日) 23:18:22.58 ID:H16c0lbs.net]
>>625
Rustでそれは起きない
書き換えるには所有権か&mutが必要でコンパイラは全て把握している
更に構造体のメンバーはpub指定がない限り他者はアクセス不能
つまり今回ならばnext()しかメンバー書き換えしないとコンパイラは確定できる

641 名前:デフォルトの名無しさん mailto:sage [2022/06/12(日) 23:25:01.40 ID:geXDvND7.net]
>>630
その最適化するのはLLVMだけどLLVMが最適化できるだけの情報を渡してるの?というのが聞きたいこと

642 名前:デフォルトの名無しさん mailto:sage [2022/06/13(月) 00:14:58.10 ID:RutuvYDu.net]
>>623
その通りRustコンパイラが賢いことを確認したよ
is_overflowが常にfalseとなることを察知してNoneを返すことが無くなったみたい
Noneが来ない利用側のwhile let Some(n) = iter.next()は無限ループのコードとなっちゃった
さらにwhile loopより後ろのコードは永遠未達と判断されて完全に消えた

643 名前:デフォルトの名無しさん mailto:sage [2022/06/13(月) 00:32:02.84 ID:XmIGhHAx.net]
>>628
checked_add使うのはプリミティブだけだよ
BigUintはadd_assignで常にSome(())

644 名前:デフォルトの名無しさん mailto:sage [2022/06/13(月) 00:46:44.89 ID:BEV+i+nu.net]
>>620
GATってIteratorとか既存TraitのAssosiate Typeに直接ライフタイム書けない仕様になったの?
LendingIteratorみたいに別のTraitを使わないといけないようならイテレータ関連の仕組みが2重なって使い勝手が悪い

645 名前:デフォルトの名無しさん mailto:sage [2022/06/13(月) 00:50:16.18 ID:WmCB7dh7.net]
>>633
意味不明
Some(())/Noneにするならば>>618のbool値のコードで十分

646 名前:デフォルトの名無しさん mailto:sage [2022/06/13(月) 00:56:09.87 ID:WmCB7dh7.net]
>>634
もちろん出来るようになる
今は無理だからRust公式ブログで解説された例に倣って仮にLendingIteratorとの名で定義して使うなどする

647 名前:デフォルトの名無しさん mailto:sage [2022/06/13(月) 12:04:19.24 ID:GDAgVCx4.net]
>>632
おー、そんな賢いんだ。すごい
ちなみにfn mainとイテレータの定義は同じcrateに含まれている?
lib crateでイテレータを定義してbin crateから使った場合にどうなるかも気になる

648 名前:デフォルトの名無しさん mailto:sage [2022/06/13(月) 14:28:57.42 ID:HonuYlRO.net]
>>626
こういうMicrosoftからのサポートは俺も期待してる
VC++よりもRust書きたい

649 名前:デフォルトの名無しさん mailto:sage [2022/06/13(月) 17:16:12.55 ID:GB/2aB1F.net]
やめてくれ
汚コードまみれになる



650 名前:デフォルトの名無しさん mailto:sage [2022/06/13(月) 19:44:34.63 ID:oVc0GyRX.net]
乱数系のモジュールの仕様変更がかなりガッツリあったみたいなんだけど
Rustってこういうことよく起るの?
なんかWeb系みたいなノリを感じたんだが合ってる?

651 名前:デフォルトの名無しさん [2022/06/13(月) 19:57:14.15 ID:86dwWfAN.net]
なんのはなしだ

652 名前:デフォルトの名無しさん mailto:sage [2022/06/13(月) 19:58:13.01 ID:8KDu5nut.net]
>>640
人に読んでもらう文章は重要なところ省いたら読んでもらえないよ

653 名前:デフォルトの名無しさん mailto:sage [2022/06/13(月) 19:59:25.24 ID:GDAgVCx4.net]
>>640
標準ライブラリで破壊的変更はほとんどない
外部crateなら概ねsemverに従ってるし lockfile の仕組みもあるから、
以前ビルドできていたものがビルドできなくなることもほとんどない

654 名前:デフォルトの名無しさん mailto:sage [2022/06/13(月) 20:37:45.98 ID:XXqnAuVB.net]
>>638
サポートってどの程度のサポートを期待しているんだ?
MSがRustコンパイラー出せばWindowsのRust用フレームワーク出すんだろうがな
出さないなら、C/C++/C#のAPI/フレームワークをRustからとりあえず使えるようにしました
程度のサポートになるだろう。
期待しているのはRust用フレームワークであってRustからとりあえず使えるよじゃないだろ? []
[ここ壊れてます]

656 名前:デフォルトの名無しさん mailto:sage [2022/06/13(月) 20:37:53.20 ID:oVc0GyRX.net]
>>643
あれ外部ライブラリか
しかし乱数系の標準ライブラリってまだRustにないのか
やぱ若い言語だなRust

657 名前:デフォルトの名無しさん mailto:sage [2022/06/13(月) 20:43:42.90 ID:cs6TlBtz.net]
>>645
若いというか意図的に標準ライブラリから外してあるよ
理由は標準入りしてしまうと破壊的変更ができなくなって腐るから
だから将来的にも標準に入る予定はないと思う

658 名前:デフォルトの名無しさん mailto:sage [2022/06/13(月) 20:52:20.46 ID:oVc0GyRX.net]
>>646
意図的に外してるの?
ふーん、それはそれで面白い

659 名前:デフォルトの名無しさん mailto:sage [2022/06/13(月) 23:01:34.06 ID:JmWkv6oB.net]
>理由は標準入りしてしまうと破壊的変更ができなくなって腐るから

なんという本末転倒感



660 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 00:25:58.88 ID:DOq4xEj+.net]
基本的にRustはシンプルに最小限の言語構成部分しか標準ライブラリに持たない方針
つまり各プログラミング言語毎に標準ライブラリの意味合いや範囲が異なるのと同じ
だから乱数でも正規表現でも何でもRustでは外部クレートに存在する
非同期だって基本構成部分のasync/await/Futureは言語として持つけど
非同期ランタイムや非同期ライブラリは外部クレート

661 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 00:42:56.77 ID:OVbm/pyy.net]
OptionやResultの便利メソッドはどんどん追加されてるし別に標準ライブラリを最小限のものにしようとはしてないでしょ

662 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 00:49:05.73 ID:o3U2MVOf.net]
>>649
>最小限の言語構成部分しか標準ライブラリに持たない方針
俺もそんな方針だと思う
これが良いのかどうかは分んが。
標準ライブラリだとコンパイラ屋がコンパイラを出す限りサポート・メンテされるのが
他の言語では標準ライブラリなのが外部クレートだと、将来これをメンテする奴がいないになって
放置になり困ったになる可能性あるからな。

663 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 01:01:42.50 ID:DOq4xEj+.net]
>>650
それは最小限の意味合いの受け取り方が違っているだけで同じ
Option/ResultはRustにとって言語構成部分
そしてそのメソッドは強いて言えば多彩な制御構文にも相当する
だからRustの最小限の標準ライブラリに含まれているし必要性が認識されればメソッドも増える

664 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 01:15:57.14 ID:DOq4xEj+.net]
>>651
それは「サポートする人がいなくなればサポートされなくなる」という当たり前のことでRustとは別の一般的な話
どんな製品でも、どんなライブラリでも、どんな言語でも、同じ
そして基本構成部分を含むRust本体の改善&メンテと、それ以外のライブラリのそれとは明らかに別の話たから切り離されているのも自然

665 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 01:33:47.46 ID:Sv0LbY5c.net]
同じではあるがcargoの性質で余計に面倒な状態になってる。
この辺が低レイヤー向けと相性が悪い部分だな。

666 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 02:16:38.57 ID:DOq4xEj+.net]
>>654
低レイヤー向けのプログラミングをRustでしていて相性の悪さで困ったことはないが具体的に何だろう?

667 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 02:19:17.55 ID:0h5AdYzJ.net]
聞きかじりだけどクロスコンパイルとかやりたかったらxargo使うもんなんじゃないの

668 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 02:25:36.70 ID:RiQN/QJO.net]
同梱されるライブラリが巨大な言語で
とんでもないクソ仕様が最初に入ってしまうとか
メンテナがいなくなったけど互換性維持で簡単に削除できないとか
色々あるからなあ

669 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 02:36:05 ID:OVbm/pyy.net]
>>652
確かにOptionやResultそのものは言語機能にも関わってくる基本的な構成要素だけど、
OptionやResultの便利メソッドは外部crateでも定義できるよね
また、HashMapやBTreeMapなどは "言語" の構成要素ではないし、
最近ではonce_cellという外部crateで実現できていたものをstdに取り込もうとしている
"言語" を構成する最小限の要素に絞るのであれば、これらは外部crateで実現すればよくて標準ライブラリに入れなくても良いはずだよね

おそらく、標準ライブラリに取り込むものは厳選してコンパクトさを保つことを前提に、
広く使われていてAPIが安定しているものは取り込んでいくというスタンスなんだと思うよ



670 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 02:42:44 ID:OVbm/pyy.net]
あー、rustで書かれたプログラム全体の中でのデファクトスタンダードとかお作法とかも含めて言語って言っているのかな
そうなのであれば特に異論ないです

671 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 02:45:28 ID:xoZMylRu.net]
マンパワーが足りないから選択と集中で切り捨ててるだけ
利用者がそれを受け入れてるのは切り捨てた部分をコミュニティで支援するからコア機能の開発に力を注げってこと

672 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 02:53:05 ID:R/3cLRA4.net]
>>657
iostreamのことかああああ!!

673 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 03:08:52 ID:aUgYAX3K.net]
>>661
アレをRustに取り入れようという動きはないのかな?

674 名前:デフォルトの名無しさん [2022/06/14(火) 18:56:17.12 ID:HX1wvnNi.net]
>>648
利便性ではなく一貫性で標準を決めているってことだろ

675 名前:デフォルトの名無しさん mailto:sage [2022/06/15(水) 14:46:59.83 ID:LjsAAUyE.net]
>>658
Rustの利点はOption, Resultがmatchなどの構文で評価できる事、演算子もあるが演算子オーバーロードができる言語であれば同様のことができてしまうがC++23とか26とかで提案されていたinspectはmatchそのもの

676 名前:デフォルトの名無しさん mailto:sage [2022/06/16(木) 15:29:08.46 ID:13+3Y2cU.net]
Rustの活用でElectronよりも軽くて速いアプリフレームワーク「Tauri」が安定版に

まずはデスクトップから。モバイル・Webへの対応も進行中

https://forest.watch.impress.co.jp/docs/news/1417148.html

677 名前:デフォルトの名無しさん mailto:sage [2022/06/16(木) 16:07:33.42 ID:Ry+36K98.net]
TauriとYewで純正Rustデスクトップアプリ開発か、
あるいはTauriとVue.jsでフロントエンドのみJavascriptでデスクトップアプリ開発か、

678 名前:デフォルトの名無しさん mailto:sage [2022/06/16(木) 16:51:56.72 ID:TPrqrDPX.net]
Tauri + Vite + Vue 3 + Vuetify 3でデスクトップアプリ開発オラァ!!!

679 名前:デフォルトの名無しさん mailto:sage [2022/06/16(木) 19:39:52.77 ID:3W1WJ+ID.net]
そういやAtom開発者がRustで書き直した究極のエディター「Zed」はどうなったんや。
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1374/986/amp.index.html



680 名前:デフォルトの名無しさん mailto:sage [2022/06/16(木) 19:54:27.31 ID:hIo52KfN.net]
>>665
PC Watchが報じるほどのニュースか、これ?

681 名前:デフォルトの名無しさん mailto:sage [2022/06/16(木) 20:36:05.07 ID:qYRKaF3V.net]
>>668
>>UIフレームワークには、GPUを活用した新設計のものを用意。このフレームワークは「GPUI」と呼ばれている。

これがどうなるかだな

682 名前:デフォルトの名無しさん mailto:sage [2022/06/16(木) 20:52:57.67 ID:rVOBJfNW.net]
フレームワークおじさんきちゃったか

683 名前:デフォルトの名無しさん mailto:sage [2022/06/16(木) 21:28:18 ID:5USgn4My.net]
rust製フレームワークの話なら歓迎、jsは該当スレでよろ

684 名前:デフォルトの名無しさん mailto:sage [2022/06/16(木) 22:27:59.11 ID:/ddt6fDk.net]
>>670
俺的にはそれなんかバックにC/C++のVulkan系を用いたものって気がするんだよな

685 名前:デフォルトの名無しさん mailto:sage [2022/06/17(金) 01:45:23.89 ID:mZKsuJMX.net]
rustでgpuなんか使い始めたらライブラリぶっ壊れまくるぞ

686 名前:デフォルトの名無しさん mailto:sage [2022/06/17(金) 08:27:34.98 ID:8YmvneAf.net]


687 名前:デフォルトの名無しさん mailto:sage [2022/06/17(金) 15:39:33.09 ID:NH7eG327.net]
俺も今日からラスタシアンだからよろしくな
シャドーイングいいねアンダースコアで区切った同じような名前の変数が同一スコープ内に増え続けるのが嫌でイライラしてたらからこの仕様はめちゃ好き

688 名前:デフォルトの名無しさん mailto:sage [2022/06/17(金) 17:57:54.34 ID:gT1dTx1o.net]
>>676
カタカタで書くとラステイシャ

689 名前:唐ゥラステイションだからよろしくな []
[ここ壊れてます]



690 名前:デフォルトの名無しさん mailto:sage [2022/06/18(土) 06:02:27.98 ID:ib599DIL.net]
全然関係無いんだけど
最近の言語って使ってる人達に名前つけるじゃん
パイソニスタとかPHPerみたいな
CとかC++にもあるのかなー?とか考えてた時に思い出したんだけど
Pythonでモヒカンとか言ってる人達いるじゃん
アレの語源は何なの?

691 名前:はちみつ餃子 mailto:sage [2022/06/18(土) 11:43:40.01 ID:vGEU23LW.net]
>>678
Python 関連の用語としては知らんけど、これのこと?
https://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%92%E3%82%AB%E3%83%B3%E6%97%8F_(%E3%83%8D%E3%83%83%E3%83%88%E7%94%A8%E8%AA%9E)

692 名前:デフォルトの名無しさん mailto:sage [2022/06/18(土) 11:52:07.94 ID:quioMmSC.net]
モヒカン族とか、一部の人間が使ってるだけでネットではろくに聞かない言葉だね

693 名前:デフォルトの名無しさん mailto:sage [2022/06/18(土) 12:19:14.82 ID:ib599DIL.net]
>>679
どうもありがとう
ネットスラングだったのか
でもPython界隈以外で聞いたことないや

694 名前:デフォルトの名無しさん mailto:sage [2022/06/18(土) 12:29:31.13 ID:XkkeHcIr.net]
俺は本場海外の用語以外は一切使わない陰キャチー牛の日本人が勝手な造語の和製英語とかクソダサいからな

695 名前:デフォルトの名無しさん mailto:sage [2022/06/18(土) 12:41:40.55 ID:rUpNWN/L.net]
2005~2010頃の技術コミュニティではよく聞いたけど
最近はアンチハラスメントポリシーに抵触するから使われなくなった

696 名前:デフォルトの名無しさん mailto:sage [2022/06/18(土) 13:28:43.26 ID:n5ZvcUIJ.net]
Rust サビちゃん
Python ヘビちゃん

697 名前:デフォルトの名無しさん mailto:sage [2022/06/18(土) 13:35:45.47 ID:n5ZvcUIJ.net]
サビちゃんでもありヘビちゃんでもありヘジたんでもあり職場では犬たん++

698 名前:はちみつ餃子 mailto:sage [2022/06/18(土) 13:37:07.64 ID:vGEU23LW.net]
>>678
C 使いや C++ 使いのことは Cer とか C++er と書いたりすることはあるが、どう読むべきなのかわからぬ……。

699 名前:デフォルトの名無しさん mailto:sage [2022/06/18(土) 13:42:03.39 ID:n5ZvcUIJ.net]
>>686
社畜



700 名前:デフォルトの名無しさん mailto:sage [2022/06/18(土) 13:48:09.17 ID:n5ZvcUIJ.net]
この世の中あまたの言語があるのになぜCやC++でコード書くかと言えば仕事だから

701 名前:デフォルトの名無しさん mailto:sage [2022/06/18(土) 14:09:02.52 ID:XkkeHcIr.net]
普段仕事でC++使わない俺からするとRustめちゃくちゃわかりやすくて触ってて楽しい
特に配列やコレクションの扱い易さが段違いだわ

702 名前:デフォルトの名無しさん mailto:sage [2022/06/18(土) 14:30:49 ID:n5ZvcUIJ.net]
>>689
まあ他の言語触ると扱いやすくて気絶するから触るな

703 名前:デフォルトの名無しさん mailto:sage [2022/06/18(土) 14:57:08.56 ID:iczP/r4h.net]
※お話の途中ですが蟹が通ります
      ,、_,、     
 三  ( ´・ω・`) 
  三 /ヽ  /ヽ        (V)  (V) 
  三ノ  ̄ ゝ      三 ミ (´・ω・`) ミ
     タタタッ                 サササッ

704 名前:デフォルトの名無しさん mailto:sage [2022/06/18(土) 15:02:32.97 ID:hqbe2tQH.net]
そのカニもらって食べちゃうね

705 名前:デフォルトの名無しさん mailto:sage [2022/06/18(土) 15:34:56.20 ID:XkkeHcIr.net]
命名規則のガイドラインがスネークケースなのがC/C++に配慮した結果なのかなぁって気がするけどまぁ慣れの問題だから文句ないよ

706 名前:デフォルトの名無しさん mailto:sage [2022/06/18(土) 19:21:06.68 ID:M9fy3K3m.net]
公式ドキュメントにRustは式指向言語ですってあるんだが式指向とはなんぞや?

707 名前:デフォルトの名無しさん mailto:sage [2022/06/18(土) 19:25:35.79 ID:1ZLmOyHM.net]
制御構文が文じゃなくて式になってて値を返すという意味かと

708 名前:デフォルトの名無しさん mailto:sage [2022/06/18(土) 19:54:48.42 ID:vxK0JF3c.net]
終端にセミコロンつけたら式じゃなく文になっちゃうとか独特だよね
fn five() -> i32 { 5 }とかfn five() -> i32 { 5 };って書けた方が違和感ない気がするんだけどね

709 名前:デフォルトの名無しさん mailto:sage [2022/06/18(土) 20:32:50.72 ID:aTjkq+5e.net]
Rustはラムダ引数の型推論が多くの他の言語とは異なって機能するんだよ



710 名前:デフォルトの名無しさん mailto:sage [2022/06/18(土) 21:11:11.71 ID:6CHzGsUP.net]
最近、ゲームのRustが人気過ぎて検索に支障が出てる

711 名前:デフォルトの名無しさん mailto:sage [2022/06/18(土) 22:17:14.37 ID:ZZmk5y2Z.net]
>>694
日本語訳は公式じゃないから
今はもう公式では式指向(expression oriented)という言葉は使われてない

式指向言語の意味を知りたければwikiでもどうぞ
https://en.wikipedia.org/wiki/Expression-oriented_programming_language

712 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 00:35:13.44 ID:HLAvlKQn.net]
VTuberやストリーマーの間で人気を博しているサバイバルゲーム「RUST」とは?
https://www.moguravr.com/vtuber-rust/

713 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 01:08:17.73 ID:WtnMKA9r.net]
Goを見習って、Rustlangで検索してくださいね

714 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 05:08:01.71 ID:UsMsALi7.net]
rust lang OR 言語 -go

715 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 07:36:52.36 ID:kKndzz48.net]
Rustではboolを論理値と訳してるけど言語ごとに揺らぎがあるのはなんでだろうね
個人的に真偽値を使ってるけど真理値って解釈もあるしこれも定義は別で厳密には違うけどRustとしては解釈は同じで違いはないってことなのかな

716 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 08:12:44 ID:Nk1h87ob.net]
作った人が違うんだから揺らぎがあるのは当然だろ

717 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 09:35:04.20 ID:pSFkutGr.net]
作った人というより訳した人の違い
Rustの日本語書籍でも統一されてるわけじゃない
論理値はもともとlogical valuesの訳語

>Rustではboolを論理値と訳してるけど
正しくは「The Bookの日本語訳ではBooleanを論理値と訳してるところがあるけど」

718 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 09:50:34.90 ID:KbscZGS+.net]
手元のRust本見てみたけど真偽値も真理値もあるね
個人的には真偽値かな

719 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 10:18:36.03 ID:MGBoiv+i.net]
型は論理型と言いたくなる。真偽値型ってのもたまに聞くけど。



720 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 10:32:50.28 ID:YciZ0/bi.net]
ブール型でええやん

721 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 11:02:28.95 ID:McUuM60V.net]
the bookの日本語訳は翻訳の質が低いしアップデートもされてないからrustを本気で勉強したい人は読まない方がいいと思う

722 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 11:11:00.25 ID:KAsrUTco.net]
https://jp.mathworks.com/help/matlab/logical-operations.html
> logical データ型を使用して boolean データを表現します

matlabではlogicalってデータ型があって中身は0か1
false, trueも結局はlogicalの0と1でしかない

https://doc.rust-lang.org/std/primitive.bool.html
> The bool represents a value, which could only be either true or false.
> If you cast a bool into an integer, true will be 1 and false will be 0.

一方rustではtrueもfalseも依然としてboolのまま

723 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 11:23:29.55 ID:2cctUuao.net]
ブール値のブールの意味を知らん人が多いのかもしれない
ブール値より真偽値型がいいな

724 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 11:33:06.55 ID:YciZ0/bi.net]
boolの意味なんか一般アメリカ人も知らんだろ

725 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 12:03:30.22 ID:dg+pb++y.net]
>>710
値の呼び名の話と、内部表現の話と、castせず別の型の値として利用可能かどうかという3つの異なる話を混同してる

726 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 13:11:53.53 ID:61bWOpc5.net]
ワットとかアンペアの語源を知ってるかって話?

727 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 13:14:46.84 ID:vUT9u2r3.net]
Rustを含めたほとんどの言語で
logical or/and/notと呼び
まとめてlogical operatorと言い
日本語で論理演算子と称するから
その対象となるbool値も論理値と訳すことが多く賛同だが
訳さずbool型とbool値のままが曖昧さがなくよいのではないか
もちろん文字列型も訳さない方がよい

728 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 13:33:48.08 ID:vE0AzMds.net]
おまえらってほんとう用語の定義とかそういう話になると生き生きしよるな
あと「許可されないなんちゃら」みたいな法律家談義みたいな話

729 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 13:35:46.28 ID:Nk1h87ob.net]
>>714
自分の呼び方が正しいんだー
っていうキチ同士の争い



730 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 14:12:32.07 ID:T+HLe5Kk.net]
>>714
ジュールとかニュートンのほうが先に頭に浮かんだ

>>716
とはいえ「所有権の複製」は見過ごせないって

731 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 14:17:42.75 ID:kKndzz48.net]
これはプログラミングに限定した話ではなく他のカテゴリでも用語を英語に統一すべきだと思うんだよな
世界の大学ランキングで日本の大学が少ないのは教科書や専門書が英語の国が対象だから教科書や専門書が日本語で学習できる日本はレベル高くて母国語ではなく英語でしか学べない他の国がレベル低い土人国家だと言ってるやつがいるけど逆じゃねーの?って思う

732 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 14:55:53.98 ID:8/kH/R2d.net]
自転車置き場の議論

733 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 15:31:58.19 ID:N+aRTDUf.net]
>>719
英語じゃなくてラテン語を

734 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 17:52:40.64 ID:fArfwr+a.net]
>>719
はぁ? 何を甘っちょろいこと言ってんだ。
日本語を押し付けていく気概もなしに学問をリードできるかいな。

735 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 18:18:54.31 ID:lfAX8IzG.net]
>>722
日本語だけは絶対にイヤ
Rubyも英語だったろ?英語でいいんだよ

736 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 18:25:22.30 ID:ZgRIQXP3.net]
>>723
なぜRuby?

737 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 19:22:19.06 ID:xSCrTfK1.net]
高階関数の解説を読むたびに出てくるカリー化がそれオーバーロードでよくね?って思うんだが誰か納得感ある説明頼む

738 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 19:29:05.73 ID:YciZ0/bi.net]
>>725
カリー化は、ElmとかF#みたいなパイプライン演算子を多用する言語じゃないとありがたみを感じない

739 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 19:43:10.79 ID:Iqvgk6im.net]
なんとRustには関数オーバーロードが存在しないのだ!
だからトレイトでクソ面倒臭い実装でむにゃむにゃしないと実現できない!
でもそんなことして何が嬉しいのかわからない!
Rustは可変長引数もないしC++と比較してまだまだ機能的にはぜんぜん追いついてないよ



740 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 19:47:20.02 ID:WtnMKA9r.net]
そうですね
あなたはRustではなくC++を使い続けてください

741 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 20:02:56.72 ID:61bWOpc5.net]
カリー化ってオーバーロードで代替できるのか?

742 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 21:29:31.34 ID:10dVJy7y.net]
// 引数2つの関数 (例としてたまたま足し算)
let add_x_y = |x, y| x + y;
assert_eq!(5, add_x_y(2, 3));

// 引数1つの関数をそこから作り出す (カリー化)
let add_x = |x| move |y| add_x_y(x, y);

// 段階適用
let add_2 = add_x(2);
assert_eq!(5, add_2(3));

// 一気適用
assert_eq!(5, add_x(2)(3));

743 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 22:04:00.15 ID:gGrS7GAs.net]
>>725
関数を書くたびにカリー化のためのオーバーロード書いていくのは面倒くさすぎるでしょ

744 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 22:26:44.97 ID:fArfwr+a.net]
カリー化なあ……
rust だとライフタイムの管理がちょっと複

745 名前:Gになると手におえんだろ
理屈はともかくとして、普通のプログラマにとっては割に合わない
[]
[ここ壊れてます]

746 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 22:32:20.86 ID:8/kH/R2d.net]
https://ja.cppreference.com/w/cpp/language/overload_resolution

これを少しでも理解しようとしたことがあるなら、RustにC++並の無制約なオーバーロードが欲しいとは思わないだろうよ

747 名前:デフォルトの名無しさん [2022/06/20(月) 06:57:08.63 ID:E2oosySA.net]
安直に引数個分のダミーパラメータを与えるカリー化マクロcurry!を用意してみた
macro_rules! curry (
($func_name:path, $first_arg:ident $(, $arg:ident )*) => {
|$first_arg| $(move |$arg|)* $func_name($first_arg $(, $arg)*)
};
);

引数が2つの例
let add = |x, y| x + y;
let curry_add = curry!(add, a, b);
assert_eq!(curry_add(1)(2), add(1, 2));

引数が5つの例
let func = |p, q, r, s, t| p + q * r - s / t;
let curry_func = curry!(func, a, b, c, d, e);
assert_eq!(curry_func(5)(4)(3)(2)(1), func(5, 4, 3, 2, 1));

標準ライブラリの文字列replace関数をカリー化
let curry_str_replace = curry!(str::replace, src, old, new);
assert_eq!(curry_str_replace("abcdefg")("cde")("CDE"), "abCDEfg");

let 自己紹介 = curry_str_replace("私の名前は_NAME_です")("_NAME_");
assert_eq!(自己紹介("名無し"), "私の名前は名無しです");

意外にそこそこ使えた

748 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 07:08:36.46 ID:10Lmd2dP.net]
>>733
rustを作る側からしたら嫌かもしれんけど、使う側からしたら有ったほうがいいんじゃない?
まぁ、俺がオーバーロードがある環境に慣れちゃってるからかもしれんけど

749 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 07:31:28.70 ID:iAqd5FsI.net]
シャドーイングは許容できて関数のオーバーロードが許容できない理由ってなんだろう



750 名前:デフォルトの名無しさん [2022/06/20(月) 07:34:05.79 ID:E2oosySA.net]
>>735
クロージャ多用のRustでオーバーロードってどうするの?
例えば>>734に挙げた例でカリー化を同名でオーバーロードにする場合
let add = |x, y| x + y;
let add = curry!(add, a, b); // = |a| move |b| a + b;
assert_eq!(add(1)(2), add(1, 2));
この引数の数が異なる二つのaddの存在をオーバーロード

751 名前:ニして許すの?
オーバーロードのある言語ではこの問題をどう解決しているのだろう
[]
[ここ壊れてます]

752 名前:デフォルトの名無しさん [2022/06/20(月) 07:44:20.63 ID:E2oosySA.net]
>>736
シャドーイングは同時に存在できるのが一つだけで曖昧さがなくプログラミングにおいてプラス効果
オーバーロードは同時に異なるものが存在できるため可読性を下げたりミスを起こす機会を生じさせてマイナス効果

753 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 10:29:58.07 ID:anfwvwwH.net]
>>735
読む時にはどのオーバーロードが呼ばれるのかを確認するのが面倒
RustだとT, &T, &mut T違いもあるから他の言語よりもさらに面倒
メリットよりデメリットのほうが大きいと感じる人が多いんじゃないかな


デフォルト引数/オプション引数/キーワード引数はいずれ導入して欲しい
乱用されるとAPIが汚くなるがオーバーロードほどのデメリットはないと思ってる

754 名前:デフォルトの名無しさん [2022/06/20(月) 10:47:53.81 ID:1agQsnkM.net]
真理値なんてどんなアホが訳してんだ

755 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 11:11:29.76 ID:G0GSIi1k.net]
元の英語から違うので訳の問題ではありません (truth value)

756 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 11:17:59.13 ID:c9A58FBc.net]
logical values 論理値
truth values 真理値
true or false values 真偽値
Boolean values ブール値

ブール値じゃ分かりにくいと仮定して論理値、真理値、真偽値のどれを選ぶかってこと
the book日本語訳の人はRustの文脈での分かりやすさよりも土台となってる分野で広く使われてる訳語がいいと判断することが多い印象

757 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 11:29:41.63 ID:qsA991ej.net]
まぁプログラマーでござい(ドヤッ!な勘違いの陰キャチー牛の癖に英語読めないポンコツなの日本人くらいだからなwww

758 名前:はちみつ餃子 mailto:sage [2022/06/20(月) 12:24:24.66 ID:6BcBi/VL.net]
同じ意味とされることもあるが、若干のニュアンスの差もあると思うんだよな。
ブールはブール代数から取ってるんだから当然に代数的な操作に使うという感覚があるし、
真理値は論理学の方面で抽象的な概念 (命題とか集合とか) に対応付く場合もある気がする。
個人的には論理値が最も中立というか、ただ真と偽の値を持つものという雰囲気を感じる。

ブール ⊂ 真理値 ⊂ 論理値 な感じ。

759 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 12:43:05.08 ID:G0GSIi1k.net]
たかが二値論理の値の型でしかないものを誰がboolだのbooleanだの呼び始めたのかと思って調べたらALGOL60だった



760 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 12:43:22.11 ID:zDrv1zgC.net]
真理値だけは3値以上の場合も含むからちょっと意味が広い感じはする

761 名前:デフォルトの名無しさん [2022/06/20(月) 13:11:27.43 ID:bsAvnwWF.net]
関数オーバーロードをありがたがってるのはジャバの連中だけ

762 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 15:32:26.58 ID:nUFjxYTv.net]
論理値は非古典論理の値も含むからさらに広いな。

763 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 15:34:13.37 ID:rudBfZT/.net]
>>746
どれも注記がなければ二値だけど
three logical valuesやthree-valued Booleanと言えば3値になりえるので
基本的に意味するところは同じだと思うよ

764 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 16:12:28.65 ID:Wp6+mQEy.net]
>>749
確かに論理値も多値ありうるのか
真偽値もそう?これ字面からは2値限定な気がするけど

765 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 16:33:57.18 ID:vXHoc6MR.net]
どうでもいいけどwasmerがaarch64 完全対応したということで、rust+wasm+wasmerでcliを試してみたけど完全にただのjavaで草生えた

766 名前:はちみつ餃子 mailto:sage [2022/06/20(月) 16:55:48.44 ID:6BcBi/VL.net]
Wasm は JVM より低レイヤ寄りだから設計思想は違うんだが……。
でも Java がやってた領域をかなり奪うとは思う。

Android で JVM を使っている部分を Wasm に置き換えたような OS とかもその内に出てくるんじゃないかね?

767 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 17:33:23.64 ID:ib2o9qWW.net]
個人的にWasmよりもTauriの方が開発環境構築がめちゃ楽でシンプルだから好き
クロプラの一番の課題って今も昔も設定の煩わしさだよね俺はconfigマスターになりたいわけじゃねーんだよ!
モバイル対応がまだだけどちゃんと予定はあるからTauriが流行ってほしいな

768 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 17:52:06.79 ID:cgMFd80D.net]
wasmとtauriって別にそういう競合するポジションとかじゃなくね?

769 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 17:55:14.20 ID:JDT/MbKD.net]
Tauriはただのwasmのレンダラーだよ。Chromium内蔵をやめて実装をRustにしたElectron。
wasmerはレンダラーしないwasm実行環境。



770 名前:デフォルトの名無しさん [2022/06/20(月) 17:56:48.16 ID:E2oosySA.net]
>>744 >>748
Rustの公式referenceでもbool値に対してのoperatorをlogical and やlogical orと明記されているから日本語訳は論理値でもよいのではないかな

771 名前:はちみつ餃子 mailto:sage [2022/06/20(月) 18:19:59.87 ID:6BcBi/VL.net]
>>756
論理和・論理積に対応する英語は logical disjunction / logical conjunction であって、 logical or / logical and ではない。
(でも演算子として OR / AND を使った表記をすることはよくあるし……。 カジュアルな場面では曖昧だったりするのかな?)

logical or / logical and は bitwise or / bitwise and と区別するために新しく作られたプログラミング用語として考えるべきで、
もちろん過去からの様々な分野の用語を踏襲してはいるにしてもあまり対応づけて考える必要はないと思う。
bool は人名 (固有名詞) に由来するんだからそのままブール値と訳すのに一票。

772 名前:デフォルトの名無しさん [2022/06/20(月) 18:37:04.96 ID:E2oosySA.net]
>>757
まずRustを含めてプログラミング用語の話においてのみboolが出てくるのだから他へ話を広げる必要なし
次にbitwise andに対してboolean andと言わずにlogical andと用いられているのはlogicalが説明としても用語としても妥当であるため
日本語としてもカタカナ訳語を使う必要はなく論理値や論理演算子でよいのではないかな

773 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 18:41:04.35 ID:cgMFd80D.net]
自転車置き場の議論楽しいんんねええええ

774 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 18:45:53.95 ID:fDP2JAl4.net]
Tauriのモバイル対応はwasmのUIフレームワークの整備が進んでいないから、まだいいかな
このままモバイル対応しても、せいぜいReact Native アプリのバックエンドがwasmになって実行速度を少し改善するくらい
全てはWASM実装可能なUIフレームワークの成長次第だから、Yewは頑張ってくれ!

775 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 18:51:29.68 ID:vXHoc6MR.net]
もしreact 自体をウェブアセンブリとしてビルドできたら、、革命起きそう

776 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 19:08:40.42 ID:MJF5Q/rm.net]
>>761
できる可能性はあるぞ
https://github.com/Shopify/javy

777 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 19:10:28.51 ID:Lqu2R1w+.net]
Reactはもういいよウェブベースのクロプラフロントエンドフレームワークの問題を凝縮した実装だから早く消えてほしい
ライフサイクルと状態管理を開発者に丸投げすることを正当化させた罪は重い
MSのオールインワンな開発環境がエンタープライズ分野で今でも支持される理由ってここだと思う

778 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 19:13:28.43 ID:j7veV6LL.net]
MSのweb開発フレームワークとプラットフォームはくそじゃん

779 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 19:27:45.70 ID:JN5oCIkY.net]
>>752
近いものがあるね
webvm.io



780 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 21:40:21.97 ID:W1rh1Xym.net]
>>755
ん?言ってる意味がわからないんだけどTauriのUIレンダリングプロセスはJS/TS/ReactなんかのウェブベースのフロントエンドFWだが?
Chromiumやnode.jsをバイナリに含めずプラットフォームのWebView(WenKit)を使うからサイズが小さいのだが?
レンダラーがWasmってどういうこと?具体的かつ納得できる説明よろ

781 名前:はちみつ餃子 mailto:sage [2022/06/20(月) 21:43:08.29 ID:6BcBi/VL.net]
DOM (またはそれの元になる html や JavaScript とかも含むのかも?) を生成することをレンダリングと呼ぶ界隈が存在するぞい。

782 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 22:04:16.75 ID:x7QB4AuO.net]
>>766
>>JS/TS/ReactなんかのウェブベースのフロントエンドFW
フロントエンドに使えるフレームワークはjavascript系に限らないよ例えば上コメにあるYewとか

783 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 22:08:03.20 ID:j7veV6LL.net]
その前に
> レンダラーがWasmってどういうこと?


誰もこんなこと言って無くね?

784 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 22:20:30.26 ID:G0GSIi1k.net]
「wasmのレンダラー」の意味不明度が高すぎて混乱しているのだろう……

785 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 22:33:21.69 ID:vXHoc6MR.net]
wasmのレンダラーっていうのはtauri+yewの組み合わせなら間違ってないよ
彼はtauriがreactやvueもレンダリングできるってことを言いたいんじゃないの?
tauriはwebviewのrustやjavascriptのバインディングを提供するフレームワークだと自分は解釈してる

786 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 22:43:18.28 ID:vXHoc6MR.net]
ちなみにjavascriptバインディングの無い既出の"web-view"ってのがcrate.ioにある
こっちは正真正銘wasmのレンダラーよ
https://crates.io/crates/web-view

787 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 22:49:34.14 ID:RTpsTrZi.net]
だからwasmのレンダラーっていう書き方が悪いだろうよ
頭の悪いひとたちのために「wasmをレンダーするひと」って書け

788 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 22:54:18.58 ID:X5CbdNui.net]
Tauri can render JavaScript and WASM and more.
ほら、これでいいか?

789 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 22:57:56.00 ID:nM7DxFpE.net]
UIフレームワークの話なんか何が面白いの?



790 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 23:01:44.97 ID:DwXFtGxu.net]
さあ?

791 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 23:01:47.43 ID:FYZjQUUW.net]
>>775
わかんね
アーキテクチャの違いとかならまだ興味わくけどな

792 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 23:06:38.97 ID:FiNSG1Db.net]
まあフロントやらずにバックだけ開発の人には関係ない話だな

793 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 23:12:11.87 ID:2JvwDfXO.net]
違う話題って事で
「Rust for Rustaseans」って本めっちゃいいぞ
オライリー本やThe Bookの入門レベルを終えてある程度Rustでプログラム書いた後に読むといい

794 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 23:14:12.29 ID:2JvwDfXO.net]
スペル間違ってた
恥ずい

795 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 23:19:15.21 ID:j7veV6LL.net]
>>779
なかなかそのレベルまで遠いんだろうな

796 名前:デフォルトの名無しさん [2022/06/21(火) 01:19:44.55 ID:rZ1ZoU3X.net]
>>773 >>774
二人ともおかしい
wasmをレンダーすることはない

一般的にレンダリングとは抽象データから実データを生成すること
今回はTauriの話のようだからレンダリングは2階層あって
1つはTauri上で作るアプリが自分のデータからDOM(HTML)を生成するレンダリング
もう1つはTauri自体がそのDOM(HTML)からコンピューター画面へ描画生成するレンダリング

wasmが関係するとしたら前者
つまりwasm上で動くアプリがDOMを生成するレンダリング
wasmを使わない昔からのやり方ではJavaScript上で動くアプリがレンダリング
つまり対比点はwasmがレンダーするかJavaScriptがレンダーするか、とも言えることから

>>766
> レンダラーがWasmってどういうこと?

ここへ繋がるのではないかと推測
つまりRustコードを書くだけでアプリ作成を完結できるか否かの話にみえる

797 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 01:28:03.75 ID:rVN8NDnU.net]
>>737
ローカルな宣言はシャドーイング優先でいいんじゃない?
関数やメソッドがオーバーロード出来たらいいなぁくらいの気持ちなんで。デメリットとかはやっぱあるよね



>>739
やっぱめんどくさいかなぁ?
そういう言語しか使ってこなかったからいまいちわからんのよ。rustに慣れればやっぱこっち!てなるんかねぇ

798 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 01:29:27.34 ID:l/hCBOZ3.net]
今スレの怪文書頂上決戦

52 デフォルトの名無しさん sage 2022/05/16(月) 19:06:18.85 ID:78bNbDCr
>>49
デタラメすぎ
ムーブでビットパターンのコピーは発生しない
ビットパターンのコピーが発生するのは引数の値渡し等であってムーブとは関係ない
さらに引数の値渡しでのでビットパターンのコピーとCopyのコピーも全く異なる
Copyのコピーはディープであって高コスト

755 デフォルトの名無しさん sage 2022/06/20(月) 17:55:14.20 ID:JDT/MbKD
Tauriはただのwasmのレンダラーだよ。Chromium内蔵をやめて実装をRustにしたElectron。
wasmerはレンダラーしないwasm実行環境。

799 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 08:26:51.74 ID:82ugTJay.net]
TauriはJavaScriptやWebAssemblyをWebViewが理解できる機械語に変換するライブラリじゃないの?



800 名前:デフォルトの名無しさん [2022/06/21(火) 08:42:00.86 ID:X7xq+hMN.net]
オーバーロードがなぜ出来ないかって、型推論の完全性が失われるからじゃないの?

801 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 08:56:29 ID:TERGIQkG.net]
taui+webview==web rendererであってtaui≠=web rendererだから。
だからtauiがwasmやjavascript のrendererというのは間違い。
tauiを媒介したwebviewがwasmやjavascriptのrendererだから。

802 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 08:59:28 ID:vO+TReRM.net]
俺はフロントエンドやらないからこのスレでTauriの話をしないでくれ

803 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 09:03:37 ID:E/HTpvzq.net]
renderやらrendererやら、レンダーやらレンダラーやら、ややこしいなおい

804 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 09:08:13.67 ID:OsotcMPi.net]
オーバーロードは無くていい派

805 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 09:17:14.76 ID:rK2P992k.net]
ジェネリクスで表現できるくらいの自明なものはオーバーロードしてもいいけど
それ以上に挙動が変わるなら名前変えたほうがいいと思ってるから
結局オーバーロードは無くていいかな

806 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 09:18:38.16 ID:LcZeBWSd.net]
オーバーロードできないのは違和感あるけどすぐ慣れるぞ。頑張れ。

807 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 09:27:48.90 ID:e1jAZPeO.net]
>>784
言ってる本人が理解してないだけでwasmレンダラーって言い方はあるよ

808 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 09:38:22.89 ID:TERGIQkG.net]
TauriがElectronみたいにWebViewを内蔵してないから、TauriがWASMのレンダラーって勘違いしちゃったってことだな
よし解決したなUIの話はもう十分だろ

809 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 09:48:41.18 ID:aUxUUrSq.net]
古今東西ウェブのレンダラーってレンダリングエンジンのことじゃん
んで歴史あるASPを例にMS公式の解説を引用するならDSLのようにHTMLコードに変換(=レンダリング)する処理系ってことだよ
wasmモジュール(バイナリ)に変換するためのレンダラーはEmscriptenだからwasmがレンダラーって認識は間違い



810 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 09:58:17.91 ID:4fSeXEQO.net]
なぜそこでemscriptenが出てくるんだ?

811 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 10:01:09.64 ID:4fSeXEQO.net]
いい加減「wasmのレンダラー」を「wasmがレンダラー」と読むのやめたら?

812 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 10:03:06.58 ID:4fSeXEQO.net]
「wasmのレンダラー」は、wasmでビルドされたレンダラーじゃなくて、wasmバイナリを読み込むことができるレンダラーってことじゃないの?

813 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 10:04:20.02 ID:lcATvJP3.net]
>>795
それは視野が狭い
例えばウェブ業界でCSR(client side rendering)やSSR(server side rendering)と言うときのレンダリングとはHTML/DOMを生成することを指す
CSRはブラウザ等の中でそれを行なうのでReact等ではJavaScriptでレンダリングをするしYew等ではWasm/Rustでレンダリングする
つまりWasmでレンダリングするということはTauriでは全てのコードをRustで書けることになる

814 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 10:09:54.89 ID:l/hCBOZ3.net]
cssを読み込んで適用できるからってわざわざそのレンダリングエンジンのことをcssレンダラーって呼ぶことがあるか?

815 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 10:11:12.61 ID:5vOFCGpG.net]
>>797
Rust使いはASTまでは構築できてもそこから意味理解が弱いんだろうな

816 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 10:12:25.82 ID:D95D9dWE.net]
きみたちは一度これを読んだほうがいい
Rust GUI の決定版! Tauri を使ってクロスプラットフォームなデスクトップアプリを作ろう
Chapter 03 Tauri の概要
https://zenn.dev/kumassy/books/6e518fe09a86b2/viewer/168468
より
アーキテクチャ
Tauri のアーキテクチャを図示すると、次のようになります
https://storage.googleapis.com/zenn-user-upload/e215aef57b0a-20220610.png
Core Process はアプリケーション全体のライフサイクル管理を行ったり、 OS のインターフェース(メニューや通知など)の操作、 WebView Process の管理などを行います。
Core Process のコードは Rust で記述されるので、標準ライブラリも crate.io で公開されているライブラリも利用できます。 Tauri は非同期ランタイムとして tokio を利用しているので、非同期 Rust も使えます! Rust のコードはアプリケーションのビルド時にネイティブコードにコンパイルされるので、高速に動作します

WebView Process は Web コンテンツのレンダリングを行うプロセスです。通常の Web ページと同様に、 index.html, JavaScript, CSS から構成されて、 wry にラップされた WebView で動作します。
Tauri の JavaScript API を利用することで、 Core Process と通信したり、ファイルシステムにアクセスしたり、通知を表示する、などの操作が可能です。
WebView Process から WebView のサンドボックスを超えていろいろな操作できてしまうとセキュリティ上問題になることがあります。そこで、 tauri では JavaScript API で利用する API を allowlist に明示的に記述する必要があります。 Electron では preload スクリプトによって Renderer Process に公開する API を制限できましたが、同様の仕組みは allowlist で実現できます。

Tauri でアプリケーションを作ると Electron とは違い、 Chromium と Node.js 実行環境をバンドルする必要がないので、アプリケーションのサイズを小さく保つことができます

817 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 10:30:52.39 ID:ZcKPa2VS.net]
>>751 の、WASI実装のwasmerによるrustのVM言語化の話は興味深いけど、GUIフレームワークTauriの話はいい加減スレチ
Electronスレにでも行って議論してくれ

818 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 10:39:20.05 ID:lcATvJP3.net]
>>802にあるようにHTML/DOMから画面へのレンダリングはWebViewがしてくれるからアプリ開発者は関与しない
アプリ開発者が関与するのはアプリデータからHTML/DOMへのレンダリング部分のコードを書くこと
この点はWeb開発でもTauriでも同じ

819 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 11:04:51.42 ID:uvaWF54t.net]
結局怪文書の出どころはいつものオジだったww
いい加減聞きかじりで知ったかぶりするのやめたら?



820 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 11:08:08.11 ID:g+0qioKO.net]
間違いを指摘してくれる人が周りにいないんだろうな

821 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 11:11:56 ID:RyNZqEbO.net]
IDコロコロしないでほしいわせめて
コテハンつけてくれたらNG捗るのになあ

「所有権の複製」のときから思ってたけど

822 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 11:13:49 ID:7sQPW1UK.net]
tauriでNGすればおけ

823 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 11:26:02.71 ID:l/hCBOZ3.net]
じゃあ次スレこそはワッチョイつけようか

824 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 11:28:36.35 ID:pS+FR3pl.net]
wasmくんたちはコッチ
【wasm】ブラウザでC++。Emscriptenを語ろう
https://mevius.5ch.net/test/read.cgi/tech/1547549448/

825 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 11:38:04.80 ID:mlYOyxJ9.net]
>>809
既にある
行きたい人は向こうへ行け

Rust part6 ワッチョイ有り
https://mevius.5ch.net/test/read.cgi/tech/1532697692/

826 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 11:49:09.87 ID:GSNSCBV0.net]
論理構成が薄弱で常に自己正当化するためだけにレスを重ねる人は相手にしちゃダメなんだよ

特にほぼすべてのレスで相手を否定する言葉から始める人はある種の病気だと思って対処した方がいい
論理的な批判に耳を貸す相手じゃないから

827 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 11:55:22.58 ID:RyNZqEbO.net]
コテハンつけてくれるんなら
俺は今後一切複製クンを馬鹿にしないし
むしろ尊敬するから頼むからつけてほしい

828 名前:デフォルトの名無しさん mailto:sage [2022/06/21(火) 12:14:34.84 ID:l/hCBOZ3.net]
>>980
ワッチョイついでで思い出したけどvs C++へのリンクは落ちてるから消しといてくれ

829 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 07:37:30.53 ID:EdrHrSzx.net]
>>719
これ和製英語もそうだが和製発音も相当やばいよ
今ホットなウクライナがバリバリの和製発音でUkraineって本来ユークレインて発音するからな
英語できないでボランティア行ったやつウクライナ!ウクライナ!って全く通じない発音を連呼してたかと思うとはこっちが恥ずかしくてまさにもう見てらんない!
いい加減に読みも発音もグローバルスタンダードにしろっつーの何でもかんでもガラパゴスなの頭悪すぎる



830 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 07:45:18.19 ID:qSL2YnBO.net]
だからなに

831 名前:デフォルトの名無しさん [2022/06/22(水) 08:24:23.86 ID:s09CCxIL.net]
>>815
ウィーンをヴィエナって言えってか?

832 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 08:24:47.41 ID:48p4Di1y.net]
頭悪くても使えりゃいい

833 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 10:01:54.69 ID:U3SsHgc3.net]
>>815
強いて言えばウクライーナってくらいで和製発音じゃないから通じるよ
日本は英米と違って中華系の地名・名前以外は現地発音に寄せてるものが多い
中華系は日本語漢字読みだと外国人には全く通じない(中国人・台湾人なら漢字で書けば通じる)

Rustも最初はルーストって発音してる人いたよね
Scalaをスケイラとかも

834 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 10:12:00.42 ID:kKprzj+b.net]
いや通じないんだなこれがアジアの英語圏ですら通じないんですよ嘘吐いちゃダメよ
公用語が英語のフィリピンのマックやスタバで日本人のゴミ英語が一切通じない現実から目を背けるな
特にプログラミングの世界でどれだけ日本語の意訳が学習の障害になってきた・なっているか
超基本の代入を例に挙げてもわかるせめてアサイン or アサインメントってカタカナにすれば超理解し易いのに代入?ってなるよ代入って意訳した奴は大馬鹿だよ

835 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 10:23:30.15 ID:li50soYi.net]
エビデンスを出せ

836 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 10:41:03.57 ID:k8vtEW7h.net]
英語カーンプレクスをこじらせちゃってるね

837 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 10:50:41.07 ID:LE1FQ2Yx.net]
ラストは日本語識別子も使えるから色々大丈夫

838 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 10:54:46.62 ID:QEBJj1WM.net]
フィリピン人のオンライン英会話レッスンで
ウクライナが通じなくて恥ずかしかったんだなきっと
気持ちはわからなくはないが恥ずかしがることではないよ

839 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 11:04:11.24 ID:SASaungr.net]
触れちゃいけない人だろ
面倒だからそのくらいにしとけ



840 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 11:54:59.01 ID:TXCOqcCS.net]
論破されると変人扱いでシカトとかまんま陰キャチー牛オタクで草
プロジェクトが炎上する理由てこういうプログラマーの癖に論理じゃなくて感情で他人の足引っ張るの大好きな馬鹿が原因なんだよな

841 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 12:16:04.88 ID:vkSjQpLZ.net]
早口ですね

842 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 12:53:20.15 ID:KbrpK4gE.net]
ID変わっちゃうのは仕方がないことだからコテハンつけてくれ

843 名前:デフォルトの名無しさん [2022/06/22(水) 12:55:32.81 ID:PETcyPz4.net]
俺の場合、英語だと何倍も読むのに時間がかかったり、わからない単語や言い回しがあったりするので和訳はありがたいんだけど・・・・
ただ専門用語については、英語でなんて言うのかを併記して欲しいな
後に調べるのが大変になってしまう

上で騒いでる発音に関しては、まあ学習の上ではあんまり問題ないね

844 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 14:09:24 ID:jR4emiFb.net]
発音か…
もう長いこと勉強したことないな

発音勉強するいいサイトないの?(スレチ)

845 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 14:40:24.01 ID:NTc30+P3.net]
そこにyoutubeがあるだろ

846 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 15:11:02.84 ID:iqmSmX2L.net]
ヨーロッパの地名も日本語は英語よりまともなことが多い。現地語をカナカナに当てはめちゃってるので発音は違うけど。
パリ、パリス
ローマ、ローム
フィレンツェ、フローレンス

847 名前:デフォルトの名無しさん [2022/06/22(水) 15:24:30.47 ID:UvvJO3VG.net]
おまいらどれを読み間違っていたか正直に言いなさい
height
width
adjust
false
queue
deque
lambda
column
char

848 名前:デフォルトの名無しさん [2022/06/22(水) 15:32:22.45 ID:hyphYc1n.net]
>>815
そこは英語できないじゃなくて、English出来ないだろ!

849 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 15:37:13.88 ID:KbrpK4gE.net]
ここまで自分以外単発



850 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 15:42:45.07 ID:2oX7OuW7.net]
欧米のひとなんて日本をジャパンとかいう謎の呼び方するじゃん

851 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 16:00:46.63 ID:pGATTXre.net]
最近の言語って、代入は使う事少なく無い?
束縛って表現は、見かけるけれど。

852 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 16:01:41.99 ID:/Mr2VB7b.net]
>>830
Siriとかに発音させるアプリいいよ
単語レベルならかなり正確
あとは技術系の動画
最初に舌の動きやlinkingを学んだほうが効率いい

853 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 16:23:49.52 ID:b/qu9BCC.net]
>>833
ヘイト
ウィズス
アジャスト
フォルス
キュー
デキュー
ラムダ
ちゃー
https://www.s40otoko.com/wp-content/uploads/2020/09/char_a-sha.jpeg

854 名前:デフォルトの名無しさん [2022/06/22(水) 17:07:06.02 ID:UvvJO3VG.net]
基本点5点
一人目の勇気+1点
正直者+1点
ちゃーさん+2点

9点です

855 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 17:27:44.73 ID:JoQ1XY7q.net]
ランブダ 
コルムン
ちゃーはタムケンの方で

856 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 17:36:28.86 ID:XpS14TAH.net]
>>833
width, deque, char

widthは発音記号(/wɪdθ/)を見て長いことウィドスっぽく発音してた
clothes /kloʊðz/とかも一緒

charとかは純粋な英語ではないからSQLと一緒で英語圏で広く使われてる発音と違ってても全然気にしない
Rustで言えばmut、impl、dyn

857 名前:デフォルトの名無しさん [2022/06/22(水) 18:25:11.65 ID:s09CCxIL.net]
>>833
昔の会社の上司が lambda をランバダって読んでた。
冗談なのかマジなのか未だにわからない。

858 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 18:40:33.26 ID:jR4emiFb.net]
>>843
社内で言ってる場合はまだいい
客先で言ってないか心配

falseがいまだにフォールスと読めない

859 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 18:55:00.54 ID:dLMOYH7h.net]
英語なんて下層階級発音の言語をありがたがってもしょうがない。



860 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 19:03:21.02 ID:jR4emiFb.net]
英語はまだ覚えやすいんだよ
他は動詞活用や時制や男性名詞や女性名詞とか覚えることがえらく多い

861 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 19:06:57.00 ID:hL7m84GO.net]
charは英語でもチャー派とキャー派の両方いる
でも日本語ならキャラ一択だな
iterをイター、dirをダーと発音する人いないよね?

862 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 19:10:55.28 ID:2oX7OuW7.net]
プログラミング用語は口語じゃないからな・・・

863 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 19:20:27.11 ID:JoQ1XY7q.net]
>>845
日本語が上級って冗談だろ?

864 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 19:21:33.76 ID:jR4emiFb.net]
>>847
char aznableのシャア派はいないのか?

CHR$のころならキャラもありだけど

865 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 19:24:37.98 ID:jR4emiFb.net]
int イント イントゥ インテジャー

アイエヌティーと呼ぶ人もいるとか

866 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 19:25:49.84 ID:dLMOYH7h.net]
>>849
大母音推移で調べてみ。

867 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 19:31:40.43 ID:jR4emiFb.net]
台拇印推移って英語で中世に起こったやつだろ?

868 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 20:13:07.52 ID:Ocz5NWuM.net]
英語人の発音なんて知らんよ。
日本方言が標準語になるようにどんどん押し付けて行けよ。

869 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 20:35:42.72 ID:jR4emiFb.net]
中世に母音がずれてってスペルと発音がずれてしまった



870 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 20:43:18.98 ID:2oX7OuW7.net]
ナルトとかドラゴンボールみたいな日本作品を海外放送するときに日本語っぽい発音を使わせよう

871 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 23:24:21.45 ID:lxH9sQqR.net]
世界的に見ても英語は最も訛りが酷いのでそれほど気にする必要はない
アジアをエイジアと田舎訛りで発音するのも英語だけ

872 名前:デフォルトの名無しさん mailto:sage [2022/06/22(水) 23:38:42.55 ID:DzsA87OB.net]
>>836
European、American、Russianが本当の人間、〇〇〇eseは彼らの感覚では亜人種
「ese」を使って「軽くバカにする」のは「journalese」や「officialese」とう言葉です。

873 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 00:20:04.45 ID:VToiRT0b.net]
tauriがcargoだけでセットアップできれば即導入するんだけどなー

874 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 00:54:52.60 ID:ML6XVFuw.net]
html+jsベースのアプリのネイティブのバックボーンがtauriじゃないの?
cargoでセットアップできてもあまり意味がない気がするけど
yarnとかじゃないとj

875 名前:sやtsのパッケージ部分がつらそう []
[ここ壊れてます]

876 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 03:24:46.64 ID:sDo98BDo.net]
>>859
既に前スレで出ているように
Tauriはcargoだけで利用できます
npmやNode.jsなどのJavaScript環境は全く必要ないです
https://mevius.5ch.net/test/read.cgi/tech/1644596656/192

>>860
Webサイトを自分でJavsScript書かなくてもRustのみで構築できるように
Tauriでも同様にWasm利用のRustによるフレームワークを使ってRustのみで可能です
糊しろ部分のJavaScriptコードは自動生成されるため気にする必要がないです

877 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 03:51:12.40 ID:a115LlJm.net]
Yewが1.0.0になってMaterialUIのcrateできたらやるわ

878 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 04:10:46 ID:P5woiaAK.net]
Tauri以上に未完成なYewとか本当に触るだけだなこんなので何が出来るんだよw
ツールチェインの導入だけでこのスレの99%がギブアップするな間違いない

879 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 07:19:44.58 ID:fwy13iz2.net]
YewはReactと比べてライフサイクルや状態管理はどうなん?



880 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 07:32:21.26 ID:zvsRNXTt.net]
>>862
Rustでは大半がメジャーバージョン0なのを知らないのか
例えばcargoは最新が0.62.0
1.0.0にならないから使わないのか?

Yewのmaterial UIならば material-yew crate
デモ
https://yew-material.web.app/components

>>863
ツールチェーンの変更は不要
必要なのはtargetとなるアーキテクチャのインストール
rustup target add wasm32-unknown-unknown
この1行で済むから悩むところもない
その後のbuildでのtarget指定などはtrunkで全自動化されてるから指定不要
難しいところは何もない
Rustコードを書くだけ

881 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 07:36:49.21 ID:o4L2em1r.net]
>>865
https://yew-material.web.app/components
Bottom Bar Navigationが無いやり直し

882 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 08:37:01.16 ID:a115LlJm.net]
>>865
randとかの準標準系ライブラリはまた別かもしれないけど、semverの一般論として0.y.zは更新を追い続ける気のある暇人&人柱向けでしょうが
使ってほしかったらこんなところでレスバしてないでバグ出してパッチ書いて1.0.0リリースするの手伝いなさい

883 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 09:13:40.00 ID:YcISn7cj.net]
>>867
本気でそんなこと言ってるなら笑う
使っているクレートほとんどが0.y.zだぞ
Rustで1.0.0にこだわる人を初めて見た

884 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 09:56:29.17 ID:ZOhmOvih.net]
まぁ

885 名前:semverの一般論としては1.0.0より前は互換性の制約一切ないからそれは正しいんだが
Rustの場合0.y.zの互換性について独自拡張しているから1.0.0に上げなくても問題ないというのはある
[]
[ここ壊れてます]

886 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 10:23:14.18 ID:9VaR/Lj4.net]
YewやPerchやseedが流行るとは思えないけどねじゃあ何が流行るんだって話だけどwasm自体が流行らないと思うわ
だってどこまでいってもwasmの用途がブラウザ上で実行されるウェブアプリだからな
Electronはクロスプラットフォームなネイティブデスクトップの代替を狙って成功してそれを高速化・軽量化したTauriの方が受け入れられると思う
そもそもwasmのエコシステムが貧弱すぎてウェブで飯食ってるやつらがRust覚えるとは思えない

887 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 10:38:49.39 ID:uZ5q0lb+.net]
若いのにバージョン8.0とかになってるライブラリよりはバージョン0.8.100なライブラリを使いたい

888 名前:デフォルトの名無しさん [2022/06/23(木) 11:02:58.65 ID:t/xdYxij.net]
wasmのistioのように拡張機能を書くのに使われるんじゃないの
あとはluaの置き換えとか
ただウェブアプリなんてのはまったく理解してないアホの考えだな
俺はwebで使ってるけど

889 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 11:08:05.69 ID:YcISn7cj.net]
>>870
wasmを理解できていない
とっくにブラウザと切り離され発展していってる

>>871
同感
メジャー番号がデカい=破壊的バージョンアップを繰り返している だもんな



890 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 11:21:57 ID:LDpjmPqL.net]
まぁUnityとかLua置き換えとかそういうニッチで局所的に使われるだけだわな
それだと尚更ここでYewなんて布教してる奴はアホだって証明されちまったな

891 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 12:11:50.02 ID:/pvCP+jT.net]
wasmは事実上エッジコンピューティング専用だぞ

892 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 12:19:37.05 ID:1B2ALjfI.net]
ちみたちが全否定してボロクソ言われてるElectronが人気出てちみたちも使ってるであろうVSCodeもElectronなのだよ
そして今ちみらが全否定しているTauriはきっと人気がでるのだ

893 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 12:28:47.04 ID:XUWHXIGl.net]
>>876
C++、JavaScript、Pythonあたりのバインディングが実装されれば人気が出るかもね。

894 名前:はちみつ餃子 mailto:sage [2022/06/23(木) 12:31:55.63 ID:78TA9iC2.net]
>>875
そうでもない。
クラウド内でも実行中のプロセスを他のノードに移動させて負荷を平均化するなどの用途に使える。

895 名前:デフォルトの名無しさん [2022/06/23(木) 12:42:46.04 ID:OzGiFUhU.net]
ちょっと前までRustなんて流行らないと喚いてたアホが別のところにケチをつけはじめたな
流行ってるPHPでもやっとけ

896 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 12:52:55.59 ID:fdtlx8br.net]
ウェブでwasmを使っているケースは増える一方
加えてCDNエッジなど含めた高速で安全な共通サンドボックスとしてもwasm採用
wasmを軽視してる人は間違いなく時代に取り残された人

897 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 13:27:54.60 ID:xTWjwHox.net]
たしかにCloudflareとかFastlyがすでにやってるように、wasmが一番使われるのはアプリケーションのホスティング関連ではありそう

898 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 14:25:29.85 ID:aX6KFPJR.net]
オジ必死すぎやろww
wasmの前に汚文章を見直そうぜ

899 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 17:13:21.06 ID:fwy13iz2.net]
wasmは、アーキテクチャ共通の中間コードを生成する点、主要webブラウザ上では既に完璧に動作する点、当然ながらマルチスレッドに対応している点が良い
開発者側は自社スマホゲームをPWA化してアプリストア手数料を取られずに内課金を実装できる、バイナリだから難読化済み、アプリ動作も高速と、いいこと尽くめ



900 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 17:38:33.22 ID:fwy13iz2.net]
wasmについての記事はこれがわかりやすい
https://qiita.com/t_katsumura/items/ff379aaaba6931aad1c4

901 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 17:48:19.80 ID:mKYvHwUN.net]
アプリをPWAにして独自決済にすれば手数料を取られない!ギャグだろwww
え?ここってホビープログラマーがオナニー見せつけて気持ち良くなるレベルのスレだったっけ?www
WASMガイジが暴れて出して何かと思ったらお花畑でクッソワロタ

902 名前:デフォルトの名無しさん [2022/06/23(木) 17:49:46.75 ID:OrheE29P.net]
無知がバレたから話をそらして挽回しようとするアホの図

903 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 17:59:44.02 ID:fwy13iz2.net]
気を悪くさせたのなら申し訳ない

904 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 18:01:07.00 ID:fwy13iz2.net]
個人的には審査の通らないスマホエロゲとか発展しそうでいいかと思ったんだけど

905 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 18:22:09.53 ID:D2eUSbXw.net]
散々wasmを誉めそやして語って布教した結論がスマホエロゲ
5chで他言語を見下してドヤ顔してるRustスレの奴等なんて所詮こういう陰キャチー牛エロゲオタで草

906 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 18:24:46.62 ID:2tFofWlQ.net]
このスレでRustスゲーするのは理解できる

wasmスゲーは違うかと

907 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 18:35:17.77 ID:fwy13iz2.net]
じゃあみんなこっちにもきてよ
【wasm】ブラウザでC++。Emscriptenを語ろう
https://mevius.5ch.net/test/read.cgi/tech/1547549448/

908 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 18:43:49.69 ID:/gLCWYHm.net]
エロは儲かる

909 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 20:11:26.77 ID:fdtlx8br.net]
wasmを使うならRustだからだろう
GC言語では本末転倒
C++よりRustという当たり前の結果

> https://www.atmarkit.co.jp/ait/articles/2107/08/news112.html
> 「WebAssemblyアプリケーションの作成に使用している言語は何か」と質問したところ、Rustが最も多くの回答を集めた。
> 「WebAssemblyアプリケーションの作成に今後最も使用したい言語は何か」という質問でも、Rustを挙げた回答が最も多かった。



910 名前:はちみつ餃子 mailto:sage [2022/06/23(木) 20:17:33.07 ID:78TA9iC2.net]
Wasm の側に GC を入れる提案も出てはいるので将来的にはどうなるかわからんぞ。

911 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 21:05:12.10 ID:0lumrgPj.net]
>>873
1.0未満のバージョンって仕様自体fixしてなくて予告なく破壊的変更入る可能性があるのが普通だと思ってた。

912 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 23:25:11.97 ID:isDmg9ti.net]
窓の杜: C++言語によるお嬢様コーディングがブームの兆し!?.
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1419370.html

メモリをしっかりお片付けなさりたいのならRustを使いませんこと?

913 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 23:27:10.78 ID:yevGv1hT.net]
お嬢様コーディングなんて流行ってねえよ
お嬢様言葉自体流行ってないのに

914 名前:デフォルトの名無しさん [2022/06/23(木) 23:28:00.25 ID:N/ehCqi3.net]
>>895
普通はそうだ。でももちろん例外だってある。
その辺は開発者組織の感性しだいだな。
何年もずぅ~っとβ版のプログラムだってあるだろ。

915 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 23:56:18.80 ID:CfsYAKzO.net]
>>895
自分たちが使っているcrateのtreeを見れば分かる
大半がバージョン0
それで誰も困っていない

916 名前:デフォルトの名無しさん mailto:sage [2022/06/23(木) 23:59:26.92 ID:CfsYAKzO.net]
>>894
GC導入は各言語であまりにも異なるため失敗した
各言語が様々な形でしている効率的な方法は取れない
WebAssemblyはRust一強が続くだろう

917 名前:デフォルトの名無しさん mailto:sage [2022/06/24(金) 00:03:12.87 ID:Z/7Mth9k.net]
>>896
Rustはなんだかゾクゾク

918 名前:しますぞ!!これは服なぞ着てる場合ではありませんぞ!! []
[ここ壊れてます]

919 名前:デフォルトの名無しさん [2022/06/24(金) 04:06:11.87 ID:aL7/n23O.net]
赤いの黙ってて



920 名前:デフォルトの名無しさん mailto:sage [2022/06/24(金) 06:23:10.42 ID:EMaN3eAt.net]
>>897
ネタに全力でレスすんなよw

921 名前:デフォルトの名無しさん mailto:sage [2022/06/24(金) 09:12:28.24 ID:rZmITKBS.net]
まあクソネタにはクソって言っとかないと本当にウケてると思っちゃうやついるからね

922 名前:デフォルトの名無しさん [2022/06/24(金) 09:18:36.99 ID:8+vtapEb.net]
だっさ

923 名前:デフォルトの名無しさん mailto:sage [2022/06/24(金) 09:46:26.14 ID:ZKGFoh0M.net]
そうそう、クソネタにはそうやってダサいと言っておかないと

924 名前:デフォルトの名無しさん [2022/06/24(金) 09:50:10.56 ID:K2we1Lar.net]
>904
+1

925 名前:デフォルトの名無しさん mailto:sage [2022/06/24(金) 10:05:30.32 ID:0NSCQb1H.net]
スルースキルが皆無なのですわ
荒らし様にお引き取りいただけない訳も推して知るべしですわね

926 名前:デフォルトの名無しさん mailto:sage [2022/06/24(金) 10:21:55.48 ID:ZKGFoh0M.net]
>スルースキルが皆無

誰も自己紹介なんて頼んでないのに…

927 名前:デフォルトの名無しさん mailto:sage [2022/06/24(金) 17:42:51.52 ID:EMaN3eAt.net]
ネタにレスして顔真っ赤w

928 名前:デフォルトの名無しさん mailto:sage [2022/06/24(金) 21:06:17.36 ID:3e9x6I/t.net]
wasmって流行ってるけどコード量膨大に増えすぎないか?

929 名前:デフォルトの名無しさん mailto:sage [2022/06/24(金) 21:14:59.98 ID:FArw1u5A.net]
フロントエンドの奴らが rust を使ってるの見てらんない。
TS で無難に書いておけばいいよ。



930 名前:デフォルトの名無しさん mailto:sage [2022/06/24(金) 21:41:14.48 ID:eHTn7QRG.net]
>>911
流行ってません

931 名前:デフォルトの名無しさん mailto:sage [2022/06/24(金) 21:41:45.02 ID:eHTn7QRG.net]
脳内をハッキングでもされてるのか?

932 名前:デフォルトの名無しさん mailto:sage [2022/06/24(金) 21:48:58.86 ID:+JdvQwfN.net]
>>911
javaの中間コードよりマシ

933 名前:デフォルトの名無しさん mailto:sage [2022/06/24(金) 22:46:43.70 ID:/25pqsku.net]
ところでものすごい今さらなんだが wasm は何て読むんだ?
ワスムか

934 名前:デフォルトの名無しさん mailto:sage [2022/06/24(金) 23:21:33.67 ID:KLiHHhJ8.net]
ネイティブはだいたいワズムとかウォズムみたいに発音しているような気がする

935 名前:デフォルトの名無しさん mailto:sage [2022/06/24(金) 23:23:01.01 ID:g65423tt.net]
この動画では冒頭でwasmをワスムって言ってる
https://youtu.be/nW71Mlbmxt8

936 名前:デフォルトの名無しさん mailto:sage [2022/06/24(金) 23:28:47.07 ID:wBI1zPp0.net]
>>918
これはワズムっていってないか?リスニングはからっきしのゴミ耳だからよくわからんけど

937 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 01:14:39.07 ID:JyoKDUES.net]
ワズムて連呼しとるね
isの過去形のwasにm

938 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 02:13:22.50 ID:APixfc76.net]
>>911
コード量ってなんのこと?

939 名前:デフォルトの名無しさん [2022/06/25(土) 09:56:07.84 ID:pPSG+F7f.net]
ダブルアセムって脳内で読んでたわ



940 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 10:14:25.56 ID:APasFGX+.net]
asm.js(アズム ジェイエス)が進化してwasm(ワズム)に

941 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 10:21:42.97 ID:hQoUoumV.net]
英語できねーおっさんが蘊蓄垂れてクソワロタwww
お前らマジでプライドだけは一流の無能おじで草

942 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 10:50:44.23 ID:f+PJ3XzM.net]
ウェブアセンブラっていみジャネーの?

943 名前:はちみつ餃子 mailto:sage [2022/06/25(土) 13:18:50.95 ID:jO6HH2tH.net]
>>925
もちろん Wasm は WebAssembly の省略形だよ。
公式にもそう書いてある。

944 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 13:29:07.82 ID:/zwkJ/mi.net]
それはみんな知っての上でレスしてるのに
>>925みたいな周回遅れのレスを堂々と付けれるやつって
脳みその構造どうなっとんやろな

945 名前:デフォルトの名無しさん [2022/06/25(土) 13:52:40.86 ID:23CjKpU2.net]
wasmは俺が育てた!(AAry

946 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 14:34:43.26 ID:tSCqWCmZ.net]
きみたちもうちょっと真面目にやりなさい

947 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 15:17:36.49 ID:VflkbZsO.net]
>>926
じゃあ、ウェブのアセンブラって意味で良いんじゃないの?

948 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 15:25:02.65 ID:bv95EvGA.net]
WebAssemblyは仮想命令セットアーキテクチャあるいはプログラミング言語の一種である。略称はWasm。C・Rustなど様々なプログラミング言語のコンパイルターゲットとしてWasmバイナリは生成され、ウェブブラウザを含む様々な環境内のスタックベース仮想マシンにより実行される。
ネイティブコード相当の高速性・隔離環境でのメモリ安全な実行による安全性・仮想マシンによるハードウェア/プラットフォーム可搬性・ソースプログラミング言語中立性などを特徴とする[4]。この命令セットはバイナリ形式で定義されており、またアセンブリ言語ライクなテキスト形式も定義されている(その意味で低水準プログラミング言語といえる)。

Wasm自体は命令セットアーキテクチャであり、Linuxカーネルが提供するようなシステムコール(例: ファイルI/O)、Webブラウザが提供するようなDOMアクセスなどを提供していない。上記の安全性や可搬性はこの特徴に由来している。それと同時に、WasmエコシステムとしてはシステムコールやDOMアクセスがAPIとして個別に定義されており、Wasmランタイムが実装することでそれらの機能を提供している(例: システムコールを提供するWASI)。シンプルでオープンなISAとランタイムごとのAPIを組み合わせることでWasmエコシステムは高い拡張性を有している。例えばWasmをHTTPプロキシでのフィルタスクリプトとして利用するプロジェクトが存在する。
https://ja.m.wikipedia.org/wiki/WebAssemblyより

949 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 15:32:39.09 ID:tfc1tmd2.net]
>>930
>>931 にあるように、ウェブのアセンブラという解釈は間違ってる。
ウェブアセンブリっていう名前なだけ。
わかった?



950 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 15:35:16.83 ID:KZ/E7BkI.net]
現実問題としてWasmはRustで書くのがベストソリューション

951 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 15:35:55.67 ID:VflkbZsO.net]
三行以上書かれても
わかるわけない
常識

952 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 15:36:39.28 ID:UfyFqt6J.net]
仮想マシン上で動くという点でWASMはJavaと一緒だな

953 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 15:39:32.24 ID:Ho0z1jTS.net]
>>930
そもそもアセンブラとかいってる時点でなにもわかってないから相手にするだけ無駄、無視推奨

954 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 15:45:57.58 ID:VflkbZsO.net]
Rustで書くとバイナリ肥大化するから、WATが基本になりそうでは?

955 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 15:53:47.79 ID:l76RX7xy.net]
>>935
javaの問題をある程度解決したのがwasmっていう認識でおけ?

956 名前:デフォルトの名無しさん [2022/06/25(土) 16:03:23.70 ID:9jpr7vFN.net]
それな。Javaっぽくwebvmとかwebバイナリとかいった名前の方が分かりやすかったんじゃなかろうか

957 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 16:05:36.45 ID:VflkbZsO.net]
貴様に正義があるというのなら、三行以内で示せ。

958 名前:はちみつ餃子 mailto:sage [2022/06/25(土) 16:05:54.41 ID:jO6HH2tH.net]
>>930
仮にウェブのアセンブラだとして、ウェブのアセンブラってなんやねん……

959 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 16:07:10.43 ID:ILDlrGK/.net]
WebAssemblyはJVMやeBPFのリバイバルではない WasmがWeb以外でもアツい理由 - ログミーTech
https://logmi.jp/tech/articles/324956

スライド画像
https://img.logmi.jp/article_images/Jq1SrATqsEYupEF4aeAh6j.png
https://img.logmi.jp/article_images/HxUso3S1L63MXwia5RxGXd.png
https://img.logmi.jp/article_images/CntVo54bYF2MXnib2EXGei.png
https://img.logmi.jp/article_images/VLPRht2v3NnzzWyWP1pvrs.png
https://img.logmi.jp/article_images/SsS6T6EZrrPaWCSi5xq2bJ.png
https://img.logmi.jp/article_images/2Miy64H2xW7RnWCRGGJDAQ.png
https://img.logmi.jp/article_images/F2UYcDuwsrybfB6F4npBDL.png
https://img.logmi.jp/article_images/GC6f4J9DHeoEaTQGXaKacJ.png



960 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 16:08:16.68 ID:VflkbZsO.net]
>>941
俺の予想では、それが質問内容だと思います。

961 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 16:08:25.01 ID:ILDlrGK/.net]
>>938
これ>>942

962 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 16:15:09.41 ID:akwg01K7.net]
複オジばりの汚文章でワロタ
中身がなさすぎ

963 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 16:15:26.89 ID:KYOYlq4y.net]
>>943
wasmの読み方じゃなかったっけ?

964 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 16:19:32.95 ID:VflkbZsO.net]
読み方は、ワッセンブラで決まりでしょう。

965 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 16:20:56.33 ID:XFOsSqRc.net]
DOM・シャドーDOM操作が遅いからwasmはあまり流行らない、これを何とかしない限り、シコシコts書いてるオジサンが量産される

966 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 16:25:58.06 ID:a5vhFArq.net]
>>947
>>917-920あたりが答えです

967 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 16:29:05.96 ID:VflkbZsO.net]
俺は白人の読み方なんか認めんよ。
中国ならまだしも。

968 名前:はちみつ餃子 mailto:sage [2022/06/25(土) 16:33:30.99 ID:jO6HH2tH.net]
命名の伝統としてちょっとしたネガティブワードを使うことがあるんだよ。
いわゆるギークセンスというやつだが、日本語でいう中二病に近い。
GIMP の名前を変えるためにフォークするだのなんだのでもめたことがあるの知らんか?

Wasm もそれと同じようなノリなんじゃねーの?
https://eow.alc.co.jp/search?q=wasm

969 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 16:35:39.94 ID:VflkbZsO.net]
>>951
じゃあ、ワッセンブラでいいじゃん。



970 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 16:39:47.09 ID:ljJSN7j6.net]
>>952
きみはそう呼んでればいいと思うよ
きみにそう呼ぶ機会はないと思うけどw

971 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 16:43:21.45 ID:VflkbZsO.net]
菅総理が、我が国はワッセンブラに注力すると宣言したら、どうするんだよ?

972 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 16:47:50.00 ID:Xmq8wuxM.net]
なるほど、、?(わからん)
WebAssembly Reference Typesで、WasmでDOMを操作する壁がここまで下がった
https://zenn.dev/igrep/articles/2021-11-wasm-reference-types

973 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 16:50:02 ID:R8NAfVhJ.net]
DOMってなんだ?(←自分で調べろ)

974 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 17:02:05 ID:WInGVki9.net]
>>956
DOMとは?わかりやすく解説する! | イバログ
https://gyroibaraki.com/dom/

975 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 17:04:38 ID:Ch122rDL.net]
DOM操作なんか、どうやっても遅いんだからワズムからいじる必要ないだろ

976 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 17:08:43 ID:/UVjDglo.net]
DOM操作は流石にJS系でやればよくね?

977 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 17:19:33 ID:XFOsSqRc.net]
そんなことはない、JSやTSのようなダメ言語を排して、全部ほかのコンパイル型言語で統一して書けるように考えたのに
遅いなら話にならない。うんこ

978 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 17:32:09.99 ID:KYOYlq4y.net]
wasmはjsを置き換えるものではないっていう方針がよくわからんな。置き換えていいのに。

979 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 17:33:38.66 ID:Ch122rDL.net]
タイプスクリプトでドム操作書いてみたら分かると思うけど、キャストだらけになる



980 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 17:38:33.58 ID:Sl1k0I/l.net]
WebAssemblyはJavaScriptを置き換えようとしていますか?
いいえ!WebAssemblyは、JavaScriptを補完するものであり、JavaScriptを置き換えるものではないように設計されています。WebAssemblyは、時間の経過とともに多くの言語をWebにコンパイルできるようになりますが、JavaScriptには信じられないほどの勢いがあり、Webの単一の特権( 上記のとおり)動的言語のままです。さらに、JavaScriptとWebAssemblyは、さまざまな構成で一緒に使用されることが期待されています。

・JavaScriptを活用して物事をつなぎ合わせるコンパイル済みのC++アプリ全体。
・WebAssemblyで制御されるメインのセンターキャンバスの周りのHTML/CSS / JavaScript UIにより、開発者はWebフレームワークの力を活用して、アクセス可能なWebネイティブな感覚のエクスペリエンスを構築できます。
・ほとんどの場合、いくつかの高性能WebAssemblyモジュールを備えたHTML / CSS / JavaScriptアプリ(たとえば、グラフ化、シミュレーション、画像/音声/ビデオ処理、視覚化、アニメーション、圧縮など、今日asm.jsですでに見られる例)開発者が今日のJavaScriptライブラリと同じように人気のあるWebAssemblyライブラリを再利用できるようにします。
・WebAssembly がガベージコレクションされたオブジェクトにアクセスできる:ユニコーン:ようになると、それらのオブジェクトはJavaScriptと共有され、独自の壁に囲まれた世界には存在しなくなります。
https://webassembly.org/docs/faq/#is-webassembly-trying-to-replace-javascript より

981 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 17:57:29.10 ID:qzsUrSUG.net]
なるほどね

982 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 17:59:58.79 ID:9jpr7vFN.net]
ははーん、ユニコーンね

983 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 18:04:46.90 ID:ndOOnBgl.net]
https://github.githubassets.com/images/icons/emoji/unicode/1f984.png

984 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 18:08:27.82 ID:57CBQU6k.net]
🦄

985 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 19:58:37.73 ID:VflkbZsO.net]
いいわー
ワッセンブラいいわー。

986 名前:デフォルトの名無しさん [2022/06/25(土) 20:26:19 ID:bZig/WUT.net]
スレチおるど

987 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 22:42:14.67 ID:hVwOcYNS.net]
DOMてアレやろ、

988 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 22:55:47 ID:Bztv57SD.net]
ドムとかユニコーンとかガンダムかよ

989 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 23:21:23 ID:/UVjDglo.net]
tenplate要素使ってDOMツリー作ってそこに値や要素追加して表示しろって言われた時は訳わかんなかった



990 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 23:22:45.89 ID:Ch122rDL.net]
>>972
スペル間違うぐらいなら無理せずカタカナで書けよ

991 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 23:35:08.74 ID:3qOpf/5R.net]
フロントに全く興味ない奴らが無理してrust使おうとしてるってのがもうクソだわ

992 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 23:57:43.41 ID:sDy4bz93.net]
Stringの中身が変化してほしい時のtrim()はどうすればよいですか?

993 名前:デフォルトの名無しさん mailto:sage [2022/06/26(日) 00:30:53.23 ID:J3iRsr8e.net]
自分では何も思い付かないんですか?

994 名前:デフォルトの名無しさん mailto:sage [2022/06/26(日) 00:41:24.45 ID:DP2sbpoK.net]
>>942
なぜ無駄に高解像度なのか

995 名前:デフォルトの名無しさん mailto:sage [2022/06/26(日) 01:12:05.67 ID:82o8ItO8.net]
s.retain(|c| !c.is_whitespace());

996 名前:デフォルトの名無しさん mailto:sage [2022/06/26(日) 01:14:23.73 ID:82o8ItO8.net]
中間のスペースも削除されるのか

997 名前:デフォルトの名無しさん mailto:sage [2022/06/26(日) 04:54:09.98 ID:mBbZ0Pti.net]
>>979
そりゃそうだろw
後側の削除だけならtruncateすればいいんじゃね?

let mut s = String::from("てすと ");
let end = s.rfind(|c: char| !c.is_whitespace()).unwrap();
s.truncate(end + 1);

thread 'main' panicked at 'assertion failed: self.is_char_boundary(new_len)'
ダメだった…

998 名前:デフォルトの名無しさん mailto:sage [2022/06/26(日) 05:14:19.98 ID:vh+TaUjL.net]
s.truncate(s.trim_end().len())

999 名前:デフォルトの名無しさん mailto:sage [2022/06/26(日) 11:52:06.13 ID:KbueaMTO.net]
panic する理由を理解したほうがいいよ



1000 名前:デフォルトの名無しさん [2022/06/26(日) 17:08:41.82 ID:afHQr9JE.net]
Linus「メモリ確保でpanicするって?認めんわ断じて認めん、ワシの目の黒い内は許さんぞ」

1001 名前:デフォルトの名無しさん mailto:sage [2022/06/26(日) 17:27:36.02 ID:nfXqcTpP.net]
宇宙じゃ。宇宙のせいじゃ!

1002 名前:デフォルトの名無しさん mailto:sage [2022/06/26(日) 17:36:15.17 ID:DrXudPeH.net]
Linuxの話題は、あわしろを召喚しちまうから、やめとけ

1003 名前:デフォルトの名無しさん mailto:sage [2022/06/26(日) 17:36:30.96 ID:TFpQVi1k.net]
>>983
青いからセーフ

1004 名前:デフォルトの名無しさん mailto:sage [2022/06/26(日) 18:43:28.30 ID:82o8ItO8.net]
fn

1005 名前: trim_in_place(s: &mut String) {
if let Some(offset) = s.find(|c: char| !c.is_whitespace()) {
s.replace_range(..offset, "");
}
s.truncate(s.trim_end().len());
}

前後で非対称なのが気になるけど文字境界をうまく扱えるStringのメソッドが他に見つからなかった
[]
[ここ壊れてます]

1006 名前:デフォルトの名無しさん mailto:sage [2022/06/26(日) 21:34:33.23 ID:xXnnisch.net]
> s.find(|c: char| !c.is_whitespace())

rustってこれうまいこと関数名だけ渡せないんだっけ?
しかも関数合成できれば
s.find(char::is_whitespace . not)
みたいに書けたり?

1007 名前:デフォルトの名無しさん mailto:sage [2022/06/26(日) 22:00:29.06 ID:ZYHqIh+i.net]
5chでまともな回答期待する方が頭おかしいことになぜ気付かないんだ
redditでDeepL使って英語で海外ニキに質問した方が1億倍まともな回答くれるぞ

1008 名前:デフォルトの名無しさん mailto:sage [2022/06/26(日) 23:10:04.56 ID:Y8S6yv8a.net]
>>988
関数を自分で定義しとけばわたせるけど
合成しながらだとマクロ使わないと無理なんじゃないかな

1009 名前:デフォルトの名無しさん mailto:sage [2022/06/26(日) 23:57:49.73 ID:VW+uLNTw.net]
>>461
メソッドを増やす時にOrphanルールで出来ないとしたら
それは標準ライブラリ含めて他人が書いたトレイトを他人が書いた型に適用する場合
スライスへfindメソッドを増やすことはそれに該当しないため出来る
適当なトレイト名SliceFindMethodを用意してスライス[T]にメソッドを実装すればよい

trait SliceFindMethod<T> {
 fn find(&self, pattern: impl SliceFindPattern<T>) -> Option<usize>;
}

impl<T: PartialEq> SliceFindMethod<T> for [T] {
 fn find(&self, pattern: impl SliceFindPattern<T>) -> Option<usize> {
  pattern.slice_find(self)
 }
}

文字列へのfindと同様に様々なパターンに対応できるよう
適当なトレイト名SliceFindPatternとそのメソッドslice_find()を用意し様々な実装をすればよい
長くなるので全体のコード
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=9110b8c76b17fb479bfef80e1f10182d

これでスライスの一種であるバイト列に対してもfindが適用できる
let buffer: &[u8] = b"ABCDEFGHIHJKL";
assert_eq!(Some(5), buffer.find(b'F'));
assert_eq!(Some(3), buffer.find(b"DEF"));



1010 名前:デフォルトの名無しさん mailto:sage [2022/06/27(月) 00:08:38.77 ID:xVflpq4r.net]
>>989
プログラミング情熱のある2-30代の集う板じゃなく
プログラミングはもう碌にしないおっさん・爺が多数の板だからな
質問してもおいおいな回答になるのは仕方ない

1011 名前:デフォルトの名無しさん mailto:sage [2022/06/27(月) 00:54:52.23 ID:7xcJ7izy.net]
>>989
翻訳の話題はあわしろを召喚しちまうからやめとけ。

1012 名前:デフォルトの名無しさん mailto:sage [2022/06/27(月) 02:47:29.39 ID:52L0v8L5.net]
null ぬる なる

1013 名前:デフォルトの名無しさん mailto:sage [2022/06/27(月) 04:40:51.89 ID:KgP+fmt3.net]
rust cliコマンドがなぜrustupなのか誰も疑問に思わんの?
俺はこのupがなんなのか気になって調べても分からなくてイライラする
rustup updateとかものすごく気に入らないしそもそもrustupとcargoがあるのもややこしい

1014 名前:デフォルトの名無しさん [2022/06/27(月) 08:27:05.49 ID:SVONOTxH.net]
慣用句の意味を調べるときは"で括るんやで

1015 名前:デフォルトの名無しさん mailto:sage [2022/06/27(月) 08:27:50.24 ID:gDlfKP6u.net]
>>995
今はrustcやrustfmtなど含めて全て実体は同じでハードリンク
cargoが各ワーキングディレクトリに対して適用されるのに対して
rustupは全体に適用されるため
同じ名前のサブコマンドでも全く異なる

1016 名前:デフォルトの名無しさん mailto:sage [2022/06/27(月) 08:28:40.38 ID:gDlfKP6u.net]
次スレ
Rust part16
https://mevius.5ch.net/test/read.cgi/tech/1656285423/

1017 名前:デフォルトの名無しさん [2022/06/27(月) 10:40:27.69 ID:B/Kpn5Aj.net]

Slot
💣🎴💣
🎰🎰🌸
🌸😜👻
(LA: 2.02, 1.95, 1.85)


1018 名前:デフォルトの名無しさん [2022/06/27(月) 10:40:32.55 ID:B/Kpn5Aj.net]

Status ♥5 ♣8 ♠7 HP: 1000 pts. たぶん(0)
2.02, 1.95, 1.85(904.632812) Proc. [0.187892 sec.]


1019 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 45日 16時間 12分 12秒



1020 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<296KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef