公式
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 part13
https://mevius.5ch.net/test/read.cgi/tech/1636247099/
探検
Rust part14
レス数が950を超えています。1000を超えると書き込みができなくなります。
2022/02/12(土) 01:24:16.59ID:XYE+Rws6
895デフォルトの名無しさん
2022/05/09(月) 12:41:02.29ID:RFFIBNHv896デフォルトの名無しさん
2022/05/09(月) 12:53:11.04ID:3SVLm32h >>894
経験の違いじゃない?
関心事の分離を意識できないのは使い捨て感覚ででしかコードを書いたことのないからだと思う
組織で開発してたり長く維持する製品コードを書いた経験があればトイプログラムでも関数の責務くらいは意識して書くから
経験の違いじゃない?
関心事の分離を意識できないのは使い捨て感覚ででしかコードを書いたことのないからだと思う
組織で開発してたり長く維持する製品コードを書いた経験があればトイプログラムでも関数の責務くらいは意識して書くから
897デフォルトの名無しさん
2022/05/09(月) 13:06:31.44ID:STAXlYzV フィボナッチ数列イテレータでも同じだろう
fn fibonacci<T>() -> impl Iterator<Item=T>
where T: Clone + TryFrom<usize> + num::CheckedAdd,
{
let [zero, one] = [0, 1].map(|n| T::try_from(n).ok().unwrap());
itertools::unfold((zero, one), |(m, n)|
m.checked_add(&*n).map(|f| {
*m = n.clone();
*n = f.clone();
f
})
)
}
pub fn main() {
for f in fibonacci::<i8>() {
print!("{f} ");
}
println!();
}
fn fibonacci<T>() -> impl Iterator<Item=T>
where T: Clone + TryFrom<usize> + num::CheckedAdd,
{
let [zero, one] = [0, 1].map(|n| T::try_from(n).ok().unwrap());
itertools::unfold((zero, one), |(m, n)|
m.checked_add(&*n).map(|f| {
*m = n.clone();
*n = f.clone();
f
})
)
}
pub fn main() {
for f in fibonacci::<i8>() {
print!("{f} ");
}
println!();
}
898デフォルトの名無しさん
2022/05/09(月) 13:21:30.58ID:De+3ZLPp checked_add否定派のコードも見てみたい
899デフォルトの名無しさん
2022/05/09(月) 13:55:40.18ID:sju3VQR2 フィボナッチとFizzBuzzを同一視する時点でw
900デフォルトの名無しさん
2022/05/09(月) 14:10:19.70ID:MTI9nqyj FizzBuzzの判定処理には Checked は不要
Overflowしないような列挙をするイテレータを実装する Checked が必要
という話だが、 >>817 でこういうイテレータの機能が突然持ち込まれたせいで、みんなが混乱したんやぞ
Overflowしないような列挙をするイテレータを実装する Checked が必要
という話だが、 >>817 でこういうイテレータの機能が突然持ち込まれたせいで、みんなが混乱したんやぞ
901デフォルトの名無しさん
2022/05/09(月) 14:13:22.16ID:MTI9nqyj >Overflowしないような列挙をするイテレータを実装する Checked が必要
「なら」が抜けてた
Overflowしないような列挙をするイテレータを実装するなら Checked が必要
「なら」が抜けてた
Overflowしないような列挙をするイテレータを実装するなら Checked が必要
902デフォルトの名無しさん
2022/05/09(月) 14:16:50.30ID:RuBW4GpF903デフォルトの名無しさん
2022/05/09(月) 15:21:48.58ID:I70tWBjJ FizzBuzzイテレータw
さすが複製おじさんww
さすが複製おじさんww
904デフォルトの名無しさん
2022/05/09(月) 15:30:51.28ID:hb8CmHC4905デフォルトの名無しさん
2022/05/09(月) 15:47:05.40ID:N8sW3Nlf906デフォルトの名無しさん
2022/05/09(月) 15:48:28.09ID:ffvBu05T プリミティブの整数型なら>>824みたいに0..=<T>::MAXでもいいし、
ジェネリックにやりたいなら0..=<T as num::Bounded>::max_value()もある
つーか自分が唯一の正解みたいなこと平気で言うそういうとこやぞ
ジェネリックにやりたいなら0..=<T as num::Bounded>::max_value()もある
つーか自分が唯一の正解みたいなこと平気で言うそういうとこやぞ
907デフォルトの名無しさん
2022/05/09(月) 15:54:04.25ID:RFFIBNHv908デフォルトの名無しさん
2022/05/09(月) 15:58:11.58ID:V0LgyFVt909デフォルトの名無しさん
2022/05/09(月) 16:07:00.72ID:wP4eYPzF 脊髄反射しすぎww
こりゃ真性だな
こりゃ真性だな
910デフォルトの名無しさん
2022/05/09(月) 16:12:12.41ID:oybkhcFw イテレータを返したいならイテレータアダプタとして実装すればいいだけ
FizzBuzzはイテレータのソースにすべきものじゃない
FizzBuzzはイテレータのソースにすべきものじゃない
911デフォルトの名無しさん
2022/05/09(月) 16:30:09.21ID:q8j6bWVf >>906
checked_addの代わりにMAXやmax_valueを使うのは良くないです
checked_addは足し算の時に自動的に発生するオーバーフローを利用するため比較演算が発生しませんが
MAXやmax_valueはその値と比較する演算が余分に発生します
checked_addを使いましょう
checked_addの代わりにMAXやmax_valueを使うのは良くないです
checked_addは足し算の時に自動的に発生するオーバーフローを利用するため比較演算が発生しませんが
MAXやmax_valueはその値と比較する演算が余分に発生します
checked_addを使いましょう
912デフォルトの名無しさん
2022/05/09(月) 17:00:00.27ID:Tvnmu5cO913デフォルトの名無しさん
2022/05/09(月) 17:08:18.20ID:x0QbKG1+ 簡単に差分やマージできる環境と5chスレを比べても無意味じゃないか
914デフォルトの名無しさん
2022/05/09(月) 17:21:09.62ID:gqoBOKwR チーム開発をやっててもオレオレエンジニアっているからね
マウンティング・強弁・逆ギレはメンタリティの問題でもある
「オレが書いたコード、すごいだろ!」
https://xtech.nikkei.com/atcl/nxt/column/18/00205/032300028/
マウンティング・強弁・逆ギレはメンタリティの問題でもある
「オレが書いたコード、すごいだろ!」
https://xtech.nikkei.com/atcl/nxt/column/18/00205/032300028/
915デフォルトの名無しさん
2022/05/09(月) 18:06:15.99ID:i/5F6ceJ >>911
何を言っとるんじゃい
外から渡せばいいじゃんって話をしてるのわかってる?
fizzbuzzは100からのカウントダウンでやったって別にいいんだぞ
traitやenum使う前に関数の入出力考えなよ
何を言っとるんじゃい
外から渡せばいいじゃんって話をしてるのわかってる?
fizzbuzzは100からのカウントダウンでやったって別にいいんだぞ
traitやenum使う前に関数の入出力考えなよ
916デフォルトの名無しさん
2022/05/09(月) 18:09:52.19ID:MTI9nqyj 普通に考えたらこんなイテレータはstd::ops::Rangeとかで十分だし、しかもより高機能だから、自分で実装しなくていいよな
イテレータの勉強をしてるならともかくとして
イテレータの勉強をしてるならともかくとして
917デフォルトの名無しさん
2022/05/09(月) 18:29:52.00ID:V9K9H/9P >>906
その<T as num::Bounded>::max_value()も一つの手であるが意外に致命的な欠陥がある
例えばBigIntなどの最大値がない型に対してBounded traitを実装できない
そして実際にBigIntではimplされていないため使えない
一方で<T as num::CheckedAdd>::checked_add()も同種の問題が起きないのか、だが
例えば最大値が存在しないBigIntでもCheckedAddはimplされている
オーバーフローが発生しないためNoneを返す必要がなく常にSomeを返す形となっている
つまり自分で作った型の場合であってもCheckedAddならば柔軟に対応できる
したがってRustで無限となりうる数列を扱う時はCheckedAddを使用することが好ましい
その<T as num::Bounded>::max_value()も一つの手であるが意外に致命的な欠陥がある
例えばBigIntなどの最大値がない型に対してBounded traitを実装できない
そして実際にBigIntではimplされていないため使えない
一方で<T as num::CheckedAdd>::checked_add()も同種の問題が起きないのか、だが
例えば最大値が存在しないBigIntでもCheckedAddはimplされている
オーバーフローが発生しないためNoneを返す必要がなく常にSomeを返す形となっている
つまり自分で作った型の場合であってもCheckedAddならば柔軟に対応できる
したがってRustで無限となりうる数列を扱う時はCheckedAddを使用することが好ましい
918デフォルトの名無しさん
2022/05/09(月) 18:41:12.79ID:oo5VwkGP impl FizzBuzz for T
vs
impl FizzBuzz for u8, u16, ...
の話だと思ってたんだが話が発散しすぎ
vs
impl FizzBuzz for u8, u16, ...
の話だと思ってたんだが話が発散しすぎ
919デフォルトの名無しさん
2022/05/09(月) 18:50:22.63ID:rGYbsi5m920デフォルトの名無しさん
2022/05/09(月) 18:57:03.49ID:SK/0Snjx >>917
0からの列挙を型だけから導出できないといけない理由は何なのさ
0からの列挙を型だけから導出できないといけない理由は何なのさ
921デフォルトの名無しさん
2022/05/09(月) 19:14:23.35ID:bdsCRHoE >>920
各型には上限値(とその有無)がありメモリサイズとトレードオフだからそこは気を使うよ
Rustではrelease modeだとC/C++と全く同じでオーバーフローしてもpanicは発生せずに数値がラップしうる
例えばi32で2147483647に1を足すと普通の足し算の+つまりadd()だと結果は-2147483648となる
これは数値計算だけでなく単なるカウンター利用に至るまで深刻な結果を招きうる
そのため足し算ならばchecked_add()等を必要に応じて使い分けることになる
各型には上限値(とその有無)がありメモリサイズとトレードオフだからそこは気を使うよ
Rustではrelease modeだとC/C++と全く同じでオーバーフローしてもpanicは発生せずに数値がラップしうる
例えばi32で2147483647に1を足すと普通の足し算の+つまりadd()だと結果は-2147483648となる
これは数値計算だけでなく単なるカウンター利用に至るまで深刻な結果を招きうる
そのため足し算ならばchecked_add()等を必要に応じて使い分けることになる
922デフォルトの名無しさん
2022/05/09(月) 19:36:35.23ID:oo5VwkGP >>919
impl Foo for T where クソ長制約
vs
impl Foo for 具体的な型
という話なら多少興味もってもらえるだろうか
impl Foo for T は基本的に避けるべきだと思う
impl Foo for T where クソ長制約
vs
impl Foo for 具体的な型
という話なら多少興味もってもらえるだろうか
impl Foo for T は基本的に避けるべきだと思う
923デフォルトの名無しさん
2022/05/09(月) 19:43:08.06ID:K1S8Sh/L924デフォルトの名無しさん
2022/05/09(月) 19:44:30.54ID:RFFIBNHv >>918
> impl FizzBuzz for u8, u16, ...
これもう構文として取り込んだらいいのにな
impl_fizzbuzz(u8, u16, ...)
こういうのを書く文化をいっそ言語の構文に格上げして
> impl FizzBuzz for u8, u16, ...
これもう構文として取り込んだらいいのにな
impl_fizzbuzz(u8, u16, ...)
こういうのを書く文化をいっそ言語の構文に格上げして
925デフォルトの名無しさん
2022/05/09(月) 19:48:38.14ID:oo5VwkGP >>923
impl Foo for T where 制約多数って例えばどのtraitの実装?
impl Foo for T where 制約多数って例えばどのtraitの実装?
926デフォルトの名無しさん
2022/05/09(月) 19:48:56.84ID:iweuyBja >>924
そういう型別impl列挙は主に基本的なTraitにおいて行われており
それらを組み合わせてTrait境界とする上位のTraitでは列挙せずfor Tで済むようにRustは上手く設計されている
そういう型別impl列挙は主に基本的なTraitにおいて行われており
それらを組み合わせてTrait境界とする上位のTraitでは列挙せずfor Tで済むようにRustは上手く設計されている
927デフォルトの名無しさん
2022/05/09(月) 19:52:40.17ID:ffvBu05T928デフォルトの名無しさん
2022/05/09(月) 19:58:12.86ID:oo5VwkGP929デフォルトの名無しさん
2022/05/09(月) 20:00:16.74ID:j+WTVljZ930デフォルトの名無しさん
2022/05/09(月) 20:31:38.58ID:RYNyetIG931デフォルトの名無しさん
2022/05/09(月) 20:32:13.36ID:oo5VwkGP932924
2022/05/09(月) 20:43:01.63ID:RFFIBNHv933デフォルトの名無しさん
2022/05/09(月) 20:49:32.72ID:R+ViF9HF >>931
その>>800のコードは特に問題が無いのではないか
強いて言えばその後に出たいくつかの改善案を反映して
impl<T> FizzBuzz for T
where T: Clone + PartialEq + TryFrom<usize> + Rem<Output=T>
{
fn fizzbuzz(&self) -> FizzBuzzResult<&Self> {
let [zero, three, five] = [0, 3, 5]
.map(|n| T::try_from(n).ok().unwrap());
match (self.clone() % three == zero.clone(), self.clone() % five == zero) {
(true, true) => FizzBuzzResult::FizzBuzz,
(true, _) => FizzBuzzResult::Fizz,
(_, true) => FizzBuzzResult::Buzz,
_ => FizzBuzzResult::Num(self),
}
}
}
こんな感じ?
その>>800のコードは特に問題が無いのではないか
強いて言えばその後に出たいくつかの改善案を反映して
impl<T> FizzBuzz for T
where T: Clone + PartialEq + TryFrom<usize> + Rem<Output=T>
{
fn fizzbuzz(&self) -> FizzBuzzResult<&Self> {
let [zero, three, five] = [0, 3, 5]
.map(|n| T::try_from(n).ok().unwrap());
match (self.clone() % three == zero.clone(), self.clone() % five == zero) {
(true, true) => FizzBuzzResult::FizzBuzz,
(true, _) => FizzBuzzResult::Fizz,
(_, true) => FizzBuzzResult::Buzz,
_ => FizzBuzzResult::Num(self),
}
}
}
こんな感じ?
934デフォルトの名無しさん
2022/05/09(月) 21:07:24.73ID:gjyfU0iO935デフォルトの名無しさん
2022/05/09(月) 21:41:03.35ID:uQhYdklw936デフォルトの名無しさん
2022/05/09(月) 21:43:33.82ID:oo5VwkGP937デフォルトの名無しさん
2022/05/09(月) 21:56:18.26ID:ZNGx1nYk >>936
確かにextension traitは有りだな
確かにextension traitは有りだな
938デフォルトの名無しさん
2022/05/09(月) 21:56:24.70ID:ffvBu05T impl<T> _ for T where T: ... 形式のことを blanket implementation って言うんですね
cargo doc で型のページの下の方に出てくるのは知ってたけど、正確な定義は今知った
cargo doc で型のページの下の方に出てくるのは知ってたけど、正確な定義は今知った
939デフォルトの名無しさん
2022/05/09(月) 22:01:11.13ID:jqMNiSw9940デフォルトの名無しさん
2022/05/09(月) 22:24:12.66ID:GKuKBH4Y941デフォルトの名無しさん
2022/05/09(月) 22:53:43.92ID:noDNFQnc942デフォルトの名無しさん
2022/05/09(月) 23:21:10.68ID:ffvBu05T そもそもメソッド増やす必要ありましたか?
仮に方法だけ質問されたとしても、「やめとけ」と答えるのも回答のひとつですよ
仮に方法だけ質問されたとしても、「やめとけ」と答えるのも回答のひとつですよ
943デフォルトの名無しさん
2022/05/09(月) 23:26:29.65ID:IBrSpCMK な、複オジ相手にしても時間の無駄だっただろ?
いい加減学習しようぜ
いい加減学習しようぜ
944デフォルトの名無しさん
2022/05/09(月) 23:40:12.42ID:4G0/iQxJ >>942
メソッドを増やすべき状況は多々あります
既に出ているイテレータメソッド等もその一例です
そして今回のFizzBuzzはあくまでも例ということですからFizzBuzz自体をメソッドにするべきか否かの議論はどうでもよく無意味でしょう
メソッド化を実現できること自体の方が本質にみえます
メソッドを増やすべき状況は多々あります
既に出ているイテレータメソッド等もその一例です
そして今回のFizzBuzzはあくまでも例ということですからFizzBuzz自体をメソッドにするべきか否かの議論はどうでもよく無意味でしょう
メソッド化を実現できること自体の方が本質にみえます
945デフォルトの名無しさん
2022/05/09(月) 23:41:19.52ID:9vSL2/iz946デフォルトの名無しさん
2022/05/09(月) 23:47:14.99ID:21Qt89Lm947デフォルトの名無しさん
2022/05/09(月) 23:52:57.66ID:ffvBu05T948デフォルトの名無しさん
2022/05/10(火) 00:00:07.69ID:3tjOFjrS949デフォルトの名無しさん
2022/05/10(火) 00:04:04.72ID:V9U21P0r950デフォルトの名無しさん
2022/05/10(火) 09:21:54.99ID:9RlKKK9H ひっさつ!おなにーうんこーど!
951デフォルトの名無しさん
2022/05/10(火) 10:42:23.22ID:jQGJqYED 避けるべきというアンチパターンが出来ている時点で欠陥言語、 where T: Fooなどと書けるがRustは決してシンプルじゃない
952デフォルトの名無しさん
2022/05/10(火) 10:47:34.92ID:7R870FiC Rustの目標はシステムプログラミング言語だから、C/C++に比べてマシならおーけー
953デフォルトの名無しさん
2022/05/10(火) 10:53:36.95ID:ETeJkA4C954デフォルトの名無しさん
2022/05/10(火) 10:55:50.02ID:qByQ4KTB ,―彡 ⌒ ミ―、
〈 〈| ´ん` |〉 〉
\ ヽ _ / /
/ /みんなで
/ /ホモセックス
〈 〈| ´ん` |〉 〉
\ ヽ _ / /
/ /みんなで
/ /ホモセックス
955デフォルトの名無しさん
2022/05/10(火) 11:02:38.08ID:6N2xTn/Z 反対!君とうんこ!君は代案コードを出さない(出せない)から無視しとけ
956デフォルトの名無しさん
2022/05/10(火) 11:45:10.69ID:iVsr+a7z >>948
あーなんか既視感あるとおもったら菅話法だw
あーなんか既視感あるとおもったら菅話法だw
957デフォルトの名無しさん
2022/05/10(火) 12:14:01.31ID:RgJQNmsQ >>933
Rustはそうやってシンプルに安全に多型に対応できるところがいいよな
Rustはそうやってシンプルに安全に多型に対応できるところがいいよな
958デフォルトの名無しさん
2022/05/10(火) 14:24:04.29ID:TvKAUNEE >>945
なるほどこれがオナニー指向の思考回路か
なるほどこれがオナニー指向の思考回路か
959デフォルトの名無しさん
2022/05/10(火) 14:30:38.85ID:KWXviVB8 C言語でプログラミング入門した口だけどRustみたいな関数型言語わからなくて困ってる
例えばOCamlみたいな型推論前提で書かれているコードはどの変数がなんの型になるのかわからなくてつらい思いしている
関数型言語のプログラマはみんな自分で型を推論しながらプログラミングしてるんですか?
例えばOCamlみたいな型推論前提で書かれているコードはどの変数がなんの型になるのかわからなくてつらい思いしている
関数型言語のプログラマはみんな自分で型を推論しながらプログラミングしてるんですか?
960デフォルトの名無しさん
2022/05/10(火) 15:01:20.61ID:ZwDW7+At961デフォルトの名無しさん
2022/05/10(火) 15:32:07.15ID:7R870FiC 基本的にはIDEに型を教えてもらってたけど、慣れてくると自分でどんどん型がわかるようになる
962デフォルトの名無しさん
2022/05/10(火) 15:58:41.10ID:OJk0iRnN >>959
VSCode+rust-analyzerなら変数の型やメソッドチェーンの途中の型が全部出るよ
VSCode+rust-analyzerなら変数の型やメソッドチェーンの途中の型が全部出るよ
963はちみつ餃子 ◆8X2XSCHEME
2022/05/10(火) 16:07:49.23ID:dIEMLhL7964デフォルトの名無しさん
2022/05/10(火) 18:09:35.29ID:KWXviVB8 >>960,962,963
ほーんなるほど
今ocaml勉強しているんだけど
if式のthen節とelse節の式の型は両方一致するとか、
match式においてもすべての分岐の式の型は一致するといかいったことを把握していってるわ
それ取っ掛かりにして関数全体の型把握するようにしたい
あと分岐の片方でラムダ抽象置いて束縛変数導入したらばもう一方の分岐ではconst関数に第一引数適用したの置いて分岐全体の型を合わせるとかいうテクニックとかも他人のソースから学んだンゴ
でも他の言語に比べてocamlのソースはなかなか転がっていない印象を受けるんごねえ
あとSKIコンビネータとかの型も式から推測するのもややこしくて難しいンゴねえ
ほーんなるほど
今ocaml勉強しているんだけど
if式のthen節とelse節の式の型は両方一致するとか、
match式においてもすべての分岐の式の型は一致するといかいったことを把握していってるわ
それ取っ掛かりにして関数全体の型把握するようにしたい
あと分岐の片方でラムダ抽象置いて束縛変数導入したらばもう一方の分岐ではconst関数に第一引数適用したの置いて分岐全体の型を合わせるとかいうテクニックとかも他人のソースから学んだンゴ
でも他の言語に比べてocamlのソースはなかなか転がっていない印象を受けるんごねえ
あとSKIコンビネータとかの型も式から推測するのもややこしくて難しいンゴねえ
965デフォルトの名無しさん
2022/05/10(火) 20:54:08.50ID:ZAF82L15 rust-analyzerっていえばさ
俺のVSCodeをYoutuberのと見比べると、構文間違えなどのアンダーラインが出現・消滅するタイミングが違うんだよね
Youtuberらのがリアルタイムで線が引かれているのに対して、俺のは保存しないと線が引かれたり消えたりしない・・・・しかも、俺の手元ではMacでもWindowsでも一緒の症状・・・・
誰かエスパーさんいたら解決策を教えて!!!
俺のVSCodeをYoutuberのと見比べると、構文間違えなどのアンダーラインが出現・消滅するタイミングが違うんだよね
Youtuberらのがリアルタイムで線が引かれているのに対して、俺のは保存しないと線が引かれたり消えたりしない・・・・しかも、俺の手元ではMacでもWindowsでも一緒の症状・・・・
誰かエスパーさんいたら解決策を教えて!!!
966デフォルトの名無しさん
2022/05/10(火) 22:51:55.81ID:2aw0oc++ >>959
Rustは関数型言語じゃないぞ
Rustは関数型言語じゃないぞ
967デフォルトの名無しさん
2022/05/11(水) 14:05:19.94ID:QVbHbIIW968デフォルトの名無しさん
2022/05/11(水) 14:18:05.95ID:7mn972qD ヤバすぎでしょ
969デフォルトの名無しさん
2022/05/11(水) 14:38:17.66ID:kRR32IfD Rustの弱い所を突かれたね
970デフォルトの名無しさん
2022/05/11(水) 15:16:16.22ID:+W7Cltp9971デフォルトの名無しさん
2022/05/11(水) 16:13:08.26ID:BEPAU2f/ >>965
自動セーブにする必要があるとかじゃないの?
自動セーブにする必要があるとかじゃないの?
972デフォルトの名無しさん
2022/05/11(水) 16:47:09.56ID:0dtIdeQi >>967
審査無しでユーザーが好きに登録できるパッケージマネージャにはよくありがちなことだな
パスワードが盗まれて正当なパッケージが置き換えられたわけじゃないからまだまし
Firefoxの拡張の中には第三者が権利を正当な形で引き継いだその後の更新でマルウェア化しているものがあるって報告があるくらいだし
審査無しでユーザーが好きに登録できるパッケージマネージャにはよくありがちなことだな
パスワードが盗まれて正当なパッケージが置き換えられたわけじゃないからまだまし
Firefoxの拡張の中には第三者が権利を正当な形で引き継いだその後の更新でマルウェア化しているものがあるって報告があるくらいだし
973デフォルトの名無しさん
2022/05/11(水) 21:53:53.62ID:8FoK4X2I Rustで書くと依存crateが100オーバーになるのも珍しくないから
アプリ開発者がリリース単位で常時全部チェックするのは手間がかかりすぎる
全チェックじゃなければcargo crevとかで閾値決めとくとかしかないよね
アプリ開発者がリリース単位で常時全部チェックするのは手間がかかりすぎる
全チェックじゃなければcargo crevとかで閾値決めとくとかしかないよね
974デフォルトの名無しさん
2022/05/11(水) 21:55:30.33ID:GLo3VMpI >>972
マルウェアというよりアクセス履歴を収集するようになったってやつでしょ
マルウェアというよりアクセス履歴を収集するようになったってやつでしょ
975デフォルトの名無しさん
2022/05/12(木) 03:17:07.69ID:NSKWr9J3 >>824
ホントだ
127の次でpanicした
(1_i8..).for_each(|n| print!("{n} "));
release modeではpanicではなく127の次が-128になって永久循環
ホントだ
127の次でpanicした
(1_i8..).for_each(|n| print!("{n} "));
release modeではpanicではなく127の次が-128になって永久循環
976デフォルトの名無しさん
2022/05/12(木) 07:30:29.11ID:mtqXpgib 適当に作れば溢れる前に止まる
fn countup<T>(start: T) -> impl Iterator<Item=T>
where T: Clone + TryFrom<usize> + num::CheckedAdd,
{
let one = T::try_from(1).ok().unwrap();
itertools::unfold((start, true), move |(n, is_first)| {
if *is_first {
*is_first = false;
Some(n.clone())
} else {
n.checked_add(&one)
.map(|new| {
*n = new.clone();
new
})
}
})
}
fn main() {
countup(1_i8).for_each(|n| print!("{n} "));
}
fn countup<T>(start: T) -> impl Iterator<Item=T>
where T: Clone + TryFrom<usize> + num::CheckedAdd,
{
let one = T::try_from(1).ok().unwrap();
itertools::unfold((start, true), move |(n, is_first)| {
if *is_first {
*is_first = false;
Some(n.clone())
} else {
n.checked_add(&one)
.map(|new| {
*n = new.clone();
new
})
}
})
}
fn main() {
countup(1_i8).for_each(|n| print!("{n} "));
}
977デフォルトの名無しさん
2022/05/12(木) 12:42:02.07ID:1TtHCqII978デフォルトの名無しさん
2022/05/12(木) 13:14:32.88ID:NwXtRBWx979デフォルトの名無しさん
2022/05/12(木) 14:13:04.15ID:gDKYWhkK >>976は悪いお手本が盛り沢山
真似しちゃダメだぞ
真似しちゃダメだぞ
980デフォルトの名無しさん
2022/05/12(木) 14:58:33.47ID:cuIcFT6k Rangeをpanicしないように扱う方法ないの?
CheckedRangeみたいなやつとか
CheckedRangeみたいなやつとか
981デフォルトの名無しさん
2022/05/12(木) 15:09:03.82ID:GA/DPWpW >>979
どのへんが問題?
どのへんが問題?
982デフォルトの名無しさん
2022/05/12(木) 15:48:05.20ID:mdPskXmt >>978
じゃcharでやってみたら?
じゃcharでやってみたら?
983デフォルトの名無しさん
2022/05/12(木) 15:51:11.85ID:DUB7tBF0984デフォルトの名無しさん
2022/05/12(木) 16:26:15.18ID:nCP6t6gv >>982
もっと厳しそうなStringで>>976をやってみた
Zの個数で数を表すZ
#[derive(Debug,Clone)]
struct Z(String);
impl std::fmt::Display for Z {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "{}", self.0)
}
}
impl From<usize> for Z {
fn from(n: usize) -> Self {
Z("Z".repeat(n))
}
}
impl std::ops::Add for Z {
type Output = Self;
fn add(self, rhs: Self) -> Self {
Z(self.0.clone() + &(rhs.0))
}
}
impl num::CheckedAdd for Z {
fn checked_add(&self, rhs: &Self) -> Option<Self> {
Some(Z(self.0.clone() + &(rhs.0)))
}
}
fn main() {
countup(Z::from(1)).for_each(|n| println!("{n}"));
}
ちゃんと動作してZの数が増えて行くんだな
もっと厳しそうなStringで>>976をやってみた
Zの個数で数を表すZ
#[derive(Debug,Clone)]
struct Z(String);
impl std::fmt::Display for Z {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "{}", self.0)
}
}
impl From<usize> for Z {
fn from(n: usize) -> Self {
Z("Z".repeat(n))
}
}
impl std::ops::Add for Z {
type Output = Self;
fn add(self, rhs: Self) -> Self {
Z(self.0.clone() + &(rhs.0))
}
}
impl num::CheckedAdd for Z {
fn checked_add(&self, rhs: &Self) -> Option<Self> {
Some(Z(self.0.clone() + &(rhs.0)))
}
}
fn main() {
countup(Z::from(1)).for_each(|n| println!("{n}"));
}
ちゃんと動作してZの数が増えて行くんだな
985デフォルトの名無しさん
2022/05/12(木) 16:52:07.33ID:+mjBHcs3 >>984
それは独自の型であってStringではないよ
上限までイテレートするのに上限が無い型を実装して何がしたいのかわからないが
countup(Z::from(usize::MAX))とかで確認した?
それは独自の型であってStringではないよ
上限までイテレートするのに上限が無い型を実装して何がしたいのかわからないが
countup(Z::from(usize::MAX))とかで確認した?
986デフォルトの名無しさん
2022/05/12(木) 16:58:46.77ID:lxDeZNmy987デフォルトの名無しさん
2022/05/12(木) 17:11:29.21ID:qNZB+StZ988デフォルトの名無しさん
2022/05/12(木) 17:20:14.27ID:MHUEjPJH989デフォルトの名無しさん
2022/05/12(木) 17:27:09.04ID:x3l/UcP6990デフォルトの名無しさん
2022/05/12(木) 17:46:52.13ID:yYN31ZGU >>976
上限のある型を作ってトレイト境界を満たしてやるとちゃんと上限で止まるんだな
#[derive(Debug,Clone)]
struct FiveBits(usize);
impl FiveBits {
fn make(n: usize) -> Option<FiveBits> {
(n >> 5 == 0).then(|| FiveBits(n))
}
}
impl TryFrom<usize> for FiveBits {
type Error = &'static str;
fn try_from(n: usize) -> Result<Self, Self::Error> {
FiveBits::make(n).ok_or("overflow")
}
}
impl std::ops::Add for FiveBits {
type Output = Self;
fn add(self, rhs: Self) -> Self {
FiveBits::make(self.0 + rhs.0).unwrap()
}
}
impl num::CheckedAdd for FiveBits {
fn checked_add(&self, rhs: &Self) -> Option<Self> {
FiveBits::make(self.0 + rhs.0)
}
}
impl std::fmt::Display for FiveBits {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "{}", self.0)
}
}
上限のある型を作ってトレイト境界を満たしてやるとちゃんと上限で止まるんだな
#[derive(Debug,Clone)]
struct FiveBits(usize);
impl FiveBits {
fn make(n: usize) -> Option<FiveBits> {
(n >> 5 == 0).then(|| FiveBits(n))
}
}
impl TryFrom<usize> for FiveBits {
type Error = &'static str;
fn try_from(n: usize) -> Result<Self, Self::Error> {
FiveBits::make(n).ok_or("overflow")
}
}
impl std::ops::Add for FiveBits {
type Output = Self;
fn add(self, rhs: Self) -> Self {
FiveBits::make(self.0 + rhs.0).unwrap()
}
}
impl num::CheckedAdd for FiveBits {
fn checked_add(&self, rhs: &Self) -> Option<Self> {
FiveBits::make(self.0 + rhs.0)
}
}
impl std::fmt::Display for FiveBits {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "{}", self.0)
}
}
991デフォルトの名無しさん
2022/05/12(木) 17:51:39.83ID:9RFeMFB6992デフォルトの名無しさん
2022/05/12(木) 17:57:40.16ID:W5nxdksy993デフォルトの名無しさん
2022/05/12(木) 18:12:51.67ID:evRfTR7c >>789
> fn fizzbuzz(&self) -> FizzBuzzResult<&Self> {
その関数を使わせてもらってイテレータにしようと思ったら
参照を返しているために非Copy型に対して上手くいかなくて手詰まってしまった
> fn fizzbuzz(&self) -> FizzBuzzResult<&Self> {
その関数を使わせてもらってイテレータにしようと思ったら
参照を返しているために非Copy型に対して上手くいかなくて手詰まってしまった
994デフォルトの名無しさん
2022/05/12(木) 18:18:34.21ID:dV7c/A+s まーた汚部屋になってきたなー
レス数が950を超えています。1000を超えると書き込みができなくなります。
ニュース
- 首相官邸前で「戦争あおるな」 台湾有事巡る答弁に抗議 [蚤の市★]
- 高市首相告白「『なめられない服』を選ぶことに数時間を費やしました」「外交交渉でマウント取れる服、買わなくてはいかんかもなぁ」 [ぐれ★]
- 【赤坂ライブハウス刺傷】逃走していた自衛官の男(43)を殺人未遂の疑いで逮捕 警視庁 被害女性とは知人関係 [Ailuropoda melanoleuca★]
- 【千葉】コンビニに尿入りペットボトル並べた疑い、26歳男「むしゃくしゃして」…購入した客が飲もうとしたところ臭いに違和感 [ぐれ★]
- 『DOWNTOWN+』会員数50万人突破で見えてきた 松本人志の“月収4ケタ万円”驚愕収入 [阿弥陀ヶ峰★]
- トランプ氏、27日までに和平合意要求 ゼレンスキー氏「尊厳か米国か」 [蚤の市★]
- 天ぷら食いたい
- 勇者の母「ん……ふっ、起きなさいっ……私のっ……私のかわいい坊やっ、今日は貴方が……んはっ……勇者として旅立つ日……うふふ」
- 夜勤だけど最近昼間かクソガキが外でうるさい
- 大塚芳忠のASMR
- 東京てこんな女ばっかいるの?
- ペヤング超大盛り完食出来そうもない
