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 part8
https://mevius.5ch.net/test/read.cgi/tech/1579834072/
Rust part9
■ このスレッドは過去ログ倉庫に格納されています
2020/08/23(日) 01:07:35.52ID:MgEpWwVh
186デフォルトの名無しさん
2020/09/20(日) 01:12:40.58ID:GOdQy7G8 予め決まったサイズを確保することが多いから、予めまとめて確保しておいて数珠繋ぎにしておけば最速で出し入れできる
187デフォルトの名無しさん
2020/09/20(日) 01:16:59.26ID:GOdQy7G8 16msecの間にすべての処理を完了しないといけないからmalloc呼び出しなんてありえないよ
188デフォルトの名無しさん
2020/09/20(日) 01:29:40.54ID:mlVvoUwY >>167
このデータの作り方だとLinkedListでもかなり連続したメモリ領域が使われてる可能性が高いような気がする
Javaの場合はList<int>じゃなくList<Integer>で
値を使うケースだとポインタを辿る必要があるのでそれも結果に影響しそう
このデータの作り方だとLinkedListでもかなり連続したメモリ領域が使われてる可能性が高いような気がする
Javaの場合はList<int>じゃなくList<Integer>で
値を使うケースだとポインタを辿る必要があるのでそれも結果に影響しそう
189デフォルトの名無しさん
2020/09/20(日) 03:23:18.11ID:7hHTPvJJ >>159 に答えれる方いませんか?
ここはリスト議論のスレッドですか?
ここはリスト議論のスレッドですか?
190デフォルトの名無しさん
2020/09/20(日) 08:14:35.07ID:nUMPJonN191デフォルトの名無しさん
2020/09/20(日) 09:09:08.11ID:sD69NUu0 挿入が必要なら普通はヒープ組むのになんで誰も突っ込まんの?
192デフォルトの名無しさん
2020/09/20(日) 10:27:51.76ID:iRiS7kHZ テキストエディタのようなものだと、アプリを起動して編集し始めた時から、
新しく追加したデータに関しては、対応するノードは、Heapからアロケートしても、
連続したアドレスに載っている。
ロードした直後、最後の行のノードのアドレスと、編集で追加したノード
のアドレスが近い。
編集で追加した行の直前直後のノードのアドレスと、編集で追加したノードのアドレスは
不連続である。
しかし、キャッシュは、何も、最後の1つのページだけしか覚えておけないわけでなく、
1000種類位は覚えておける。
だから、このくらいだと、どちらもキャッシュに乗ることになる。
なお、ArrayListの場合、途中へ追加すると、半分近くの要素に対してコピー動作が
必要になるが、その際、キャッシュを全て使い切ってしまうことがある。
配列の全データが100MBだとすると、このコピー動作のために100MB分のデータが
いったんキャッシュに読み込まれる必要がある。
キャッシュはL3ですら8MB程度しかないので、これだと全くキャッシュが足りなくなる。
その点、LinkedListは、このようなキャッシュ汚染は生じない。
新しく追加したデータに関しては、対応するノードは、Heapからアロケートしても、
連続したアドレスに載っている。
ロードした直後、最後の行のノードのアドレスと、編集で追加したノード
のアドレスが近い。
編集で追加した行の直前直後のノードのアドレスと、編集で追加したノードのアドレスは
不連続である。
しかし、キャッシュは、何も、最後の1つのページだけしか覚えておけないわけでなく、
1000種類位は覚えておける。
だから、このくらいだと、どちらもキャッシュに乗ることになる。
なお、ArrayListの場合、途中へ追加すると、半分近くの要素に対してコピー動作が
必要になるが、その際、キャッシュを全て使い切ってしまうことがある。
配列の全データが100MBだとすると、このコピー動作のために100MB分のデータが
いったんキャッシュに読み込まれる必要がある。
キャッシュはL3ですら8MB程度しかないので、これだと全くキャッシュが足りなくなる。
その点、LinkedListは、このようなキャッシュ汚染は生じない。
193デフォルトの名無しさん
2020/09/20(日) 10:32:00.78ID:iRiS7kHZ194デフォルトの名無しさん
2020/09/20(日) 10:48:59.50ID:iRiS7kHZ >>193
テキストエディタの例だと、100万行のファイルを読み込んだとしても、
実際に閲覧したり、書き込んだりしたい場所は、数箇所に集中することが
多い。
LinkedListの場合だと、編集時に行を挿入する場合、全データを移動する
必要が無いので、1行当たり、数10バイトくらいのコピーで済む。
この場合、キャッシュ汚染はほとんど生じない。
一方、ArrayListだと、100万行のコピー動作が必要になり、その際に
キャッシュを浪費してしまう。
テキストエディタの例だと、100万行のファイルを読み込んだとしても、
実際に閲覧したり、書き込んだりしたい場所は、数箇所に集中することが
多い。
LinkedListの場合だと、編集時に行を挿入する場合、全データを移動する
必要が無いので、1行当たり、数10バイトくらいのコピーで済む。
この場合、キャッシュ汚染はほとんど生じない。
一方、ArrayListだと、100万行のコピー動作が必要になり、その際に
キャッシュを浪費してしまう。
195デフォルトの名無しさん
2020/09/20(日) 10:55:21.87ID:GOdQy7G8196デフォルトの名無しさん
2020/09/20(日) 11:02:59.45ID:iRiS7kHZ197デフォルトの名無しさん
2020/09/20(日) 14:40:25.89ID:2Z1dYVPL なんでテキストエディタの例でArratListが出てくるんだ
198デフォルトの名無しさん
2020/09/20(日) 17:50:32.22ID:rmF3ZCsn スレ間違ってますよ
199デフォルトの名無しさん
2020/09/21(月) 04:23:45.31ID:6Tk/tz3a200デフォルトの名無しさん
2020/09/22(火) 01:30:08.72ID:oMNW4x3G CSのスレでも立てればいいのにな
無駄なマウントとプライドで議論になってないじゃん
無駄なマウントとプライドで議論になってないじゃん
201デフォルトの名無しさん
2020/09/22(火) 02:42:29.78ID:EwzeVKsQ あっちで相手にされないからこっちに来るんだろう
202デフォルトの名無しさん
2020/09/22(火) 02:55:14.94ID:3nDER7vv あっちってどこ?
203デフォルトの名無しさん
2020/09/22(火) 03:04:18.34ID:EwzeVKsQ 本人にだけ判れば良いんだよ
204デフォルトの名無しさん
2020/09/23(水) 23:05:59.13ID:JL46F86k Rust 初心者ってか始めてもないけど、
fn main() {
println!("Hello, world!");
}
これってセミコロン要るの?
fn main() {
println!("Hello, world!");
}
これってセミコロン要るの?
205デフォルトの名無しさん
2020/09/23(水) 23:22:55.07ID:O1ICXtuo206デフォルトの名無しさん
2020/09/24(木) 04:24:32.56ID:sKL6gd3p なんでreturn文省略するん
207デフォルトの名無しさん
2020/09/24(木) 08:46:29.52ID:imaK44AN208デフォルトの名無しさん
2020/09/24(木) 19:57:00.21ID:AHitBJm/ 関数型のフリがしたいから。
209デフォルトの名無しさん
2020/09/24(木) 20:40:06.68ID:aHCv/EIt return省略は関数型なのか?
関数型をふりをするなら {} を省略して = で書くとかでは
関数型をふりをするなら {} を省略して = で書くとかでは
210デフォルトの名無しさん
2020/09/24(木) 21:02:07.22ID:anZxJGRt lispのprognみたいな感じじゃね。
セミコロンを書くとその後に空の式があるようにみなすのはイケてないと思うけど。
セミコロンを書くとその後に空の式があるようにみなすのはイケてないと思うけど。
211デフォルトの名無しさん
2020/09/24(木) 21:34:50.13ID:sW11ypIO expressionをstatementにするのがセミコロン
statementは`()`として扱われる
セミコロン不要にして必要に応じて`()`を明記するスタイルのほうがイケてたとは思う
returnを省略するのは慣習
関数を含めて式が値に評価されていくというメンタルモデルなので
”return文”という感覚ではないのかもね
statementは`()`として扱われる
セミコロン不要にして必要に応じて`()`を明記するスタイルのほうがイケてたとは思う
returnを省略するのは慣習
関数を含めて式が値に評価されていくというメンタルモデルなので
”return文”という感覚ではないのかもね
212デフォルトの名無しさん
2020/09/25(金) 01:43:09.63ID:rqLAnW3Q C++系言語に見た目を近づけるという設計意図があるから()を明記するという判断にはならなかっただろうとおもう
213デフォルトの名無しさん
2020/09/25(金) 06:33:09.44ID:JNOcuagu 戻り値型の宣言にも -> () っていちいち書かなくていいしなあ
そういうもんだとしか
そういうもんだとしか
214デフォルトの名無しさん
2020/09/25(金) 07:11:20.18ID:LUJK9/4D なんで戻り値は型推論してくんないんだろう。
215デフォルトの名無しさん
2020/09/25(金) 07:33:16.25ID:SbSfhD0k 単純に、セミコロンの有無だけで区別するのが視認性が良くないんだよな。
エディタの方で違いを目立たせられたりしたらいいけど。
エディタの方で違いを目立たせられたりしたらいいけど。
216デフォルトの名無しさん
2020/09/25(金) 07:58:20.78ID:ZK6gJNpW217デフォルトの名無しさん
2020/09/25(金) 19:12:30.94ID:yo3ZA1rx >>215
いまさらどうにもならないが、使いはじめの頃は、もっと視認性のあるフレーズ使ってくれてたらなぁと思ってた。
例えば、F#の
hofe |> ignore
なんかは、冗長ではあるが逆に視認性も良く、捨てる気満々の書き方で気に入ってる。
いまさらどうにもならないが、使いはじめの頃は、もっと視認性のあるフレーズ使ってくれてたらなぁと思ってた。
例えば、F#の
hofe |> ignore
なんかは、冗長ではあるが逆に視認性も良く、捨てる気満々の書き方で気に入ってる。
218デフォルトの名無しさん
2020/09/25(金) 23:12:55.80ID:ZK6gJNpW そういえばelse節の無いif式は()に評価されるんだっけか
219デフォルトの名無しさん
2020/09/25(金) 23:17:40.79ID:ZK6gJNpW https://doc.rust-lang.org/reference/expressions/return-expr.html
ってかそもそもRustのreturnは式だったわ
return bar;はreturn文じゃなくて式文の一種だったわ
ってかそもそもRustのreturnは式だったわ
return bar;はreturn文じゃなくて式文の一種だったわ
220デフォルトの名無しさん
2020/09/26(土) 06:07:19.66ID:Jy/kksq4 コンピューターはともかく、人間にはreturnくらいの文字的冗長性があった方が視認性がいい。
221デフォルトの名無しさん
2020/09/26(土) 08:31:48.23ID:2tuZfHCi ifは末尾}に;不要なのにletは末尾}に;必要なのだるい
222デフォルトの名無しさん
2020/09/26(土) 09:30:48.93ID:en54jqZM >>220
returnがあればearly returnだと識別できるのでその意味では視認性は高い
ただセミコロンというC系言語経験者が注視しない記号に新しく重要な意味をもたせたから戸惑う
>>221
ifブロック末尾のセミコロンは常に省略できるわけじゃない
https://doc.rust-lang.org/reference/statements.html#expression-statements
セミコロンがないと意図通りパースできないケースってほとんどないと思うので
そのうちJSのASIのようなものでセミコロン不要になる未来もある気がする
returnがあればearly returnだと識別できるのでその意味では視認性は高い
ただセミコロンというC系言語経験者が注視しない記号に新しく重要な意味をもたせたから戸惑う
>>221
ifブロック末尾のセミコロンは常に省略できるわけじゃない
https://doc.rust-lang.org/reference/statements.html#expression-statements
セミコロンがないと意図通りパースできないケースってほとんどないと思うので
そのうちJSのASIのようなものでセミコロン不要になる未来もある気がする
223デフォルトの名無しさん
2020/09/26(土) 10:01:37.83ID:GOW7LNc9 個人的にはセミコロンうんぬんよりifの中括弧が苦痛
/* c */
#include <stdio.h>
#define min(a, b) ((a) < (b) ? (a) : (b)) // スッキリ
int min2(int a, int b) {return a < b ? a : b;} // ややスッキリ
int min3(int a, int b) {
if (a < b) return a; else return b; // スッキリ?
}
int main() {
printf("%d ", min(3, 2));
printf("%d ", min2(3, 2));
printf("%d ", min3(3, 2));
return 0;
}
// rust
fn main() {
let min = |a, b| if a < b {a} else {b}; // 中括弧が嫌
//let min = |a, b| if (a < b) a else b; // これならスッキリ
//let min = |a, b| if a < b then a else b; // あるいはこれ
println!("{}", min(3, 2));
}
(* ocaml *)
let min a b = if a < b then a else b (* スッキリ *)
let () = print_int (min 3 2)
/* c */
#include <stdio.h>
#define min(a, b) ((a) < (b) ? (a) : (b)) // スッキリ
int min2(int a, int b) {return a < b ? a : b;} // ややスッキリ
int min3(int a, int b) {
if (a < b) return a; else return b; // スッキリ?
}
int main() {
printf("%d ", min(3, 2));
printf("%d ", min2(3, 2));
printf("%d ", min3(3, 2));
return 0;
}
// rust
fn main() {
let min = |a, b| if a < b {a} else {b}; // 中括弧が嫌
//let min = |a, b| if (a < b) a else b; // これならスッキリ
//let min = |a, b| if a < b then a else b; // あるいはこれ
println!("{}", min(3, 2));
}
(* ocaml *)
let min a b = if a < b then a else b (* スッキリ *)
let () = print_int (min 3 2)
224デフォルトの名無しさん
2020/09/26(土) 12:46:41.58ID:XnDuVG4Q はいはいdangling else dangling else
225デフォルトの名無しさん
2020/09/26(土) 13:01:32.24ID:nz56jET8 Goもそうだけど、条件式に括弧を使わないのがいまだに慣れない。
226デフォルトの名無しさん
2020/09/26(土) 13:49:35.37ID:Rxc/dJS+ BASIC は要らなかったから慣れてる。
3項演算子考えたやつは天才。
3項演算子考えたやつは天才。
227デフォルトの名無しさん
2020/09/26(土) 14:34:05.78ID:d+bfMgei228デフォルトの名無しさん
2020/09/26(土) 14:40:21.79ID:Lg3GZEAb >>225
そのへんとモジュールまわりはPythonの影響かなと思った
そのへんとモジュールまわりはPythonの影響かなと思った
229デフォルトの名無しさん
2020/09/26(土) 16:28:05.98ID:en54jqZM >>228
PythonというよりRubyだろね
コアチームは過去も含めてRubyコミュニティ出身者が多いから
モジュールはPythonのようにファイルベースじゃなくキーワードで名前空間をきちんと切るし
クロージャの書き方だったりreturnを書かない慣習だったりも他言語に比べて類似性が高い
PythonというよりRubyだろね
コアチームは過去も含めてRubyコミュニティ出身者が多いから
モジュールはPythonのようにファイルベースじゃなくキーワードで名前空間をきちんと切るし
クロージャの書き方だったりreturnを書かない慣習だったりも他言語に比べて類似性が高い
230デフォルトの名無しさん
2020/09/26(土) 16:42:46.56ID:d+bfMgei 型システムは ML 系の言語でよくあるやつだし、
そっち方面の影響もあるんじゃないの?
そっち方面の影響もあるんじゃないの?
231デフォルトの名無しさん
2020/09/26(土) 17:41:02.34ID:iHt0gIo3232デフォルトの名無しさん
2020/09/26(土) 17:52:07.70ID:YRaYmiXd233デフォルトの名無しさん
2020/09/26(土) 18:02:33.75ID:2tuZfHCi if a < b => a else => b っていう変なもんを思いついてしまった
だーめだこりゃ
だーめだこりゃ
234デフォルトの名無しさん
2020/09/27(日) 04:32:18.28ID:Wycq4Ck4 セミコロンとかはEdition上げて撤廃してほしいけど、ここまでRustのOSS書かれてたら無理だろなぁ...
235デフォルトの名無しさん
2020/09/27(日) 07:58:10.90ID:ePGxxCtX >>232
それはSmalltalkだろ
それはSmalltalkだろ
236デフォルトの名無しさん
2020/09/27(日) 08:00:03.20ID:6sIZ9RBB Rust, Go, Elixir などの新しい言語は、Ruby の影響が強い。
Ruby で最も良いのは、すべての進数の数値リテラルに、_ を含められること
こういうコメントを書かなくて済む
1000000 // 1_000_000
Ruby で最も良いのは、すべての進数の数値リテラルに、_ を含められること
こういうコメントを書かなくて済む
1000000 // 1_000_000
237デフォルトの名無しさん
2020/09/27(日) 09:53:51.56ID:xq8pY9v9 戻り値の有無がセミコロンだけで区別されている現状をどうにかしないとそもそもセミコロン廃止なんて
無理だろうけど、セミコロンレスってそんなにいいかねぇ?
行の折り返しを間違えて別の文になってしまってもスルーされる場合があるのがなんか嫌。
ASIがあるJSでもメジャーどころのスタイルガイドはみんなASIを信用しないでセミコロン使うことに
なっているし。
pythonだとセミコロン使わないスタイルも多いけど、あっちはインデントで判別できるしね。
無理だろうけど、セミコロンレスってそんなにいいかねぇ?
行の折り返しを間違えて別の文になってしまってもスルーされる場合があるのがなんか嫌。
ASIがあるJSでもメジャーどころのスタイルガイドはみんなASIを信用しないでセミコロン使うことに
なっているし。
pythonだとセミコロン使わないスタイルも多いけど、あっちはインデントで判別できるしね。
238デフォルトの名無しさん
2020/09/27(日) 10:45:39.75ID:5NvF/cEJ >>237
>ASIを信用しないでセミコロン使うことに
ASIを信用してないわけじゃないよ
ASIの仕様はJSの仕様で決まってるから例外的に挿入されない場合もはっきり分かってる
セミコロンを使うスタイルが多いのはミニファイとかを考慮してるから
JSの場合は普通に書いてる分にはセミコロンの有無でほぼ違いが無い上に
セミコロンレスで書いてもリンター使って自動挿入できるから実質書き手の自由
1行に複数文書いてるときでもなければセミコロンに特別な意味はないから気にする必要がない
>ASIを信用しないでセミコロン使うことに
ASIを信用してないわけじゃないよ
ASIの仕様はJSの仕様で決まってるから例外的に挿入されない場合もはっきり分かってる
セミコロンを使うスタイルが多いのはミニファイとかを考慮してるから
JSの場合は普通に書いてる分にはセミコロンの有無でほぼ違いが無い上に
セミコロンレスで書いてもリンター使って自動挿入できるから実質書き手の自由
1行に複数文書いてるときでもなければセミコロンに特別な意味はないから気にする必要がない
239デフォルトの名無しさん
2020/09/27(日) 11:08:19.83ID:OQ0JAVEc セミコロンは基本的にはあっていいけどたまに}のあとに;必要なやつとかあったりしてこれはイヤ
240デフォルトの名無しさん
2020/09/27(日) 11:27:51.54ID:xq8pY9v9 たしかに「ASIを信用しないで」というと疑っているみたいだから「依存しないで」の方が
適切だったかも。
いずれにしても、どのスタイルガイドもプログラマの意図と異なる判断がされる危険を
挙げていて、それを防ぐためには明示的にセミコロンを記述する方が良いと謳っている。
minifyはそれこそminify時にセミコロンを補完すればいいんだから関係ないと思う。
適切だったかも。
いずれにしても、どのスタイルガイドもプログラマの意図と異なる判断がされる危険を
挙げていて、それを防ぐためには明示的にセミコロンを記述する方が良いと謳っている。
minifyはそれこそminify時にセミコロンを補完すればいいんだから関係ないと思う。
241デフォルトの名無しさん
2020/09/27(日) 11:40:37.55ID:NFiicpwR242デフォルトの名無しさん
2020/09/27(日) 12:00:44.11ID:4LQaG5je セミコロン撤廃要望多いとは思えないんだけどRFCとか書いてる人いるのか?
243デフォルトの名無しさん
2020/09/27(日) 12:27:31.82ID:MoLnvbgN セミコロン書き忘れる事は多々あるけど、意図しない値が返ってとかならない(はず)なので別に困らない
それより、Docs.rsに見にくいクレートが有る方が困る、AutoとBlanket以外のShow hidden undocumented itemsを
デフォルトで展開するオプションが有れば良いのに、この議題はどっかで見たような気がする。
それより、Docs.rsに見にくいクレートが有る方が困る、AutoとBlanket以外のShow hidden undocumented itemsを
デフォルトで展開するオプションが有れば良いのに、この議題はどっかで見たような気がする。
244デフォルトの名無しさん
2020/09/27(日) 12:34:01.78ID:FTgnsV+4 >>241
1967のPL/Iあたりからかな?登場時期からするともっと広まってもおかしくなかった気もするけど、16/32ビットリテラルしかなかった時代には需要なかったんだろうね。verilogは何ビットでもいけるから必要だけど。
最近は128ビット型とかBigIntとかでようやく必要になってきたってことか。
1967のPL/Iあたりからかな?登場時期からするともっと広まってもおかしくなかった気もするけど、16/32ビットリテラルしかなかった時代には需要なかったんだろうね。verilogは何ビットでもいけるから必要だけど。
最近は128ビット型とかBigIntとかでようやく必要になってきたってことか。
245デフォルトの名無しさん
2020/09/27(日) 12:55:24.47ID:ePGxxCtX rustのAPI documentなんか読みづらい気がする
うまく説明できないけど
型クラスのあたりも見づらい
うまく説明できないけど
型クラスのあたりも見づらい
246デフォルトの名無しさん
2020/09/27(日) 13:55:00.63ID:5NvF/cEJ >>240
きちんとした手順にそったminifyだけを指して言ったわけじゃないんだが
GoogleやAirbnbのstyle guideを見ると確かにそういう意図ではないみたいだね
npmやGithubみたいにセミコロンレスのstandard style使ってるところも多いから
「メジャーどころはみんなセミコロンを明示的に書く」というのはちと言い過ぎかな
いずれにしろJSの場合は1コマンドで一瞬で切り替え可能で書く時はどっちでいいから
Rustとはかなり事情が違うと思う
きちんとした手順にそったminifyだけを指して言ったわけじゃないんだが
GoogleやAirbnbのstyle guideを見ると確かにそういう意図ではないみたいだね
npmやGithubみたいにセミコロンレスのstandard style使ってるところも多いから
「メジャーどころはみんなセミコロンを明示的に書く」というのはちと言い過ぎかな
いずれにしろJSの場合は1コマンドで一瞬で切り替え可能で書く時はどっちでいいから
Rustとはかなり事情が違うと思う
247デフォルトの名無しさん
2020/09/27(日) 14:15:05.14ID:5NvF/cEJ >>242
探してみたらRFCあったけどCloseされてた
https://github.com/rust-lang/rfcs/issues/2583
C/C++/G#/Javaあたりから来た人はセミコロンあるのが普通だろうけど
Go/Scala/Swift/Kotlin/Ruby/Pythonだとセミコロンないのが普通なので面倒くさく感じるのよ
RFCのやり取りや↓ここの議論を見るとセミコロンが不要になる可能性はもうないね
https://internals.rust-lang.org/t/make-some-separators-optional/4846
探してみたらRFCあったけどCloseされてた
https://github.com/rust-lang/rfcs/issues/2583
C/C++/G#/Javaあたりから来た人はセミコロンあるのが普通だろうけど
Go/Scala/Swift/Kotlin/Ruby/Pythonだとセミコロンないのが普通なので面倒くさく感じるのよ
RFCのやり取りや↓ここの議論を見るとセミコロンが不要になる可能性はもうないね
https://internals.rust-lang.org/t/make-some-separators-optional/4846
248デフォルトの名無しさん
2020/09/27(日) 15:12:03.29ID:FTgnsV+4 セミコロンレスってフォーマット的な改行と文末の改行を文脈を見て判断する必要があるから好きじゃないなぁ。
一文が複数行になりやすいビルダーパターンとかイテレータアダプタの類いが特に。
入力する側としてはほとんど無意識に打ってるから特に面倒とも感じないし。
一文が複数行になりやすいビルダーパターンとかイテレータアダプタの類いが特に。
入力する側としてはほとんど無意識に打ってるから特に面倒とも感じないし。
249デフォルトの名無しさん
2020/09/27(日) 15:18:06.12ID:ePGxxCtX IntelliJ使えばセミコロンを殆ど見えないような色に設定できるぞ
250デフォルトの名無しさん
2020/09/27(日) 19:00:04.17ID:4LQaG5je 典型的なbikeshed
251デフォルトの名無しさん
2020/09/28(月) 01:45:21.81ID:1Vhx5XJ3 >>223
ocamlってセミコロン必要じゃなかったっけ?
ocamlってセミコロン必要じゃなかったっけ?
252デフォルトの名無しさん
2020/09/28(月) 07:53:40.34ID:cZtg7eSb >>251
この例では必要になる場所は無い
この例では必要になる場所は無い
253デフォルトの名無しさん
2020/09/28(月) 09:58:13.64ID:UVos1NUC docsのフロント部分は特に強いUXデザイナーがいない感じがすごくする
254デフォルトの名無しさん
2020/09/28(月) 18:49:05.66ID:5HiAAmxH >>251
トップレベルの分を区切るのに;;を使う
ただしletの直前、ファイルの最後、などでは省略できる
https://ocaml.org/learn/tutorials/structure_of_ocaml_programs.ja.html
構文は
https://ocaml.org/releases/4.11/htmlman/language.html
let min a b = if a < b then a else b (* letの直前だから;;省略 *)
let () = print_int (min 3 2) (* ファイルの最後だから;;省略 *)
トップレベルの分を区切るのに;;を使う
ただしletの直前、ファイルの最後、などでは省略できる
https://ocaml.org/learn/tutorials/structure_of_ocaml_programs.ja.html
構文は
https://ocaml.org/releases/4.11/htmlman/language.html
let min a b = if a < b then a else b (* letの直前だから;;省略 *)
let () = print_int (min 3 2) (* ファイルの最後だから;;省略 *)
255デフォルトの名無しさん
2020/10/01(木) 14:03:33.62ID:WCPslwmj slice::windowsのstrバージョンみたいなのってないのでしょうか。
ようするにある文字列に含まれる連続するn文字を頭から順に返すイテレータを作ってくれるようなやつです。
ようするにある文字列に含まれる連続するn文字を頭から順に返すイテレータを作ってくれるようなやつです。
256デフォルトの名無しさん
2020/10/01(木) 18:29:40.74ID:HHhjPj0U >>255
ないのでVec<char>を生成してwindowsを呼ぶとか
let cs: Vec<_> = String::from("あいうえお").chars().collect();
let ws: Vec<_> = cs.windows(2).map(|v| v.iter().collect::<String>()).collect();
ないのでVec<char>を生成してwindowsを呼ぶとか
let cs: Vec<_> = String::from("あいうえお").chars().collect();
let ws: Vec<_> = cs.windows(2).map(|v| v.iter().collect::<String>()).collect();
257デフォルトの名無しさん
2020/10/01(木) 18:54:04.45ID:i8Yvf3kp 文字幅が可変長 (utf-8) であっても windows みたいなことをするのはそんなにコスト大きくないよね?
ふたつのポインタを一文字ずつ進めるだけなんだから O(N) で出来るはず。
ふたつのポインタを一文字ずつ進めるだけなんだから O(N) で出来るはず。
258デフォルトの名無しさん
2020/10/02(金) 09:46:31.03ID:D4+ZSkLl アロケートなしだと、
(0..s.len()-n).map(|i| &s[i..i+n])
となるけど自分で-nとか+nとかiとかやるのめっちゃアホくさいしそのうちミスりそう
(0..s.len()-n).map(|i| &s[i..i+n])
となるけど自分で-nとか+nとかiとかやるのめっちゃアホくさいしそのうちミスりそう
259デフォルトの名無しさん
2020/10/02(金) 14:20:31.00ID:iKrdrFom >>258
アロケートなしならこれでもいけるはず。utf8を食わせると死ぬけど
.as_bytes().windows(2).map(|v| std::str::from_utf8(v).unwrap())
アロケートなしならこれでもいけるはず。utf8を食わせると死ぬけど
.as_bytes().windows(2).map(|v| std::str::from_utf8(v).unwrap())
260デフォルトの名無しさん
2020/10/08(木) 09:18:16.25ID:PyhRFgfx アロケートなしっていっても結局collect::<Vec<_>>()するんだからなしって表現は違うくないか
261デフォルトの名無しさん
2020/10/08(木) 09:56:48.36ID:Ney38h5h collectするとは限らんやろ
ヒット数だけ必要な場合とか
ヒット数だけ必要な場合とか
262デフォルトの名無しさん
2020/10/09(金) 10:41:17.11ID:mqWQnM2v Rust 1.47リリース
263デフォルトの名無しさん
2020/10/12(月) 16:21:28.62ID:Z3Kcjb2S Vec<T>って既に有る要素の中身を修正する方法はありますか。
有れば教えていただければ幸いです。
有れば教えていただければ幸いです。
264デフォルトの名無しさん
2020/10/12(月) 16:28:10.38ID:Z3Kcjb2S 自分が見た本ではvec[0]でアクセスする例は出てなかったと思うのですが
今ネットで見たところ
let mut vec = Vec::new();
vec.push(1);
vec.push(2);
vec[0] = 7
という例がありました。
Vec<T>の要素Tが構造体の場合、
vec[0]のアドレスを参照で受け取ってアクセスするには
let &mut a=&v[0];
a.xxx = yyy;
でよいのでしょうか?
(基礎が分かって無いだけかもしれませんが)
今ネットで見たところ
let mut vec = Vec::new();
vec.push(1);
vec.push(2);
vec[0] = 7
という例がありました。
Vec<T>の要素Tが構造体の場合、
vec[0]のアドレスを参照で受け取ってアクセスするには
let &mut a=&v[0];
a.xxx = yyy;
でよいのでしょうか?
(基礎が分かって無いだけかもしれませんが)
265デフォルトの名無しさん
2020/10/12(月) 16:30:35.47ID:ldeP4Qys .get
.get_mut
.get_mut
266デフォルトの名無しさん
2020/10/12(月) 16:48:39.55ID:Z3Kcjb2S267デフォルトの名無しさん
2020/10/12(月) 17:02:51.68ID:tosLr/AM std::ops::Indexとstd::ops::IndexMutをリファレンスで見て
268デフォルトの名無しさん
2020/10/12(月) 17:06:26.06ID:tosLr/AM269デフォルトの名無しさん
2020/10/12(月) 19:19:30.09ID:Z3Kcjb2S270デフォルトの名無しさん
2020/10/12(月) 19:50:22.11ID:ldeP4Qys https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=a388e403b6cd7afe902a9fd8618b5a65
質問内容とブレてたらごめんなさい
質問内容とブレてたらごめんなさい
271デフォルトの名無しさん
2020/10/12(月) 19:53:01.17ID:P0Nqqpd2 TがCopyだと let &mut a = &mut v[0]; ならコンパイル通っちゃうのは落とし穴かもしれない
272デフォルトの名無しさん
2020/10/12(月) 19:54:11.97ID:P0Nqqpd2 >>270
get_mutをunwrapしちゃうなら普通に &mut v[0] で良いと思う
get_mutをunwrapしちゃうなら普通に &mut v[0] で良いと思う
273デフォルトの名無しさん
2020/10/20(火) 10:25:29.99ID:ohigEgI0 Rustは2番目にエネルギー効率の良い言語
https://okuranagaimo.blogspot.com/2020/10/blog-post_19.html
https://okuranagaimo.blogspot.com/2020/10/blog-post_19.html
274デフォルトの名無しさん
2020/10/20(火) 12:34:59.11ID:MZbW1JAa アセンブラ使えないやつがいるとは。
275デフォルトの名無しさん
2020/10/20(火) 19:00:44.91ID:CHq3Beyq 勉強始めたばかりですが変数のシャドーイングって必要ですか?
なんとなくグローバルに置いた変数もシャドーイングできそうなのですが実害は出たことありますか?
多分ないと思いますが…
なんとなくグローバルに置いた変数もシャドーイングできそうなのですが実害は出たことありますか?
多分ないと思いますが…
276デフォルトの名無しさん
2020/10/20(火) 19:31:52.86ID:KPdri9BA Which Programming Languages Use the Least Electricity?
https://thenewstack.io/which-programming-languages-use-the-least-electricity/
> Energy consumed Run-time
> C 57J 2019 ms
> Rust 59J 2103 ms
> C++ 77J 3155 ms
> Ada 98J 3740 ms
> Java 114J 3821 ms
https://thenewstack.io/which-programming-languages-use-the-least-electricity/
> Energy consumed Run-time
> C 57J 2019 ms
> Rust 59J 2103 ms
> C++ 77J 3155 ms
> Ada 98J 3740 ms
> Java 114J 3821 ms
277デフォルトの名無しさん
2020/10/20(火) 20:46:27.74ID:7hmMXh1W デバッグやバグ修正に必要なエネルギーコストを加味したらCより効率よくなりそう
278デフォルトの名無しさん
2020/10/21(水) 02:18:21.88ID:Q9+kxPSM Rustはビルドでめっちゃ電力使うやろ
279デフォルトの名無しさん
2020/11/01(日) 07:27:17.14ID:an3UASXf let mut bt = (0..10).collect::<BTreeSet<_>>();
for e in bt.iter() {
// ここで条件に一致する要素をbtから削除したい
}
こんな感じのものを作りたくなったのですがどうすればいいのでしょうか?
うまい具合にやる方法が思いつかなくて以下のようにやっているのですが、なんというかすごくアホくさいというか・・・
let mut bt = (0..10).collect::<BTreeSet<_>>();
let mut temp = Vec::new()
for e in bt.iter() {
if e == Foo { temp.push(e); } // 削除予定のものをtempに入れる
}
for e in temp {
bt.remove(&e);
}
for e in bt.iter() {
// ここで条件に一致する要素をbtから削除したい
}
こんな感じのものを作りたくなったのですがどうすればいいのでしょうか?
うまい具合にやる方法が思いつかなくて以下のようにやっているのですが、なんというかすごくアホくさいというか・・・
let mut bt = (0..10).collect::<BTreeSet<_>>();
let mut temp = Vec::new()
for e in bt.iter() {
if e == Foo { temp.push(e); } // 削除予定のものをtempに入れる
}
for e in temp {
bt.remove(&e);
}
280デフォルトの名無しさん
2020/11/01(日) 11:33:15.11ID:lQA9Y5E+ let bt = (0..10).filter(|e| eが要るなら真).collect::<BtreeSet<_>>();
じゃあかんのか
じゃあかんのか
281デフォルトの名無しさん
2020/11/01(日) 13:38:40.42ID:an3UASXf btがこの例のとおりのものならそれでいいんですけど、
いろんな状況でbtに要素が追加されるっていう感じです
あと、if e == Fooはちょっと雑すぎましたif is_xxx(e)とかのほうがよいです
いろんな状況でbtに要素が追加されるっていう感じです
あと、if e == Fooはちょっと雑すぎましたif is_xxx(e)とかのほうがよいです
282デフォルトの名無しさん
2020/11/01(日) 17:37:39.36ID:o3MRCmTo コンテナのイテレーターのループ回してる間にコンテナの要素を追加や削除は出来ない。これは他のコンテナ(Vecなど)でもそう。どうしてもやるなら内部実装を理解した上でunsafeな方法で。
「いろんな状況でbtに要素が追加される」がループ中なのか何なのか分からないのでどうしようもないが、
let bt = bt.into_iter().filter(|&e| e == foo).collect::<std::collections::BTreeSet<_>>();
で新たなbtを作るか、
もとのbtから要素を削除するにしても
for e in bt.iter().filter(|&&e| e == foo).cloned().collect::<Vec<_>>() {
bt.remove(&e);
}
などでもう少し簡潔に書ける。
「いろんな状況でbtに要素が追加される」がループ中なのか何なのか分からないのでどうしようもないが、
let bt = bt.into_iter().filter(|&e| e == foo).collect::<std::collections::BTreeSet<_>>();
で新たなbtを作るか、
もとのbtから要素を削除するにしても
for e in bt.iter().filter(|&&e| e == foo).cloned().collect::<Vec<_>>() {
bt.remove(&e);
}
などでもう少し簡潔に書ける。
283デフォルトの名無しさん
2020/11/01(日) 18:31:04.97ID:adfXjKjb BTreeSet::drain_filter が安定化されるのを待とう
std::collections の unatable な機能を含めて切り出した crate とかあれば良いのに
std::collections の unatable な機能を含めて切り出した crate とかあれば良いのに
284デフォルトの名無しさん
2020/11/01(日) 18:31:59.68ID:adfXjKjb >>282
Vec::retain がある。
Vec::retain がある。
285デフォルトの名無しさん
2020/11/01(日) 19:09:00.30ID:o3MRCmTo retainやdrain_filterについて不勉強だった。ありがとう。
286デフォルトの名無しさん
2020/11/06(金) 03:44:45.46ID:S3a0GE/K Rust book 構造体の章の以下のコード片なんですが
let mut user1 = User {
email: String::from("someone@example.com"),
email: String::from("someusername123"),
active: true,
sign_in_count: 1,
}
user1.email = String::from("another@example.com");
//コード片ここまで
最後の行でどこからも参照されなくなった元の
String::from("someone@example.com")
は、どういう理屈で解放されるんでしょうか?
もしGC言語なら最後の行でGC対象になるとこですけど。
Rust bookのこれ以前の章で、変数がスコープを外れるときdropが呼ばれることの説明はあったのですが、変数の束縛外れちゃったStringはいつ、どこで?
let mut user1 = User {
email: String::from("someone@example.com"),
email: String::from("someusername123"),
active: true,
sign_in_count: 1,
}
user1.email = String::from("another@example.com");
//コード片ここまで
最後の行でどこからも参照されなくなった元の
String::from("someone@example.com")
は、どういう理屈で解放されるんでしょうか?
もしGC言語なら最後の行でGC対象になるとこですけど。
Rust bookのこれ以前の章で、変数がスコープを外れるときdropが呼ばれることの説明はあったのですが、変数の束縛外れちゃったStringはいつ、どこで?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 国民 居住目的でない住宅所有者に「空室税」課せる法案を提出 [少考さん★]
- 国民 居住目的でない住宅所有者に「空室税」課せる法案を提出 ★2 [少考さん★]
- 「働いて働いて」の流行語大賞に懸念 「言葉が独り歩き」 過労自殺遺族 [尺アジ★]
- アメリカ、入国時に「日本人を含む外国人観光客の最大5年分のSNS履歴の提出」義務化へ 過去10年間に使用のメールアドレスや電話番号等も★3 [Hitzeschleier★]
- 【画像】消えた美人女優 上原多香子さん(42)、沖縄で目撃される [牛丼★]
- 「暖房が使えない」「食費が高くて子どもの栄養が…」 物価高に苦しむ子育て世帯、政府に期待する支援は ★2 [蚤の市★]
- 【高市悲報】JA、発狂www「臨時に経費率を下げるので、どうかお米券を使ってください」 [246620176]
- 【実況】博衣こよりのえちえちダンガンロンパ2🧪★1
- 高市早苗、森元総理の愛人だった [347751896]
- CoCo壱で毎回カレー食わない
- 【高市朗報】中国、歴史上日本に一度も侵攻したことがない親日国だった [931948549]
- 新たなる弱男判定法見つかるwwwwwwwwwwwwwwwwww
