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


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

Rust part24



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++ の都合に引っ張られているところはまあまあある。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<305KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef