Mozilla発のRust言語のスレ
公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust
Web上の実行環境
https://play.rust-lang.org
前スレ
Rust Part7
http://mevius.5ch.net/test/read.cgi/tech/1563114707/
探検
Rust part8
■ このスレッドは過去ログ倉庫に格納されています
2020/01/24(金) 11:47:52.41ID:9oO1hUHl
726デフォルトの名無しさん
2020/06/08(月) 14:58:43.87ID:KAmnJXdU 後付けやめろよ。
C++ のどういうコードを Rust でどう書けて欲しい (そして実際にはどういうエラーになる) のかちゃんと書け。
いや、書くな。 (どうせ見当違いなので。)
C++ のどういうコードを Rust でどう書けて欲しい (そして実際にはどういうエラーになる) のかちゃんと書け。
いや、書くな。 (どうせ見当違いなので。)
727デフォルトの名無しさん
2020/06/08(月) 15:03:12.27ID:LDYBA2kC >>725
#[derive(Debug)]
struct TAaa {
x: Box<i32>,
y: i32
}
fn main() {
let mut vec:Vec<TAaa> = Vec::new();
vec.push( TAaa {
x : Box::new(333),
y : 444
} );
let x = vec[0].x; // error[E0507]: cannot move out of index of `std::vec::Vec<TAaa>`
println!("{:#?}", x);
}
↑のように vec をHeapに確保した場合、エラーになる。
ところが、stackに確保した場合はエラーにならない。
実験済み。
#[derive(Debug)]
struct TAaa {
x: Box<i32>,
y: i32
}
fn main() {
let mut vec:Vec<TAaa> = Vec::new();
vec.push( TAaa {
x : Box::new(333),
y : 444
} );
let x = vec[0].x; // error[E0507]: cannot move out of index of `std::vec::Vec<TAaa>`
println!("{:#?}", x);
}
↑のように vec をHeapに確保した場合、エラーになる。
ところが、stackに確保した場合はエラーにならない。
実験済み。
728デフォルトの名無しさん
2020/06/08(月) 15:04:31.00ID:LDYBA2kC729デフォルトの名無しさん
2020/06/08(月) 15:16:36.76ID:LDYBA2kC730デフォルトの名無しさん
2020/06/08(月) 15:47:14.20ID:KAmnJXdU731デフォルトの名無しさん
2020/06/08(月) 16:43:05.54ID:LDYBA2kC >>730
>型・寿命・所有権の条件が同じならヒープかスタックかというのは関係ない。
>お前が結果的に違う条件で書いるだけ。
1.実験してみたところ、>>727でBoxをRcに変えてもエラーのままだった。
2.単純にTAaaをスタックに確保した場合、正常にコンパイルされた。
3.TAaaを以下のようにHeapに確保した場合も、正常にコンパイルされた:
fn main() {
let bbb = Box::new( TAaa {
x : Box::new(333),
y : 444
} );
println!( "bbb = {:#?}", bbb );
println!( "bbb.x = {:#?}", bbb.x );
println!( "let x = bbb.x;" );
let x = bbb.x;
println!( "x = {:#?}", x );
}
つまり、Vec<TAaa>の場合にだけエラーになる。
>型・寿命・所有権の条件が同じならヒープかスタックかというのは関係ない。
>お前が結果的に違う条件で書いるだけ。
1.実験してみたところ、>>727でBoxをRcに変えてもエラーのままだった。
2.単純にTAaaをスタックに確保した場合、正常にコンパイルされた。
3.TAaaを以下のようにHeapに確保した場合も、正常にコンパイルされた:
fn main() {
let bbb = Box::new( TAaa {
x : Box::new(333),
y : 444
} );
println!( "bbb = {:#?}", bbb );
println!( "bbb.x = {:#?}", bbb.x );
println!( "let x = bbb.x;" );
let x = bbb.x;
println!( "x = {:#?}", x );
}
つまり、Vec<TAaa>の場合にだけエラーになる。
732デフォルトの名無しさん
2020/06/08(月) 16:57:23.12ID:KAmnJXdU733デフォルトの名無しさん
2020/06/08(月) 17:21:28.18ID:LDYBA2kC734デフォルトの名無しさん
2020/06/08(月) 17:33:12.05ID:7lLHeGo6 rustじゃ書けないおじさんのコードを添削する流れ、何度目だ
735デフォルトの名無しさん
2020/06/08(月) 18:00:02.94ID:ZyH0cWN6 std::mem::take
736デフォルトの名無しさん
2020/06/08(月) 18:06:13.25ID:KAmnJXdU737デフォルトの名無しさん
2020/06/08(月) 18:15:14.24ID:OI3JiiYN ID真っ赤、お顔も真っ赤w
738デフォルトの名無しさん
2020/06/08(月) 18:20:45.97ID:KAmnJXdU >>734
ワイも初心者ではあるんよ。
The book (第二版の日本語訳の無料で読めるやつ) を読み終わって、試しに 500 行くらいのコードを書いてみたって程度。
本を読んでいる間はコードを書いてない。
手を動かすと理解しやすいという人も多いけど、
感覚でやってしまいがちで書いてある理屈をしっかり把握するのが疎かになる気がするから。
で、 The book を読めばこの程度には理解できるので理解できてないやつは単にアホという証明でもあるし、
逆に返答に詰るようなら俺がまだ入門級のことが理解できてない (どこが理解できていないか) ことがわかるので
練習の題材としてちょうどいいわという気持ちで相手してた。
ワイも初心者ではあるんよ。
The book (第二版の日本語訳の無料で読めるやつ) を読み終わって、試しに 500 行くらいのコードを書いてみたって程度。
本を読んでいる間はコードを書いてない。
手を動かすと理解しやすいという人も多いけど、
感覚でやってしまいがちで書いてある理屈をしっかり把握するのが疎かになる気がするから。
で、 The book を読めばこの程度には理解できるので理解できてないやつは単にアホという証明でもあるし、
逆に返答に詰るようなら俺がまだ入門級のことが理解できてない (どこが理解できていないか) ことがわかるので
練習の題材としてちょうどいいわという気持ちで相手してた。
739デフォルトの名無しさん
2020/06/08(月) 18:37:00.38ID:LDYBA2kC740デフォルトの名無しさん
2020/06/08(月) 21:16:08.81ID:KAmnJXdU >>739
let ref というのは直接的には The book に出てこないと思うけど、
let もパターンマッチだということはタプルの項目で示されている。
たとえば let a = &1; と書いたら a には 1 の参照が入るし、
let &a = &1; と書いたら a は (参照を経由する) 値になる。
参照にマッチするのではなく値にマッチさせた上で参照が欲しいときに使うのが
ref であるということは match の説明の中にある。
つまりこの場合に let ref x = vec[0].x; というのは
let x = &(vec[0].x); と書くのと理屈は同じ。
let ref というのは直接的には The book に出てこないと思うけど、
let もパターンマッチだということはタプルの項目で示されている。
たとえば let a = &1; と書いたら a には 1 の参照が入るし、
let &a = &1; と書いたら a は (参照を経由する) 値になる。
参照にマッチするのではなく値にマッチさせた上で参照が欲しいときに使うのが
ref であるということは match の説明の中にある。
つまりこの場合に let ref x = vec[0].x; というのは
let x = &(vec[0].x); と書くのと理屈は同じ。
741デフォルトの名無しさん
2020/06/08(月) 21:34:44.64ID:RC1s4U+D 公式で丁寧にしかも無料で公開されてる本もろくに読めないガイジたちがわらわらするスレになっちまったな
ちょっと名が知れ渡っただけでこんなことになんだから、一般的になったらとんでもないな
ちょっと名が知れ渡っただけでこんなことになんだから、一般的になったらとんでもないな
742デフォルトの名無しさん
2020/06/08(月) 22:57:09.22ID:42GeKV2i rust+wasmちょっとやってみたけど、単純な処理に記述だけが無駄に複雑になりすぎる
組み込みとかシステム系で使われそうだけど、一般的とか言う広く色々な使われ方はしないだろコレ
組み込みとかシステム系で使われそうだけど、一般的とか言う広く色々な使われ方はしないだろコレ
743デフォルトの名無しさん
2020/06/08(月) 23:32:06.17ID:RC1s4U+D JSみたいに直接DOM触れて、直接実行できるなら普及するけど、現状のめんどくささならなぁ・・・
744デフォルトの名無しさん
2020/06/09(火) 00:44:22.52ID:SETbyCsO >>740
それは分かっている。
iとjがループ内で変化したような場合、
vec[i].x
からmutableで借用した場合、
vec[j].x
からimmutableで借用できるかどうかの判定をコンパイラが一般的に行うのが難しいんだよ。
だからそのアルゴリズムを理解しているのかと聞いている。
それは分かっている。
iとjがループ内で変化したような場合、
vec[i].x
からmutableで借用した場合、
vec[j].x
からimmutableで借用できるかどうかの判定をコンパイラが一般的に行うのが難しいんだよ。
だからそのアルゴリズムを理解しているのかと聞いている。
745デフォルトの名無しさん
2020/06/09(火) 00:52:40.12ID:SETbyCsO >>744
似た例で言えば、
dst[i]をmutableで借用した場合、src[i]をimmutableで借用しようとしたときに、
srcとdstが同じアドレスに被って無いかの判定が静的には物凄く難しいと
されているので、エラーになってしまうかも知れないというようなことを心配
しているんだよ。
似た例で言えば、
dst[i]をmutableで借用した場合、src[i]をimmutableで借用しようとしたときに、
srcとdstが同じアドレスに被って無いかの判定が静的には物凄く難しいと
されているので、エラーになってしまうかも知れないというようなことを心配
しているんだよ。
746デフォルトの名無しさん
2020/06/09(火) 01:01:34.80ID:SETbyCsO >>745
もっとちゃんと書くと、
src[0]〜src[99]までに対して処理するような場合だと、src[i]をaに借用してから
f(a)、g(a)、h(a)に順番に渡して何か処理するようなことは出来ると思われるが、
ここに、dst[0]〜dst[99]も加わって、dst[j]をbにmutableで借用
しようとすると、mutableで借用した場合にimmutableでは借用できないというルールを
この場合にはコンパイラが静的には判断できなくなってコンパイル・エラーになって
しまう可能性を心配している。
つまり、コンパイルの借用チェッカは、予めよくあるパターンに対して特別な
処理を実装している場合には通るが、一般的には判断できるわけ無いので通らない
のではないかと考えられるんだよ。
もっとちゃんと書くと、
src[0]〜src[99]までに対して処理するような場合だと、src[i]をaに借用してから
f(a)、g(a)、h(a)に順番に渡して何か処理するようなことは出来ると思われるが、
ここに、dst[0]〜dst[99]も加わって、dst[j]をbにmutableで借用
しようとすると、mutableで借用した場合にimmutableでは借用できないというルールを
この場合にはコンパイラが静的には判断できなくなってコンパイル・エラーになって
しまう可能性を心配している。
つまり、コンパイルの借用チェッカは、予めよくあるパターンに対して特別な
処理を実装している場合には通るが、一般的には判断できるわけ無いので通らない
のではないかと考えられるんだよ。
747デフォルトの名無しさん
2020/06/09(火) 08:06:27.82ID:5kLCq/P0 このページに唐突にRustの話が出てくるのウケるな
https://developer.mozilla.org/en-US/docs/Learn/HTML/Introduction_to_HTML/Debugging_HTML
https://developer.mozilla.org/en-US/docs/Learn/HTML/Introduction_to_HTML/Debugging_HTML
748デフォルトの名無しさん
2020/06/09(火) 08:13:44.15ID:H8Y2HqIE let x = 5;
println!("{}", if 0 < x < 10 { "in" } else { "out" });
この比較方法ができない理由ってなんかある?例えば最適化に響く?とか
可読性も労力もこれ出来たほうがいいと思うんだけど
println!("{}", if 0 < x < 10 { "in" } else { "out" });
この比較方法ができない理由ってなんかある?例えば最適化に響く?とか
可読性も労力もこれ出来たほうがいいと思うんだけど
749デフォルトの名無しさん
2020/06/09(火) 10:15:42.01ID:DLyUUrRW 最初の比較でBoolになってんのを整数と比較してるからじぇね?
特に可読性が上がるとも思わないし、むしろ老眼で見逃す勢が出るから&&挟んだ方が見やすいな
特に可読性が上がるとも思わないし、むしろ老眼で見逃す勢が出るから&&挟んだ方が見やすいな
750デフォルトの名無しさん
2020/06/09(火) 10:25:43.24ID:ORTIF4By その書き方ができる言語は割と少数派な気がする
pythonではできるが
pythonではできるが
751デフォルトの名無しさん
2020/06/09(火) 10:40:14.84ID:0Ox9n+fW a < x > b
これを見て何がしたいのか直感的に理解できる人間は多数派ではないだろう
結局 lb < x < ub のパターンしか使わないんなら range で十分
これを見て何がしたいのか直感的に理解できる人間は多数派ではないだろう
結局 lb < x < ub のパターンしか使わないんなら range で十分
752デフォルトの名無しさん
2020/06/09(火) 10:58:25.83ID:hxMyXunA >>744-746
こういう感じの話? (※ 構造体を介する意味がないのでこの例では省略)
fn bar(vec: &mut Vec<usize>, i: usize, j: usize) {
let ref x = vec[i];
let ref mut y = vec[j]; // エラー
println!("{:#?} {:#?}", x, y);
}
fn main() {
let mut vec: Vec<usize> = vec![1, 2, 3];
bar(&mut vec, 0, 1);
}
vec の所有権が貸し出されるので一律に出来ない。
可能性を心配する必要はないよ。
普通の借用ルールが適用されて確実に出来ない。 (unsafe を使わない限り。)
こういう感じの話? (※ 構造体を介する意味がないのでこの例では省略)
fn bar(vec: &mut Vec<usize>, i: usize, j: usize) {
let ref x = vec[i];
let ref mut y = vec[j]; // エラー
println!("{:#?} {:#?}", x, y);
}
fn main() {
let mut vec: Vec<usize> = vec![1, 2, 3];
bar(&mut vec, 0, 1);
}
vec の所有権が貸し出されるので一律に出来ない。
可能性を心配する必要はないよ。
普通の借用ルールが適用されて確実に出来ない。 (unsafe を使わない限り。)
753デフォルトの名無しさん
2020/06/09(火) 13:10:15.38ID:wU3msb4d このスレで赤連投してんのこいつとこいつか???
https://twitter.com/YutakaAoki3
https://twitter.com/SFITB
https://twitter.com/5chan_nel (5ch newer account)
https://twitter.com/YutakaAoki3
https://twitter.com/SFITB
https://twitter.com/5chan_nel (5ch newer account)
754デフォルトの名無しさん
2020/06/09(火) 14:37:23.22ID:H8Y2HqIE しかもそいつら繋がってんのな、Rust大嫌いなのに隠してここでやりとりしてんのな
とりあえず二人とも気持ち悪いからミュート、ブロックした
https://qiita.com/Yutaka_Aoki
https://qiita.com/SFITB
とりあえず二人とも気持ち悪いからミュート、ブロックした
https://qiita.com/Yutaka_Aoki
https://qiita.com/SFITB
755デフォルトの名無しさん
2020/06/09(火) 14:41:22.18ID:1+p+UWLN ここはrust信者しか書き込んだらいかんらしい
756デフォルトの名無しさん
2020/06/09(火) 15:07:39.63ID:FNvqfpCR 少なくともMozillaのステマが〜とか言ってた頃よりだいぶましだと思うが。
757デフォルトの名無しさん
2020/06/09(火) 15:54:45.21ID:1XBt8hKf えぇ
どっから特定されたの
どっから特定されたの
758デフォルトの名無しさん
2020/06/09(火) 19:23:53.82ID:9Q2vOhVs dropが飴玉みたいって批判?がちょっと面白かった。
その発想はなかった的な。
その発想はなかった的な。
759デフォルトの名無しさん
2020/06/09(火) 20:40:17.08ID:hxMyXunA drop out とか drop off とかのニュアンスでしょ?
スコープから消えろという意味での drop であって、結果的に解体もするというのは実装側の都合だよな。
その型を利用する側の都合からするとただ消えろって話なので、drop という語をあてるのは Rust 的にはそこそこ妥当な選択だと思える。
やることが同じだから同じというのは抽象化を軽視する暴論だ。
スコープから消えろという意味での drop であって、結果的に解体もするというのは実装側の都合だよな。
その型を利用する側の都合からするとただ消えろって話なので、drop という語をあてるのは Rust 的にはそこそこ妥当な選択だと思える。
やることが同じだから同じというのは抽象化を軽視する暴論だ。
760デフォルトの名無しさん
2020/06/09(火) 23:30:17.61ID:dBtT67N+ linuxカーネルでキャッシュをドロップする、みたいなのが用法としては近いのかな。
761デフォルトの名無しさん
2020/06/10(水) 01:57:37.96ID:EI8iQv9S >>756
https://twitter.com/YutakaAoki3/status/1270069950581858309
同一人物説
dropって命名はかなり絶妙だと思う。
時点でscoped outから取ってoutとかがいいと思うけど、outだけだと抽象的すぎるからdropが一番いい
https://twitter.com/5chan_nel (5ch newer account)
https://twitter.com/YutakaAoki3/status/1270069950581858309
同一人物説
dropって命名はかなり絶妙だと思う。
時点でscoped outから取ってoutとかがいいと思うけど、outだけだと抽象的すぎるからdropが一番いい
https://twitter.com/5chan_nel (5ch newer account)
762デフォルトの名無しさん
2020/06/10(水) 02:51:12.39ID:Zbkl4OJ9 そもそもdropって表現使ってる言語なんかなかったっけ??
763デフォルトの名無しさん
2020/06/10(水) 08:25:50.22ID:uVgELRDi ネイティブが決めた名前をJapsが文句言うのは流石に草
764デフォルトの名無しさん
2020/06/10(水) 09:37:48.27ID:2ezYpnf+ 実際にプログラミングするのは英語話者ばかりではないので
既に浸透した用語を使って欲しいというのはわからんでもないんだが、
似て非なるものに同じ名前を与えると調べにくかったりすることもあるしなぁ。
他の言語からの「移行」という視線でばかり見ていると良くなった部分も移行コストに見えてしまうんだなというのはわかった。
既に浸透した用語を使って欲しいというのはわからんでもないんだが、
似て非なるものに同じ名前を与えると調べにくかったりすることもあるしなぁ。
他の言語からの「移行」という視線でばかり見ていると良くなった部分も移行コストに見えてしまうんだなというのはわかった。
765デフォルトの名無しさん
2020/06/10(水) 10:10:31.54ID:XLjKTHkb そもそもdropについて言えば既存の言語でも
free, delete, dispose, finalizeとバラバラなので
浸透もクソもない。
free, delete, dispose, finalizeとバラバラなので
浸透もクソもない。
766デフォルトの名無しさん
2020/06/10(水) 10:24:08.29ID:2ezYpnf+ それぞれの用語の大まかな使い分けはあるけども、
じゃあ drop がそのどれかに当てはまるかといえば当てはまらないし。
じゃあ drop がそのどれかに当てはまるかといえば当てはまらないし。
767デフォルトの名無しさん
2020/06/10(水) 12:27:01.09ID:wKk8b9p0 qiitaの記事数は、Rustに対し、Goが8倍、Kotlinが1.5倍、C++が50倍、Javaが16倍。
唯一、Haskelに対しては、Rustは、100倍以上の記事数がある。
唯一、Haskelに対しては、Rustは、100倍以上の記事数がある。
768デフォルトの名無しさん
2020/06/10(水) 18:15:57.47ID:2ezYpnf+ >>767
それがどしたんや
それがどしたんや
769デフォルトの名無しさん
2020/06/10(水) 18:22:57.35ID:eINpUyJE Haskelは触ったことのある人数で言えばRustよりずっと多いだろうけど、マサカリが怖くて記事書きづらいんだろう
770デフォルトの名無しさん
2020/06/10(水) 23:07:45.91ID:7cbxIbSc まず FireFox 表記をやめろ
771デフォルトの名無しさん
2020/06/11(木) 05:09:15.88ID:LlBqG++A 宣言型マクロでRustの処理書けない理由ってある?
今のパターンマッチ風構文で作ったから処理文入れるところがない的な?
今のパターンマッチ風構文で作ったから処理文入れるところがない的な?
772デフォルトの名無しさん
2020/06/11(木) 14:25:13.16ID:5qmGy9Sy 「Rust」はなぜ人気があるのか、Stack Overflowがユーザーのコメントを紹介
https://www.atmarkit.co.jp/ait/articles/2006/11/news051.html
https://www.atmarkit.co.jp/ait/articles/2006/11/news051.html
773デフォルトの名無しさん
2020/06/11(木) 15:19:33.86ID:EKtCO5aX ガチ関数型と違って難しいポイントはただ複雑なだけなので、頭悪くても慣れさえすればマウンティングしやすいのが人気の理由だと思ってる
774デフォルトの名無しさん
2020/06/11(木) 17:27:55.76ID:Th6rh/3U 「一番愛する言語」と聞かれたら、C++もC#もJSもPythonも全面的に好きで
使ってるわけではないから、消去法でRustを選ぶしかない。
そもそも愛すべき言語なんて一般人にはあるわけ無いし。
Rustだったら「愛すべき」と公表しても馬鹿にされないで済むみたいな。
他のどの言語を選んでも、白い目で見られそうだから。
使ってるわけではないから、消去法でRustを選ぶしかない。
そもそも愛すべき言語なんて一般人にはあるわけ無いし。
Rustだったら「愛すべき」と公表しても馬鹿にされないで済むみたいな。
他のどの言語を選んでも、白い目で見られそうだから。
775587
2020/06/11(木) 17:33:10.59ID:7wv0rqaB ドキュメントを眺めてたら >>587 は Nightly ではこんな感じで書けるかなって思った。
https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=75b0cca2f785445e707b113c1bce3b55
https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=75b0cca2f785445e707b113c1bce3b55
776デフォルトの名無しさん
2020/06/11(木) 17:43:19.49ID:VpmD2Oc5 >>774
SOのサーベイのことをいってるなら、あれは別に「愛する言語は何ですか?」というアンケートではないので「愛する」と日本語で考えてもあまり意味ないぞ。
いまRustを使っていて今後も使い続けたいですか?という質問の集計結果をmost loved languageと表現してるだけ。
だから仕事で(嫌々でも)使わざるを得ない言語は低く出るし、Rustみたいに趣味で選んでる言語は高く出るのだろう。
SOのサーベイのことをいってるなら、あれは別に「愛する言語は何ですか?」というアンケートではないので「愛する」と日本語で考えてもあまり意味ないぞ。
いまRustを使っていて今後も使い続けたいですか?という質問の集計結果をmost loved languageと表現してるだけ。
だから仕事で(嫌々でも)使わざるを得ない言語は低く出るし、Rustみたいに趣味で選んでる言語は高く出るのだろう。
777デフォルトの名無しさん
2020/06/11(木) 22:59:22.90ID:Th6rh/3U >>776
Rustを愛すると答えた人でも、 使っている人は5%程度しかいないと書いてあったから、
「いまRustを使っていて今後も使い続けたいですか?という質問の集計結果」
とは違うはずだ。
使って無い人も「好き」と言えた訳だから。
Rustを愛すると答えた人でも、 使っている人は5%程度しかいないと書いてあったから、
「いまRustを使っていて今後も使い続けたいですか?という質問の集計結果」
とは違うはずだ。
使って無い人も「好き」と言えた訳だから。
778デフォルトの名無しさん
2020/06/11(木) 23:08:36.19ID:lDcKCiP3 >>777
ちょっと正確な質問は忘れたけど、
問1 最近よく使う言語はなんですか?
問2 その言語を今後も使い続けたいですか?
みたいな質問で、1でRustと答えた人の86%が2でyesと答えたって話。
(で、その86%ってのが全言語で1位だった)
なので5%の人しか使ってないというのとは別に矛盾しないし、
Rustを使ってない人の意見はそもそも反映されない。
ちょっと正確な質問は忘れたけど、
問1 最近よく使う言語はなんですか?
問2 その言語を今後も使い続けたいですか?
みたいな質問で、1でRustと答えた人の86%が2でyesと答えたって話。
(で、その86%ってのが全言語で1位だった)
なので5%の人しか使ってないというのとは別に矛盾しないし、
Rustを使ってない人の意見はそもそも反映されない。
779デフォルトの名無しさん
2020/06/11(木) 23:14:58.90ID:lDcKCiP3 このあたり元のアンケートに答えた人や
SOのレポートを隅々まで読んだ人なら分かるんだけど
ニュースサイトの伝言ゲームで「最も人気のある言語」とかになってしまうと
ものすごく語弊があるんだよな。
SOのレポートを隅々まで読んだ人なら分かるんだけど
ニュースサイトの伝言ゲームで「最も人気のある言語」とかになってしまうと
ものすごく語弊があるんだよな。
780デフォルトの名無しさん
2020/06/11(木) 23:41:02.95ID:Th6rh/3U781デフォルトの名無しさん
2020/06/11(木) 23:47:20.09ID:lDcKCiP3 >>780
使ってる人が5%というのは合ってて、
その5%のうちの86%が今後も使いたいってこと。
だからRustを好きな人が多いんじゃなくて、好きな人の割合が高いというだけ。
実際に好きな人の絶対数でいけば、ユーザーの多いPythonとかが圧勝だと思う。
使ってる人が5%というのは合ってて、
その5%のうちの86%が今後も使いたいってこと。
だからRustを好きな人が多いんじゃなくて、好きな人の割合が高いというだけ。
実際に好きな人の絶対数でいけば、ユーザーの多いPythonとかが圧勝だと思う。
782デフォルトの名無しさん
2020/06/11(木) 23:51:33.67ID:Th6rh/3U >>781
あなたはもしかして数学苦手ですか?
あなたはもしかして数学苦手ですか?
783デフォルトの名無しさん
2020/06/12(金) 02:00:09.52ID:3QRVSzSK >>775
Default::default() が panic したときに drop で未初期化領域アクセスして UB になりそう
Default::default() が panic したときに drop で未初期化領域アクセスして UB になりそう
785デフォルトの名無しさん
2020/06/12(金) 20:41:45.45ID:3QRVSzSK786デフォルトの名無しさん
2020/06/12(金) 22:06:49.25ID:ROT3upn7 要素がMaybeUninitなので未初期化領域にアクセスすることはないだろうけど、逆に初期化済みの領域が解放されずに残るような?
787587
2020/06/12(金) 22:21:06.94ID:Du26dNpG >>786
panic したときのことなので UB でさえなければメモリが解放されないのは問題にならないと思いますが。
panic したときのことなので UB でさえなければメモリが解放されないのは問題にならないと思いますが。
788デフォルトの名無しさん
2020/06/12(金) 22:37:53.36ID:dTuswZtd copylessっつうcrateがあるからそれ使うか参考にするといいかもよ
789デフォルトの名無しさん
2020/06/13(土) 09:06:43.07ID:4a9xUc1f >>783
Default::default() が panic起こす実装してるからUB以前にそこを直すべきだと思うけど違う?
Default::default() が panic起こす実装してるからUB以前にそこを直すべきだと思うけど違う?
790デフォルトの名無しさん
2020/06/14(日) 08:51:59.74ID:GVwShxqI playgroundで手続きマクロ書きたいんだけど
#![crate_type="proc-macro"]
で出来なくてCargo.tomlも触れないから変更出来ないんだけどどうやっても触れない??
#![crate_type="proc-macro"]
で出来なくてCargo.tomlも触れないから変更出来ないんだけどどうやっても触れない??
791デフォルトの名無しさん
2020/06/16(火) 19:24:13.66ID:BP9MVREP 弱参照を多用する人っていないの?unsafeが基本?
792デフォルトの名無しさん
2020/06/18(木) 05:25:57.31ID:K1rCi1si793デフォルトの名無しさん
2020/06/21(日) 01:44:24.45ID:KswBNjV4 こういうコードを書いててどこを直せばいいかわかんないので教えてーー
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=4ce583191e5b07279b8ec65ef5198456
AddAssign の型引数のところに与えてるライフタイムがおかしいとは思うんだけど、
どう直せばいいかわかんない。
この書き方だと += の左辺以上の寿命を右辺が持ってるという意味になるの?
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=4ce583191e5b07279b8ec65ef5198456
AddAssign の型引数のところに与えてるライフタイムがおかしいとは思うんだけど、
どう直せばいいかわかんない。
この書き方だと += の左辺以上の寿命を右辺が持ってるという意味になるの?
794デフォルトの名無しさん
2020/06/21(日) 20:32:40.47ID:pHqBLLSo あんまり詳しくないけど、ライフタイムのその書き方でエラーなるってバグじゃない?(推論力の問題?)
個人的に気になるから詳しい人教えて欲しいな
一応これで治るけど
impl<T: AddAssign<T> + From<usize> + Clone> Iterator for Fibonacci<T> {
type Item = T;
fn next(&mut self) -> Option<T> {
swap(&mut self.f0, &mut self.f1);
self.f1 += self.f0.clone();
Some(self.f0.clone())
}
}
個人的に気になるから詳しい人教えて欲しいな
一応これで治るけど
impl<T: AddAssign<T> + From<usize> + Clone> Iterator for Fibonacci<T> {
type Item = T;
fn next(&mut self) -> Option<T> {
swap(&mut self.f0, &mut self.f1);
self.f1 += self.f0.clone();
Some(self.f0.clone())
}
}
795793
2020/06/21(日) 21:05:29.71ID:KswBNjV4 デフォルトで usize を基礎に据えているんですが、 BigUint なども効率的に扱いたいので
clone はなるべく少なくしたいという意図で参照で受け取る AddAssign を前提にしたいんですよね……。
clone はなるべく少なくしたいという意図で参照で受け取る AddAssign を前提にしたいんですよね……。
796デフォルトの名無しさん
2020/06/21(日) 22:00:26.97ID:T8Yrab8u >>793
これでどう?
impl<T> Iterator for Fibonacci<T>
where
T: From<usize> + Clone,
T: for<'a> AddAssign<&'a T>
これでどう?
impl<T> Iterator for Fibonacci<T>
where
T: From<usize> + Clone,
T: for<'a> AddAssign<&'a T>
797793
2020/06/21(日) 22:48:41.52ID:KswBNjV4 >>796
期待通り動きました!
for の使い方について調べたところこのへんにあるのを見つけたのですが、
どうにもはっきりとは理解できてないです。
https://doc.rust-lang.org/nomicon/hrtb.html
AddAssign が必要とされる個別の場面まで寿命の推測を遅らせるみたいな感じですかね?
期待通り動きました!
for の使い方について調べたところこのへんにあるのを見つけたのですが、
どうにもはっきりとは理解できてないです。
https://doc.rust-lang.org/nomicon/hrtb.html
AddAssign が必要とされる個別の場面まで寿命の推測を遅らせるみたいな感じですかね?
799793
2020/06/22(月) 00:26:04.06ID:H8+bL0cM なんか見覚えある気がすると思って考えてたんだけど、
Haskell の forall と似てるんだな。
>>793 だと Fibonacci<T> の T の制約として解釈されてしまうから、
'a は Fibonacci<T> と同じ寿命ってことになっちゃうわけか。
Haskell の forall と似てるんだな。
>>793 だと Fibonacci<T> の T の制約として解釈されてしまうから、
'a は Fibonacci<T> と同じ寿命ってことになっちゃうわけか。
800デフォルトの名無しさん
2020/06/23(火) 23:09:33.48ID:ImTRmBX4 あるフォルダーに入っているファイルをWeb経由で見れるようにしたいのだがそういったことができるクレートあったりしますか?
現在Actix+teraで実装しようと考えていますがなかなかうまくいかないので・・・
現在Actix+teraで実装しようと考えていますがなかなかうまくいかないので・・・
801デフォルトの名無しさん
2020/06/24(水) 02:24:42.93ID:ak6DHXg2 python3 -m http.server 8000
802デフォルトの名無しさん
2020/06/24(水) 03:07:05.31ID:tDxYjRXk actix-webとactix-filesではだめなの
803デフォルトの名無しさん
2020/06/24(水) 03:37:50.70ID:rM4tv+8j Ruby なら、コマンドプロンプト・PowerShell から、1-liner で、
Rubyで作られた遅いウェブサーバー、WEBrick が起動する
ruby -run -e httpd . -p 8080
そのフォルダに、index.html があれば、これでブラウザからアクセスできる
http://localhost:8080
Rubyで作られた遅いウェブサーバー、WEBrick が起動する
ruby -run -e httpd . -p 8080
そのフォルダに、index.html があれば、これでブラウザからアクセスできる
http://localhost:8080
804デフォルトの名無しさん
2020/06/24(水) 10:36:40.30ID:l/oN1z1j >>803
rustのスレまで出張ってくるなよジジイ
rustのスレまで出張ってくるなよジジイ
805デフォルトの名無しさん
2020/06/24(水) 12:04:47.26ID:4T6/LA8J なぜrustでactix+tera を使いたいのか
学習目的?
学習目的?
806デフォルトの名無しさん
2020/06/24(水) 13:42:57.67ID:zkd3Aeky そういや、actixの作者がやる気なくしてた問題は解決したの?
807デフォルトの名無しさん
2020/06/24(水) 14:34:48.81ID:rnWT6W+j あの「とほほのWWW入門」に「Rust」と「Go言語」の入門コンテンツ追加へ【やじうまWatch】 - INTERNET Watch
https://internet.watch.impress.co.jp/docs/yajiuma/1260986.html
このサイトまだあったんだな
https://internet.watch.impress.co.jp/docs/yajiuma/1260986.html
このサイトまだあったんだな
808デフォルトの名無しさん
2020/06/24(水) 19:37:44.39ID:hh4NKeEg809デフォルトの名無しさん
2020/06/25(木) 18:06:43.52ID:8MiElZj2 warpがおすすめ
810デフォルトの名無しさん
2020/06/26(金) 04:24:36.46ID:rzSuBmAQ この前作ったツールではrouilleを使った
CLIツールにおまけのWeb UIを付けるため
シンプルで良かった
CLIツールにおまけのWeb UIを付けるため
シンプルで良かった
811デフォルトの名無しさん
2020/06/29(月) 22:50:20.59ID:1itP0QVJ アプリケーションの設定を管理するようなライブラリで変更時に知らせてくれるような機能があるのってgioクレートのSettings以外になんかありませんか?
812デフォルトの名無しさん
2020/06/30(火) 15:14:43.19ID:oMNW4x3G const fn b(s: &'static str) -> usize {
s.len()
}
fn a(s: &'static str) -> usize {
b(s)
}
a("c");
const fn のこの例ってこの下に置き換えられる?
それともaがconstじゃないから置き換わらない?
fn a(s: &'static str) -> usize {
1
}
s.len()
}
fn a(s: &'static str) -> usize {
b(s)
}
a("c");
const fn のこの例ってこの下に置き換えられる?
それともaがconstじゃないから置き換わらない?
fn a(s: &'static str) -> usize {
1
}
813デフォルトの名無しさん
2020/06/30(火) 17:20:04.74ID:SQ1ey2jp814デフォルトの名無しさん
2020/06/30(火) 20:47:08.92ID:oMNW4x3G >>813
じゃあハッシュテーブルとかのキー定数とかもコンパイル時にハッシュになってるの?
じゃあハッシュテーブルとかのキー定数とかもコンパイル時にハッシュになってるの?
815デフォルトの名無しさん
2020/07/01(水) 01:46:25.16ID:0X9xkDpt ハッシュ値の生成に乱数使ってるからコンパイル時には決定できないはず
const fn な hasher が仮に存在するならハッシュ値まで生成されるかもしれなち
const fn な hasher が仮に存在するならハッシュ値まで生成されるかもしれなち
816デフォルトの名無しさん
2020/07/01(水) 01:50:31.70ID:lPEzgDRr >>815
乱数使ったらハッシュにならんだろ…
乱数使ったらハッシュにならんだろ…
817はちみつ餃子 ◆8X2XSCHEME
2020/07/01(水) 02:44:47.36ID:GH5MkCrA818デフォルトの名無しさん
2020/07/01(水) 09:56:23.65ID:QVn8MqAi 普通に、はなくね?
素数のマジックナンバーと比較してデメリットしかない
汎用性が下がる
コードが煩雑になる
テーブルサイズの整数倍になって効率低下する確率が上がる
素数のマジックナンバーと比較してデメリットしかない
汎用性が下がる
コードが煩雑になる
テーブルサイズの整数倍になって効率低下する確率が上がる
819デフォルトの名無しさん
2020/07/01(水) 10:24:41.03ID:dg6nNgDG >>817
>ハッシュテーブルの寿命の間は一貫した値を使うけど。
キーの値から、ハッシュ値を計算する際、乱数を使っていて、
一貫した値をどうやって取得するの。
// pszKey = キーの0終端文字列
// 戻り値 = キーに対応した Hash値
DWORD CalcHash( const char *pszKey )
{
DWORD hash;
・・・
hash += 乱数; // こんな風にして、どうやって一貫性を確保する??
・・・
return hash;
}
>ハッシュテーブルの寿命の間は一貫した値を使うけど。
キーの値から、ハッシュ値を計算する際、乱数を使っていて、
一貫した値をどうやって取得するの。
// pszKey = キーの0終端文字列
// 戻り値 = キーに対応した Hash値
DWORD CalcHash( const char *pszKey )
{
DWORD hash;
・・・
hash += 乱数; // こんな風にして、どうやって一貫性を確保する??
・・・
return hash;
}
820デフォルトの名無しさん
2020/07/01(水) 10:30:07.77ID:0X9xkDpt hasherの初期化に乱数使う
ハッシュ値の生成のされ方が決定的だと
ユーザーが悪意のある入力列を与えることでハッシュ値の衝突を起こしてシステム負荷を高めるような攻撃ができちゃうのよ
それを避けるために多くの処理系では hasher の初期化に乱数を使ってハッシュ値の生成のされ方を予測しにくいようにしている
ハッシュ値の生成のされ方が決定的だと
ユーザーが悪意のある入力列を与えることでハッシュ値の衝突を起こしてシステム負荷を高めるような攻撃ができちゃうのよ
それを避けるために多くの処理系では hasher の初期化に乱数を使ってハッシュ値の生成のされ方を予測しにくいようにしている
821デフォルトの名無しさん
2020/07/01(水) 10:31:35.11ID:0X9xkDpt 乱数使うのは hasher の初期化だけで、
その後のハッシュ値計算は当然乱数は使わない
その後のハッシュ値計算は当然乱数は使わない
822デフォルトの名無しさん
2020/07/01(水) 10:34:05.17ID:v1S9dNm/ なるほど
823デフォルトの名無しさん
2020/07/01(水) 13:21:11.84ID:gL8G43CT >>820
正直すまんかった
正直すまんかった
824デフォルトの名無しさん
2020/07/01(水) 20:39:53.77ID:LmVeoJWH システム負荷を高めるような攻撃を回避するのって初期化に乱数使うとかじゃなくて、ハッシュテーブルの実装次第じゃね?
システム再起動の時に乱数で変わってたら保存してるハッシュと違くなるって整合性ぐちゃぐちゃすぎる
ちなみにRustは初期化に乱数使ってないけどどの言語がそれに当たるの?
悪いけどホラ吹いてるようにしてみえない
システム再起動の時に乱数で変わってたら保存してるハッシュと違くなるって整合性ぐちゃぐちゃすぎる
ちなみにRustは初期化に乱数使ってないけどどの言語がそれに当たるの?
悪いけどホラ吹いてるようにしてみえない
825デフォルトの名無しさん
2020/07/01(水) 21:21:04.78ID:V2OaFanu ソルト
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国外務省局長 「ポケットに手を入れていたのは寒いから」 日本との局長級会談で [お断り★]
- 【速報】中国外務省報道官 高市首相発言撤回なければ「断固たる対抗措置」 ★3 [蚤の市★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★7 [ぐれ★]
- 中国、日本行き“50万人”キャンセル 渡航自粛でコロナ禍以来最大 ★3 [お断り★]
- 【国際】ロシアはすでに戦争準備段階――ポーランド軍トップが警告 [ぐれ★]
- 【速報】日本産牛肉の対中国輸出再開協議が中止 ★2 [おっさん友の会★]
- エッヂ落ちた?
- 【実況】博衣こよりのえちえちフログロ学力テスト🧪★3
- 【実況】博衣こよりのえちえちフログロ学力テスト🧪★4
- 中国「ジャップ、輸出入停止するわ」👈実際ガチで困るヤバいモノって何??????? [242521385]
- 【高市早苗】習近平、本気で激おこ [115996789]
- 【岸田悲報】🧑‍⚖「あれっ…そんなにズブズブなの…?」山上裁判で「安倍晋三と統一教会の関係」が次々と明らかに [559744496]
