公式
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/
探検
Rust part24
■ このスレッドは過去ログ倉庫に格納されています
2024/05/27(月) 06:41:26.82ID:T4AFD1f4
319デフォルトの名無しさん
2024/06/23(日) 22:32:11.71ID:CiIX8R/B >>318
翻訳が進んでないのはともかくとして、説明が簡潔なのはそういうもんだわ。
チュートリアルでもつっかえるやつはいっぱいいるのに雑なツアーだけで理解できるわけないだろ。
複雑なところに立ち入る前に概略を見るってのと
それをすぐさま実行して確かめれらる環境がくっついてるってのがコンセプトなので
細かいことは The Rust Programming Language を見るのが前提。
こういった種類の学習は各項目を完璧に理解してから次の項目に進むってのは出来ない。
色んな言語機能は絡み合っていて綺麗な順番には出来ない。
全体を大雑把につかんでから解像度を高めていく形になる。
その一番最初のおおざっぱなところを担当する形の資料ってこと。
翻訳が進んでないのはともかくとして、説明が簡潔なのはそういうもんだわ。
チュートリアルでもつっかえるやつはいっぱいいるのに雑なツアーだけで理解できるわけないだろ。
複雑なところに立ち入る前に概略を見るってのと
それをすぐさま実行して確かめれらる環境がくっついてるってのがコンセプトなので
細かいことは The Rust Programming Language を見るのが前提。
こういった種類の学習は各項目を完璧に理解してから次の項目に進むってのは出来ない。
色んな言語機能は絡み合っていて綺麗な順番には出来ない。
全体を大雑把につかんでから解像度を高めていく形になる。
その一番最初のおおざっぱなところを担当する形の資料ってこと。
320デフォルトの名無しさん
2024/06/23(日) 22:46:50.25ID:cgFz9E69 C言語と関数型言語とあと何かモダンな言語の三様な言語を使える程度の知識経験があればRustはすらすら学習できるけど
それらのうち何らか知識が抜けているとその言語間での汎用的な知識も新たに学習することになるからちょっと大変になるようだね
それらのうち何らか知識が抜けているとその言語間での汎用的な知識も新たに学習することになるからちょっと大変になるようだね
321デフォルトの名無しさん
2024/06/23(日) 23:42:57.08ID:iAmtDmVE >>316
そこは理解してる。
んで、Rustのfor_eachはenamerateさえすればindex使えるし、出力も出来る。
そこがC#のForEach場合、そもそもindexが使えないので一旦indexを使えるSelect & ToListを挟むことになる。
出力を考えなければ不便はないけど、出力を考えたとたんにSelect & ToListが付いてくる。
この辺は将来のバージョンに期待かな。
そこは理解してる。
んで、Rustのfor_eachはenamerateさえすればindex使えるし、出力も出来る。
そこがC#のForEach場合、そもそもindexが使えないので一旦indexを使えるSelect & ToListを挟むことになる。
出力を考えなければ不便はないけど、出力を考えたとたんにSelect & ToListが付いてくる。
この辺は将来のバージョンに期待かな。
322デフォルトの名無しさん
2024/06/24(月) 01:22:36.88ID:xscSUycb >>321
理解してないでしょ
Enumerable.Range(7, 10).WithIndex().ForEach(x => {
var (index, value) = x;
Console.WriteLine($"{index}: {value}");
});
https://dotnetfiddle.net/aJJwdY
理解してないでしょ
Enumerable.Range(7, 10).WithIndex().ForEach(x => {
var (index, value) = x;
Console.WriteLine($"{index}: {value}");
});
https://dotnetfiddle.net/aJJwdY
323デフォルトの名無しさん
2024/06/24(月) 01:27:35.74ID:xscSUycb .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())になる
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())になる
324デフォルトの名無しさん
2024/06/24(月) 04:37:42.69ID:De91wzz6 >>322
おお…。
確かに理解してませんでした。
ちなみに、私もその後何とかSelect内で出力を出来ないか思考錯誤したら出来たのですが、「違う。そうじゃない」な結果に^^;
File.ReadAllLines(fileName).Select((line, i) =>
{
Console.WriteLine($"{i + 1,2}:{line}");
return 0;
});
おお…。
確かに理解してませんでした。
ちなみに、私もその後何とかSelect内で出力を出来ないか思考錯誤したら出来たのですが、「違う。そうじゃない」な結果に^^;
File.ReadAllLines(fileName).Select((line, i) =>
{
Console.WriteLine($"{i + 1,2}:{line}");
return 0;
});
325デフォルトの名無しさん
2024/06/24(月) 04:51:37.13ID:odZr3Fxa Ruby なら、
p ary = ( 7...10 ).each_with_index.map{ |val, idx| [ idx, val ] }
#=> [ [0, 7], [1, 8], [2, 9] ]
p ary = ( 7...10 ).each_with_index.map{ |val, idx| [ idx, val ] }
#=> [ [0, 7], [1, 8], [2, 9] ]
326デフォルトの名無しさん
2024/06/24(月) 04:56:53.14ID:De91wzz6 理解していないと思ったら、ReadAllLines(fileName)にはWithIndexなるメソッド無かったなり…。
騙されたなり…orz
騙されたなり…orz
327デフォルトの名無しさん
2024/06/24(月) 04:58:38.37ID:oysLv6Xd >>325
死ね
死ね
328デフォルトの名無しさん
2024/06/24(月) 07:45:03.03ID:m0RxboDo if や case や match や テーブル参照は使わないで
(出来れば四則演算のみがベストアンサー)
変換前→変換後
1→2
2→1
3→3
4→10
6→4
8→8
10→6
を行う関数を造ってください
さらにその逆関数を造ってください
(出来れば四則演算のみがベストアンサー)
変換前→変換後
1→2
2→1
3→3
4→10
6→4
8→8
10→6
を行う関数を造ってください
さらにその逆関数を造ってください
329デフォルトの名無しさん
2024/06/24(月) 09:09:09.41ID:sUiNH5u5 >>328
六次式でいいなら一瞬でできるでしょ
六次式でいいなら一瞬でできるでしょ
330デフォルトの名無しさん
2024/06/24(月) 10:35:24.72ID:DSxd+1cL 統合失調症 100人い1人
本当に音波電磁波攻撃だった場合
統合失調症の寿命は短いからして殺害されている
トロッコ問題にあてはめると
Aの線路に電磁波攻撃をしている者が100人いる
Bの線路に被害者が1人いる
トロッコに乗っている者も第三者
切り替えポイントに第3者がいる
間違いなく選んだ方の線路の者は全員死亡する
あなたはどちらを助けますか?
本当に音波電磁波攻撃だった場合
統合失調症の寿命は短いからして殺害されている
トロッコ問題にあてはめると
Aの線路に電磁波攻撃をしている者が100人いる
Bの線路に被害者が1人いる
トロッコに乗っている者も第三者
切り替えポイントに第3者がいる
間違いなく選んだ方の線路の者は全員死亡する
あなたはどちらを助けますか?
331デフォルトの名無しさん
2024/06/24(月) 12:53:49.42ID:JonISmvT332デフォルトの名無しさん
2024/06/24(月) 16:09:25.85ID:5PR+5FBR >>320
結局c++やってないと無理な気はするけどね。
c++は確かに建て増しでグダグダではあるんだが、
書き方の変遷をそのまま引き継いでるから、学習過程でその書き方を変遷させる過程を色々ビルドしながら
できるのはまあわかりやすくはあるんだわ。
結局c++やってないと無理な気はするけどね。
c++は確かに建て増しでグダグダではあるんだが、
書き方の変遷をそのまま引き継いでるから、学習過程でその書き方を変遷させる過程を色々ビルドしながら
できるのはまあわかりやすくはあるんだわ。
333デフォルトの名無しさん
2024/06/24(月) 16:17:05.11ID:jX1oxSab334デフォルトの名無しさん
2024/06/24(月) 16:21:31.19ID:jX1oxSab >>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);
//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);
335デフォルトの名無しさん
2024/06/24(月) 16:28:01.78ID:MN5H+Gdl スレチなのでよそでやって下さい
336デフォルトの名無しさん
2024/06/24(月) 17:42:58.06ID:Uuc2YNAP >>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()
}
}
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()
}
}
337デフォルトの名無しさん
2024/06/24(月) 17:43:39.86ID:Uuc2YNAP >>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
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
338デフォルトの名無しさん
2024/06/24(月) 18:41:27.02ID:jX1oxSab >>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);
だと思うわ。
理由は大体分かると思うけど。
>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);
だと思うわ。
理由は大体分かると思うけど。
339デフォルトの名無しさん
2024/06/24(月) 18:41:27.42ID:jX1oxSab >>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);
だと思うわ。
理由は大体分かると思うけど。
>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);
だと思うわ。
理由は大体分かると思うけど。
340デフォルトの名無しさん
2024/06/24(月) 18:44:46.10ID:jX1oxSab 一般的には、次のように書けると思うわ:
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;
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;
341デフォルトの名無しさん
2024/06/24(月) 19:35:34.10ID:maSlaTHT342デフォルトの名無しさん
2024/06/24(月) 23:33:41.46ID:FIb4AZ4T >>328-329
なんかダサい
https://paiza.io/projects/uc8gH6yNWCWKdQSYtqNREg
pub fn f(x: i32) -> i32 {
(
-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)); }
}
なんかダサい
https://paiza.io/projects/uc8gH6yNWCWKdQSYtqNREg
pub fn f(x: i32) -> i32 {
(
-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)); }
}
343デフォルトの名無しさん
2024/06/24(月) 23:39:26.44ID:FIb4AZ4T 係数はこっちで求めたでござる
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)])
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)])
344デフォルトの名無しさん
2024/06/25(火) 01:47:22.24ID:SRTwQJBb 1〜10は4bitに収まるから64bitのシフト演算と論理積(&)がOKなら簡単なんだけどな
やることはテーブル参照と変わらんけど
やることはテーブル参照と変わらんけど
345デフォルトの名無しさん
2024/06/25(火) 02:44:46.88ID:MBITUZQb346デフォルトの名無しさん
2024/06/25(火) 05:16:25.10ID:6VG6SXsU347デフォルトの名無しさん
2024/06/25(火) 07:25:12.24ID:H43UHQbv348デフォルトの名無しさん
2024/06/25(火) 07:47:56.32ID:hXiD4muz349デフォルトの名無しさん
2024/06/25(火) 08:03:22.73ID:ZJws2e45350デフォルトの名無しさん
2024/06/25(火) 08:54:41.29ID:Lgitw8zf お題スレが機能しなくなってゴミがあふれてきてんのかこれ?
351デフォルトの名無しさん
2024/06/25(火) 09:00:44.98ID:ZTu14b8J >>349
c++通らなきゃなんでこんなめんどいことするか理解できんだろ
c++通らなきゃなんでこんなめんどいことするか理解できんだろ
352デフォルトの名無しさん
2024/06/25(火) 09:03:31.00ID:9+k+boDP 「アセンブラ知らずにCって理解できるものなのか?」
↓
「C++の方が普通。Cは専門家向け」
↓
「いきなりRust」
↓
「C++の方が普通。Cは専門家向け」
↓
「いきなりRust」
353デフォルトの名無しさん
2024/06/25(火) 09:25:46.54ID:eEyTJz94 オレはPHPからRustに移行したよ
actix web使ってる
速さには感激してる
戸惑うのは謎のワーニングが出る時かな
mut付けてないのにmut付けるなってワーニング出たりする
cargo cleanとかすれば消えるんだけど
actix web使ってる
速さには感激してる
戸惑うのは謎のワーニングが出る時かな
mut付けてないのにmut付けるなってワーニング出たりする
cargo cleanとかすれば消えるんだけど
354デフォルトの名無しさん
2024/06/25(火) 09:32:01.85ID:GyGy4ZSw355デフォルトの名無しさん
2024/06/25(火) 10:36:22.38ID:398g93Vj356デフォルトの名無しさん
2024/06/25(火) 11:03:26.31ID:eEyTJz94357デフォルトの名無しさん
2024/06/25(火) 11:48:25.07ID:EN7MeMPi C++ を知っていると Rust がわかりやすいというよりも有難みを感じやすいとは思う。
なんだかんだで Rust は面倒くさいしそれなりに学習曲線の急上昇もあるのは本当だけど、
それでもなお Rust が良いと思えるのは C++ の駄目な部分についての反省が入ってるから。
C++ 的なものが必要な場面で C++ より上手くやるものという感覚で捉えてる。
なんだかんだで Rust は面倒くさいしそれなりに学習曲線の急上昇もあるのは本当だけど、
それでもなお Rust が良いと思えるのは C++ の駄目な部分についての反省が入ってるから。
C++ 的なものが必要な場面で C++ より上手くやるものという感覚で捉えてる。
358デフォルトの名無しさん
2024/06/25(火) 12:43:05.46ID:qH1sgo3/ 「Rustを学ぶためにC++を学ぶ必要があるか(学ぶといいか)」も定期的に沸くな
何度も見てて思うのが
「あなたはRustを学ぶ前にC++を学んでいたか」とYes/Noが一致して、平行線にしかならない議論なのでは
何度も見てて思うのが
「あなたはRustを学ぶ前にC++を学んでいたか」とYes/Noが一致して、平行線にしかならない議論なのでは
359デフォルトの名無しさん
2024/06/25(火) 13:05:45.82ID:ZtCD4zFU フランス語を学ぶときに英語を知ってる必要があるか(學ぶといいか)を考えれば良い
日本語←→フランス語だけ教わりたいのに英語學ぶ必要は無い
日本語←→フランス語だけ教わりたいのに英語學ぶ必要は無い
360デフォルトの名無しさん
2024/06/25(火) 15:05:50.09ID:UfTXO4rA Rustを学ぶ前に他言語を学ぶ必要は無い。
しかしプログラム自体の経験が浅いのなら、絶壁の学習曲線に挫折する可能性が高い。 そういう初学者はRusuではなく、とりあえずは動くところまで持っていきやすい言語を使って勉強したほうがいい。
しかしプログラム自体の経験が浅いのなら、絶壁の学習曲線に挫折する可能性が高い。 そういう初学者はRusuではなく、とりあえずは動くところまで持っていきやすい言語を使って勉強したほうがいい。
361デフォルトの名無しさん
2024/06/25(火) 15:23:35.53ID:bjcoCLHQ C++を経由しないでRustを使えてる人たちがたくさんいることから
C++が不要言語であることは間違いない
C++が不要言語であることは間違いない
362デフォルトの名無しさん
2024/06/25(火) 15:29:24.75ID:ZtCD4zFU >とりあえずは動くところまで持っていきやすい言語
Rustも変な事しなければとりあえずは動く
C/C++みたいに一見動いてるフリしてメモリ壊してたりに気付かない方が有害
Rustも変な事しなければとりあえずは動く
C/C++みたいに一見動いてるフリしてメモリ壊してたりに気付かない方が有害
363デフォルトの名無しさん
2024/06/25(火) 16:22:38.23ID:EN7MeMPi それはプログラミングに慣れてるから言えることで、
エラーになってくれることが心底から有難いことだと思えるのは
エラーにならずにぶっ壊れる体験を通してじゃないと無理だよ。
結果的にわかりやすいかどうかの話じゃなくて
学習する当人がちゃんと納得して学習し続けられるかというモチベーションの話としてね。
エラーになってくれることが心底から有難いことだと思えるのは
エラーにならずにぶっ壊れる体験を通してじゃないと無理だよ。
結果的にわかりやすいかどうかの話じゃなくて
学習する当人がちゃんと納得して学習し続けられるかというモチベーションの話としてね。
364デフォルトの名無しさん
2024/06/25(火) 16:57:26.38ID:bjcoCLHQ Cでmalloc/free面倒とか忘れたとか解放したのにポインタ残っていて使っちゃったとか体験しておいたほうがよいかもしれないが
C++は不要
C++は不要
365デフォルトの名無しさん
2024/06/25(火) 17:23:57.01ID:jUYULW90 >>363
つまり最初はPerlが良いってことか
つまり最初はPerlが良いってことか
366デフォルトの名無しさん
2024/06/25(火) 17:55:00.58ID:EN7MeMPi 初心者レベルだと C/C++ もRust も向いてないって話
367デフォルトの名無しさん
2024/06/25(火) 19:32:04.37ID:l0yCAl6v そう言えばHaskell難しい言うやつも似たようなこと言ってたな。
そんなに難しいと感じてなかったから不思議だったんだが、
自分でバグ作っておいて言語が難しいとか言うなよ…。
そんなに難しいと感じてなかったから不思議だったんだが、
自分でバグ作っておいて言語が難しいとか言うなよ…。
368デフォルトの名無しさん
2024/06/25(火) 20:03:41.12ID:qH1sgo3/ ID:ZtCD4zFU
ID:bjcoCLHQ
ID:bjcoCLHQ
369デフォルトの名無しさん
2024/06/25(火) 20:13:30.50ID:urOX5j9P 関数型言語を使ってるとRustの理解が少し早くなるよ
特にHaskellを知っていればtraitの理解も早いね
しかしRustを学ぶために関数型言語を知っている必要はないんだよな
同様にC++も知っている必要はない
特にHaskellを知っていればtraitの理解も早いね
しかしRustを学ぶために関数型言語を知っている必要はないんだよな
同様にC++も知っている必要はない
370デフォルトの名無しさん
2024/06/25(火) 22:48:01.04ID:3rDdWdgz Erlang使ってて良かったと思った
371デフォルトの名無しさん
2024/06/25(火) 23:04:44.45ID:8sxbkiyD バレおじw
372デフォルトの名無しさん
2024/06/25(火) 23:30:51.26ID:oKw2Pfcc373デフォルトの名無しさん
2024/06/25(火) 23:49:25.06ID:ThxORcgc >>369
>特にHaskellを知っていればtraitの理解も早いね
これには全く同意できない
type classというかHaskellとはやり方もできることも違いすぎるから
そもそも何の事前知識なくてもtraitは容易に理解できるでしょ
>特にHaskellを知っていればtraitの理解も早いね
これには全く同意できない
type classというかHaskellとはやり方もできることも違いすぎるから
そもそも何の事前知識なくてもtraitは容易に理解できるでしょ
374デフォルトの名無しさん
2024/06/26(水) 08:25:01.52ID:egC8x8gn 神 精霊 絶大なエネルギーを使用可能
幽霊 人間を疲れさせるや一時操作可能
@エネルギーの貯蔵の仕方は➁そのエネルギーの発生方法は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で物理的に神経の接続問題観測可能
嘘つきの知的障碍者と精神障碍者や認知症の者発見
◇電磁波攻撃はあるとないどの思考【組織】の者が話しているのかな
マイクロ波聴覚効果やボイス・トォ・スカル発見可能
電磁波している者守りたいもの守りたくないものの判別方法は各対象者の将来で名よある地位やよい未来の映像と悪い未来の映像を見てもらえば副交感神経と交感神経の差と脳波パターンをみたら判明する
幽霊 人間を疲れさせるや一時操作可能
@エネルギーの貯蔵の仕方は➁そのエネルギーの発生方法は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で物理的に神経の接続問題観測可能
嘘つきの知的障碍者と精神障碍者や認知症の者発見
◇電磁波攻撃はあるとないどの思考【組織】の者が話しているのかな
マイクロ波聴覚効果やボイス・トォ・スカル発見可能
電磁波している者守りたいもの守りたくないものの判別方法は各対象者の将来で名よある地位やよい未来の映像と悪い未来の映像を見てもらえば副交感神経と交感神経の差と脳波パターンをみたら判明する
375デフォルトの名無しさん
2024/06/26(水) 12:30:12.07ID:j6fp+f8B376デフォルトの名無しさん
2024/06/26(水) 12:31:27.14ID:j6fp+f8B >>373
事前にやるならNimの方が良いよ
事前にやるならNimの方が良いよ
377デフォルトの名無しさん
2024/06/26(水) 13:01:41.83ID:eR4cI6Xf Rustを学ぶ前に他の言語を学ぶ必要はないけど
全くプログラミング言語を知らないならシンプルで学習例も多いC言語一択だね
ポインタとヒープの扱いまで学べたらたらC言語を忘れてRustへ
全くプログラミング言語を知らないならシンプルで学習例も多いC言語一択だね
ポインタとヒープの扱いまで学べたらたらC言語を忘れてRustへ
378デフォルトの名無しさん
2024/06/26(水) 14:31:44.00ID:uKek7pO0 デストラクタの動きを知らないで本当にrustできんの?って思うけど
379デフォルトの名無しさん
2024/06/26(水) 14:43:55.70ID:eR4cI6Xf スコープを抜けた時にデストラクタが自動的に呼ばれる
それだけ
予備知識を必要としない
それだけ
予備知識を必要としない
380デフォルトの名無しさん
2024/06/26(水) 14:54:42.66ID:j6fp+f8B Rustのデストラクタの描き方ってなんであんなんなん
381デフォルトの名無しさん
2024/06/26(水) 15:00:49.20ID:KtPyzxFO C書くしかない時代だったからC勉強できたけど
Rustがある時代に純粋な教養としてC勉強なんて苦行できないだろ
修行僧かよ
Rustがある時代に純粋な教養としてC勉強なんて苦行できないだろ
修行僧かよ
382デフォルトの名無しさん
2024/06/26(水) 15:13:01.92ID:UcL9V/nx 最近気付いたんだけどもしかしてRustの所有権って2通りの意味がある?
383デフォルトの名無しさん
2024/06/26(水) 17:42:24.19ID:AVbFTHWJ >>382
そのココロは?
そのココロは?
384デフォルトの名無しさん
2024/06/26(水) 18:05:02.22ID:tR/OTOKs >>378
それってc++学ぶときも一緒じゃない?
それってc++学ぶときも一緒じゃない?
385デフォルトの名無しさん
2024/06/26(水) 20:50:33.32ID:mzS1vumz >>382
Rustを学ぶ上で所有権は忘れた方がいい
実はRustは非常にシンプルで
値をmoveして用いるか参照して用いるかしかない
(ただしCopy実装型はmoveの代わりにcopy)
値はmoveされないままスコープが尽きると消える
消える直前にデストラクタが呼ばれる
以上たったこれだけだ
Rustを学ぶ上で所有権は忘れた方がいい
実はRustは非常にシンプルで
値をmoveして用いるか参照して用いるかしかない
(ただしCopy実装型はmoveの代わりにcopy)
値はmoveされないままスコープが尽きると消える
消える直前にデストラクタが呼ばれる
以上たったこれだけだ
386デフォルトの名無しさん
2024/06/26(水) 23:00:32.38ID:GOea043w >>381
苦行はごちゃごちゃして煩わしい記述を強要されるRustだろ。fnだのmutだの略語が多く
殺伐としているし、記号の使い方なども含めて如何にもギークが作ったというような
美的感覚が欠如した野暮ったいコードを書き連ねるのはおぞましい。
Cと違って新しいSwiftはRustに機能的に近いが、Rustよりずっと洗練されている。
苦行はごちゃごちゃして煩わしい記述を強要されるRustだろ。fnだのmutだの略語が多く
殺伐としているし、記号の使い方なども含めて如何にもギークが作ったというような
美的感覚が欠如した野暮ったいコードを書き連ねるのはおぞましい。
Cと違って新しいSwiftはRustに機能的に近いが、Rustよりずっと洗練されている。
387デフォルトの名無しさん
2024/06/26(水) 23:26:44.75ID:skjSHmL1 Rust言語を知らないから見た目のキーワード批判しかできないのだ
388デフォルトの名無しさん
2024/06/27(木) 04:20:04.01ID:nawTLqWn スタックは早くてヒープは遅い、みたいな話よく聞くんだけど、
具体的に何が早い/遅いの?
具体的に何が早い/遅いの?
389デフォルトの名無しさん
2024/06/27(木) 04:33:33.49ID:TDzAch9x >>388
自分でヒープメモリ管理部分を書いてみるとよくわかる
ヒープでメモリ確保したり解放したりするのは色んな処理が入って非常に遅い
スタック上ならそのコストはない
関数に入る&抜けるときにスタックフレームを指してるレジスタの値を変えるだけ
というのに加えて
CPUの多段メモリキャッシュ機構での速さが桁が変わってくる
スタックフレーム上なら常にアクセスしていてキャッシュに載るから超速い
自分でヒープメモリ管理部分を書いてみるとよくわかる
ヒープでメモリ確保したり解放したりするのは色んな処理が入って非常に遅い
スタック上ならそのコストはない
関数に入る&抜けるときにスタックフレームを指してるレジスタの値を変えるだけ
というのに加えて
CPUの多段メモリキャッシュ機構での速さが桁が変わってくる
スタックフレーム上なら常にアクセスしていてキャッシュに載るから超速い
390デフォルトの名無しさん
2024/06/27(木) 07:18:32.22ID:CXekxx/V >>386
mutが煩わしい言うてる時点で関数型プログラミングをまともに出来てないな。
今までの副作用だらけの言語だとマルチスレッドプログラミングが上手く出来ないから関数型プログラミングを取り込んだというのに。
Rustでごちゃごちゃしてると感じるならHaskellにおいで。
forやifと書くことすら煩わしく感じるくらいシンプルだよ。
mutが煩わしい言うてる時点で関数型プログラミングをまともに出来てないな。
今までの副作用だらけの言語だとマルチスレッドプログラミングが上手く出来ないから関数型プログラミングを取り込んだというのに。
Rustでごちゃごちゃしてると感じるならHaskellにおいで。
forやifと書くことすら煩わしく感じるくらいシンプルだよ。
391デフォルトの名無しさん
2024/06/27(木) 08:56:33.16ID:ozUuBzDI Swift、よく知らないんだよなあ
Appleの囲い込み言語という時点でもう勉強する気になれない
Appleの囲い込み言語という時点でもう勉強する気になれない
392デフォルトの名無しさん
2024/06/27(木) 09:08:39.14ID:AKJ8/1zo C++ でも変更なしのときに const を付けるんじゃなくて変更ありのときに指定するほうがよかったという声は結構あるよな。
まあいまさら変更できんが。
まあいまさら変更できんが。
393デフォルトの名無しさん
2024/06/27(木) 09:50:18.20ID:OTNDZ+yC >>372
PyO3おすすめ
PyO3おすすめ
394デフォルトの名無しさん
2024/06/27(木) 10:07:28.99ID:OTNDZ+yC >美的感覚が欠如した野暮ったいコード
禿しく同意
禿しく同意
395デフォルトの名無しさん
2024/06/27(木) 10:21:46.91ID:nawTLqWn396デフォルトの名無しさん
2024/06/27(木) 10:30:52.47ID:OTNDZ+yC キャッシュに載ったらアクセス速度変わるやろ
397デフォルトの名無しさん
2024/06/27(木) 10:33:46.61ID:xhKCtT/7 そりゃ、キャッシュ・イズ・キングと言うぐらいだからな
398デフォルトの名無しさん
2024/06/27(木) 11:05:58.76ID:AKJ8/1zo399デフォルトの名無しさん
2024/06/27(木) 11:20:07.91ID:veLj9zg3 よくわかんないんだけどスタック上に確保したメモリの所有権を外に移して関数は終了してスタックが縮んじゃうとかさ
「そんなわけないだろ」って思うんだけど
「そんなわけないだろ」って思うんだけど
400デフォルトの名無しさん
2024/06/27(木) 11:56:53.85ID:TDzAch9x401デフォルトの名無しさん
2024/06/27(木) 12:00:05.74ID:TDzAch9x >>399
関数が値を返す場合にサイズが小さければレジスタで返す
サイズが大きい場合は呼び出し元のスタックフレームに領域を確保してそこへ直接書き込んでいる
つまり暗に可変参照を渡す最適化が行われている
それはサイズの大きい値を返す関数呼び出しが多段でも同じなので一番最初の関数のスタックフレームに直接書き込まれる
関数が値を返す場合にサイズが小さければレジスタで返す
サイズが大きい場合は呼び出し元のスタックフレームに領域を確保してそこへ直接書き込んでいる
つまり暗に可変参照を渡す最適化が行われている
それはサイズの大きい値を返す関数呼び出しが多段でも同じなので一番最初の関数のスタックフレームに直接書き込まれる
402デフォルトの名無しさん
2024/06/27(木) 12:27:57.71ID:OTNDZ+yC403デフォルトの名無しさん
2024/06/27(木) 12:45:47.11ID:VTKaeii9404デフォルトの名無しさん
2024/06/27(木) 12:53:21.92ID:TDzAch9x405デフォルトの名無しさん
2024/06/27(木) 13:06:53.73ID:VTKaeii9 それをスタックが縮むと表現してるのか
意味は分かった
意味は分かった
406デフォルトの名無しさん
2024/06/27(木) 13:24:58.99ID:veLj9zg3 スタックてのは関数が何段か終了して縮んだあと、また伸び直して前の伸びを上書きしちゃうでしょって話
とにかく「移動」というのが新しくて、代入の移動はわかったけど
関数呼び出しの引数も移動です、返り値も移動ですってのがどういう実装に落とされるのかまだわかってない
とにかく「移動」というのが新しくて、代入の移動はわかったけど
関数呼び出しの引数も移動です、返り値も移動ですってのがどういう実装に落とされるのかまだわかってない
407デフォルトの名無しさん
2024/06/27(木) 13:49:01.55ID:AKJ8/1zo 低レイヤで起こってることは C と変わらん。
寿命の矛盾がないか静的な検査がクソ強いってだけだ。
寿命の矛盾がないか静的な検査がクソ強いってだけだ。
408デフォルトの名無しさん
2024/06/27(木) 15:56:45.17ID:AKJ8/1zo スタックを伸ばすだの縮めるだのいうのはメモリのとある番地に実際のメモリを割り当てたり切り離したりすること。
スタックが足りなくなってきたら連続するアドレスのところに実メモリを割り当てるのがスタックを伸ばすってこと。
普通の使い方をしていたらスタック領域を縮めることはあんまりない。
スタックがあるところまで伸びたということはもう一度そこまで伸びる可能性が高いので回収してまた割り当ててをするよりは割り当てっぱなしにしたほうが良いという設計思想になってるので全体のメモリが足りている限りスタックが浅いところまで戻ってきても実メモリを回収しないという のが現代的な OS。
逆に言えば全体のメモリが足りなくなってきたら回収することもあるんだけど。
素人感覚だとメモリをなるべく空くようにするのが「メモリの無駄を防ぐ」という意識の人がいるんだけど、存在するメモリが使われないままになってるほうがもったいないんだ。
それとたとえば Linux だとスタックの大きさは 8MB が上限というのがデフォ。
これは OS 側の設定なのでアプリケーション側では (OS の設定をいじる権限がない限りは) どうにもできない。
8MB ってめちゃくちゃ少ないように感じるかもしれないけどだいたいこんなもんで足りちゃうんだよ。
スタックが足りなくなってきたら連続するアドレスのところに実メモリを割り当てるのがスタックを伸ばすってこと。
普通の使い方をしていたらスタック領域を縮めることはあんまりない。
スタックがあるところまで伸びたということはもう一度そこまで伸びる可能性が高いので回収してまた割り当ててをするよりは割り当てっぱなしにしたほうが良いという設計思想になってるので全体のメモリが足りている限りスタックが浅いところまで戻ってきても実メモリを回収しないという のが現代的な OS。
逆に言えば全体のメモリが足りなくなってきたら回収することもあるんだけど。
素人感覚だとメモリをなるべく空くようにするのが「メモリの無駄を防ぐ」という意識の人がいるんだけど、存在するメモリが使われないままになってるほうがもったいないんだ。
それとたとえば Linux だとスタックの大きさは 8MB が上限というのがデフォ。
これは OS 側の設定なのでアプリケーション側では (OS の設定をいじる権限がない限りは) どうにもできない。
8MB ってめちゃくちゃ少ないように感じるかもしれないけどだいたいこんなもんで足りちゃうんだよ。
409デフォルトの名無しさん
2024/06/27(木) 16:39:29.50ID:EaS5WQGi >>406の書いてる「縮む」はVecで言うところのcapacityじゃなくてlenっぽくない?
ムーブとの関連がよくわからんけど
ムーブとの関連がよくわからんけど
410デフォルトの名無しさん
2024/06/27(木) 17:46:10.67ID:6+Lg0PcZ >>407
ですな
ですな
411デフォルトの名無しさん
2024/06/27(木) 17:59:42.80ID:AKJ8/1zo 低レイヤのメモリの取り扱いモデルが確立している高級言語が C/C++ くらいしかなくて、 LLVM も汎用的なフレームワークのふりして思ったほど自由ではないので Rust の言語仕様が LLVM の都合に、 C/C++ の都合に引っ張られているところはまあまあある。
412デフォルトの名無しさん
2024/06/27(木) 18:20:02.76ID:veLj9zg3 つまりC++同様、ポインタの糖衣構文としての参照?
413デフォルトの名無しさん
2024/06/27(木) 18:50:13.20ID:veLj9zg3 あ、なるほど
&mutみたいに*mutって書けば実体を扱えるわけか
&mutみたいに*mutって書けば実体を扱えるわけか
414デフォルトの名無しさん
2024/06/27(木) 18:56:27.59ID:RLHdjniL いつものことながら妙なこと書く人はだいたいThe Book(本物)を読んでないよな
415デフォルトの名無しさん
2024/06/27(木) 19:07:01.79ID:inDwmtnT そんなの読むような真面目な人間は5chに来ない
416デフォルトの名無しさん
2024/06/27(木) 20:08:52.27ID:AKJ8/1zo >>412
まあ機械語レベルの低レイヤまでいけば参照もポインタも同じっちゃおなじだけど、構文糖だという認識は明確に誤りだ。
参照がポインタの構文糖なんて書いてあるデタラメ本で C++ を学んだのなら C++ の理解も全然できてないと思う。
または書いてないことを脳内で作り出すタイプのやつは誤った方向に邁進してどうにもならなくなったところで質問したりするから言ってることが意味不明になりやすい。
仮に(あくまでも仮にだが!)言ってる理屈自体が正しかったとしてもちゃんとした用語でいってくれないと伝わらないし、ちゃんとした用語は(一次資料に基づいた)ちゃんとした資料で学ばないと身に付かん。
まあ機械語レベルの低レイヤまでいけば参照もポインタも同じっちゃおなじだけど、構文糖だという認識は明確に誤りだ。
参照がポインタの構文糖なんて書いてあるデタラメ本で C++ を学んだのなら C++ の理解も全然できてないと思う。
または書いてないことを脳内で作り出すタイプのやつは誤った方向に邁進してどうにもならなくなったところで質問したりするから言ってることが意味不明になりやすい。
仮に(あくまでも仮にだが!)言ってる理屈自体が正しかったとしてもちゃんとした用語でいってくれないと伝わらないし、ちゃんとした用語は(一次資料に基づいた)ちゃんとした資料で学ばないと身に付かん。
417デフォルトの名無しさん
2024/06/27(木) 22:40:30.91ID:TDzAch9x >>406
そのmoveについてもmoveというRust上の概念の理解のみがRustを学習&利用していく上で必要となるよ
moveによる生成コードがどのようになるかは最適化の方法の変更や進化で変わり得る話だから確定することはできず、学ぶこともできない
こんな場合に現在はたまたまこんな生成コードになっていることだけは実験などでわかるけど今後の保証はない、としか言えない
だからmoveはmoveとして理解することが唯一の正解でしょう
そのmoveについてもmoveというRust上の概念の理解のみがRustを学習&利用していく上で必要となるよ
moveによる生成コードがどのようになるかは最適化の方法の変更や進化で変わり得る話だから確定することはできず、学ぶこともできない
こんな場合に現在はたまたまこんな生成コードになっていることだけは実験などでわかるけど今後の保証はない、としか言えない
だからmoveはmoveとして理解することが唯一の正解でしょう
418デフォルトの名無しさん
2024/06/27(木) 22:43:00.49ID:QXPbo1LF どうせChatGPTの回答を使い回してるだけだろ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… ★5 [BFU★]
- 【インバウンド】中国からの“渡航自粛”…ツアー1000人分の直前キャンセル「キャンセル料は免除してくれ」 ことしいっぱいキャンセルに [1ゲットロボ★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 【芸能】日中関係悪化でエンタメ業界に大ダメージ… JO1の中国でのイベント中止、邦画は公開延期、STARTOアイドルへの影響も [冬月記者★]
- 「国民の憤りを引き起こした」中国側“高市首相発言の撤回改めて要求” [どどん★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- 【悲報】SANA、発言撤回拒否 [769931615]
- カルピスみたいに水で薄めるジュースでおすすめ他にない?
- 米シンクタンク「アメリカは台湾問題で"あいまい戦略"を取っている。高市早苗はこの方針から逸脱している」 [603416639]
- 岡田克也「軽々しく存立危機事態とか言うべきじゃない」高市早苗「台湾で武力攻撃が発生したらどう考えても日本の存立危機事態」 [931948549]
- ジャーナリストがテレビで解説「台湾問題は高市総理から言ったのではなく、立憲民主が日本の対応可能能力を暴こうとしたから」 [359572271]
- 俺性格悪いなって思った瞬間あげてけ
