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
365デフォルトの名無しさん
2020/04/03(金) 14:52:15.88ID:11HfTHW1 test bench_test ... bench: 111,111 ns/iter (+/- 11,111)
ベンチマークの +/- ってどういう意味?
ベンチマークの +/- ってどういう意味?
366デフォルトの名無しさん
2020/04/03(金) 15:47:04.36ID:uTu5qR57 >>363
is_none()は==NULLや==nilと同じ書き忘れのリスクを伴う"プログラマの注意力"を消耗するだけのゴミだろ
is_none()は==NULLや==nilと同じ書き忘れのリスクを伴う"プログラマの注意力"を消耗するだけのゴミだろ
367デフォルトの名無しさん
2020/04/03(金) 17:29:34.32ID:q/cvlU88 >>365
サンプルのmax - min
https://github.com/rust-lang/rust/blob/master/src/libtest/bench.rs#L57
min, maxは上下5%の外れ値処理をした後のものみたい
サンプルのmax - min
https://github.com/rust-lang/rust/blob/master/src/libtest/bench.rs#L57
min, maxは上下5%の外れ値処理をした後のものみたい
368デフォルトの名無しさん
2020/04/03(金) 19:54:55.15ID:CGYa3yhA if letやmatchにしないとSomeだったときの処理書けないしょ
369デフォルトの名無しさん
2020/04/03(金) 23:35:51.11ID:gSdeIOHU 最近勉強し始めたんだけどムズすぎ😭
370デフォルトの名無しさん
2020/04/04(土) 00:07:28.35ID:cnL2FB3T rust実用化に成功したプロジェクトって何があるの?お前らの会社では成功してるの?
371デフォルトの名無しさん
2020/04/04(土) 00:29:58.91ID:hnhE9+15 実用化って何
372デフォルトの名無しさん
2020/04/04(土) 01:42:27.61ID:R4+HYdkE rustで作ったメカの中でセックスしましたみたいな
373デフォルトの名無しさん
2020/04/04(土) 04:16:29.04ID:aJleCvsu use chrono::{Utc, TimeZone};
assert_eq!(Utc.ymd(2015, 5, 15).to_string(), "2015-05-15UTC");
なんでこれって静的メソッドじゃないのにself省略で使えるんですか?
https://docs.rs/chrono/0.4.11/chrono/offset/trait.TimeZone.html#method.ymd
assert_eq!(Utc.ymd(2015, 5, 15).to_string(), "2015-05-15UTC");
なんでこれって静的メソッドじゃないのにself省略で使えるんですか?
https://docs.rs/chrono/0.4.11/chrono/offset/trait.TimeZone.html#method.ymd
374デフォルトの名無しさん
2020/04/04(土) 08:43:05.69ID:ziV4A0+Z Utcはフィールドを持たないstructだから
イメージ的にはUtc{}.ymdとしているかんじ
イメージ的にはUtc{}.ymdとしているかんじ
375デフォルトの名無しさん
2020/04/04(土) 11:37:00.81ID:oHbtMe0Y Unit-like structsってやつだね
376デフォルトの名無しさん
2020/04/04(土) 16:49:30.52ID:aJleCvsu 公開されていないLoopStateっていうenum使いたいんですけどコンパイラーオプションとか属性とかで使う方法ありませんか?
https://doc.rust-lang.org/src/core/iter/mod.rs.html#371-422
https://doc.rust-lang.org/src/core/iter/mod.rs.html#371-422
377デフォルトの名無しさん
2020/04/04(土) 17:26:12.04ID:9lNQDQEm pub が付いてないものをそんなに簡単に使えたらモジュールの意味がないやろ……。
378デフォルトの名無しさん
2020/04/04(土) 17:26:43.72ID:9lNQDQEm そのモジュールをコピペして新しいモジュールを作れば自由に出来るんとちゃう?
379デフォルトの名無しさん
2020/04/04(土) 20:00:52.19ID:BQ+xJjAs Docs.rsのメソッドの引数の見方がわからん
具体的には
https://docs.rs/image/0.23.2/image/struct.Frames.htmlの
pub fn new(iterator: Box<dyn Iterator<Item = ImageResult<Frame>> + 'a>) -> Self
具体的には
https://docs.rs/image/0.23.2/image/struct.Frames.htmlの
pub fn new(iterator: Box<dyn Iterator<Item = ImageResult<Frame>> + 'a>) -> Self
380デフォルトの名無しさん
2020/04/04(土) 20:42:49.37ID:oHbtMe0Y iteratorを受け取ってSelfを返す。
iteratorは各要素がImageResult<Frame>のもの
Box<dyn …>してるのはコンパイル時にTrait ObjecのSizeが決まるようにするため
(Generics使えば不要)
‘aはiteratorのlifetimeをSelfのlifetimeにするため
iteratorは各要素がImageResult<Frame>のもの
Box<dyn …>してるのはコンパイル時にTrait ObjecのSizeが決まるようにするため
(Generics使えば不要)
‘aはiteratorのlifetimeをSelfのlifetimeにするため
381デフォルトの名無しさん
2020/04/04(土) 22:54:06.10ID:BQ+xJjAs382デフォルトの名無しさん
2020/04/05(日) 10:19:35.11ID:LNp8foc9 >>381
dyn は C++ で言う抽象クラスみたいなもんだよ。
トレイトオブジェクトというのは実際にはそのトレイトを実装している様々な型の可能性があって、
それら全てを格納可能な大きさはわからない。
Box は C/C++ でいうポインタみたいな用途で使われる。
大きさがわからなくてもオブジェクトの場所を指すことは出来る。
「そのトレイトを実装している型ならなんでも」と「そのトレイトを実装している型のいずれか」というのは違う意味で、
ジェネリクスは後者。
言い換えると、実行時にディスパッチされる多相とコンパイル時にディスパッチされる多相ってこと。
コンパイル時に型がわかるのなら大きさもコンパイル時にわかる。
大きさがわかるなら Box を経由しなくていい。
ライフタイムの 'a は Frames の型引数の 'a と同じだから、
new の返り値 (Self) の寿命は iterator の寿命と同じになる。
dyn は C++ で言う抽象クラスみたいなもんだよ。
トレイトオブジェクトというのは実際にはそのトレイトを実装している様々な型の可能性があって、
それら全てを格納可能な大きさはわからない。
Box は C/C++ でいうポインタみたいな用途で使われる。
大きさがわからなくてもオブジェクトの場所を指すことは出来る。
「そのトレイトを実装している型ならなんでも」と「そのトレイトを実装している型のいずれか」というのは違う意味で、
ジェネリクスは後者。
言い換えると、実行時にディスパッチされる多相とコンパイル時にディスパッチされる多相ってこと。
コンパイル時に型がわかるのなら大きさもコンパイル時にわかる。
大きさがわかるなら Box を経由しなくていい。
ライフタイムの 'a は Frames の型引数の 'a と同じだから、
new の返り値 (Self) の寿命は iterator の寿命と同じになる。
383デフォルトの名無しさん
2020/04/05(日) 11:42:45.53ID:/6aVgV0B Boxと&dynの違いって参照元がヒープかスタックかの違い?
384デフォルトの名無しさん
2020/04/05(日) 14:13:55.26ID:8bGOOvBY >>383
そう
そう
385デフォルトの名無しさん
2020/04/05(日) 14:35:00.95ID:8bGOOvBY >>381
大前提として変数や関数の引数や戻り値はコンパイル時にサイズが決まってないといけない
Iterator Traitを実装してる型を引数として受け取りたいからといって
`pub fn new(iterator: Iterator<…>) -> Self` と書くと
Iterator Traitのサイズがコンパイル時にはわからないのでコンパイルエラーになる
`let foo: str;`でエラーになるのと同じ
Box<dyn Trait>か&dyn Traitの形にすれば
Iterator Traitへの参照(=Trait Objectというfatポインタ)になって
受け渡しするサイズが固定されるのでエラーにならない
ジェネリクスを使って
`pub fn new<T: Iterator<…>>(iterator: T) -> Self` と書いた場合は
実際の呼び出しに使われているTの型ごとにコンパイラがバイナリを生成するので
コンパイル時にTのサイズが決まってる (impl Trait使った場合も同じ)
>>382も書いてるように前者は動的ディスパッチ、後者は静的ディスパッチなので
異なる型が混在するコレクションを使いたい時やバイナリサイズを小さくしたい時以外は
ジェネリクスを選ぶほうが一般的
大前提として変数や関数の引数や戻り値はコンパイル時にサイズが決まってないといけない
Iterator Traitを実装してる型を引数として受け取りたいからといって
`pub fn new(iterator: Iterator<…>) -> Self` と書くと
Iterator Traitのサイズがコンパイル時にはわからないのでコンパイルエラーになる
`let foo: str;`でエラーになるのと同じ
Box<dyn Trait>か&dyn Traitの形にすれば
Iterator Traitへの参照(=Trait Objectというfatポインタ)になって
受け渡しするサイズが固定されるのでエラーにならない
ジェネリクスを使って
`pub fn new<T: Iterator<…>>(iterator: T) -> Self` と書いた場合は
実際の呼び出しに使われているTの型ごとにコンパイラがバイナリを生成するので
コンパイル時にTのサイズが決まってる (impl Trait使った場合も同じ)
>>382も書いてるように前者は動的ディスパッチ、後者は静的ディスパッチなので
異なる型が混在するコレクションを使いたい時やバイナリサイズを小さくしたい時以外は
ジェネリクスを選ぶほうが一般的
386デフォルトの名無しさん
2020/04/05(日) 17:53:06.31ID:fOt2g8TG あーなんとなくわかってっきた
ジェネリクスと同じことがトレイトオブジェクトでも実現できて、その書き方がBox<dyn...>ということか
ジェネリクスと同じことがトレイトオブジェクトでも実現できて、その書き方がBox<dyn...>ということか
387デフォルトの名無しさん
2020/04/05(日) 19:06:03.32ID:LNp8foc9 同じことって言っちゃうと語弊がある気がするなぁ。
388デフォルトの名無しさん
2020/04/05(日) 21:52:05.83ID:/6aVgV0B そもそもRustはかなり型のサイズに厳しいけどなんで?
コンパイラの最適化のため?
コンパイラの最適化のため?
389デフォルトの名無しさん
2020/04/05(日) 22:38:29.83ID:8bGOOvBY >>388
他言語なら暗黙的に参照として扱われるようなものも
明示的に&を付けたりBox化することを求めるから厳しく感じるんだと思う
明示的に求めるのはowned/shared/mutableの3つを
一貫性を持って区別して書くようにっていう設計選択じゃないかな
>大前提として変数や関数の引数や戻り値はコンパイル時にサイズが決まってないといけない
↑これ他言語でも常識かもしれないけど自分はRustやるまで意識したことなかったよ
他言語なら暗黙的に参照として扱われるようなものも
明示的に&を付けたりBox化することを求めるから厳しく感じるんだと思う
明示的に求めるのはowned/shared/mutableの3つを
一貫性を持って区別して書くようにっていう設計選択じゃないかな
>大前提として変数や関数の引数や戻り値はコンパイル時にサイズが決まってないといけない
↑これ他言語でも常識かもしれないけど自分はRustやるまで意識したことなかったよ
390デフォルトの名無しさん
2020/04/05(日) 23:09:09.40ID:/qXmUwFk391デフォルトの名無しさん
2020/04/05(日) 23:12:44.10ID:/qXmUwFk 途中で送ってしもた。
rustでは当たり前に見えるけどこんな事してるのrustくらいでヒープが必要ならクロージャさえも自分でbox化する必要がある。
rustでは当たり前に見えるけどこんな事してるのrustくらいでヒープが必要ならクロージャさえも自分でbox化する必要がある。
392デフォルトの名無しさん
2020/04/05(日) 23:13:46.13ID:dvIeqTXE スタック上に長さ不定のデータが作れるとバグの温床になる。
他の言語だと大体の値がヒープに乗せること前提で動いているんで気にしたことが無いのだと思われる。
C/C++でも非推奨なんだけど、初心者向け釣りサイトでは平気でやってることがあるし、できちゃうから面倒
他の言語だと大体の値がヒープに乗せること前提で動いているんで気にしたことが無いのだと思われる。
C/C++でも非推奨なんだけど、初心者向け釣りサイトでは平気でやってることがあるし、できちゃうから面倒
393デフォルトの名無しさん
2020/04/06(月) 00:16:34.72ID:WU94L+3C 配列サイズが決められてないかつ、関数内で配列生成するけど返り値はサイズ固定のスライス記法の書き方するようにする方法ってない?
つまりはVecのアロケートが嫌な場合
fn name(v: Vec<A>) -> Vec<A> {
v.iter().map(***).collect
}
これだとスタック確保できるけど無駄なデータ入ってるし、動的なサイズの配列を返せない
fn name(v: Vec<A>) -> [i32; 10] {
let mut arr = [0; 10];
for (i, x) in v { arr[i] = x}
arr
}
こういうスライスのスタック版みたいな感じのことがしたい
fn name(v: Vec<A>) -> [A] {
let mut arr = [0; v.len()];
for (i, x) in v { arr[i] = x}
arr
}
つまりはVecのアロケートが嫌な場合
fn name(v: Vec<A>) -> Vec<A> {
v.iter().map(***).collect
}
これだとスタック確保できるけど無駄なデータ入ってるし、動的なサイズの配列を返せない
fn name(v: Vec<A>) -> [i32; 10] {
let mut arr = [0; 10];
for (i, x) in v { arr[i] = x}
arr
}
こういうスライスのスタック版みたいな感じのことがしたい
fn name(v: Vec<A>) -> [A] {
let mut arr = [0; v.len()];
for (i, x) in v { arr[i] = x}
arr
}
394デフォルトの名無しさん
2020/04/06(月) 00:54:32.32ID:jrbG9hxT395デフォルトの名無しさん
2020/04/06(月) 00:59:52.27ID:jrbG9hxT あと関数内部で配列生成したら
そのlifetimeが関数内に閉じるので参照も返せないね
そのlifetimeが関数内に閉じるので参照も返せないね
396デフォルトの名無しさん
2020/04/06(月) 01:07:26.57ID:jrbG9hxT やるとしたら
外側のスコープで固定サイズの配列をバッファとして作っておいて
関数ではバッファを満たして返すイメージ
外側のスコープで固定サイズの配列をバッファとして作っておいて
関数ではバッファを満たして返すイメージ
397デフォルトの名無しさん
2020/04/06(月) 01:16:22.32ID:FD55gb+K C言語でいうところの if ( (c=foo()) == bar) { ...(cを使う処理)
みたいなことやりたいんですがどうすればいいですか?
fooが結構重くて2回呼び出したくないのですが、
let c = foo();
if c == bar {...
とやるしかない?
みたいなことやりたいんですがどうすればいいですか?
fooが結構重くて2回呼び出したくないのですが、
let c = foo();
if c == bar {...
とやるしかない?
398デフォルトの名無しさん
2020/04/06(月) 01:49:32.44ID:JJIxYQHA matchとifガード使えば似たようなことは出来る
399デフォルトの名無しさん
2020/04/06(月) 02:48:45.03ID:WU94L+3C400デフォルトの名無しさん
2020/04/06(月) 03:03:32.80ID:jrbG9hxT >>397
@ bindingってのを使う
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=b2a16356c2c790985ddd937ccc2ca826
@ bindingってのを使う
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=b2a16356c2c790985ddd937ccc2ca826
401デフォルトの名無しさん
2020/04/06(月) 04:04:37.66ID:FD55gb+K >>398
match foo() {
c if c == bar => { .. },
_ => (),
}
こういう感じでしょうか。この場合だと記載量としてはかなり微妙ですが何かに使えそうなので覚えときます。
ありがとうございます。
>>399
今回の場合はfoo()がboolじゃないのと、barが変数なのでシャドーイングされてうまくいかないようです・・・。
if let foo @ bar = foo() { ...
みたいなことやろうとしましたがダメでした。
https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=d580f91c98f26cf52a23791489914ec3
match foo() {
c if c == bar => { .. },
_ => (),
}
こういう感じでしょうか。この場合だと記載量としてはかなり微妙ですが何かに使えそうなので覚えときます。
ありがとうございます。
>>399
今回の場合はfoo()がboolじゃないのと、barが変数なのでシャドーイングされてうまくいかないようです・・・。
if let foo @ bar = foo() { ...
みたいなことやろうとしましたがダメでした。
https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=d580f91c98f26cf52a23791489914ec3
402デフォルトの名無しさん
2020/04/06(月) 22:14:10.89ID:/YOLus+e403デフォルトの名無しさん
2020/04/06(月) 22:57:49.62ID:2RUK7fME Vecとかのコンテナ系の使い方は大分変わるよ
例えばイベント駆動の何かを作るときには考えた方が良いかと思う
struct XEventSource {
listeners : Vec<Box<dyn Handler>>,
...
}
trait Handler { fn handle(ev: &XEvent) -> () }
impl XEventSource {
fn addLisnter(&mut self, listener : Box<dyn Handler>) -> () {
self.listeners.push(listener);
}
fn emit(&self) -> () {
XEvent ev = ...;
for listener in listeners.iter() {
listener.handle(&ev);
}
}
}
みたいに作ると、利用者が好きに作った構造体でもHandlerをimplすればlistenersに足せる
ジェネリクスだとイベントリスナの実際の型1つしかaddできないので不便
例えばイベント駆動の何かを作るときには考えた方が良いかと思う
struct XEventSource {
listeners : Vec<Box<dyn Handler>>,
...
}
trait Handler { fn handle(ev: &XEvent) -> () }
impl XEventSource {
fn addLisnter(&mut self, listener : Box<dyn Handler>) -> () {
self.listeners.push(listener);
}
fn emit(&self) -> () {
XEvent ev = ...;
for listener in listeners.iter() {
listener.handle(&ev);
}
}
}
みたいに作ると、利用者が好きに作った構造体でもHandlerをimplすればlistenersに足せる
ジェネリクスだとイベントリスナの実際の型1つしかaddできないので不便
404デフォルトの名無しさん
2020/04/06(月) 23:45:59.83ID:TaQVQ6iW >>402
実行時に型を振り分けるとなると仮想関数テーブルを辿る必要があるんで実行時コストが少し増えるよ。
(Rust では仮想関数って言わないのかな? 正確な用語がわからん。)
トレイトを実装している型を実際には一種類しか使わないのだったら、
実行時間を除けば見かけ上の動作で違いはないかもしれんな。
でも基本的にはやりたいことを出来る範囲で制約は厳しい方がいい。
間違いの検出される可能性が高まるから。
制約をどのように表現するかというのはプログラミング言語の設計においては重要なトピックで、
構造化プログラミングが提唱されたのも goto だと制御をどこへ移動するのか制約を付けられないってのがある。
さらにそれを発展させた形として型で制約を付けようってのが色々と考えられてきたし、
Rust では更にオブジェクトの寿命に制約を付けようという考えが実現された。
その関数では何ができるのか、そして「何をしてはいけないのか」ってのを考えると
Rust らしいプログラムが出来ると思う。
実行時に型を振り分けるとなると仮想関数テーブルを辿る必要があるんで実行時コストが少し増えるよ。
(Rust では仮想関数って言わないのかな? 正確な用語がわからん。)
トレイトを実装している型を実際には一種類しか使わないのだったら、
実行時間を除けば見かけ上の動作で違いはないかもしれんな。
でも基本的にはやりたいことを出来る範囲で制約は厳しい方がいい。
間違いの検出される可能性が高まるから。
制約をどのように表現するかというのはプログラミング言語の設計においては重要なトピックで、
構造化プログラミングが提唱されたのも goto だと制御をどこへ移動するのか制約を付けられないってのがある。
さらにそれを発展させた形として型で制約を付けようってのが色々と考えられてきたし、
Rust では更にオブジェクトの寿命に制約を付けようという考えが実現された。
その関数では何ができるのか、そして「何をしてはいけないのか」ってのを考えると
Rust らしいプログラムが出来ると思う。
405デフォルトの名無しさん
2020/04/07(火) 08:14:23.99ID:FPXvnSDp APIサーバーでJSON受け取るときに値の型が違ったりオーバーフローするときってどうしてる?
serde_json::from_str で構造体の属性でエラーメッセージとかつけれたらいいのにな
serde_json::from_str で構造体の属性でエラーメッセージとかつけれたらいいのにな
406デフォルトの名無しさん
2020/04/07(火) 15:06:01.62ID:+YUDNjw9 from_strの結果そのまま使ってるけどダメなの
シンタックスエラーとか含めると大変じゃない
シンタックスエラーとか含めると大変じゃない
407デフォルトの名無しさん
2020/04/07(火) 15:54:15.51ID:FPXvnSDp 海外向けサーバーだったらいいけど日本向けサーバーの場合は?
serde_jsonのエラーメッセージcustomizableじゃないから辛い
serde_jsonのエラーメッセージcustomizableじゃないから辛い
408デフォルトの名無しさん
2020/04/07(火) 16:02:31.28ID:+YUDNjw9 serde_json::Error を見ると行と列と大雑把な原因はとれるみたい
細かくやるなら置換するしかなさそうだね
細かくやるなら置換するしかなさそうだね
409デフォルトの名無しさん
2020/04/08(水) 10:01:13.64ID:qyTF9Er6 reached the configured maximum number of stack frames
でスタックフレームの制限にかかるんだけどオプションとかで変えれる?
でスタックフレームの制限にかかるんだけどオプションとかで変えれる?
410デフォルトの名無しさん
2020/04/11(土) 23:13:20.24ID:EhWtF4tX impl<'_, T> Drop for std::collections::vec_deque::Drain<'_, T>
こういう風にちゃんとパス書かれたのもあれば、デフォルトインポートされてないのに省略されてる型あるけどどうなってるの?
https://doc.rust-lang.org/std/ops/trait.Drop.html
こういう風にちゃんとパス書かれたのもあれば、デフォルトインポートされてないのに省略されてる型あるけどどうなってるの?
https://doc.rust-lang.org/std/ops/trait.Drop.html
411デフォルトの名無しさん
2020/04/11(土) 23:59:49.19ID:Ni1vKiQd フルパス書かなくてもいいように
mod.rsに指定されてるものとされてないもの
mod.rsに指定されてるものとされてないもの
412デフォルトの名無しさん
2020/04/12(日) 23:38:47.63ID:dFThPQBr クロージャの再帰呼び出しってできないんですか?
413デフォルトの名無しさん
2020/04/13(月) 09:02:25.60ID:45YCco/F それが必要な理由は?ここはお前の便利帳じゃねーんだから
有益な使い方が有れば紹介してから聞け
有益な使い方が有れば紹介してから聞け
415デフォルトの名無しさん
2020/04/13(月) 11:59:07.30ID:WFzH9Pd8416デフォルトの名無しさん
2020/04/14(火) 07:17:51.31ID:WrIQImmd Copyでの関数呼び出しとポインタ作成ってコスト的にはプリミティブのどの型からが処理重い?
ここらへんCSの知識ないからわかんない
ここらへんCSの知識ないからわかんない
417デフォルトの名無しさん
2020/04/15(水) 02:35:11.54ID:rawye3jg Rust仕事で使ってる人〜
ウチはコロナの影響でプロジェクト吹き飛んだよん( ;∀;)
ウチはコロナの影響でプロジェクト吹き飛んだよん( ;∀;)
418デフォルトの名無しさん
2020/04/15(水) 02:44:45.60ID:hMxv+37E あらら(´・ω・`)
419デフォルトの名無しさん
2020/04/15(水) 05:30:29.65ID:SZSUFLJC 組み込みで試験的に導入したけどムズイ
まあ慣れの問題もあるのだろうけど
まあ慣れの問題もあるのだろうけど
420デフォルトの名無しさん
2020/04/15(水) 21:10:37.56ID:mcKFmUGe 組み込みでrustに似た言語。ATS2が。
421デフォルトの名無しさん
2020/04/15(水) 21:11:58.85ID:60TKpqE+ Nimは?
422デフォルトの名無しさん
2020/04/15(水) 21:27:25.14ID:8I3eMZIA ATS2ってRust以上にドキュメントが少なくてHaskell以上に難解なアレじゃないですかやだー!
423デフォルトの名無しさん
2020/04/15(水) 23:28:51.38ID:hMxv+37E やだー!
424デフォルトの名無しさん
2020/04/16(木) 09:03:49.64ID:YGIESbh5 Rust界隈で一番貢献度高いのってAlexとかになるかな?
425デフォルトの名無しさん
2020/04/17(金) 14:41:30.42ID:SjHnVlOc Microsoftに期待してるんだが今はそれどころじゃ無さそう
426デフォルトの名無しさん
2020/04/18(土) 00:35:43.07ID:Dq0Xmd2Y Alexは人の話聞けっていう
427デフォルトの名無しさん
2020/04/18(土) 07:35:23.99ID:mN+EtaBg428デフォルトの名無しさん
2020/04/18(土) 15:23:13.66ID:8wM3wY+l 勉強がてらこちらの二分探索木を真似してみたのですが、コンパイルエラーが出てしまいます。
https://codereview.stackexchange.com/questions/133209/binary-tree-implementation-in-rust
playgroundで試してみた結果がこれです。
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=fc1fe0d2a4c39c6b28d017539419fa2a
どうやら古いRustならコンパイルが通るようなのですが、今のRustでコンパイルを通すにはどうすればよいのでしょうか?
https://codereview.stackexchange.com/questions/133209/binary-tree-implementation-in-rust
playgroundで試してみた結果がこれです。
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=fc1fe0d2a4c39c6b28d017539419fa2a
どうやら古いRustならコンパイルが通るようなのですが、今のRustでコンパイルを通すにはどうすればよいのでしょうか?
429デフォルトの名無しさん
2020/04/18(土) 18:14:53.19ID:EW6Y9RQI Alexが人の話聞かないってこと?
430デフォルトの名無しさん
2020/04/19(日) 10:46:13.87ID:8Q+7ObaB ダメ出しよろ https://ideone.com/fswv4P
431デフォルトの名無しさん
2020/04/19(日) 12:14:31.72ID:lAlWodFD 非常に良いと思います。flagの意図を読み解くのが少し難しいくらいです。
432デフォルトの名無しさん
2020/04/20(月) 08:24:43.01ID:JR6Mr590 確かにflagが読みづらいからコメントは欲しいかな
個人的にはuse Exp::*;とExp::V => Exp::Valueにするのとテストケース増やしてmod testsにするかな
let exp = Value("MITSU").add(Value("MITSU")).add(Value("MITSU")).eql(Value("CORONA"));
let solver = Solver::new(exp);
// prints solved exp
solver.solve();
最初のインスタンスは読みにくいからこうするかも、それかマクロかビルダー作るか
個人的にはuse Exp::*;とExp::V => Exp::Valueにするのとテストケース増やしてmod testsにするかな
let exp = Value("MITSU").add(Value("MITSU")).add(Value("MITSU")).eql(Value("CORONA"));
let solver = Solver::new(exp);
// prints solved exp
solver.solve();
最初のインスタンスは読みにくいからこうするかも、それかマクロかビルダー作るか
433デフォルトの名無しさん
2020/04/23(木) 19:29:00.20ID:WjWrG05V トレイトって機能を追加するときどういう機能であるかの特徴を一見して分かりやすくするためだけのもの?
434デフォルトの名無しさん
2020/04/23(木) 20:53:30.42ID:87GHMCpD 振る舞いや
435デフォルトの名無しさん
2020/04/23(木) 22:36:03.84ID:5udoMUF9436デフォルトの名無しさん
2020/04/25(土) 02:58:36.79ID:FXjmUrQ8 これライフタイム記述を省略できないのなんで? https://git.io/JfL6t
437デフォルトの名無しさん
2020/04/25(土) 21:29:12.23ID:2AkpFzKs 省略してコンパイラ通るけどstableは無理なん?
438デフォルトの名無しさん
2020/04/26(日) 00:34:16.68ID:eoUYVhAX 関数内で同じ一連の処理を複数回実行するときマクロにまとめるのが一般的?それともクロージャ?
他にやりかたある?
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=30449f979231232b68016cab5cd1fb1e
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=e5fc7f66785bb3794df19104d5c479ff
他にやりかたある?
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=30449f979231232b68016cab5cd1fb1e
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=e5fc7f66785bb3794df19104d5c479ff
439デフォルトの名無しさん
2020/04/26(日) 01:44:31.54ID:bgNhzTiH440デフォルトの名無しさん
2020/04/26(日) 01:49:37.98ID:bgNhzTiH https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=b03bef5cb6f98821032c5fb1cce618a1
441デフォルトの名無しさん
2020/04/26(日) 08:01:37.17ID:eoUYVhAX そのコードは実際に使うコードじゃなくてさあ、変数が何個もあったりすると関数切り出しは引数が地獄になるじゃん
442デフォルトの名無しさん
2020/04/26(日) 11:00:13.57ID:bgNhzTiH その例でマクロかクロージャの二択ならクロージャだけど
>>438のは外側の変数をキャプチャすることで複雑化してるから&tangoを渡すようにする
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=ec760be4190e2ad4ab21fbea3c84b0ed
そうすると結局クロージャも関数と同じように適切なシグニチャを考える必要があるから
関数化に比べて楽ってことはないんじゃないかと思う
>>438のは外側の変数をキャプチャすることで複雑化してるから&tangoを渡すようにする
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=ec760be4190e2ad4ab21fbea3c84b0ed
そうすると結局クロージャも関数と同じように適切なシグニチャを考える必要があるから
関数化に比べて楽ってことはないんじゃないかと思う
443デフォルトの名無しさん
2020/04/26(日) 12:20:05.30ID:9haVb0dh Rustの問題集みたいなのってあったりする?
444デフォルトの名無しさん
2020/04/26(日) 12:50:17.90ID:9haVb0dh この連休である程度かけるようになりたい
445デフォルトの名無しさん
2020/04/26(日) 14:52:26.46ID:WcQXqCZk 連休だけでRustかけると思うことが間違ってるよ
446デフォルトの名無しさん
2020/04/26(日) 15:59:36.18ID:bgNhzTiH 公式のGithubにrustlingsっていう簡単な練習問題がある
The Bookを読んだ後に基本文法をおさらいしたい人向け
https://github.com/rust-lang/rustlings
The Bookを読んだ後に基本文法をおさらいしたい人向け
https://github.com/rust-lang/rustlings
447デフォルトの名無しさん
2020/04/26(日) 16:01:54.22ID:9haVb0dh >>446
うおおおおおおサンクス
うおおおおおおサンクス
448デフォルトの名無しさん
2020/04/27(月) 05:09:42.36ID:4dCrlHPD ↓Vecだと動くのに配列にするとコンパイルできないの何で?
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=6321129e5cc3853ef1421d706e19a136
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=6321129e5cc3853ef1421d706e19a136
449デフォルトの名無しさん
2020/04/27(月) 06:06:02.00ID:9c9dxgXm 配列にinto_iterしてもmoveされずに参照が返るから
450デフォルトの名無しさん
2020/04/27(月) 09:24:11.80ID:xj40wisa rustいつのまにか蟹のイメージになってるけど、オライリーの影響?それとももっと前から何かあるのかな?
451デフォルトの名無しさん
2020/04/27(月) 09:35:35.74ID:qLbh0tK5 よくしらんけどこれじゃね?
https://rustacean.net/
https://rustacean.net/
452デフォルトの名無しさん
2020/04/27(月) 12:48:32.95ID:vsE9eV5m let mut heap = BinaryHeap::new();
heap.push(10);
heap.push(9);
heap.push(20);
for x in &heap {
println!("{:?}", x);
}
これでバイナリヒープすると
20
9
10
ってなるんだけどバグ?
heap.push(10);
heap.push(9);
heap.push(20);
for x in &heap {
println!("{:?}", x);
}
これでバイナリヒープすると
20
9
10
ってなるんだけどバグ?
453デフォルトの名無しさん
2020/04/27(月) 12:51:07.20ID:On5R6UtW >>448
配列のIntoIteratorは
&[T; N]と&mut [T; N]に対して実装されてるが[T; N]に対しては実装されてないのでmove不可
対してVecのIntoIteratorは
&Vec<T>と&mut Vec<T>だけでなくVec<T>に対しても実装されてるので
moveが必要なコンテキストならIntoIterator for Vec<T>が選択されmove可能
配列のIntoIteratorは
&[T; N]と&mut [T; N]に対して実装されてるが[T; N]に対しては実装されてないのでmove不可
対してVecのIntoIteratorは
&Vec<T>と&mut Vec<T>だけでなくVec<T>に対しても実装されてるので
moveが必要なコンテキストならIntoIterator for Vec<T>が選択されmove可能
454デフォルトの名無しさん
2020/04/27(月) 12:53:27.20ID:ucpPL8Eb >>452
ドキュメントに書いてある通り、iterは適当な順序で出てくるので仕様。
https://doc.rust-lang.org/std/collections/struct.BinaryHeap.html
ドキュメントに書いてある通り、iterは適当な順序で出てくるので仕様。
https://doc.rust-lang.org/std/collections/struct.BinaryHeap.html
455デフォルトの名無しさん
2020/04/27(月) 13:16:59.92ID:On5R6UtW >>448
配列でやりたい場合はFooにClone実装してfoo.clone()
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=8fdb065f764ac7a0be3a3de161bfa984
配列でやりたい場合はFooにClone実装してfoo.clone()
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=8fdb065f764ac7a0be3a3de161bfa984
456デフォルトの名無しさん
2020/04/27(月) 14:12:45.55ID:ZRv/ULjO 学術の巨大掲示板群 - アルファ・ラボ
ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など
PS 連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など
PS 連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
457デフォルトの名無しさん
2020/04/27(月) 15:43:57.57ID:vsE9eV5m >>454
thx 見逃してた
thx 見逃してた
458デフォルトの名無しさん
2020/04/27(月) 17:58:08.76ID:4dCrlHPD 配列のIntoIteratorにmoveが実装されてないの何で?
459デフォルトの名無しさん
2020/04/27(月) 18:30:46.65ID:On5R6UtW >>458
詳しいことはよくわからないけど実装が難しかったみたいよ
興味あればこのissue読んでみて
https://github.com/rust-lang/rust/issues/25725
nightly使えばmoveできる機能はあるみたい
https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=6a22ab054f5ec52ea942a1186710a516
詳しいことはよくわからないけど実装が難しかったみたいよ
興味あればこのissue読んでみて
https://github.com/rust-lang/rust/issues/25725
nightly使えばmoveできる機能はあるみたい
https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=6a22ab054f5ec52ea942a1186710a516
460デフォルトの名無しさん
2020/04/27(月) 22:17:40.40ID:e7WQ8CRR >>457
型制約見ればええんやで。
`pub fn iter(&self) -> Iter<T>`は`impl<T> BinaryHeap<T>`。
`impl<T> BinaryHeap<T> where T: Ord,` に`pub fn into_sorted_vec(self) -> Vec<T>`てあるやろ。
rustのOrdは全順序や!
型制約見ればええんやで。
`pub fn iter(&self) -> Iter<T>`は`impl<T> BinaryHeap<T>`。
`impl<T> BinaryHeap<T> where T: Ord,` に`pub fn into_sorted_vec(self) -> Vec<T>`てあるやろ。
rustのOrdは全順序や!
461デフォルトの名無しさん
2020/04/28(火) 01:18:27.68ID:barKq4nx この場合はifを使うのとmatchを使うのとどっちがおすすめ?
if nanika_shori().filter(hoshiimonokana).is_some() {
hoge();
mitsukatta();
} else {
fuga();
mitsukaranakatta();
}
match nanika_shori() {
Some(butsu) if hoshiimonokana(butsu) => {
hoge();
mitsukatta();
}
_ => {
fuga();
mitsukaranakatta();
}
}
if nanika_shori().filter(hoshiimonokana).is_some() {
hoge();
mitsukatta();
} else {
fuga();
mitsukaranakatta();
}
match nanika_shori() {
Some(butsu) if hoshiimonokana(butsu) => {
hoge();
mitsukatta();
}
_ => {
fuga();
mitsukaranakatta();
}
}
462デフォルトの名無しさん
2020/04/28(火) 01:37:40.02ID:aaB86vh6463デフォルトの名無しさん
2020/04/28(火) 02:09:21.04ID:nfkWT3p7 テレワーク中なのか連休入ったせいなのか知らんけど猛者が全部回答してくれるから助かるわ
464デフォルトの名無しさん
2020/04/28(火) 07:51:49.83ID:SJTliuFD >>461
前者
前者
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 台湾有事での集団的自衛権行使に「賛成」が48.8%、「反対」が44.2% ★4 [♪♪♪★]
- 中国「国連安保理の許可なしに日本攻撃可能」 Xで旧敵国条項に言及… ★14 [BFU★]
- 台湾有事での集団的自衛権行使に賛成48.8%、「反対」が44.2% ★3 [♪♪♪★]
- 中国、日中韓首脳会談を拒否 1月開催打診も、首相答弁に反発 [ぐれ★]
- 中国の渡航自粛、影響は限定的 日本人客が来店しやすく [♪♪♪★]
- 【英FT】国土の大部分を日本の残忍な占領下におかれたという苦しみの記憶を今なお抱え続けている中国 [1ゲットロボ★]
- @@@令和七年大相撲九州場所 vol.11@@@
- 他サポ 2025-261
- ハム専ファンフェス
- 【NJPW】新日本プロレスワールド part.2412
- 【D専】
- 【DAZN】フォーミュラGP【F1 2 3 SF P】Lap1807
- 高市政権1カ月 政局のキーは公明 [834922174]
- 高市早苗「G20サミット、なめられない服を選びました。外交交渉でマウント取れる服買わないとなぁ」大炎上★3 [165981677]
- 高市早苗「G20サミット、なめられない服を選びました。外交交渉でマウント取れる服買わないとなぁ」大炎上★2 [165981677]
- 【んな専🏡】ルーナイトとたこ焼きパーティするのらぁ(・o・🍬)【ホロライブ▶】
- 有識者「高市総理は中国に切れるカードが3枚あります。その中で1番強力なのが半導体製造装置の輸出禁止」 [931948549]
- 金融所得課税(国民健康保保険料の算出+分離課税30%)よりまず、一律3割負担に医療負担を戻すべきではないのか [943688309]
