1 名前:デフォルトの名無しさん mailto:sage [2024/05/27(月) 06:41:26.82 ID:T4AFD1f4.net] 公式 https://www.rust-lang.org/ https://blog.rust-lang.org/ https://github.com/rust-lang/rust 公式ドキュメント https://www.rust-lang.org/learn Web上の実行環境 https://play.rust-lang.org ※Rustを学びたい人はまず最初に公式のThe Bookを読むこと https://doc.rust-lang.org/book/ ※Rustを学ぶ際に犯しがちな12の過ち https://dystroy.org/blog/how-not-to-learn-rust ※Rustのasyncについて知りたければ「async-book」は必読 https://rust-lang.github.io/async-book/ ※次スレは原則>>980 が立てること 前スレ Rust part23 https://mevius.5ch.net/test/read.cgi/tech/1708677472/
321 名前:デフォルトの名無しさん [2024/06/23(日) 09:12:12.96 ID:2+8typ11.net] >>308 clippyは公式のコード改善ツールだよ コンパイラはエラーと警告だけ出すけど、clippyはそれ以上のヒントをくれる 例えば「コンテナ中に条件を満たす要素があるかどうか」をチェックするために items.iter().find(条件).is_some() のようなコードを書いたら、それに対し items.iter().any(条件) というシンプルな書き方を提案してくれる こういう関数や構文の置き換えを含む提案をしてくれるツールで、これがコンパイラと同じ標準機能として備わってる (追加インストール不要) のが便利
322 名前:デフォルトの名無しさん [2024/06/23(日) 09:41:40.50 ID:iAmtDmVE.net] いい勉強になった。ありがとう。
323 名前:デフォルトの名無しさん mailto:sage [2024/06/23(日) 10:21:20.16 ID:ndMGRV9p.net] >>312 for_eachの機能でindexにアクセスしてるんじゃなくて enumerateで(index, value)の形に変換してそれをfor_eachしてるだけだぞ 標準でenumerate相当のメソッドが用意されてないだけで ForEachでindexを扱うときはC#でも似たようなやり方になる
324 名前:デフォルトの名無しさん [2024/06/23(日) 16:42:06.61 ID:+hC7ZOW/.net] 正体不明ボイス・トォ・スカル 正体不明ぶれいん・ましん・いんたーふぇいす 対になっているのか? 周囲も被害者の思考を聞いているのならわかるように 被害者の声【思考】は初めの6か月間は聞えてなかった 6か月過ぎたころから被害者の思考が被害者自身で聞こえるようになった 被害者に話しかけている加害者側の正体不明ブレインマシンインターフェイスはどこにあるのだろうか? 被害者側の思考が漏れているのなら周囲の者は電磁波で夜も眠らされていなかったことや昼間横やりを入れているのは周知の事実 これから考えて被害者の思考のみが持てていると電磁波攻撃をしている者は被害者が嫌いこの条件がそろえば被害者に対して罵声を浴びせる被害者周囲者が出現する 被害者を見る限りそのような罵声を浴びせる者が出現しないということは 正体不明ボイス・トォ・スカルをしている者の思考はどこに漏れているのでしょうか? また周囲の者も正体不明ボイス・トォ・スカル側についたものはどこに思考が漏れているのでしょうか? 等いろいろなパターンを考えましょう ボイス・トォ・スカルで話していたホワイトリストとブラックリストこれが重要な意味を持っていると思われる 現実的に騒がなければ被害者には何も起きていない・・・各加害者が?一番聞かれると困る者に聞かせているというのも意味深です
325 名前:デフォルトの名無しさん mailto:sage [2024/06/23(日) 21:00:39.70 ID:GCEM9Zx1.net] Rustツアー https://tourofrust.com/00_ja.html 説明が簡潔すぎてモヤモヤが増えていくばかり。 しかも終盤は翻訳されていない。
326 名前:デフォルトの名無しさん mailto:sage [2024/06/23(日) 22:32:11.71 ID:CiIX8R/B.net] >>318 翻訳が進んでないのはともかくとして、説明が簡潔なのはそういうもんだわ。 チュートリアルでもつっかえるやつはいっぱいいるのに雑なツアーだけで理解できるわけないだろ。 複雑なところに立ち入る前に概略を見るってのと それをすぐさま実行して確かめれらる環境がくっついてるってのがコンセプトなので 細かいことは The Rust Programming Language を見るのが前提。 こういった種類の学習は各項目を完璧に理解してから次の項目に進むってのは出来ない。 色んな言語機能は絡み合っていて綺麗な順番には出来ない。 全体を大雑把につかんでから解像度を高めていく形になる。 その一番最初のおおざっぱなところを担当する形の資料ってこと。
327 名前:デフォルトの名無しさん mailto:sage [2024/06/23(日) 22:46:50.25 ID:cgFz9E69.net] C言語と関数型言語とあと何かモダンな言語の三様な言語を使える程度の知識経験があればRustはすらすら学習できるけど それらのうち何らか知識が抜けているとその言語間での汎用的な知識も新たに学習することになるからちょっと大変になるようだね
328 名前:デフォルトの名無しさん [2024/06/23(日) 23:42:57.08 ID:iAmtDmVE.net] >>316 そこは理解してる。 んで、Rustのfor_eachはenamerateさえすればindex使えるし、出力も出来る。 そこがC#のForEach場合、そもそもindexが使えないので一旦indexを使えるSelect & ToListを挟むことになる。 出力を考えなければ不便はないけど、出力を考えたとたんにSelect & ToListが付いてくる。 この辺は将来のバージョンに期待かな。
329 名前:デフォルトの名無しさん mailto:sage [2024/06/24(月) 01:22:36.88 ID:xscSUycb.net] >>321 理解してないでしょ Enumerable.Range(7, 10).WithIndex().ForEach(x => { var (index, value) = x; Console.WriteLine($"{index}: {value}"); }); https://dotnetfiddle.net/aJJwdY
330 名前:デフォルトの名無しさん mailto:sage [2024/06/24(月) 01:27:35.74 ID:xscSUycb.net] .NET9でEnumerable.Indexという名前でenumerate相当が追加されるから拡張メソッドも不要になる https://github.com/dotnet/runtime/blob/main/src/libraries/System.Linq/src/System/Linq/Index.cs foreach (var (index, value) in items.Select((x, i) => (i, x)))が foreach (var (index, value) in items.Index())になる
331 名前:デフォルトの名無しさん [2024/06/24(月) 04:37:42.69 ID:De91wzz6.net] >>322 おお…。 確かに理解してませんでした。 ちなみに、私もその後何とかSelect内で出力を出来ないか思考錯誤したら出来たのですが、「違う。そうじゃない」な結果に^^; File.ReadAllLines(fileName).Select((line, i) => { Console.WriteLine($"{i + 1,2}:{line}"); return 0; });
332 名前:デフォルトの名無しさん mailto:sage [2024/06/24(月) 04:51:37.13 ID:odZr3Fxa.net] Ruby なら、 p ary = ( 7...10 ).each_with_index.map{ |val, idx| [ idx, val ] } #=> [ [0, 7], [1, 8], [2, 9] ]
333 名前:デフォルトの名無しさん [2024/06/24(月) 04:56:53.14 ID:De91wzz6.net] 理解していないと思ったら、ReadAllLines(fileName)にはWithIndexなるメソッド無かったなり…。 騙されたなり…orz
334 名前:デフォルトの名無しさん [2024/06/24(月) 04:58:38.37 ID:oysLv6Xd.net] >>325 死ね
335 名前:デフォルトの名無しさん [2024/06/24(月) 07:45:03.03 ID:m0RxboDo.net] if や case や match や テーブル参照は使わないで (出来れば四則演算のみがベストアンサー) 変換前→変換後 1→2 2→1 3→3 4→10 6→4 8→8 10→6 を行う関数を造ってください さらにその逆関数を造ってください
336 名前:デフォルトの名無しさん mailto:sage [2024/06/24(月) 09:09:09.41 ID:sUiNH5u5.net] >>328 六次式でいいなら一瞬でできるでしょ
337 名前:デフォルトの名無しさん [2024/06/24(月) 10:35:24.72 ID:DSxd+1cL.net] 統合失調症 100人い1人 本当に音波電磁波攻撃だった場合 統合失調症の寿命は
338 名前:短いからして殺害されている トロッコ問題にあてはめると Aの線路に電磁波攻撃をしている者が100人いる Bの線路に被害者が1人いる トロッコに乗っている者も第三者 切り替えポイントに第3者がいる 間違いなく選んだ方の線路の者は全員死亡する あなたはどちらを助けますか? [] [ここ壊れてます]
339 名前:デフォルトの名無しさん mailto:sage [2024/06/24(月) 12:53:49.42 ID:JonISmvT.net] 少なくとも >>330 さんを助ける人は一人もいない >>329 なるほど
340 名前:デフォルトの名無しさん [2024/06/24(月) 16:09:25.85 ID:5PR+5FBR.net] >>320 結局c++やってないと無理な気はするけどね。 c++は確かに建て増しでグダグダではあるんだが、 書き方の変遷をそのまま引き継いでるから、学習過程でその書き方を変遷させる過程を色々ビルドしながら できるのはまあわかりやすくはあるんだわ。
341 名前:デフォルトの名無しさん [2024/06/24(月) 16:17:05.11 ID:jX1oxSab.net] >>328 長くなるので最初の3つの部分だけで規則性を書くと、 1→2 2→1 3→3
342 名前:デフォルトの名無しさん mailto:sage [2024/06/24(月) 16:21:31.19 ID:jX1oxSab.net] >>333 //1→2 //2→1 //3→3 (1) 四則演算のみ: y=2*(x-2)(x-3)+1*(x-1)(x-3)+3*(x-1)(x-2); 規則は、y0*(x-x1)(x-x2)のようなパターンを サイクリック(循環的)に繰り返す。 (2)三項演算子、その1 y=x==1?2:(x==2?1:(x==3?3:0)); (3)三項演算子、その2 y= (x==1?2:0) + (x==2?1:0) + (x==3?3:0);
343 名前:デフォルトの名無しさん mailto:sage [2024/06/24(月) 16:28:01.78 ID:MN5H+Gdl.net] スレチなのでよそでやって下さい
344 名前:デフォルトの名無しさん mailto:sage [2024/06/24(月) 17:42:58.06 ID:Uuc2YNAP.net] >>328 const INPUT: &str = " 1→2 2→1 3→3 4→10 6→4 8→8 10→6 "; fn parse(s: &str) -> Vec<(i32, i32)> { s.lines().filter_map(|line| { line.split('→') .map(str::parse::<i32>) .collect::<Result<Vec<_>, _>>() .ok() .and_then(|v| (v.len() == 2).then(|| (v[0], v[1]))) }) .collect::<Vec<_>>() } fn make_f(v: &[(i32, i32)]) -> impl Fn(i32) -> i32 + '_ { move |x| { v.iter().enumerate().map(|(i, (in1, out))| { v.iter().enumerate().filter_map(|(j, (in2, _))| (i != j).then(|| x - in2)).product::<i32>() / v.iter().enumerate().filter_map(|(j, (in2, _))| (i != j).then(|| in1 - in2)).product::<i32>() * out }) .sum() } }
345 名前:デフォルトの名無しさん mailto:sage [2024/06/24(月) 17:43:39.86 ID:Uuc2YNAP.net] >>336 fn main() { let v = parse(INPUT); let f = make_f(&v); for (input, output) in &v { let calc_output = f(*input); println!("{input} -> {calc_output}"); assert_eq!(calc_output, *output); } } 結果 1 -> 2 2 -> 1 3 -> 3 4 -> 10 6 -> 4 8 -> 8 10 -> 6
346 名前:デフォルトの名無しさん mailto:sage [2024/06/24(月) 18:41:27.02 ID:jX1oxSab.net] >>334 >y=2*(x-2)(x-3)+1*(x-1)(x-3)+3*(x-1)(x-2); 間違ったわ。 多分、 y=1*(x-2)(x-3)-1*(x-1)(x-3)+3/2*(x-1)(x-2); だと思うわ。 理由は大体分かると思うけど。
347 名前:デフォルトの名無しさん mailto:sage [2024/06/24(月) 18:41:27.42 ID:jX1oxSab.net] >>334 >y=2*(x-2)(x-3)+1*(x-1)(x-3)+3*(x-1)(x-2); 間違ったわ。 多分、 y=1*(x-2)(x-3)-1*(x-1)(x-3)+3/2*(x-1)(x-2); だと思うわ。 理由は大体分かると思うけど。
348 名前:デフォルトの名無しさん mailto:sage [2024/06/24(月) 18:44:46.10 ID:jX1oxSab.net] 一般的には、次のように書けると思うわ: a=2*(x-2)(x-3)+1*(x-1)(x-3)+3*(x-1)(x-2); b=(x-2)(x-3)+(x-1)(x-3)+(x-1)(x-2); y=a/b;
349 名前:デフォルトの名無しさん mailto:sage [2024/06/24(月) 19:35:34.10 ID:maSlaTHT.net] >>340 合っているかどうか以前に プログラムコードで回答しないとスレ違い 具体的な数値例が式やコードに含まれるのは望ましくない 出来上がった関数の動作検算の時に具体的な数値例を用いる
350 名前:デフォルトの名無しさん mailto:sage [2024/06/24(月) 23:33:41.46 ID:FIb4AZ4T.net] >>328-329 なんかダサい https://paiza.io/projects/uc8gH6yNWCWKdQSYtqNREg pub fn f(x: i32) -> i32
351 名前:{ ( -2413f64*(x.pow(6) as f64)/120960f64 +739f64*(x.pow(5) as f64)/1260f64 -157991f64*(x.pow(4) as f64)/24192f64 +69551f64*(x.pow(3) as f64)/2016f64 -2691673f64*(x.pow(2) as f64)/30240f64 +88679f64*(x as f64)/840f64 -905f64/21f64 +0.5) as i32 } pub fn g(y: i32) -> i32 { ( 13f64*(y.pow(6) as f64)/120960f64 -(y.pow(5) as f64)/315f64 +1415f64*(y.pow(4) as f64)/24192f64 -1511f64*(y.pow(3) as f64)/2016f64 +144793f64*(y.pow(2) as f64)/30240f64 -3053f64*(y as f64)/280f64 +185f64/21f64 +0.5) as i32 } pub fn main() { let a = vec![(1, 2), (2, 1), (3, 3), (4, 10), (6, 4), (8, 8), (10, 6)]; for (x, _y) in &a { println!("{}, {}", x, f(*x)); } for (_x, y) in &a { println!("{}, {}", y, g(*y)); } } [] [ここ壊れてます]
352 名前:デフォルトの名無しさん [2024/06/24(月) 23:39:26.44 ID:FIb4AZ4T.net] 係数はこっちで求めたでござる https://paiza.io/projects/YvPFB5g4cCOtCXz1wpA86g import sys, os from functools import reduce import sympy as sy def lc(a): x, y = sy.symbols('x y') p = 0 for i, (c, d) in enumerate(a): g = reduce(lambda s, t: (t[0], (s[1][0] * (1 if t[0] == i else (x - t[1][0])), 0)), enumerate(a), (-1, (1, 0))) f = g[1][0] p += d * f / f.subs(x, c) print(p) print(p.expand()) for c, d in a: print(p.subs(x, c), p.subs(x, c) == d) if __name__ == '__main__': lc([(1, 2), (2, 1), (3, 3), (4, 10), (6, 4), (8, 8), (10, 6)]) lc([(2, 1), (1, 2), (3, 3), (10, 4), (4, 6), (8, 8), (6, 10)])
353 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 01:47:22.24 ID:SRTwQJBb.net] 1〜10は4bitに収まるから64bitのシフト演算と論理積(&)がOKなら簡単なんだけどな やることはテーブル参照と変わらんけど
354 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 02:44:46.88 ID:MBITUZQb.net] >>332 Rustを習得する上でC++の知識は不要 Cでの基礎知識(ポインタ、スタック、ヒープ)しか必要としない >>343 ここはRustのスレだ
355 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 05:16:25.10 ID:6VG6SXsU.net] >>342 6次式を使う場合それを展開することに意味があると思えないから展開前の>>336 でいいんじゃない?
356 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 07:25:12.24 ID:H43UHQbv.net] >>346 ほぼ定数になる部分まで 実行時に二重ループで毎回計算してるのは効率悪いと思う
357 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 07:47:56.32 ID:hXiD4muz.net] >>345 っ move semantics っ RAII っ SmartPointer(Rc)
358 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 08:03:22.73 ID:ZJws2e45.net] >>348 そりゃすでにC++を知っているならそのへんの知識が流用できて楽だけど 新たに学ぶならわざわざC++を経由する必要なくね? 特にmoveとか明らかにC++のほうが複雑だし
359 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 08:54:41.29 ID:Lgitw8zf.net] お題スレが機能しなくなってゴミがあふれてきてんのかこれ?
360 名前:デフォルトの名無しさん [2024/06/25(火) 09:00:44.98 ID:ZTu14b8J.net] >>349 c++通らなきゃなんでこんなめんどいことするか理解できんだろ
361 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 09:03:31.00 ID:9+k+boDP.net] 「アセンブラ知らずにCって理解できるものなのか?」 ↓ 「C++の方が普通。Cは専門家向け」 ↓ 「いきなりRust」
362 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 09:25:46.54 ID:eEyTJz94.net] オレはPHPからRustに移行したよ actix web使ってる 速さには感激してる 戸惑うのは謎のワーニングが出る時かな mut付けてないのにmut付けるなってワーニング出たりする cargo cleanとかすれば消えるんだけど
363 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 09:32:01.85 ID:GyGy4ZSw.net] >>351 Cでmalloc/free手書きしたりSEGV起こすだけで十分理解できると思うけどなぁ C++じゃないとダメなのってどのへん?
364 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 10:36:22.38 ID:398g93Vj.net] >>348 その3つはどの言語から来ても簡単にすんなり理解できるでしょ >>353 PHPから来た人はジェネリクスはすんなり理解できるものなの?
365 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 11:03:26.31 ID:eEyTJz94.net] >>355 ジェネリクスが特段わかりずらいとは思わなかった それより型があいまいなPHPから移行すると型定義したくてうずうずする ちゃんと型定義したかったんだわ
366 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 11:48:25.07 ID:EN7MeMPi.net] C++ を知っていると Rust がわかりやすいというよりも有難みを感じやすいとは思う。 なんだかんだで Rust は面倒くさいしそれなりに学習曲線の急上昇もあるのは本当だけど、 それでもなお Rust が良いと思えるのは C++ の駄目な部分についての反省が入ってるから。 C++ 的なものが必要な場面で C++ より上手くやるものという感覚で捉えてる。
367 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 12:43:05.46 ID:qH1sgo3/.net] 「Rustを学ぶためにC++を学ぶ必要があるか(学ぶといいか)」も定期的に沸くな 何度も見てて思うのが 「あなたはRustを学ぶ前にC++を学んでいたか」とYes/Noが一致して、平行線にしかならない議論なのでは
368 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 13:05:45.82 ID:ZtCD4zFU.net] フランス語を学ぶときに英語を知ってる必要があるか(學ぶといいか)を考えれば良い 日本語←→フランス語だけ教わりたいのに英語學ぶ必要は無い
369 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 15:05:50.09 ID:UfTXO4rA.net] Rustを学ぶ前に他言語を学ぶ必要は無い。 しかしプログラム自体の経験が浅いのなら、絶壁の学習曲線に挫折する可能性が高い。 そういう初学者はRusuではなく、とりあえずは動くところまで持っていきやすい言語を使って勉強したほうがいい。
370 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 15:23:35.53 ID:bjcoCLHQ.net] C++を経由しないでRustを使えてる人たちがたくさんいることから C++が不要言語であることは間違いない
371 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 15:29:24.75 ID:ZtCD4zFU.net] >とりあえずは動くところまで持っていきやすい言語 Rustも変な事しなければとりあえずは動く C/C++みたいに一見動いてるフリしてメモリ壊してたりに気付かない方が有害
372 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 16:22:38.23 ID:EN7MeMPi.net] それはプログラミングに慣れてるから言えることで、 エラーになってくれることが心底から有難いことだと思えるのは エラーにならずにぶっ壊れる体験を通してじゃないと無理だよ。 結果的にわかりやすいかどうかの話じゃなくて 学習する当人がちゃんと納得して学習し続けられるかというモチベーションの話としてね。
373 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 16:57:26.38 ID:bjcoCLHQ.net] Cでmalloc/free面倒とか忘れたとか解放したのにポインタ残っていて使っちゃったとか体験しておいたほうがよいかもしれないが C++は不要
374 名前:デフォルトの名無しさん [2024/06/25(火) 17:23:57.01 ID:jUYULW90.net] >>363 つまり最初はPerlが良いってことか
375 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 17:55:00.58 ID:EN7MeMPi.net] 初心者レベルだと C/C++ もRust も向いてないって話
376 名前:デフォルトの名無しさん [2024/06/25(火) 19:32:04.37 ID:l0yCAl6v.net] そう言えばHaskell難しい言うやつも似たようなこと言ってたな。 そんなに難しいと感じてなかったから不思議だったんだが、 自分でバグ作っておいて言語が難しいとか言うなよ…。
377 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 20:03:41.12 ID:qH1sgo3/.net] ID:ZtCD4zFU ID:bjcoCLHQ
378 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 20:13:30.50 ID:urOX5j9P.net] 関数型言語を使ってるとRustの理解が少し早くなるよ 特にHaskellを知っていればtraitの理解も早いね しかしRustを学ぶために関数型言語を知っている必要はないんだよな 同様にC++も知っている必要はない
379 名前:デフォルトの名無しさん [2024/06/25(火) 22:48:01.04 ID:3rDdWdgz.net] Erlang使ってて良かったと思った
380 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 23:04:44.45 ID:8sxbkiyD.net] バレおじw
381 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 23:30:51.26 ID:oKw2Pfcc.net] >>347 展開しないほうがよい 展開する時も二重ループは発生するだけでなく単なる計算より重い さらに本来は回避できる浮動小数点を使わざるを得なくなる そして>>342 のコードをその例のような静的ではなく問題入力値に応じて動的に作り出さなければならない 一方で展開しないならばRustコード数行だけで済み任意の問題に対応できる 割り算部分も0/N=0かN/N=1だけなので整数で済む
382 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 23:49:25.06 ID:ThxORcgc.net] >>369 >特にHaskellを知っていればtraitの理解も早いね これには全く同意できない type classというかHaskellとはやり方もできることも違いすぎるから そもそも何の事前知識なくてもtraitは容易に理解できるでしょ
383 名前:デフォルトの名無しさん [2024/06/26(水) 08:25:01.52 ID:egC8x8gn.net] 神 精霊 絶大なエネルギーを使用可能 幽霊 人間を疲れさせるや一時操作可能 @エネルギーの貯蔵の仕方は➁そのエネルギーの発生方法はBそのエネルギーを貯蔵する方法はCそれだけのエネルギーの物体を科学で観測不能はなぜ 6G通信に使われるテラヘルツ帯の電波、脳細胞の成長を促進 2022/08/16 タンパク質の操作/マイクロ波等の照射が記憶に影響 2008/11/01 男性の精子の減少、携帯電話の使用と関係か 最新研究 2023/11/02 統合失調症.発達障害.各身体症状 など国力低下 人為的で身体攻撃 威力を測定すれば判明するのにテロリストを野放し 全ての精神病 @ 英キングス・カレッジ・ロンドンをはじめとするグループは、人間の脳内で発現している古代ウイルス由来のDNA配列を調べ、それがうつ病・統合失調症・双極性障害といった主要な精神疾患のなりやすさと関係していることを明らかにした。 ➁九大、後の出来事が直前の出来事に錯覚を起こさせる脳の仕組みの一端を解明 2024/06/05 C幼児期の脳活動から18歳時点でのIQを予測できるという研究結果 2023/09/09 D3歳までに脳は形成される E統合失調症などの患者に幻覚や妄想を引き起こす脳のネットワークがAIを使った研究で明らか 1立方ミリメートルの脳の断片をハーバード大学とGoogleの研究者がナノメートル単位で3Dマッピングすることに成功 2024年05月10日 ※MRIで物理的に神経の接続問題観測可能 嘘つきの知的障碍者と精神障碍者や認知症の者発見 ◇電磁波攻撃はあるとないどの思考【組織】の者が話しているのかな マイクロ波聴覚効果やボイス・トォ・スカル発見可能 電磁波している者守りたいもの守りたくないものの判別
384 名前:方法は各対象者の将来で名よある地位やよい未来の映像と悪い未来の映像を見てもらえば副交感神経と交感神経の差と脳波パターンをみたら判明する [] [ここ壊れてます]
385 名前:デフォルトの名無しさん mailto:sage [2024/06/26(水) 12:30:12.07 ID:j6fp+f8B.net] >>372 >割り算部分も0/N=0かN/N=1だけなので整数で済む そうだね この問題の本質はそこだと思うけどそれ言い出すとif使わない理由が無いな
386 名前:デフォルトの名無しさん mailto:sage [2024/06/26(水) 12:31:27.14 ID:j6fp+f8B.net] >>373 事前にやるならNimの方が良いよ
387 名前:デフォルトの名無しさん mailto:sage [2024/06/26(水) 13:01:41.83 ID:eR4cI6Xf.net] Rustを学ぶ前に他の言語を学ぶ必要はないけど 全くプログラミング言語を知らないならシンプルで学習例も多いC言語一択だね ポインタとヒープの扱いまで学べたらたらC言語を忘れてRustへ
388 名前:デフォルトの名無しさん [2024/06/26(水) 14:31:44.00 ID:uKek7pO0.net] デストラクタの動きを知らないで本当にrustできんの?って思うけど
389 名前:デフォルトの名無しさん mailto:sage [2024/06/26(水) 14:43:55.70 ID:eR4cI6Xf.net] スコープを抜けた時にデストラクタが自動的に呼ばれる それだけ 予備知識を必要としない
390 名前:デフォルトの名無しさん mailto:sage [2024/06/26(水) 14:54:42.66 ID:j6fp+f8B.net] Rustのデストラクタの描き方ってなんであんなんなん
391 名前:デフォルトの名無しさん mailto:sage [2024/06/26(水) 15:00:49.20 ID:KtPyzxFO.net] C書くしかない時代だったからC勉強できたけど Rustがある時代に純粋な教養としてC勉強なんて苦行できないだろ 修行僧かよ
392 名前:デフォルトの名無しさん mailto:sage [2024/06/26(水) 15:13:01.92 ID:UcL9V/nx.net] 最近気付いたんだけどもしかしてRustの所有権って2通りの意味がある?
393 名前:デフォルトの名無しさん mailto:sage [2024/06/26(水) 17:42:24.19 ID:AVbFTHWJ.net] >>382 そのココロは?
394 名前:デフォルトの名無しさん mailto:sage [2024/06/26(水) 18:05:02.22 ID:tR/OTOKs.net] >>378 それってc++学ぶときも一緒じゃない?
395 名前:デフォルトの名無しさん mailto:sage [2024/06/26(水) 20:50:33.32 ID:mzS1vumz.net] >>382 Rustを学ぶ上で所有権は忘れた方がいい 実はRustは非常にシンプルで 値をmoveして用いるか参照して用いるかしかない (ただしCopy実装型はmoveの代わりにcopy) 値はmoveされないままスコープが尽きると消える 消える直前にデストラクタが呼ばれる 以上たったこれだけだ
396 名前:デフォルトの名無しさん [2024/06/26(水) 23:00:32.38 ID:GOea043w.net] >>381 苦行はごちゃごちゃして煩わしい記述を強要されるRustだろ。fnだのmutだの略語が多く 殺伐としているし、記号の使い方なども含めて如何にもギークが作ったというような 美的感覚が欠如した野暮ったいコードを書き連ねるのはおぞましい。 Cと違って新しいSwiftはRustに機能的に近いが、Rustよりずっと洗練されている。
397 名前:デフォルトの名無しさん mailto:sage [2024/06/26(水) 23:26:44.75 ID:skjSHmL1.net] Rust言語を知らないから見た目のキーワード批判しかできないのだ
398 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 04:20:04.01 ID:nawTLqWn.net] スタックは早くてヒープは遅い、みたいな話よく聞くんだけど、 具体的に何が早い/遅いの?
399 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 04:33:33.49 ID:TDzAch9x.net] >>388 自分でヒープメモリ管理部分を書いてみるとよくわかる ヒープでメモリ確保したり解放したりするのは色んな処理が入って非常に遅い スタック上ならそのコストはない 関数に入る&抜けるときにスタックフレームを指してるレジスタの値を変えるだけ というのに加えて CPUの多段メモリキャッシュ機構での速さが桁が変わってくる スタックフレーム上なら常にアクセスしていてキャッシュに載るから超速い
400 名前:デフォルトの名無しさん [2024/06/27(木) 07:18:32.22 ID:CXekxx/V.net] >>386 mutが煩わしい言うてる時点で関数型プログラミングをまともに出来てないな。 今までの副作用だらけの言語だとマルチスレッドプログラミングが上手く出来ないから関数型プログラミングを取り込んだというのに。 Rustでごちゃごちゃしてると感じるならHaskellにおいで。 forやifと書くことすら煩わしく感じるくらいシンプルだよ。
401 名前:デフォルトの名無しさん [2024/06/27(木) 08:56:33.16 ID:ozUuBzDI.net] Swift、よく知らないんだよなあ Appleの囲い込み言語という時点でもう勉強する気になれない
402 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 09:08:39.14 ID:AKJ8/1zo.net] C++ でも変更なしのときに const を付けるんじゃなくて変更ありのときに指定するほうがよかったという声は結構あるよな。 まあいまさら変更できんが。
403 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 09:50:18.20 ID:OTNDZ+yC.net] >>372 PyO3おすすめ
404 名前:デフォルトの名無しさん [2024/06/27(木) 10:07:28.99 ID:OTNDZ+yC.net] >美的感覚が欠如した野暮ったいコード 禿しく同意
405 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 10:21:46.91 ID:nawTLqWn.net] >>389 キャッシュに乗るという前提なら、 確保・解放が遅いだけでアクセス速度とかは変わらないってことでOK? キャッシュに乗る確率とかもスタックとヒープでやっぱちがうんかな
406 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 10:30:52.47 ID:OTNDZ+yC.net] キャッシュに載ったらアクセス速度変わるやろ
407 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 10:33:46.61 ID:xhKCtT/7.net] そりゃ、キャッシュ・イズ・キングと言うぐらいだからな
408 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 11:05:58.76 ID:AKJ8/1zo.net] >>395 キャッシュに乗りやすいというのはアクセスに局所性があるということ。 関数自体が小さくてすぐ終わるなら普通はスタックのほうが以前と近い場所にアクセスすることになる。
409 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 11:20:07.91 ID:veLj9zg3.net] よくわかんないんだけどスタック上に確保したメモリの所有権を外に移して関数は終了してスタックが縮んじゃうとかさ 「そんなわけないだろ」って思うんだけど
410 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 11:56:53.85 ID:TDzAch9x.net] >>395 スタックフレーム同士も連続しているし レジスタ退避でアクセスしているし 他のローカル変数もスタック上にありアクセスしているから スタック上に確保すればキャッシュ上にある
411 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 12:00:05.74 ID:TDzAch9x.net] >>399 関数が値を返す場合にサイズが小さければレジスタで返す サイズが大きい場合は呼び出し元のスタックフレームに領域を確保してそこへ直接書き込んでいる つまり暗に可変参照を渡す最適化が行われている それはサイズの大きい値を返す関数呼び出しが多段でも同じなので一番最初の関数のスタックフレームに直接書き込まれる
412 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 12:27:57.71 ID:OTNDZ+yC.net] >>399 >「そんなわけないだろ」 その感覚は正しい Rustを広めたいために勢い余ってデマを流してる香具師が一定数いる >>401 が正しい
413 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 12:45:47.11 ID:VTKaeii9.net] >>399 >よくわかんないんだけどスタック上に確保したメモリの所有権を外に移して関数は終了してスタックが縮んじゃうとかさ これ自体なにを言いたいのかよくわからんけど その前にそんなこと言ってるやつおる? >>400 >スタック上に確保すればキャッシュ上にある キャッシュから追い出される状況もあるよね
414 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 12:53:21.92 ID:TDzAch9x.net] >>402 いや>>399 の話も正しいんだよ 重要なのはRust上の概念とその実現方法(実装)とその最適化の3つは当然異なるということ 所有権を移すとはmoveという概念であって moveの実装はコピー(してコピー元を使わない) ただし無駄なコピーは最適化で消える 例えば大きなサイズの構造体を関数が返す場合は呼び出し元の関数のスタックフレーム上に直接書き込まれることで無駄なコピーが発生しない
415 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 13:06:53.73 ID:VTKaeii9.net] それをスタックが縮むと表現してるのか 意味は分かった
416 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 13:24:58.99 ID:veLj9zg3.net] スタックてのは関数が何段か終了して縮んだあと、また伸び直して前の伸びを上書きしちゃうでしょって話 とにかく「移動」というのが新しくて、代入の移動はわかったけど 関数呼び出しの引数も移動です、返り値も移動ですってのがどういう実装に落とされるのかまだわかってない
417 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 13:49:01.55 ID:AKJ8/1zo.net] 低レイヤで起こってることは C と変わらん。 寿命の矛盾がないか静的な検査がクソ強いってだけだ。
418 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 15:56:45.17 ID:AKJ8/1zo.net] スタックを伸ばすだの縮めるだのいうのはメモリのとある番地に実際のメモリを割り当てたり切り離したりすること。 スタックが足りなくなってきたら連続するアドレスのところに実メモリを割り当てるのがスタックを伸ばすってこと。 普通の使い方をしていたらスタック領域を縮めることはあんまりない。 スタックがあるところまで伸びたということはもう一度そこまで伸びる可能性が高いので回収してまた割り当ててをするよりは割り当てっぱなしにしたほうが良いという設計思想になってるので全体のメモリが足りている限りスタックが浅いところまで戻ってきても実メモリを回収しないという のが現代的な OS。 逆に言えば全体のメモリが足りなくなってきたら回収することもあるんだけど。 素人感覚だとメモリをなるべく空くようにするのが「メモリの無駄を防ぐ」という意識の人がいるんだけど、存在するメモリが使われないままになってるほうがもったいないんだ。 それとたとえば Linux だとスタックの大きさは 8MB が上限というのがデフォ。 これは OS 側の設定なのでアプリケーション側では (OS の設定をいじる権限がない限りは) どうにもできない。 8MB ってめちゃくちゃ少ないように感じるかもしれないけどだいたいこんなもんで足りちゃうんだよ。
419 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 16:39:29.50 ID:EaS5WQGi.net] >>406 の書いてる「縮む」はVecで言うところのcapacityじゃなくてlenっぽくない? ムーブとの関連がよくわからんけど
420 名前:デフォルトの名無しさん [2024/06/27(木) 17:46:10.67 ID:6+Lg0PcZ.net] >>407 ですな
421 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 17:59:42.80 ID:AKJ8/1zo.net] 低レイヤのメモリの取り扱いモデルが確立している高級言語が C/C++ くらいしかなくて、 LLVM も汎用的なフレームワークのふりして思ったほど自由ではないので Rust の言語仕様が LLVM の都合に、 C/C++ の都合に引っ張られているところはまあまあある。