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
18デフォルトの名無しさん
2020/01/26(日) 21:41:08.18ID:afCDhAgp Vec<String> を拡張すると定義外ってエラー出るんですけどなんでかわかる人います?
他のライブラリでVec拡張してるソース見ると特殊なことせずにimplできてるんですけどどうすればこのエラー取り除けますか?
impl From<Vec<&str>> for Vec<String> {
fn from(v: Vec<&str>) -> Self {
v.into_iter().map(String::from).collect()
}
}
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
88 | impl From<Vec<&str>> for Vec<String> {
| ^^^^^---------------^^^^^-----------
| | | |
| | | `std::vec::Vec` is not defined in the current crate
| | `std::vec::Vec` is not defined in the current crate
| impl doesn't use only types from inside the current crate
|
他のライブラリでVec拡張してるソース見ると特殊なことせずにimplできてるんですけどどうすればこのエラー取り除けますか?
impl From<Vec<&str>> for Vec<String> {
fn from(v: Vec<&str>) -> Self {
v.into_iter().map(String::from).collect()
}
}
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
88 | impl From<Vec<&str>> for Vec<String> {
| ^^^^^---------------^^^^^-----------
| | | |
| | | `std::vec::Vec` is not defined in the current crate
| | `std::vec::Vec` is not defined in the current crate
| impl doesn't use only types from inside the current crate
|
2020/01/26(日) 22:08:40.96ID:ux8Vy6ZU
>>18
ざっくりいうと
外部crateで定義された型 + 外部crateで定義されたtrait
の組み合わせでインプリするのは無理
どっちか片方が自crateで定義されたものなら問題ない
coherence ruleとかorphan ruleとかいうやつ
https://doc.rust-lang.org/error-index.html#E0117
ざっくりいうと
外部crateで定義された型 + 外部crateで定義されたtrait
の組み合わせでインプリするのは無理
どっちか片方が自crateで定義されたものなら問題ない
coherence ruleとかorphan ruleとかいうやつ
https://doc.rust-lang.org/error-index.html#E0117
20デフォルトの名無しさん
2020/01/26(日) 23:22:19.61ID:afCDhAgp >>19
おお、ありがとう
impl Vec<&str> の単体でも駄目だったから自trait作って実装した!
結構制約厳しいな
外部トレイトに実装するならめんどくさいけどマーカーつけとけよって意味かな
おお、ありがとう
impl Vec<&str> の単体でも駄目だったから自trait作って実装した!
結構制約厳しいな
外部トレイトに実装するならめんどくさいけどマーカーつけとけよって意味かな
2020/01/27(月) 17:44:19.37ID:e3ktUGSY
こんな関数は書けますか?
@ イテレータを受け取る
A 受け取る引数は @ のただひとつのみ
B 条件を満たす範囲を「スライスで」返す
スライスを作る記法は &s[1..10] みたいな感じなのでスライスの元になるオブジェクト s が必要なように見えますが、
スライスを返したいというのはいかにもありそうなことなので出来ないはずはないだろうという思いもあります。
イテレータは実際にはなんらかのシーケンスをたどるものではなく値の生成器である場合もありますが、
それらを区別するような制約を表現できますか?
@ イテレータを受け取る
A 受け取る引数は @ のただひとつのみ
B 条件を満たす範囲を「スライスで」返す
スライスを作る記法は &s[1..10] みたいな感じなのでスライスの元になるオブジェクト s が必要なように見えますが、
スライスを返したいというのはいかにもありそうなことなので出来ないはずはないだろうという思いもあります。
イテレータは実際にはなんらかのシーケンスをたどるものではなく値の生成器である場合もありますが、
それらを区別するような制約を表現できますか?
2020/01/27(月) 18:55:02.93ID:Ad8VU0Ek
2020/01/27(月) 22:07:00.22ID:0eef+IwM
スライスは連続したメモリ領域である必要があって
任意のイテレータがその条件を満たすのは不可能。
たまたま連続した場合だけスライスを返すのはunsafe使えば書ける。
ただ普通はイテレータ返してランダムアクセス必要なタイミングでcollectすると思う。
任意のイテレータがその条件を満たすのは不可能。
たまたま連続した場合だけスライスを返すのはunsafe使えば書ける。
ただ普通はイテレータ返してランダムアクセス必要なタイミングでcollectすると思う。
2020/01/27(月) 22:21:05.46ID:0eef+IwM
あと標準のイテレータは特に値の生成方法に関する型制約はないので
区別したいなら独自のイテレータ型を作って
標準イテレータへの変換を実装する感じかな。
区別したいなら独自のイテレータ型を作って
標準イテレータへの変換を実装する感じかな。
2020/01/27(月) 22:29:13.49ID:ZEgWdqLw
入力が連続したメモリ領域だってんなら引数をイテレータじゃなくてスライスにすればいい
当たり前だけどスライスを作れるもの以外からはスライスは作れないからな
当たり前だけどスライスを作れるもの以外からはスライスは作れないからな
2020/01/27(月) 22:46:49.78ID:ZEgWdqLw
ごめん、なんか変なこと言ってるわ・・・スルーして
2020/01/27(月) 23:06:14.69ID:Ad8VU0Ek
>>23
>たまたま連続した場合だけスライスを返すのはunsafe使えば書ける。
イテレータを受け取ってスライスを返すとした場合
スライスの元になってるシーケンスのlifetimeが関数内に閉じるから
unsafe使ったとしてもborrow checkerにひっかからない?
>たまたま連続した場合だけスライスを返すのはunsafe使えば書ける。
イテレータを受け取ってスライスを返すとした場合
スライスの元になってるシーケンスのlifetimeが関数内に閉じるから
unsafe使ったとしてもborrow checkerにひっかからない?
2020/01/27(月) 23:19:10.77ID:2FR/nuYZ
>>27
from_raw_partsでスライスを作った場合は元のポインタ由来のライフタイムは関係なくなるので
ボローチェッカは通るんじゃないかな?
もちろんそのスライスの実体が生きているかどうかは
自己責任になるけど。
from_raw_partsでスライスを作った場合は元のポインタ由来のライフタイムは関係なくなるので
ボローチェッカは通るんじゃないかな?
もちろんそのスライスの実体が生きているかどうかは
自己責任になるけど。
2020/01/28(火) 00:18:00.02ID:nzUBCcWX
>>28
なるほど
イテレータからイテレータの元のシーケンスが取得できればそれでいけるってことか
ちょっと見てみたらslice::Iterのas_sliceとかも内部でfrom_raw_parts使ってた
自分では使わないと思うけど勉強になった
なるほど
イテレータからイテレータの元のシーケンスが取得できればそれでいけるってことか
ちょっと見てみたらslice::Iterのas_sliceとかも内部でfrom_raw_parts使ってた
自分では使わないと思うけど勉強になった
30デフォルトの名無しさん
2020/01/28(火) 10:36:24.22ID:ijxMtirO RustでOSのkernel描いてる例ある?
3121
2020/01/28(火) 10:56:11.58ID:jIEBko3c >>22-29
ありがとうございます。
スライスの役目や Rust の習慣について誤解していたみたいです。
【誤解】
スライスは範囲を表現する高級なオブジェクト
Vec にも配列にも使えるのでコンテナ全般に使えると思った
【正解】
スライスは「メモリの」範囲を表現するオブジェクト
実体としてはいわゆる fat pointer
【背景】
Vec は内部的に連続したメモリ領域で管理しているので普通の配列のようにスライスを作れる
C++ でいえば vector の data や string の c_str みたいなもの
【見落とし】
配列でも Vec でもスライスの型表記は同じなのでどうしてだろうと気にかかってはいたが掘り下げて調べなかった
型が同じなのは実際に同じだからなわけですね
ありがとうございます。
スライスの役目や Rust の習慣について誤解していたみたいです。
【誤解】
スライスは範囲を表現する高級なオブジェクト
Vec にも配列にも使えるのでコンテナ全般に使えると思った
【正解】
スライスは「メモリの」範囲を表現するオブジェクト
実体としてはいわゆる fat pointer
【背景】
Vec は内部的に連続したメモリ領域で管理しているので普通の配列のようにスライスを作れる
C++ でいえば vector の data や string の c_str みたいなもの
【見落とし】
配列でも Vec でもスライスの型表記は同じなのでどうしてだろうと気にかかってはいたが掘り下げて調べなかった
型が同じなのは実際に同じだからなわけですね
32デフォルトの名無しさん
2020/01/28(火) 12:14:44.10ID:w1x5kgyo 質問あると自分の理解が怪しいのが分かって助かるわ。
33デフォルトの名無しさん
2020/01/28(火) 19:57:36.65ID:DC7dbBDx let template = if spaces { "{1}{0}{1}" } else { "{1}{0}" };
format!(template, 1, 2);
これだとリテラルかけってエラー出るだけど、解決方法ないかな?
format!(template, 1, 2);
これだとリテラルかけってエラー出るだけど、解決方法ないかな?
2020/01/28(火) 20:03:41.33ID:UeuUZ8OR
iter[1..4]とか書けた方がiter.skil(1).take(4).collect()よりシンプルでええやん!
とは思ったが、そういう使い方したらそもそも駄目よ、という意思が表れているのかもしれん
とは思ったが、そういう使い方したらそもそも駄目よ、という意思が表れているのかもしれん
2020/01/28(火) 20:21:31.82ID:F/6MF06M
36デフォルトの名無しさん
2020/01/28(火) 22:00:20.47ID:DC7dbBDx >>34
range(&self, from: usize, to: usize) -> Option
があればいいのにね
>> 35
ありがとう、リテラルのみは統一感出るけどかなり不便だね。
デバッグ用じゃなくともDisplayとかもあるからResult返すマクロも入れといてくれたらいいのにね
range(&self, from: usize, to: usize) -> Option
があればいいのにね
>> 35
ありがとう、リテラルのみは統一感出るけどかなり不便だね。
デバッグ用じゃなくともDisplayとかもあるからResult返すマクロも入れといてくれたらいいのにね
2020/01/28(火) 22:12:59.36ID:hojGZimv
>>36
いえいえ
いえいえ
2020/01/28(火) 22:31:23.29ID:KmVlGMrW
39デフォルトの名無しさん
2020/01/29(水) 00:56:46.27ID:OlGAjZi3 collectを二度書くと罪悪感で一度にならないか一生懸命考える
2020/01/29(水) 02:14:46.64ID:V4INQ4I7
>>33
単純な用途ならリテラル返すマクロを書くといいかも
複雑な用途ならテンプレートエンジンかな
macro_rules! my_format {
(true) => ("{1}{0}{1}");
(false) => ("{1}{0}");
}
println!(my_format!(true), 1, 2);
単純な用途ならリテラル返すマクロを書くといいかも
複雑な用途ならテンプレートエンジンかな
macro_rules! my_format {
(true) => ("{1}{0}{1}");
(false) => ("{1}{0}");
}
println!(my_format!(true), 1, 2);
2020/02/01(土) 18:37:08.80ID:saBYxsru
https://tech-blog.optim.co.jp/entry/2019/07/18/173000#%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E6%A9%9F%E8%83%BD%E3%81%AE%E6%B4%BB%E7%94%A8
のデバッグ機能の追加のところを読んで一通り導入してみたんだが、ブレークポイントで止まったところがなぜかバイナリ表示になってしまう
解決策を教えてください
のデバッグ機能の追加のところを読んで一通り導入してみたんだが、ブレークポイントで止まったところがなぜかバイナリ表示になってしまう
解決策を教えてください
2020/02/02(日) 05:59:15.53ID:DhujQgFD
Slackで聞け
2020/02/02(日) 19:09:35.21ID:Ng7YaIlp
>>41
CodeLLDB初めて使ってみたがオレ環では特に問題なく使える
ソースマップ定義してないから標準ライブラリとかにstep inすればバイナリで表示されるけど
自分のソースのブレークポイントでバイナリ表示はされない
単純にdebug symbolが有効になってないとか?
launch.jsonのcargoのコマンド確認してそれでbuildしたバイナリを
rust-lldbでデバッグできるかどうかで切り分けてみたら?
CodeLLDB初めて使ってみたがオレ環では特に問題なく使える
ソースマップ定義してないから標準ライブラリとかにstep inすればバイナリで表示されるけど
自分のソースのブレークポイントでバイナリ表示はされない
単純にdebug symbolが有効になってないとか?
launch.jsonのcargoのコマンド確認してそれでbuildしたバイナリを
rust-lldbでデバッグできるかどうかで切り分けてみたら?
2020/02/02(日) 21:47:21.49ID:RNwzrPPX
解決しました
上記はMac用のデバッグのやり方のようです
上記はMac用のデバッグのやり方のようです
2020/02/04(火) 01:45:10.19ID:5y86WC+2
vscodeでrust始めたんだけどオートコンプリートがまともに働いてくれてない気がする
メソッド内の変数だと候補を出したり出さなかったりする
メソッド内の変数だと候補を出したり出さなかったりする
2020/02/04(火) 02:12:55.41ID:Pt7gvJNj
>>45
vscodeやめてインテリなんとか使えば?
vscodeやめてインテリなんとか使えば?
2020/02/04(火) 02:38:52.83ID:w9dkRQaa
vscode での Rust の補完って LSP を使うんでないの?
処理系と連携するって最強じゃんと思ってたんだが。
処理系と連携するって最強じゃんと思ってたんだが。
2020/02/04(火) 20:47:39.21ID:3rIDek9/
コンパイラから出てくる補完情報が成熟してないんで、まだ完璧には遠い
独自の解析はracerとintellij rustがやってて、精度はintellijの方が高い
あんまIDE使いたくないからrlsには頑張って欲しい
独自の解析はracerとintellij rustがやってて、精度はintellijの方が高い
あんまIDE使いたくないからrlsには頑張って欲しい
49デフォルトの名無しさん
2020/02/04(火) 21:22:29.69ID:YIjVTtZH 本体のソース見たいけど/* compiler built-in */ってなってて読めない。
どうやったら見れる?
どうやったら見れる?
2020/02/05(水) 23:43:19.76ID:85RuEno5
Rust の char::is_ascii とかは pub const fn is_ascii(&self) -> bool なのに is_whitespace とかは pub fn is_whitespace(self) -> bool みたいになってるのなんでだろ?
&self でも self でもどっちかに統一してよさそうな気がするんだけど。
&self でも self でもどっちかに統一してよさそうな気がするんだけど。
2020/02/05(水) 23:45:58.49ID:D4pcZnSz
なんかツイッターで以下2つについてコンパイルできねーっていうつぶやきがあったんですが、
試してみたらコンパイルできちゃったんですがどういうことなのでしょう
Rust2015/2018どっちでもコンパイルできちゃいました
//その1
let y: &i32;
let x = 5;
y = &x;
println!("{}", y);
参照元yの変数宣言が参照先のxより先に変数宣言されたからエラー。
//その2
let mut x = 5;
let y = &mut x;
*y += 1;
println!("{}", x); //これがエラー
試してみたらコンパイルできちゃったんですがどういうことなのでしょう
Rust2015/2018どっちでもコンパイルできちゃいました
//その1
let y: &i32;
let x = 5;
y = &x;
println!("{}", y);
参照元yの変数宣言が参照先のxより先に変数宣言されたからエラー。
//その2
let mut x = 5;
let y = &mut x;
*y += 1;
println!("{}", x); //これがエラー
2020/02/05(水) 23:58:35.71ID:sFY5zr3G
>>50
is_asciiはstrやsliceにもあるからそれに揃えたんじゃないかな
is_asciiはstrやsliceにもあるからそれに揃えたんじゃないかな
2020/02/06(木) 00:18:39.33ID:yO6jvvKT
2020/02/06(木) 00:30:48.24ID:kEyn3Q9D
drop順でエラーになってたやつだね
2020/02/06(木) 00:59:10.03ID:jSrTrJa0
>>52
なるほど、全部を &self に揃えなかったのは、やっぱ self の方が効率的って判断なのかな?
ワイはまだ初心者で Rust 脳になりきれてないんだけど、参照渡しってのは実質的に (C/C++ で言うところの) ポインタをやりとりしてる感じでしょ?
(単純な場合は最適化で消えると思うけど。)
char 程度の大きさならポインタを渡すのでもコピーして渡すのでも差はないし、ポインタだと間接参照になる分だけ無駄っぽい。
という理解をしてて、 char のメソッドは全部 self でいいくらいじゃないかと思ってた。
なるほど、全部を &self に揃えなかったのは、やっぱ self の方が効率的って判断なのかな?
ワイはまだ初心者で Rust 脳になりきれてないんだけど、参照渡しってのは実質的に (C/C++ で言うところの) ポインタをやりとりしてる感じでしょ?
(単純な場合は最適化で消えると思うけど。)
char 程度の大きさならポインタを渡すのでもコピーして渡すのでも差はないし、ポインタだと間接参照になる分だけ無駄っぽい。
という理解をしてて、 char のメソッドは全部 self でいいくらいじゃないかと思ってた。
2020/02/06(木) 01:31:54.89ID:yO6jvvKT
2020/02/06(木) 01:51:52.29ID:jSrTrJa0
58デフォルトの名無しさん
2020/02/06(木) 11:48:46.94ID:GExFx9na The Rust Programming Language 第2版で勉強中なんだけど
この内容に連動した練習問題か使用例みたいなのどこかにないだろうか?英語でいい
この内容に連動した練習問題か使用例みたいなのどこかにないだろうか?英語でいい
2020/02/06(木) 14:10:02.33ID:kEyn3Q9D
https://www.rust-lang.org/learn
このページの上のほうにある3つのボタンがそれそれ
1. The Bookの最新版
2. Rustlings course(練習問題的なやつ)
3. Rust by Example(使用例)
英語で問題ないなら2018対応してる最新のThe Book読んだほうがいいかも
このページの上のほうにある3つのボタンがそれそれ
1. The Bookの最新版
2. Rustlings course(練習問題的なやつ)
3. Rust by Example(使用例)
英語で問題ないなら2018対応してる最新のThe Book読んだほうがいいかも
2020/02/06(木) 14:27:06.44ID:jSrTrJa0
英語がしんどい人 (日本語しかわからん人) にオススメなのはありますか?
2020/02/06(木) 15:54:58.65ID:kEyn3Q9D
The Bookの日本語版かオライリーの訳本
https://doc.rust-jp.rs/book-ja-pdf/book.pdf
https://www.oreilly.co.jp/books/9784873118550/
原著で読んだから訳の良し悪しはわからないけど
The Book含めて数冊読んだ中ではオライリー本が圧倒的にわかりやすかった
https://doc.rust-jp.rs/book-ja-pdf/book.pdf
https://www.oreilly.co.jp/books/9784873118550/
原著で読んだから訳の良し悪しはわからないけど
The Book含めて数冊読んだ中ではオライリー本が圧倒的にわかりやすかった
2020/02/06(木) 20:07:27.95ID:oYYwjpH2
手を動かしたいなら自転車本もあり
オライリーはちょっと古くなってるからなー
オライリーはちょっと古くなってるからなー
2020/02/06(木) 22:23:34.76ID:kEyn3Q9D
オライリー本の古くなってる箇所はEdition Guide読めば問題ないよ
多少古くてもOwnershipやLifetimeあたりの重要コンセプトをわかりやすく書いてるものがおすすめ
多少古くてもOwnershipやLifetimeあたりの重要コンセプトをわかりやすく書いてるものがおすすめ
2020/02/06(木) 22:57:58.42ID:ui7lN2G4
>>58みたいに英語でいいならrustupでインストールしたら付いてくるdocとそのリンク先にあるやつ読んだほうが良いぞ。
// ランタイム持ってないからasync/awaitがゼロコスト理論斬新すぎる
// ランタイム持ってないからasync/awaitがゼロコスト理論斬新すぎる
2020/02/07(金) 16:10:10.85ID:Q1mDvO6J
自クレートの名前やバージョンを取得するマクロって無かったっけ?
2020/02/07(金) 16:23:48.41ID:BIRgOLIs
Rust のライブラリって検索できるようになってるじゃん?
あれって名前だけじゃなくて引数の型とかで検索できたりしないのかなぁ。
Haskell (GHC) の Hoogle みたいに
あれって名前だけじゃなくて引数の型とかで検索できたりしないのかなぁ。
Haskell (GHC) の Hoogle みたいに
2020/02/07(金) 16:25:17.48ID:BIRgOLIs
>>67
あ、 Inparameters ってやつをクリックすれば出てくるのか。
あ、 Inparameters ってやつをクリックすれば出てくるのか。
2020/02/07(金) 16:30:12.12ID:aVy5/bny
2020/02/07(金) 16:36:53.27ID:Q1mDvO6J
>>69
それだ!ありがとう
それだ!ありがとう
2020/02/07(金) 16:54:52.66ID:BIRgOLIs
>>69
へー。
そのための専用のマクロってわけじゃなくて cargo が環境変数を設定してくれるって話なのね。
Cargo.toml を見ないとわかるはずもないからなんらかの連携があるのは当たり前といえば当たり前だけど。
へー。
そのための専用のマクロってわけじゃなくて cargo が環境変数を設定してくれるって話なのね。
Cargo.toml を見ないとわかるはずもないからなんらかの連携があるのは当たり前といえば当たり前だけど。
2020/02/10(月) 11:00:28.83ID:V3dAq4mT
io::Errorとかってprintln!("{:?}", err )とかしても
Os { code: 13, kind: PermissionDenied, message: "Permission denied" }
みたいに出るだけで「どのファイル」かが分からないんですが、外部のクレートの関数から上のようなエラーが帰ってきた場合それが「どのファイル」によって起きてるのかというのはどうやって知れば良いんでしょうか?
Os { code: 13, kind: PermissionDenied, message: "Permission denied" }
みたいに出るだけで「どのファイル」かが分からないんですが、外部のクレートの関数から上のようなエラーが帰ってきた場合それが「どのファイル」によって起きてるのかというのはどうやって知れば良いんでしょうか?
2020/02/10(月) 18:06:05.22ID:cKG4UD69
74デフォルトの名無しさん
2020/02/10(月) 20:19:23.72ID:vX14wve5 バイナリサイズはまだCの方が全然小さいけどRustはC以上になにが含まれてるの?
もちろん標準ライブラリとかは使ってないやつはバイナリに含まれないよね?
もちろん標準ライブラリとかは使ってないやつはバイナリに含まれないよね?
2020/02/10(月) 21:25:29.97ID:XC+zOH9l
2020/02/10(月) 22:55:31.36ID:t0EW4OCb
メモリ管理がランタイムにあるしdrop checkerもあるからランタイムはデカイよ。
77デフォルトの名無しさん
2020/02/10(月) 23:49:02.35ID:vX14wve52020/02/11(火) 00:10:31.83ID:v/oRLdRM
79テトリス ◆SYKnw8OJpw
2020/02/11(火) 00:36:46.52ID:DhLQ/nua Windows10のキャラクターがゴミ過ぎて無駄に苦労する
やっぱLinux使うしか無いんか?
でもゲームしたいからWindows環境が良いんだよな…
やっぱLinux使うしか無いんか?
でもゲームしたいからWindows環境が良いんだよな…
2020/02/11(火) 01:09:07.15ID:qG/miOyM
>>77
releaseでもデバッグシンボルはついてくる。
取って欲しいってIssueは立ってるけど
stripすればいいって感じなのか、あまり動きはない。
あとCのHelloWorldが小さいのはコードの大半が
libcにあるせいなのでは。
releaseでもデバッグシンボルはついてくる。
取って欲しいってIssueは立ってるけど
stripすればいいって感じなのか、あまり動きはない。
あとCのHelloWorldが小さいのはコードの大半が
libcにあるせいなのでは。
2020/02/11(火) 01:18:02.99ID:v/oRLdRM
バイナリサイズを小さくしたいならここを読む
https://github.com/johnthagen/min-sized-rust
https://github.com/johnthagen/min-sized-rust
2020/02/11(火) 18:54:33.07ID:Vv3Ln0ZS
組み込みで使おうなんて本気で考えてる奴はこんなところで聞いたりせんだろ。
2020/02/12(水) 12:54:11.29ID:F/O7jTJS
>>70
いえいえ
いえいえ
2020/02/17(月) 17:53:09.28ID:qpTD/rYC
cargo install mdbook
としたとき、依存するライブラリクレートも一斉にインストール (というかキャッシュみたいな扱い?) されたようです。
ローカルに入ったライブラリクレートのドキュメントから一斉に、網羅的に検索する仕組みはありますか?
標準ライブラリのドキュメントは名前や引数で検索できますが、それを手元に入っているライブラリ全てに拡大したようなものが欲しいです。
としたとき、依存するライブラリクレートも一斉にインストール (というかキャッシュみたいな扱い?) されたようです。
ローカルに入ったライブラリクレートのドキュメントから一斉に、網羅的に検索する仕組みはありますか?
標準ライブラリのドキュメントは名前や引数で検索できますが、それを手元に入っているライブラリ全てに拡大したようなものが欲しいです。
2020/02/17(月) 18:00:40.10ID:4asOCOmT
>>84
ビルド用の一時ディレクトリ以下に展開されただけで他から使えるようにはなってないよ
ビルド用の一時ディレクトリ以下に展開されただけで他から使えるようにはなってないよ
2020/02/17(月) 18:17:09.06ID:qpTD/rYC
>>85
そうなんですか。 Windows でやってるんですけど、
C:\Users\<ユーザー名>\.cargo\registry\src
に入っているのはビルド時の一時ファイル扱いという理解でいいんですかね?
他のプログラムをビルドしたときに必要になるライブラリクレートに共通するものが (このフォルダに) あったときでも
使いまわしはされないんでしょうか?
見かけ上は独立してるけど cargo が裏でうまいことやってくれるって感じなんでしょうか?
本当は Cargo book を読めばいいんでしょうけど、英語がわからなすぎて基本的な理念がよくわかってないです。
そうなんですか。 Windows でやってるんですけど、
C:\Users\<ユーザー名>\.cargo\registry\src
に入っているのはビルド時の一時ファイル扱いという理解でいいんですかね?
他のプログラムをビルドしたときに必要になるライブラリクレートに共通するものが (このフォルダに) あったときでも
使いまわしはされないんでしょうか?
見かけ上は独立してるけど cargo が裏でうまいことやってくれるって感じなんでしょうか?
本当は Cargo book を読めばいいんでしょうけど、英語がわからなすぎて基本的な理念がよくわかってないです。
2020/02/17(月) 20:49:03.97ID:P9Oy3OK5
$ cargo doc --open
doc生成すればプロジェクトの依存クレートすべてWeb形式で検索できるけど
そういうことではない?
doc生成すればプロジェクトの依存クレートすべてWeb形式で検索できるけど
そういうことではない?
2020/02/17(月) 22:42:46.96ID:ksspevQp
>>84
cargo installはバイナリクレートをインストールするためのワンライナーなんで
ライブラリクレートをどうこうする為のものではないよ。
バイナリのビルドに成功したら.cargo\binにコピーしてゴミは削除する。
バイナリクレートのドキュメントを読みたいならそれ自身を読みに行くんだよ。
rustdocは開発者向けでユーザー向けじゃない。
mdbookのrustdocが読みたいなら単にソースコードをクローンして自分でcargo doc叩けばビルドしてくれるけど。
cargo installはバイナリクレートをインストールするためのワンライナーなんで
ライブラリクレートをどうこうする為のものではないよ。
バイナリのビルドに成功したら.cargo\binにコピーしてゴミは削除する。
バイナリクレートのドキュメントを読みたいならそれ自身を読みに行くんだよ。
rustdocは開発者向けでユーザー向けじゃない。
mdbookのrustdocが読みたいなら単にソースコードをクローンして自分でcargo doc叩けばビルドしてくれるけど。
2020/02/18(火) 00:10:35.64ID:AiY0lHAj
構造体のメソッドでメンバ変数の値ひっぺがすのにstd::mem::take使うの面倒だな
9084
2020/02/18(火) 10:09:42.44ID:Nm2LYTxd >>87
「そのプロジェクト (に依存する全ての)」ではなく「ローカルに残っている全ての」というつもりでした。
>>88
> cargo installはバイナリクレートをインストールするためのワンライナーなんで
> ライブラリクレートをどうこうする為のものではないよ。
「為のものではない」ということは察していたんですが、
ライブラリのソースコードは残っているので裏で Cargo が動くために情報を残してもいるのだろう
と考えて特定のプロジェクトに限定せず横断的な処理をする方法があるのかどうかということを考えていました。
バイナリクレートをアップデートするときのために残してあるだけなんですかね……?
とりあえず、プロジェクトごとに独立していると考えておきます。
「そのプロジェクト (に依存する全ての)」ではなく「ローカルに残っている全ての」というつもりでした。
>>88
> cargo installはバイナリクレートをインストールするためのワンライナーなんで
> ライブラリクレートをどうこうする為のものではないよ。
「為のものではない」ということは察していたんですが、
ライブラリのソースコードは残っているので裏で Cargo が動くために情報を残してもいるのだろう
と考えて特定のプロジェクトに限定せず横断的な処理をする方法があるのかどうかということを考えていました。
バイナリクレートをアップデートするときのために残してあるだけなんですかね……?
とりあえず、プロジェクトごとに独立していると考えておきます。
2020/02/18(火) 10:18:22.88ID:dnK/GzEr
>>90
.cargoは全プロジェクト共通のキャッシュなので
プロジェクトまたいでも再利用はされる。
ただcargoコマンド自体はプロジェクト毎の操作しか提供しない、という感じ。
そういうツールを作ること自体は可能と思うけど。
.cargoは全プロジェクト共通のキャッシュなので
プロジェクトまたいでも再利用はされる。
ただcargoコマンド自体はプロジェクト毎の操作しか提供しない、という感じ。
そういうツールを作ること自体は可能と思うけど。
9284
2020/02/18(火) 10:59:25.45ID:Nm2LYTxd >>91
なるほど。
見かけ上はプロジェクトの独立性があるように抽象化されているという感じですね。
なるべくなら過去に使ったことのあるライブラリクレートから使えそうなものを
探した方がキャッシュ (?) の増大を抑えられるし、
よく使われるライブラリの方が信頼性が高いだろうというのが元々の動機でした。
ツールの使い方もおぼつかないので定番と言えるのがどのあたりなのかとかいった肌感覚もなくて、
実際のコードを色々と見て回るのにどういうやり方が良いのか模索しています。
なるほど。
見かけ上はプロジェクトの独立性があるように抽象化されているという感じですね。
なるべくなら過去に使ったことのあるライブラリクレートから使えそうなものを
探した方がキャッシュ (?) の増大を抑えられるし、
よく使われるライブラリの方が信頼性が高いだろうというのが元々の動機でした。
ツールの使い方もおぼつかないので定番と言えるのがどのあたりなのかとかいった肌感覚もなくて、
実際のコードを色々と見て回るのにどういうやり方が良いのか模索しています。
2020/02/20(木) 05:16:24.39ID:xc5wKacK
2020/02/20(木) 19:48:24.79ID:s7d9UeaP
Haskell の default 宣言みたいなのは Rust にありますか?
たとえば関数 foo が返す値の型が a もしくは b の可能性があり、
関数 bar が受け取る値の型が a もしくは b のときに bar(foo()) という式で型が定まりません。
このときに a と b の間での優先度を決める方法があるかという質問です。
具体的な状況があるわけではなくて、言語機能を学ぶ中で生じた疑問です。
たとえば関数 foo が返す値の型が a もしくは b の可能性があり、
関数 bar が受け取る値の型が a もしくは b のときに bar(foo()) という式で型が定まりません。
このときに a と b の間での優先度を決める方法があるかという質問です。
具体的な状況があるわけではなくて、言語機能を学ぶ中で生じた疑問です。
2020/02/20(木) 20:19:05.71ID:s7d9UeaP
>>93
こんな感じかな。
buf = buf.replace(ch, &<String as std::iter::FromIterator<&char>>::from_iter(&[' ', ch, ' ']));
こんな感じかな。
buf = buf.replace(ch, &<String as std::iter::FromIterator<&char>>::from_iter(&[' ', ch, ' ']));
2020/02/20(木) 20:57:27.42ID:xc5wKacK
>>95
thanks!
thanks!
2020/02/20(木) 21:07:18.17ID:uEuAMc9c
俺だったらformat!(" {} ", ch)にするかforを[" ( ", " ) ", ...]で回すかな
2020/02/20(木) 21:09:56.45ID:NbeJLDuu
2020/02/20(木) 21:27:49.34ID:ftgOjFn2
型が曖昧な時はだいたいターボフィッシュでなんとかなるやろ
100デフォルトの名無しさん
2020/02/20(木) 21:55:52.56ID:nsHNq1aE101デフォルトの名無しさん
2020/02/20(木) 22:48:30.93ID:OjLUij7y >>94
rustはsum typeしかない。それだと実行時に型を評価する方法とunion typeがいる。
rustはsum typeしかない。それだと実行時に型を評価する方法とunion typeがいる。
102デフォルトの名無しさん
2020/02/21(金) 01:30:08.71ID:8YUMmgA9 正直TypeScriptの1 | 2 の型記法欲しい
103デフォルトの名無しさん
2020/02/21(金) 08:48:56.60ID:jEzn3g3M >>94 って多分こういう事では?
trait X { ... }
impl a for X { ... }
impl b for X { ... }
fn foo<T: X>() -> T { ... }
fn bar<T: X>(_: T) { ... }
bar(foo())
Rust の文法詳しくないんで間違ってたらすまん
trait X { ... }
impl a for X { ... }
impl b for X { ... }
fn foo<T: X>() -> T { ... }
fn bar<T: X>(_: T) { ... }
bar(foo())
Rust の文法詳しくないんで間違ってたらすまん
104デフォルトの名無しさん
2020/02/21(金) 09:15:56.88ID:6JU7BGK210594
2020/02/21(金) 10:40:19.65ID:zBjm2h3y >>103-104
近いですが a と b との関係がもっと無関係なもの (仮想関数を使えない) を考えていました。
コードにするならこんな感じです。
struct Foo {}
struct Bar {}
trait X<T> { fn foo(&self) -> T; }
trait Y<T> { fn bar(&self, T); }
impl X<Foo> for Foo { fn foo(&self) -> Foo {Foo{}} }
impl X<Bar> for Foo { fn foo(&self) -> Bar {Bar{}} }
impl Y<Foo> for Bar { fn bar(&self, _x: Foo){} }
impl Y<Bar> for Bar { fn bar(&self, _x: Bar){} }
fn main() { Bar{}.bar(Foo{}.foo()); }
いずれにせよ方法はなさそうですね。
型を明記すればよい話ではあるのですが、ふと疑問に思ってしまったもので。
近いですが a と b との関係がもっと無関係なもの (仮想関数を使えない) を考えていました。
コードにするならこんな感じです。
struct Foo {}
struct Bar {}
trait X<T> { fn foo(&self) -> T; }
trait Y<T> { fn bar(&self, T); }
impl X<Foo> for Foo { fn foo(&self) -> Foo {Foo{}} }
impl X<Bar> for Foo { fn foo(&self) -> Bar {Bar{}} }
impl Y<Foo> for Bar { fn bar(&self, _x: Foo){} }
impl Y<Bar> for Bar { fn bar(&self, _x: Bar){} }
fn main() { Bar{}.bar(Foo{}.foo()); }
いずれにせよ方法はなさそうですね。
型を明記すればよい話ではあるのですが、ふと疑問に思ってしまったもので。
106デフォルトの名無しさん
2020/02/21(金) 13:18:50.41ID:sx356ht7 いや、こちらも勉強になるよ。
107デフォルトの名無しさん
2020/02/21(金) 15:11:57.88ID:RiyafmFC108デフォルトの名無しさん
2020/02/21(金) 15:21:44.11ID:RiyafmFC ターボフィッシュで指定するか型指定した変数で一旦受けるかだね
https://play.rust-lang.org/?gist=3d288900b3f655687d0ba22cc37cbb23
逆にこのケースでdefaultの型が決まっちゃうのってちょっと怖い
https://play.rust-lang.org/?gist=3d288900b3f655687d0ba22cc37cbb23
逆にこのケースでdefaultの型が決まっちゃうのってちょっと怖い
10994
2020/02/21(金) 18:02:02.28ID:zBjm2h3y Rust の型システム (Hindley-Milner) は ML 系言語で実績があるやつなので、
(型に関して) ML 系で出来ることはおおよそ出来るのではないかと思いつつ、
Rust 的には明記させたい場面かもな……みたいな気持ちでした。
やはり勝手に決まって欲しくないというのが Rust ユーザの感覚なんですね。
※ Haskell が ML 系と言えるかどうかは諸説あります
(型に関して) ML 系で出来ることはおおよそ出来るのではないかと思いつつ、
Rust 的には明記させたい場面かもな……みたいな気持ちでした。
やはり勝手に決まって欲しくないというのが Rust ユーザの感覚なんですね。
※ Haskell が ML 系と言えるかどうかは諸説あります
110デフォルトの名無しさん
2020/02/22(土) 01:53:24.77ID:eI8xgqVo これ出来たらかっこいい見たいな型推論の活用ってある?
111デフォルトの名無しさん
2020/02/22(土) 12:47:45.08ID:T3jMerUl ファントムタイプは(名前が)かっこいい
112デフォルトの名無しさん
2020/02/22(土) 16:08:52.19ID:5jIrjfcF C++ をやってた感覚から言うと Rust の str::parse っていいよね。
C++ は返却値の側からの推論が無いから普通の関数 (メンバ関数) として parse みたいなものを書けない。
いや、書けるけど型が推論されないからいちいち型を明記しなけりゃならない。
昔は演算子でやる C++ のスタイルを上手い案だと思ってたけど、
普通に関数 (メソッド) でやれるもんならその方がいいわ。
C++ は返却値の側からの推論が無いから普通の関数 (メンバ関数) として parse みたいなものを書けない。
いや、書けるけど型が推論されないからいちいち型を明記しなけりゃならない。
昔は演算子でやる C++ のスタイルを上手い案だと思ってたけど、
普通に関数 (メソッド) でやれるもんならその方がいいわ。
113デフォルトの名無しさん
2020/02/25(火) 12:01:50.32ID:35/v8OB/ 異なる関連型を持つ複数のトレイトオブジェクトを1つのVecに入れるのはAnyとかを使わないと無理でしょうか?
114デフォルトの名無しさん
2020/02/26(水) 07:52:56.79ID:Es0cXQkx IntelliJのRustプラグイン、ここのところぶっ壊れてないですか?
115デフォルトの名無しさん
2020/02/28(金) 06:03:14.29ID:4nSGV1YY 1.41.1
116デフォルトの名無しさん
2020/02/28(金) 12:10:25.14ID:Pr6ovKv/ これは大失態だな
117デフォルトの名無しさん
2020/03/03(火) 21:00:42.72ID:aQWPV0PM static TEST = &'static str = "test";
このTESTの文字列の最後の一文字だけを参照として&'static charで作ることってできる?
型レベルで一文字ってことを保証したいのとメモリ節約したい
このTESTの文字列の最後の一文字だけを参照として&'static charで作ることってできる?
型レベルで一文字ってことを保証したいのとメモリ節約したい
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国「国連安保理の許可なしに日本攻撃可能」 Xで旧敵国条項に言及… ★9 [BFU★]
- 【赤坂ライブハウス刺傷】逃走していた自衛官の男(43)を殺人未遂の疑いで逮捕 警視庁 被害女性とは知人関係 [Ailuropoda melanoleuca★]
- 【千葉】コンビニに尿入りペットボトル並べた疑い、26歳男「むしゃくしゃして」…購入した客が飲もうとしたところ臭いに違和感 [ぐれ★]
- 中国官製報道「日本経済はもう持たない」にネット民ツッコミ「ニュースだけ見てたら日本はもう百回くらい爆発してる」 [1ゲットロボ★]
- 植田日銀総裁 「円安進行が物価高を起こしている」 ★4 [お断り★]
- 【STARTO ENTERTAINMENT】timelesz、メンバーの不適切言動を謝罪「不用意かつモラルに反した発言であった」 全員の署名入りでコメント [Ailuropoda melanoleuca★]
- 【旧Twitter】高市早苗 飲みぃのヤりぃの動画 paypayのみ [455031798]
- 脳ぶっ壊れワイにおすすめの快楽手段
- 【ガチ正論】一般人「中国に規制制裁されて、『中国ムカつく』じゃなくて矛先が『許さんぞ高市』になってる奴、頭おかしいの?」 ★2 [153490809]
- ジャパニーズってジャパニーズじゃん?
- 数学詳しい奴ちょっと来て
- ワイのIQでほんまに適正アルバイト(発達障害)
