公式
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の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 part12
https://mevius.5ch.net/test/read.cgi/tech/1629813327/
探検
Rust part13
■ このスレッドは過去ログ倉庫に格納されています
2021/11/07(日) 10:04:59.35ID:pJhT3MIE
350デフォルトの名無しさん
2021/12/23(木) 00:23:38.98ID:p+r9sE2/351デフォルトの名無しさん
2021/12/23(木) 07:21:11.33ID:esNMmzKz >>348
そりゃあcratesio に上がったものは空っぽでもゴミでも全部公認だわなw
そりゃあcratesio に上がったものは空っぽでもゴミでも全部公認だわなw
352デフォルトの名無しさん
2021/12/23(木) 15:17:54.33ID:BEeWZFks >>342
逆だ、コードは常に「正解」で動いていて「間違い」ない。
あんたの書いたバグもコンピューターにとっては一部の隙もなく正解であり、書かれたその通りに動き、無慈悲である。
同じ目的で、多数、あるいは二人の人が書いたコードで違いが出るのは「表現の違い」であり「間違い」と決めつける
のは人間の主観や嗜好でしかなく、仮にコードへ正誤を求めるなら明確に表現できていなればならず、矛盾が生じる
逆だ、コードは常に「正解」で動いていて「間違い」ない。
あんたの書いたバグもコンピューターにとっては一部の隙もなく正解であり、書かれたその通りに動き、無慈悲である。
同じ目的で、多数、あるいは二人の人が書いたコードで違いが出るのは「表現の違い」であり「間違い」と決めつける
のは人間の主観や嗜好でしかなく、仮にコードへ正誤を求めるなら明確に表現できていなればならず、矛盾が生じる
353デフォルトの名無しさん
2021/12/23(木) 15:32:21.87ID:GoKXBRn5 コンパイルが通らないコードも正解なのかい?
354デフォルトの名無しさん
2021/12/23(木) 15:39:30.16ID:9VjYa60R えらいポエミーやな
355デフォルトの名無しさん
2021/12/23(木) 18:55:13.24ID:TD851Muu ”動いていて”と言っているからコンパイルは通ってる前提だろう、”コードへ正誤を求める”といっているから
仮にコンパイルが通らないコードは明確にそれ(誤り・間違い)が表現できている
ポエミーなのはその通りだろう
仮にコンパイルが通らないコードは明確にそれ(誤り・間違い)が表現できている
ポエミーなのはその通りだろう
356デフォルトの名無しさん
2021/12/23(木) 21:22:53.78ID:NwYcCv97 >>349
Boxとはヒープを使うということです
Rustではコードで明示的に指定しない限り勝手にヒープが使われることはないです
(もちろんBox以外にもVecやStringなどヒープを使うものを使ってもそれは明示的に指定したことになります)
その Box<Fn(i32) -> i32> は今は Box<dyn Fn(i32) -> i32> と書く必要があります
では本題の impl Fn(i32) -> i32 と書いた場合はどうなるのでしょうか?
以下のように3種類のクロージャを作ってサイズや型を表示させてみると
fn main() {
let direct_closure = |x: i32| x + 1;
let impl_closure = make_impl_closure();
let box_closure = make_box_closure();
println!("{} {}", std::mem::size_of_val(&direct_closure), type_of(&direct_closure));
println!("{} {}", std::mem::size_of_val(&impl_closure), type_of(&impl_closure));
println!("{} {}", std::mem::size_of_val(&box_closure), type_of(&box_closure));
}
fn make_impl_closure() -> impl Fn(i32) -> i32 {
|x| x + 1
}
fn make_box_closure() -> Box<dyn Fn(i32) -> i32> {
Box::new(|x| x + 1)
}
fn type_of<T>(_: &T) -> &'static str {
std::any::type_name::<T>()
}
実行結果は以下のように表示されます
0 tmp::main::{{closure}}
0 tmp::make_impl_closure::{{closure}}
16 alloc::boxed::Box<dyn core::ops::function::Fn<(i32,)>+Output = i32>
つまりimplでは直接クロージャ指定したのと全く同じです
(上記では定義した関数名だけが異なる)
Boxとはヒープを使うということです
Rustではコードで明示的に指定しない限り勝手にヒープが使われることはないです
(もちろんBox以外にもVecやStringなどヒープを使うものを使ってもそれは明示的に指定したことになります)
その Box<Fn(i32) -> i32> は今は Box<dyn Fn(i32) -> i32> と書く必要があります
では本題の impl Fn(i32) -> i32 と書いた場合はどうなるのでしょうか?
以下のように3種類のクロージャを作ってサイズや型を表示させてみると
fn main() {
let direct_closure = |x: i32| x + 1;
let impl_closure = make_impl_closure();
let box_closure = make_box_closure();
println!("{} {}", std::mem::size_of_val(&direct_closure), type_of(&direct_closure));
println!("{} {}", std::mem::size_of_val(&impl_closure), type_of(&impl_closure));
println!("{} {}", std::mem::size_of_val(&box_closure), type_of(&box_closure));
}
fn make_impl_closure() -> impl Fn(i32) -> i32 {
|x| x + 1
}
fn make_box_closure() -> Box<dyn Fn(i32) -> i32> {
Box::new(|x| x + 1)
}
fn type_of<T>(_: &T) -> &'static str {
std::any::type_name::<T>()
}
実行結果は以下のように表示されます
0 tmp::main::{{closure}}
0 tmp::make_impl_closure::{{closure}}
16 alloc::boxed::Box<dyn core::ops::function::Fn<(i32,)>+Output = i32>
つまりimplでは直接クロージャ指定したのと全く同じです
(上記では定義した関数名だけが異なる)
357デフォルトの名無しさん
2021/12/23(木) 21:33:09.04ID:soQwByyI 今日はポエマー多いなw
358デフォルトの名無しさん
2021/12/23(木) 22:34:57.88ID:NwYcCv97 では常に impl を使えばよいのかというと
以下のような条件によって異なるクロージャを返す時
ここで Box を使わず impl Fn(i32) -> i32 にしようとすると
2つのクロージャの型が違うとコンパイラに怒られます
fn make_closure(curry: Option<i32>) -> Box<dyn Fn(i32) -> i32> {
if let Some(curry) = curry {
Box::new(move |x| x + curry)
} else {
Box::new(|x| x + 1)
}
}
結局クロージャでない場合と同じ話で
同じトレイトでも型が異なるものが同居する時にBox化します
>>349のRust bookの例はBox化が不要なケースでBox化だから混乱しますね
以下のような条件によって異なるクロージャを返す時
ここで Box を使わず impl Fn(i32) -> i32 にしようとすると
2つのクロージャの型が違うとコンパイラに怒られます
fn make_closure(curry: Option<i32>) -> Box<dyn Fn(i32) -> i32> {
if let Some(curry) = curry {
Box::new(move |x| x + curry)
} else {
Box::new(|x| x + 1)
}
}
結局クロージャでない場合と同じ話で
同じトレイトでも型が異なるものが同居する時にBox化します
>>349のRust bookの例はBox化が不要なケースでBox化だから混乱しますね
359デフォルトの名無しさん
2021/12/24(金) 11:53:17.86ID:8qqh3vKr コンパイル通ってれば全て正解とかバカ丸出し。
厳密な定義でも使えない定義があるってことすら理解してなさそう。
厳密な定義でも使えない定義があるってことすら理解してなさそう。
360デフォルトの名無しさん
2021/12/24(金) 12:05:46.49ID:0hdsBqvb 型安全だったらコンパイル通れば実行時エラーにならないという点で全て正解っていうのは別に間違ってないと思うけど?
これにケチつけるのは流石にどうかと
これにケチつけるのは流石にどうかと
361デフォルトの名無しさん
2021/12/24(金) 12:44:01.96ID:2tHLRFeD バカ丸出しにお前バカだろとわざわさ言うのもバカなんじゃなかろうか
362デフォルトの名無しさん
2021/12/24(金) 15:42:15.21ID:8qqh3vKr >>360
実行時エラーにならないなんて最低限のところだっつーの。だからバカだっていうんだよ。
実行時エラーにならないなんて最低限のところだっつーの。だからバカだっていうんだよ。
363デフォルトの名無しさん
2021/12/24(金) 16:05:46.66ID:GD01KKAb もしかしてrustはlinuxに取り込まれるわけねーだろって言い張っていた人?
予言外していたよね。お疲れ様です。
予言外していたよね。お疲れ様です。
364デフォルトの名無しさん
2021/12/24(金) 16:08:19.93ID:7q1GmIfa365デフォルトの名無しさん
2021/12/24(金) 16:10:39.10ID:GD01KKAb なんか草
366デフォルトの名無しさん
2021/12/24(金) 16:20:12.59ID:GD01KKAb 25 デフォルトの名無しさん sage 2021/04/27(火) 08:00:23.09 ID:/+bIFNU8
>>23
あのね。。書けばそうなるってものじゃなくてそれを実装しなきゃならんのよ。。
コンパイラにそういったコンテクストを判断させるのがめちゃくちゃ難しいっていってるでしょ?
なんでそんなに読み取れないの?
27 デフォルトの名無しさん sage 2021/04/27(火) 16:10:45.63 ID:/+bIFNU8
>>26
だからそのコードじゃpanic捉えきれねーからカーネルに入れるわけねーだろって
言ってんじゃん。。何読んでんだよ。
28 デフォルトの名無しさん sage 2021/04/27(火) 18:23:48.67 ID:n/AWrch2
まあ半年後どうなるかで誰が正しかったかは分かるわな
29 デフォルトの名無しさん sage 2021/04/27(火) 20:32:29.92 ID:/+bIFNU8
半年も経たなくてももうわかってるっつーの。。だからちゃんと英語の勉強しましょうね。
完全に同一人物だよね
>>23
あのね。。書けばそうなるってものじゃなくてそれを実装しなきゃならんのよ。。
コンパイラにそういったコンテクストを判断させるのがめちゃくちゃ難しいっていってるでしょ?
なんでそんなに読み取れないの?
27 デフォルトの名無しさん sage 2021/04/27(火) 16:10:45.63 ID:/+bIFNU8
>>26
だからそのコードじゃpanic捉えきれねーからカーネルに入れるわけねーだろって
言ってんじゃん。。何読んでんだよ。
28 デフォルトの名無しさん sage 2021/04/27(火) 18:23:48.67 ID:n/AWrch2
まあ半年後どうなるかで誰が正しかったかは分かるわな
29 デフォルトの名無しさん sage 2021/04/27(火) 20:32:29.92 ID:/+bIFNU8
半年も経たなくてももうわかってるっつーの。。だからちゃんと英語の勉強しましょうね。
完全に同一人物だよね
367デフォルトの名無しさん
2021/12/24(金) 16:26:02.78ID:GD01KKAb368デフォルトの名無しさん
2021/12/24(金) 16:31:02.04ID:GD01KKAb 予想が完全に外れたID:8qqh3vKrを晒し上げ♪♪♪
ここまで簡単な予想を外すとかバカ過ぎて生きていけなさそうwww
馬鹿丸出しですねwwwwww
ここまで簡単な予想を外すとかバカ過ぎて生きていけなさそうwww
馬鹿丸出しですねwwwwww
369デフォルトの名無しさん
2021/12/24(金) 16:40:31.03ID:8qqh3vKr 素でバカなんだな。。もうコンパイル通ったんで俺の仕事終わりとか現場で言ってろよ。。話にもならん。
370デフォルトの名無しさん
2021/12/24(金) 16:42:14.31ID:/xk3NPni371デフォルトの名無しさん
2021/12/24(金) 16:45:16.93ID:/xk3NPni372デフォルトの名無しさん
2021/12/24(金) 16:46:19.44ID:/xk3NPni >>369
同一人物だってことはバレバレだっつーの。バカ丸出し。wwwwwwwwww
同一人物だってことはバレバレだっつーの。バカ丸出し。wwwwwwwwww
373デフォルトの名無しさん
2021/12/24(金) 17:12:05.04ID:jmk0MHfo どうでもええわRustの話しろ
374デフォルトの名無しさん
2021/12/24(金) 17:38:56.03ID:8qNIErj3 厳密な定義でも使えない定義?Rustに特定条件下でCのような未定義になる動作あったっけ?
375デフォルトの名無しさん
2021/12/24(金) 18:41:11.93ID:759ZBatD スレの文脈はしらんけど、
Rustではunsafeを使ってなければコンパイラが、未定義動作が起きないということや、データ競合がないことを保証をしてくれるよ
Rustではunsafeを使ってなければコンパイラが、未定義動作が起きないということや、データ競合がないことを保証をしてくれるよ
376デフォルトの名無しさん
2021/12/24(金) 19:10:24.57ID:/xk3NPni >>369
予言外れましたよね?wwwwwwww
予言外れましたよね?wwwwwwww
377デフォルトの名無しさん
2021/12/25(土) 15:28:33.08ID:lsYj53Mi Rustでフロントエンドしてる奴おる?
378デフォルトの名無しさん
2021/12/26(日) 12:56:45.57ID:NwCcamJz Rustの勉強を昨日から開始した。後は構造体とかかな。
379デフォルトの名無しさん
2021/12/26(日) 17:26:13.09ID:rNqv+UWs コード貼ったら糞だボケだゴミだと自称上級者に罵倒されるから注意しろ
380デフォルトの名無しさん
2021/12/26(日) 19:27:36.42ID:IL2U4vJU Rustはこう謳っている
>なぜRustか?
>パフォーマンス
>信頼性
>生産性
真っ向から反するコードを貼ってりゃゴミ・クソ言われて当然なんだよなぁ
>なぜRustか?
>パフォーマンス
>信頼性
>生産性
真っ向から反するコードを貼ってりゃゴミ・クソ言われて当然なんだよなぁ
381デフォルトの名無しさん
2021/12/26(日) 19:29:23.79ID:Haex5ds9 すまんが、配列に入った数値の平均ってパッと出せないもんなの?
他言語でふにゃふにゃになった俺の頭でコードを書いたら、桁の溢れとか精度とか酷えことになりそう・・・・
他言語でふにゃふにゃになった俺の頭でコードを書いたら、桁の溢れとか精度とか酷えことになりそう・・・・
382デフォルトの名無しさん
2021/12/26(日) 20:24:04.94ID:s+fXV5dW コードもゴミだったがそれ以上に考え方がゴミだったからな
383デフォルトの名無しさん
2021/12/26(日) 20:42:21.32ID:M+F+5/6j384デフォルトの名無しさん
2021/12/26(日) 22:30:25.75ID:L9HJqboW >>381
普通に平均を求めるだけではダメなのでしょうか?
fn main() {
assert_eq!(5.5, (1..=10).average());
assert_eq!(6.8, [2.3, 8.7, 9.4].average());
}
use num::ToPrimitive;
trait Average {
fn average(self) -> f64;
}
impl<I> Average for I
where I: IntoIterator, <I as IntoIterator>::Item: ToPrimitive,
{
fn average(self: I) -> f64 {
self.into_iter().fold((0.0, 1.0), |(ave, size), n| (ave + (n.to_f64().unwrap() - ave) / size, size + 1.0)).0
}
}
普通に平均を求めるだけではダメなのでしょうか?
fn main() {
assert_eq!(5.5, (1..=10).average());
assert_eq!(6.8, [2.3, 8.7, 9.4].average());
}
use num::ToPrimitive;
trait Average {
fn average(self) -> f64;
}
impl<I> Average for I
where I: IntoIterator, <I as IntoIterator>::Item: ToPrimitive,
{
fn average(self: I) -> f64 {
self.into_iter().fold((0.0, 1.0), |(ave, size), n| (ave + (n.to_f64().unwrap() - ave) / size, size + 1.0)).0
}
}
385デフォルトの名無しさん
2021/12/27(月) 00:09:24.17ID:wxukv015 カハンの加算アルゴリズムというのがある
386デフォルトの名無しさん
2021/12/27(月) 09:11:03.63ID:9DXmjbrK 汚コードキタ━!
387デフォルトの名無しさん
2021/12/27(月) 10:50:10.93ID:BFpPIAiX 何でもトレイト化するアホ
388デフォルトの名無しさん
2021/12/27(月) 12:29:15.17ID:PxL7gTAR ゴミをゴミだといって何が悪い!
389デフォルトの名無しさん
2021/12/27(月) 12:32:52.22ID:OyINMfYQ ここの人たちってplaygroundとかなんで完全に動かせるコードで提示しないんだろ・・・?
アドバイス貰うにも回答するにも一生懸命スペース全角置換したり、まじ両方キモイw
trait Averagewwwww
アドバイス貰うにも回答するにも一生懸命スペース全角置換したり、まじ両方キモイw
trait Averagewwwww
390デフォルトの名無しさん
2021/12/27(月) 13:09:28.61ID:PX/mZ8bI こう言う時って普通の関数にしちゃいかんの?
391デフォルトの名無しさん
2021/12/27(月) 14:19:38.18ID:Btn3kp2t 普通の関数にすべきかどうかはメソッドチェーンにしたいかどうかで判断すればよろしい
392デフォルトの名無しさん
2021/12/27(月) 14:43:10.42ID:0vghZEjd393デフォルトの名無しさん
2021/12/27(月) 15:03:42.29ID:6JVZDUUj394デフォルトの名無しさん
2021/12/27(月) 21:04:27.03ID:K3JIQJJi しょうがない、一応は専門家が書いているであろう他言語の実装を参考にしよう・・・・
https://source.dot.net/#System.Linq/System/Linq/Average.cs,2b4701af991d5425
俺様、信頼して使っていたメソッドの衝撃の事実を知る
https://source.dot.net/#System.Linq/System/Linq/Average.cs,2b4701af991d5425
俺様、信頼して使っていたメソッドの衝撃の事実を知る
395デフォルトの名無しさん
2021/12/27(月) 21:09:19.15ID:h+0xE8z4 浮動小数点型ならそういう素直な実装で十分だよ
396デフォルトの名無しさん
2021/12/27(月) 21:53:06.04ID:N7w3YVE+ >>384
それだと桁溢れは防止できているが誤差蓄積の対処ができていない
もう一つパラメタを増やしてこうしたほうがいい
fn average(self: I) -> f64 {
self.into_iter().fold((0.0, 1.0, 0.0), |(ave, size, fix), n| {
let diff = (n.to_f64().unwrap() - ave) / size - fix;
let new_ave = ave + diff;
(new_ave, size + 1.0, (new_ave - ave) - diff)
}).0
}
>>387
イテレータメソッド化するにはそのためのtrait宣言が必須
もしわからないならitertoolsなどのイテレータ拡張ライブラリを見よう
>>389
標準ライブラリのsum()がtrait Sumを使っているからtrait Averageでもまあいいとは思う
ただし今回はイテレータメソッド拡張のみに用いているようだからtrait IteratorExtなどの命名がわかりやすいとは思う
それだと桁溢れは防止できているが誤差蓄積の対処ができていない
もう一つパラメタを増やしてこうしたほうがいい
fn average(self: I) -> f64 {
self.into_iter().fold((0.0, 1.0, 0.0), |(ave, size, fix), n| {
let diff = (n.to_f64().unwrap() - ave) / size - fix;
let new_ave = ave + diff;
(new_ave, size + 1.0, (new_ave - ave) - diff)
}).0
}
>>387
イテレータメソッド化するにはそのためのtrait宣言が必須
もしわからないならitertoolsなどのイテレータ拡張ライブラリを見よう
>>389
標準ライブラリのsum()がtrait Sumを使っているからtrait Averageでもまあいいとは思う
ただし今回はイテレータメソッド拡張のみに用いているようだからtrait IteratorExtなどの命名がわかりやすいとは思う
397デフォルトの名無しさん
2021/12/27(月) 21:56:50.25ID:20E7BwbM IteratorExt大草原、まじに入院してほしいw
398デフォルトの名無しさん
2021/12/27(月) 22:01:57.73ID:6/3kWl6D イテレータメソッドにする必要ある?
399デフォルトの名無しさん
2021/12/27(月) 22:15:24.91ID:N7w3YVE+ >>398
標準ライブラリにおいてsum()やproduct()
それを一般化したfold()やreduce()
さらにmax()やmin()など当然イテレータメソッドになっている
むしろ今回のaverage()だけをイテレータメソッドにしない理由が見当たらない
標準ライブラリにおいてsum()やproduct()
それを一般化したfold()やreduce()
さらにmax()やmin()など当然イテレータメソッドになっている
むしろ今回のaverage()だけをイテレータメソッドにしない理由が見当たらない
400デフォルトの名無しさん
2021/12/27(月) 22:20:18.56ID:6/3kWl6D >>399
じゃあなんで標準ライブラリにないの?
じゃあなんで標準ライブラリにないの?
401デフォルトの名無しさん
2021/12/27(月) 22:25:16.01ID:h+0xE8z4 カハンの加算使ったのか
402デフォルトの名無しさん
2021/12/27(月) 22:31:56.63ID:/o/Y1bP3 >>400
入力型と出力型で大量の組み合わせ(例:i32→f32)が用途に応じて要求されるのと
単純に合計をサイズで割った平均でよい用途もあれば
件数が多いと合計がオーバーフローするからその対策が欲しい用途もあれば
桁が大きく異なるデータ列の場合に浮動小数点の誤差改善が欲しい用途など多岐にわたる
だから平均を標準ライブラリで何か一つ用意は無理
入力型と出力型で大量の組み合わせ(例:i32→f32)が用途に応じて要求されるのと
単純に合計をサイズで割った平均でよい用途もあれば
件数が多いと合計がオーバーフローするからその対策が欲しい用途もあれば
桁が大きく異なるデータ列の場合に浮動小数点の誤差改善が欲しい用途など多岐にわたる
だから平均を標準ライブラリで何か一つ用意は無理
403デフォルトの名無しさん
2021/12/27(月) 22:51:58.74ID:Btn3kp2t 単にこれまで標準ライブラリに入れようとした人がいなかったか
そういう人はいたが必要性を説得できなかっただけでしょう
sumやproductに比べるとユースケース限られるしね
そういう人はいたが必要性を説得できなかっただけでしょう
sumやproductに比べるとユースケース限られるしね
404デフォルトの名無しさん
2021/12/27(月) 23:21:10.48ID:iNGO9QKv "ave"のせいで頭に入ってこない
405デフォルトの名無しさん
2021/12/28(火) 00:10:56.21ID:THzUMFur 「件数が多いと合計がオーバーフローするからその対策が欲しい用途」そんな考えがオカシイ
sumですらオーバーフローに言及しているだけで対策が欲しいから、だからstdじゃないという理由では無い
https://doc.rust-lang.org/std/iter/trait.Iterator.html#panics-3
When calling sum() and a primitive integer type is being returned, this method will panic if the computation overflows and debug assertions are enabled.
必要性を説得出来ないだけというのが正しい。浮動小数の加減算による誤差蓄積だって、浮動小数を扱うなら当然起こることだが
誤差改善が欲しい用途があるからstdじゃないとか嘘ばっかり言わないで?おまえさ、迷惑だからRust辞めてくれよ?
最小限、分かったふりで糞まき散らすな?
sumですらオーバーフローに言及しているだけで対策が欲しいから、だからstdじゃないという理由では無い
https://doc.rust-lang.org/std/iter/trait.Iterator.html#panics-3
When calling sum() and a primitive integer type is being returned, this method will panic if the computation overflows and debug assertions are enabled.
必要性を説得出来ないだけというのが正しい。浮動小数の加減算による誤差蓄積だって、浮動小数を扱うなら当然起こることだが
誤差改善が欲しい用途があるからstdじゃないとか嘘ばっかり言わないで?おまえさ、迷惑だからRust辞めてくれよ?
最小限、分かったふりで糞まき散らすな?
406デフォルトの名無しさん
2021/12/28(火) 00:45:10.69ID:vzPVHyZI407デフォルトの名無しさん
2021/12/28(火) 00:52:41.14ID:We8KhoPF408デフォルトの名無しさん
2021/12/28(火) 01:20:29.34ID:vzPVHyZI409デフォルトの名無しさん
2021/12/28(火) 01:57:17.15ID:We8KhoPF410デフォルトの名無しさん
2021/12/28(火) 02:00:22.76ID:We8KhoPF411デフォルトの名無しさん
2021/12/28(火) 02:37:31.31ID:vzPVHyZI 多数あり外部で十分派なのでそこは興味ない
sortは2種類しかなく2種類とも標準ライブラリでサポートしている
sortは2種類しかなく2種類とも標準ライブラリでサポートしている
412デフォルトの名無しさん
2021/12/28(火) 09:30:51.41ID:y5zg5Cpt >>411
じゃ一番メジャーな外部ライブラリを教えてよ
じゃ一番メジャーな外部ライブラリを教えてよ
413デフォルトの名無しさん
2021/12/28(火) 10:24:44.25ID:ZpntEDp9 外部で十分と言えば、cratesは先着順で名前取れるからこの先優良ライブラリ程クソみたいな名前になっていくよね
414デフォルトの名無しさん
2021/12/28(火) 10:41:12.74ID:zga8SsrA415デフォルトの名無しさん
2021/12/28(火) 11:15:50.74ID:ZpntEDp9 ライブラリの永続性を保つのに名前でマッチさせるのやめてUUIDかハッシュか何かでマッチさせれば良かったのにみたいな気持ちはある
416デフォルトの名無しさん
2021/12/28(火) 11:32:06.72ID:HJMjm+0C >>414
横から失礼。
個人的にはそもそもcrate.io に頼るのがあまり好きでないなと。
Rust に限らない話だけど、こういった中央集権的なリポジトリを用意すること自体が名前争奪戦の元になるのではないかなと。
それぞれのWEBサイトで勝手に配布すればいいのにってね。
バージョン管理方法の方法論なんかも関わるから簡単な事ではないんだろうけど。
横から失礼。
個人的にはそもそもcrate.io に頼るのがあまり好きでないなと。
Rust に限らない話だけど、こういった中央集権的なリポジトリを用意すること自体が名前争奪戦の元になるのではないかなと。
それぞれのWEBサイトで勝手に配布すればいいのにってね。
バージョン管理方法の方法論なんかも関わるから簡単な事ではないんだろうけど。
417デフォルトの名無しさん
2021/12/28(火) 11:35:30.26ID:QBGkL4gv 現状でもGitHubから直接落としてくることも出来るけど、GotHubのリポジトリは消せてしまうからな
418デフォルトの名無しさん
2021/12/28(火) 13:40:51.12ID:XD/wAJcN cargo updateでマイナーバージョンアップやらせるのも規約決めたり工夫ご必要だし
専用のリポジトリ用意する方がわかりやすくはあるような
crates.io以外にも複数のリポジトリを混在して使えるようにできれば良いのかな
専用のリポジトリ用意する方がわかりやすくはあるような
crates.io以外にも複数のリポジトリを混在して使えるようにできれば良いのかな
419デフォルトの名無しさん
2021/12/28(火) 14:10:43.98ID:Qs/YVt0a cargoはどこからでも落とせる
crates.ioなみに安全性、信頼性、永続性が確保できるんなら好きにすればいい
crates.ioなみに安全性、信頼性、永続性が確保できるんなら好きにすればいい
420デフォルトの名無しさん
2021/12/28(火) 14:45:21.34ID:ZpntEDp9 永続性を謳うサービスで名前で管理したらそりゃあいい名前の取り合いになるよなあ
421デフォルトの名無しさん
2021/12/28(火) 14:48:37.23ID:XD/wAJcN422デフォルトの名無しさん
2021/12/28(火) 15:16:22.59ID:c9bIiubz GoみたいにGithubがデファクトスタンダードなレジストリになっても一覧性の面で不便だし、crates.ioでいいと思うけどなあ
423デフォルトの名無しさん
2021/12/28(火) 21:31:42.32ID:VUBOa1a1 セキュリティ監査付きのcrates.ioクローンが欲しい
424デフォルトの名無しさん
2021/12/28(火) 21:33:45.43ID:m5VlhgmG average()が気になってcratesだかcargoだか話逸らしに聞こえる
425デフォルトの名無しさん
2021/12/28(火) 22:07:01.63ID:a7HoB6QX ぼぼぼ、ぼくちんのために誰か優秀なaverage()をおながいします
426デフォルトの名無しさん
2021/12/28(火) 22:22:38.58ID:ndrZKvgW >>423
cargo auditでは足りない?
cargo auditでは足りない?
427デフォルトの名無しさん
2022/01/01(土) 09:34:17.63ID:f7mn356m428デフォルトの名無しさん
2022/01/01(土) 19:34:25.31ID:u2SyaqDt Why is my Rust build so slow?
429デフォルトの名無しさん
2022/01/01(土) 20:01:31.38ID:YfLqYQwV Because your PC is poor spec.
430デフォルトの名無しさん
2022/01/01(土) 23:44:42.88ID:193tzZ58 https://fasterthanli.me/articles/why-is-my-rust-build-so-slow
この人の場合クソデカ型のせいでコンパイルが遅かったという話
この人の場合クソデカ型のせいでコンパイルが遅かったという話
431デフォルトの名無しさん
2022/01/02(日) 10:42:43.84ID:adsjh4PJ warpがクソみたいに重いって書いてるな
432デフォルトの名無しさん
2022/01/02(日) 11:21:24.79ID:ulXuEZX0 sccacheとか入れてみるか
433デフォルトの名無しさん
2022/01/02(日) 13:52:17.06ID:o9R7ffl7 当日お急ぎ便でSSDを買った
434デフォルトの名無しさん
2022/01/02(日) 14:41:20.14ID:N3sGBcjr >>432
bin crateのビルドに時間かかるなら sccache は効果薄いのでは
bin crateのビルドに時間かかるなら sccache は効果薄いのでは
435デフォルトの名無しさん
2022/01/02(日) 14:53:21.62ID:3FXnOBLq 高度IT人材、富士通は最大年収3500万円へ
「富士通年収3500万!」日本のIT企業の年収も、高額化してきました
AI人材の獲得に超本気 NECが新人事制度を9人に適用、富士通は最大年収3500万円へ
【年収3500万円も】富士通、「ジョブ型」人事制度を導入 幹部社員から 高度IT人材
来年度から副業解禁 人材多様化へ―大同生命次期社長
第一生命HD、副業解禁 約1万5000人対象
第一生命HD、副業解禁 1万5000人対象―大手生保初
IHI、国内8000人の副業解禁 重厚長大企業も転機
IHI、社外兼業を解禁 社内副業もルール化
「富士通年収3500万!」日本のIT企業の年収も、高額化してきました
AI人材の獲得に超本気 NECが新人事制度を9人に適用、富士通は最大年収3500万円へ
【年収3500万円も】富士通、「ジョブ型」人事制度を導入 幹部社員から 高度IT人材
来年度から副業解禁 人材多様化へ―大同生命次期社長
第一生命HD、副業解禁 約1万5000人対象
第一生命HD、副業解禁 1万5000人対象―大手生保初
IHI、国内8000人の副業解禁 重厚長大企業も転機
IHI、社外兼業を解禁 社内副業もルール化
436デフォルトの名無しさん
2022/01/02(日) 21:56:13.39ID:Uu3cvt4h 効率を求め過ぎてモノリシックになりすぎると様々なコストが上昇してしまう
そこで分割
さらに内部もcrate分割で並行コンパイル
そこで分割
さらに内部もcrate分割で並行コンパイル
437デフォルトの名無しさん
2022/01/04(火) 02:27:09.98ID:L+p8nbVX Rustでノードが追加されたり消されたりする双方向グラフ扱いたくなったらどうするんだろ
Arenaじゃ追加削除してるうちにゴミがメモリ圧迫していくし
Arenaじゃ追加削除してるうちにゴミがメモリ圧迫していくし
438デフォルトの名無しさん
2022/01/04(火) 09:43:25.00ID:aGnbM+4r >>437
Cursor使う
Arenaの場合はfree list用意して削除済み要素を再利用すればよい
Arenaが埋まったらreallocするのではなく同じサイズの新たなArenaを獲得していくようにすれば
不要になったArenaから解放できるからmalloc使う場合と同等のメモリ使用量に抑えられるかと
これでも不足するなら copy GC 的に compaction するしかなさそう
Cursor使う
Arenaの場合はfree list用意して削除済み要素を再利用すればよい
Arenaが埋まったらreallocするのではなく同じサイズの新たなArenaを獲得していくようにすれば
不要になったArenaから解放できるからmalloc使う場合と同等のメモリ使用量に抑えられるかと
これでも不足するなら copy GC 的に compaction するしかなさそう
439デフォルトの名無しさん
2022/01/04(火) 18:15:54.62ID:L+p8nbVX >>438
なるほど…… 結構ガッツリ実装しなきゃいけなそうね。ありがとう。最後はGCを実装することになりそうなので、それならいい感じのGCを残しておいてくれたら良かったのにって気になるな
なるほど…… 結構ガッツリ実装しなきゃいけなそうね。ありがとう。最後はGCを実装することになりそうなので、それならいい感じのGCを残しておいてくれたら良かったのにって気になるな
440デフォルトの名無しさん
2022/01/04(火) 18:22:33.23ID:L+p8nbVX Cursorってなんでしょう?
441デフォルトの名無しさん
2022/01/04(火) 19:44:07.16ID:aGnbM+4r >>440
これのこと (まだunatable)
https://doc.rust-lang.org/std/collections/linked_list/struct.CursorMut.html
これのこと (まだunatable)
https://doc.rust-lang.org/std/collections/linked_list/struct.CursorMut.html
442デフォルトの名無しさん
2022/01/04(火) 20:59:48.62ID:/2oFrrnl443デフォルトの名無しさん
2022/01/04(火) 22:15:51.15ID:aGnbM+4r >>442
GCのライブラリ使ったことある?実用的だった?
GCのライブラリ使ったことある?実用的だった?
444デフォルトの名無しさん
2022/01/04(火) 22:53:03.36ID:NZNEJALT 特殊な案件でしかGCを使うことはないため
その場合は汎用GCライブラリ利用よりも
データ構造とアロケーションとGCを密に設計する方がベターかも
その場合は汎用GCライブラリ利用よりも
データ構造とアロケーションとGCを密に設計する方がベターかも
445デフォルトの名無しさん
2022/01/05(水) 00:28:17.64ID:GzN74lxE ちゃんとしたスマートポインタを自作する時点で結構大変だから用途特化した方が確かによさそう
446デフォルトの名無しさん
2022/01/05(水) 01:03:11.75ID:o/mlVe5X グラフみたいなデータ構造を実装するだけでも、GCが必要になったりするもんなん?
447デフォルトの名無しさん
2022/01/05(水) 01:37:16.98ID:hbslRCuW >>441
ありがとうございます!
ありがとうございます!
448デフォルトの名無しさん
2022/01/05(水) 01:46:20.36ID:yOKwmyBj グラフ構造表現するだけならArenaや、少し安全にするならGenerationalArenaで事足りるかと
copy GC的なものが必要になるのは大量にノードを作成してほとんど削除、一部残存みたいな状況でfreeできないArenaが残ってしまうケース
copy GC的なものが必要になるのは大量にノードを作成してほとんど削除、一部残存みたいな状況でfreeできないArenaが残ってしまうケース
449デフォルトの名無しさん
2022/01/05(水) 04:00:13.07ID:6kre97ZR ちゃんとしたGCはないのに、参照カウントだけは標準ライブラリに入っていて循環参照には気をつけましょうねーって運用でカバーなのはなんか中途半端なものを感じる
そもそも参照カウントなんてGCとしてはかなりイケてない部類なのになんで参照カウントなんだ気持ちもある
そもそも参照カウントなんてGCとしてはかなりイケてない部類なのになんで参照カウントなんだ気持ちもある
450デフォルトの名無しさん
2022/01/05(水) 04:09:37.27ID:VoX97L81 単純にRcやArcはGCを目的としたものではないから
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 台湾有事での集団的自衛権行使に「賛成」が48.8%、「反対」が44.2% ★4 [♪♪♪★]
- 台湾有事での集団的自衛権行使に「賛成」が48.8%、「反対」が44.2% ★5 [♪♪♪★]
- 高市早苗首相、独自貫いた1カ月 会食ゼロ、議員宿舎で勉強漬け「飲んでる暇があれば、政策を練り、資料を読みたい」 [Hitzeschleier★]
- 【MLB】大谷翔平、山本由伸、佐々木朗希WBC出場辞退が確実に! トランプ大統領「ロス五輪最優先」指令 どうなる侍ジャパン [牛丼★]
- 岐阜発激安スーパー「バロー」横浜にオープン! [おっさん友の会★]
- 【英FT】国土の大部分を日本の残忍な占領下におかれたという苦しみの記憶を今なお抱え続けている中国 [1ゲットロボ★]
- 特高「反日分子の貴様が、なぜ日本を破壊している高市に反対しているんだ?反日分子なら高市支持だろ?」俺氏「ガムかむかい?」 [805596214]
- 有識者「中国からのレアアースは止められても問題ない。高市さんがアメリカから買えばいい」 [834922174]
- 高市早苗「G20サミット、なめられない服を選びました。外交交渉でマウント取れる服買わないとなぁ」大炎上★3 [165981677]
- 【んな専🏡】ルーナイトとたこ焼きパーティするのらぁ(・o・🍬)【ホロライブ▶】
- 【悲報】高市早苗内閣自民党支持率、30.7%にwwwwwwwwwwwww [339712612]
- 世界の美しい市役所と県庁舎を紹介&解説していく!!!!!!!
