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
565デフォルトの名無しさん
2020/05/23(土) 23:03:55.77ID:6goyk3s3566デフォルトの名無しさん
2020/05/24(日) 01:52:15.18ID:tkUtJ987567562
2020/05/24(日) 09:30:45.62ID:SCWt5xFf568デフォルトの名無しさん
2020/05/24(日) 17:28:53.26ID:tkUtJ987 >>567
そういうこと
もっと言うと [T] の要素数情報は配列自体ではなく配列への参照 (fat pointer) が保持してるから
[T] が単独で存在することはできなくて、
参照経由の &[T] やスマートポインタ経由の Box<[T]>, Rc<[T]> といった形でしか存在できない
そういうこと
もっと言うと [T] の要素数情報は配列自体ではなく配列への参照 (fat pointer) が保持してるから
[T] が単独で存在することはできなくて、
参照経由の &[T] やスマートポインタ経由の Box<[T]>, Rc<[T]> といった形でしか存在できない
569562
2020/05/24(日) 17:59:17.80ID:SCWt5xFf >>568
そういうことか。
fat pointer を基礎に据えることを除けば
C/C++ のルールとかなり似てるのでわかりやすいな。
(けどそれ故に C/C++ 的な考え方に引きずられてしまう部分もある……。)
そういうことか。
fat pointer を基礎に据えることを除けば
C/C++ のルールとかなり似てるのでわかりやすいな。
(けどそれ故に C/C++ 的な考え方に引きずられてしまう部分もある……。)
570デフォルトの名無しさん
2020/05/24(日) 20:09:44.60ID:sglBbUqv 言いたい事は理解できるが
存在できないって言い方は少し引っかかる
存在できないって言い方は少し引っかかる
571デフォルトの名無しさん
2020/05/24(日) 23:17:03.73ID:WFZqWDFu 6月号で特集が組まれてます
初心者の方は是非
初心者の方は是非
572デフォルトの名無しさん
2020/05/24(日) 23:36:35.12ID:a0LhMB8x なにこれどうなってるの?traitでFizzBuzz?
https://github.com/doctorn/trait-eval
https://github.com/doctorn/trait-eval
573デフォルトの名無しさん
2020/05/25(月) 09:27:38.21ID:Jp/r3UJz traitのFizzbuzzに付属してるtrait群がいいね。From実装してなくて爪甘いけど
574デフォルトの名無しさん
2020/05/25(月) 22:39:28.81ID:MNSExfZQ >>566
>[[[i32; 3]; 3]] は存在できるが
unsizedだからできない。
というか存在はしてる。rustはリージョンでメモリ管理するからコンパイル時に
リージョンのサイズが分かる必要があるからDSTが第一級じゃないだけ。
スライスにすればそのスライスのサイズはusize*2だからzoneを確保できるだろ。
コンパイル時にポインタのサイズが分かれば良いだけだから
assert_eq!(::std::alloc::Layout::new::<*const [u64]>(), ::std::alloc::Layout::new::<&[u64]>());
は通る。the bookとnomiconよめ。
>[[[i32; 3]; 3]] は存在できるが
unsizedだからできない。
というか存在はしてる。rustはリージョンでメモリ管理するからコンパイル時に
リージョンのサイズが分かる必要があるからDSTが第一級じゃないだけ。
スライスにすればそのスライスのサイズはusize*2だからzoneを確保できるだろ。
コンパイル時にポインタのサイズが分かれば良いだけだから
assert_eq!(::std::alloc::Layout::new::<*const [u64]>(), ::std::alloc::Layout::new::<&[u64]>());
は通る。the bookとnomiconよめ。
575デフォルトの名無しさん
2020/05/26(火) 01:25:10.52ID:zMnW+xpW576デフォルトの名無しさん
2020/05/26(火) 09:22:21.48ID:yWo2qZ2t577デフォルトの名無しさん
2020/05/26(火) 12:44:21.66ID:tQI2iyhC ::stdの指定の仕方ってなんで使うの?stdじゃなくて
自作のmod std作った時にしか被らないぐらいしか利点なさそう。しかもそんな紛らわしい名前で作らないし
自作のmod std作った時にしか被らないぐらいしか利点なさそう。しかもそんな紛らわしい名前で作らないし
578デフォルトの名無しさん
2020/05/26(火) 23:26:23.63ID:yWo2qZ2t 他の crate に公開するマクロで使う
579デフォルトの名無しさん
2020/05/26(火) 23:27:54.23ID:yWo2qZ2t std以外のcrateにも使えるから、モジュールとの名前かぶりで使わざるを得ないときもある
testとか
testとか
580デフォルトの名無しさん
2020/05/27(水) 10:28:00.44ID:dVIhbWpz 2018の次期バージョンっていくつ?
581デフォルトの名無しさん
2020/05/27(水) 11:01:45.48ID:pv32Gf/H >>580
Prepare for a possible Rust 2021 Edition
https://github.com/rust-lang/rfcs/blob/master/text/2857-roadmap-2020.md
Prepare for a possible Rust 2021 Edition
https://github.com/rust-lang/rfcs/blob/master/text/2857-roadmap-2020.md
582デフォルトの名無しさん
2020/05/28(木) 08:05:27.45ID:NpbhHX3L pub enum KansaiPref {
Osaka,
Hyogo,
Kyoto,
}
こういうenumを文字列から生成する時ってnewよりfrom_strで作った方がいいの?
impl KansaiPref {
fn new(s: &str) -> Self {
use Self::*;
match s {
"大阪" => Osaka,
"兵庫" => Hyogo,
"京都" => Kyoto,
_ => unimplemented!(),
}
}
newかfrom_str
impl FromStr for KansaiPref {
type Err = ...;
fn from_str(s: &str) -> Result<Self, Self::Err> {
use Self::*;
match s {
"大阪" => Osaka,
"兵庫" => Hyogo,
"京都" => Kyoto,
_ => unimplemented!(),
}
}
}
Osaka,
Hyogo,
Kyoto,
}
こういうenumを文字列から生成する時ってnewよりfrom_strで作った方がいいの?
impl KansaiPref {
fn new(s: &str) -> Self {
use Self::*;
match s {
"大阪" => Osaka,
"兵庫" => Hyogo,
"京都" => Kyoto,
_ => unimplemented!(),
}
}
newかfrom_str
impl FromStr for KansaiPref {
type Err = ...;
fn from_str(s: &str) -> Result<Self, Self::Err> {
use Self::*;
match s {
"大阪" => Osaka,
"兵庫" => Hyogo,
"京都" => Kyoto,
_ => unimplemented!(),
}
}
}
583デフォルトの名無しさん
2020/05/28(木) 10:15:20.06ID:Xow4Xb3r >>582
どっちでもいいと思うけど自分ならfrom_str選ぶ
理由はenumをnewするのにResult(かOption)が返されるシグニチャよりも
input.parse::<KansaiPref>()してResultが返されるほうが意図が伝わりやすいから
どっちでもいいと思うけど自分ならfrom_str選ぶ
理由はenumをnewするのにResult(かOption)が返されるシグニチャよりも
input.parse::<KansaiPref>()してResultが返されるほうが意図が伝わりやすいから
584デフォルトの名無しさん
2020/05/28(木) 12:26:13.92ID:XHarSIwj >>582
俺は初心者だから意見としてはそれほどあてにならないけど、
from_str を使った方がいいと思う。
new はただの習慣だが FromStr は制約として機能するので、
既存の枠組みの中で便利に機能する可能性がある。
俺は初心者だから意見としてはそれほどあてにならないけど、
from_str を使った方がいいと思う。
new はただの習慣だが FromStr は制約として機能するので、
既存の枠組みの中で便利に機能する可能性がある。
585デフォルトの名無しさん
2020/05/28(木) 22:03:56.44ID:85z31x28 多言語展開を考えるとどれも使いたくねえな…と思ってしまう
586デフォルトの名無しさん
2020/05/29(金) 07:36:25.48ID:RYu+vFRR FromStr実装するならちゃんと Err 返してくれ
587デフォルトの名無しさん
2020/05/29(金) 16:33:26.54ID:nAKVwuCz let a : Box<[T; 1000]> = Box::new([Default::default();1000]);
みたいなのってスタックに要素を作ってからヒープにコピーするようになるから効率が悪いし、
Copy を実装してない型だと使えないみたいなんだけど、これって今はどうするのが常套手段なの?
前提条件として変数の型は Box<[T; 1000]> というのは固定ということにして、
unsafe も避けられるものなら避けたい。
みたいなのってスタックに要素を作ってからヒープにコピーするようになるから効率が悪いし、
Copy を実装してない型だと使えないみたいなんだけど、これって今はどうするのが常套手段なの?
前提条件として変数の型は Box<[T; 1000]> というのは固定ということにして、
unsafe も避けられるものなら避けたい。
588デフォルトの名無しさん
2020/05/29(金) 17:24:59.34ID:lyhnjVvq >>587
vec![Default::default();1000].into_boxed_slice();
vec![Default::default();1000].into_boxed_slice();
589デフォルトの名無しさん
2020/05/29(金) 21:21:26.13ID:tZarZhzR >>586
標準でString or &str のパース失敗時に返すErrの型とかあんの?
標準でString or &str のパース失敗時に返すErrの型とかあんの?
590デフォルトの名無しさん
2020/05/30(土) 00:58:42.40ID:wj/8yI7A vec! と同じような使い勝手の box! があってもよさそうな気がするけど、
そういうクレートがあったりする?
そういうクレートがあったりする?
591デフォルトの名無しさん
2020/05/30(土) 01:42:01.99ID:tvhETOJ1 #![feature(box_syntax)]
let a: Box<[T; 1000]> = box [Default::default(); 1000];
https://github.com/rust-lang/rust/issues/53827
let a: Box<[T; 1000]> = box [Default::default(); 1000];
https://github.com/rust-lang/rust/issues/53827
592デフォルトの名無しさん
2020/05/30(土) 01:46:59.27ID:wj/8yI7A >>591
おおっ、これぞ私が必要としていたもの!
おおっ、これぞ私が必要としていたもの!
593デフォルトの名無しさん
2020/05/30(土) 07:24:57.35ID:DJ1cbMGZ594デフォルトの名無しさん
2020/05/30(土) 11:52:22.59ID:wj/8yI7A # と #! はどういう使い分けがあるの?
595デフォルトの名無しさん
2020/05/30(土) 13:01:17.39ID:QgJ1kT2w596デフォルトの名無しさん
2020/05/30(土) 15:53:27.03ID:wj/8yI7A >>595
Thx
Thx
597デフォルトの名無しさん
2020/06/01(月) 10:13:32.80ID:QCREwpDy loopとスレッドスリープでやるのもいいけど、いい感じにデーモン立てて一定時間経ったら関数実行してくれるような仕組みのクレートってない?
598デフォルトの名無しさん
2020/06/01(月) 10:31:33.62ID:o7IiynR8 借用や所有の概念って、Rustがはじめてなのかと思ったら、D言語に既にあったんだね。
599デフォルトの名無しさん
2020/06/01(月) 10:51:02.85ID:o7IiynR8 >>598
あー。D言語の方がRustを参考に取り入れたらしい。
あー。D言語の方がRustを参考に取り入れたらしい。
600デフォルトの名無しさん
2020/06/01(月) 11:12:31.20ID:o7IiynR8 Rustのヒープは必ず参照カウンタが入ってしまうので、C/C++言語に比べれば遅くなるね。
601デフォルトの名無しさん
2020/06/01(月) 11:19:51.79ID:dfhSq8hG602デフォルトの名無しさん
2020/06/01(月) 11:31:20.41ID:o7IiynR8 >>601
Box<T>も参照カウンタ入ってないの?
Box<T>も参照カウンタ入ってないの?
603デフォルトの名無しさん
2020/06/01(月) 11:32:01.43ID:o7IiynR8 >>601
それより、参照カウンタが入っているかどうかはどこを読めば分かるの?
それより、参照カウンタが入っているかどうかはどこを読めば分かるの?
604デフォルトの名無しさん
2020/06/01(月) 11:35:58.71ID:o7IiynR8 C++ vs Rust
unique_ptr<T> ---> Box<T>
shared_ptr<T> ---> Rc<T>
weak_ptr<T> ---> Weak<T>
ということなの?
どこに書いてある??
unique_ptr<T> ---> Box<T>
shared_ptr<T> ---> Rc<T>
weak_ptr<T> ---> Weak<T>
ということなの?
どこに書いてある??
605デフォルトの名無しさん
2020/06/01(月) 11:37:31.71ID:dfhSq8hG606デフォルトの名無しさん
2020/06/01(月) 11:40:30.85ID:o7IiynR8 let a = 7;
let a_box: Box<i32>
a_box = Box::new(a+2); //(3)
という例があったけど、どうして、(3)がエラーにならないの?
mut 属性にしておかなければ、let文でしか代入できないんじゃなかった?
let a_box: Box<i32>
a_box = Box::new(a+2); //(3)
という例があったけど、どうして、(3)がエラーにならないの?
mut 属性にしておかなければ、let文でしか代入できないんじゃなかった?
607デフォルトの名無しさん
2020/06/01(月) 11:43:34.61ID:dfhSq8hG >>604
https://doc.rust-jp.rs/book/second-edition/ch15-00-smart-pointers.html
>>606
a_boxは2行目では値が入ってないので、3行目が最初の代入だから変更ではなくmutはいらない。
https://doc.rust-jp.rs/book/second-edition/ch15-00-smart-pointers.html
>>606
a_boxは2行目では値が入ってないので、3行目が最初の代入だから変更ではなくmutはいらない。
608デフォルトの名無しさん
2020/06/01(月) 11:44:44.94ID:o7IiynR8609デフォルトの名無しさん
2020/06/01(月) 11:49:39.54ID:o7IiynR8 >>607
>a_boxは2行目では値が入ってないので、3行目が最初の代入だから変更ではなくmutはいらない。
なるほど、最初かどうかをコンパイラが追跡していたんだね。
知らなかった。
immutableな変数は、必ず let 文でしか代入できないとばかり思っていた。
最初に読んだ documentでは、例としてそう書いてあったから。
>a_boxは2行目では値が入ってないので、3行目が最初の代入だから変更ではなくmutはいらない。
なるほど、最初かどうかをコンパイラが追跡していたんだね。
知らなかった。
immutableな変数は、必ず let 文でしか代入できないとばかり思っていた。
最初に読んだ documentでは、例としてそう書いてあったから。
610デフォルトの名無しさん
2020/06/01(月) 11:51:23.94ID:dfhSq8hG >>608
厳密に同じかはわからないけど、対応としては合ってるかと。
厳密に同じかはわからないけど、対応としては合ってるかと。
611デフォルトの名無しさん
2020/06/01(月) 12:19:02.82ID:o7IiynR8 「変数のアドレスを他の変数に代入することを借用(borrowing)という」
という理解で有ってる?
という理解で有ってる?
612デフォルトの名無しさん
2020/06/01(月) 12:37:12.92ID:QCREwpDy ID: o7IiynR8
こいつやべーだろ。なんにも知らないくせにRustのヒープは必ず参照カウンタが入るとか嘘吹かしてんじゃねえか
蓋開けれみりゃ初心者のクレクレゴミだし、どういう自信で最初言ったんだよ
こいつやべーだろ。なんにも知らないくせにRustのヒープは必ず参照カウンタが入るとか嘘吹かしてんじゃねえか
蓋開けれみりゃ初心者のクレクレゴミだし、どういう自信で最初言ったんだよ
613デフォルトの名無しさん
2020/06/01(月) 12:37:39.24ID:0yVOdbpz >>611
実態はアドレスだが所有権管理の対象になるのはアドレスではなく参照。
実態はアドレスだが所有権管理の対象になるのはアドレスではなく参照。
614デフォルトの名無しさん
2020/06/01(月) 13:18:58.22ID:0yVOdbpz コンパイル時に所有権のチェックをしてるってのがよくわかってなくて変なことを言ってるのかもね。
「所有権の移動」が「実行時にアドレスと一緒に所有権が渡される」みたいな認識だとしたら
参照カウンタによって実装されるという ID:o7IiynR8 みたいな言説になるのはわからんでもない。
が、 Rust は静的解析の賢さでメモリの安全性を高めるのがウリのひとつなんだからそんなわけねーだろというくらいには
想像できて欲しいよ。
「所有権の移動」が「実行時にアドレスと一緒に所有権が渡される」みたいな認識だとしたら
参照カウンタによって実装されるという ID:o7IiynR8 みたいな言説になるのはわからんでもない。
が、 Rust は静的解析の賢さでメモリの安全性を高めるのがウリのひとつなんだからそんなわけねーだろというくらいには
想像できて欲しいよ。
615デフォルトの名無しさん
2020/06/01(月) 13:24:10.03ID:aguQ4xiv C++の概念に言い換えて理解しようというのが
そもそも無理筋な気が
そもそも無理筋な気が
616デフォルトの名無しさん
2020/06/01(月) 13:41:16.41ID:51GFkTZC 説明書読まずにとりあえず人に聞いて教えて貰おうとするやついるよね
617デフォルトの名無しさん
2020/06/01(月) 14:10:26.06ID:0yVOdbpz 所有権回りは Rust の重要な特徴だから
どんな入門書でも書いてないはずはないんだよな。
どんな入門書でも書いてないはずはないんだよな。
618デフォルトの名無しさん
2020/06/01(月) 14:47:28.60ID:w1nG+7Ec Rustの普及を阻む課題 年次調査から明らかに
https://www.atmarkit.co.jp/ait/articles/2006/01/news044.html
Rustの利用をやめた回答者にその理由を尋ねたところ「自社がRustを使っていない」という回答が最も多かった。
他の上位の理由は「習得が大変」「必要としているライブラリがない」「移行すると作業能率が落ちる」「IDE(統合開発環境)でのサポートが不十分」などだ。
Rustを利用したことがない回答者に理由を尋ねたところ、「Rustを学んだことがないから。ただし、学びたい」「自社がRustを使っていないから」という回答が、いずれも約4分の1の割合に達し、この2つで回答の過半数を占めた。
Rustの普及拡大への最大の課題として挙げた上位3つは、「トレーニング/ドキュメントの充実」「ライブラリの充実/改善」「IDEの統合」だ。
https://www.atmarkit.co.jp/ait/articles/2006/01/news044.html
Rustの利用をやめた回答者にその理由を尋ねたところ「自社がRustを使っていない」という回答が最も多かった。
他の上位の理由は「習得が大変」「必要としているライブラリがない」「移行すると作業能率が落ちる」「IDE(統合開発環境)でのサポートが不十分」などだ。
Rustを利用したことがない回答者に理由を尋ねたところ、「Rustを学んだことがないから。ただし、学びたい」「自社がRustを使っていないから」という回答が、いずれも約4分の1の割合に達し、この2つで回答の過半数を占めた。
Rustの普及拡大への最大の課題として挙げた上位3つは、「トレーニング/ドキュメントの充実」「ライブラリの充実/改善」「IDEの統合」だ。
619デフォルトの名無しさん
2020/06/01(月) 15:24:58.77ID:lLamlcG6620デフォルトの名無しさん
2020/06/01(月) 15:45:21.43ID:o7IiynR8 ちょっと変わった傾向だな:
55% of Rust users develop on Linux
24% develop on Windows
23% develop on macOS
55% of Rust users develop on Linux
24% develop on Windows
23% develop on macOS
621デフォルトの名無しさん
2020/06/01(月) 15:59:56.59ID:QCREwpDy 間違った知識を他人に教えるのは説明書読む以前の問題
622デフォルトの名無しさん
2020/06/01(月) 16:00:16.74ID:o7IiynR8 回答者がターゲットとしているプラットフォームも以下の様に書かれているが、回答者がWebBackendを職業にしている人が多いことに対応している可能性が高い :
Linux: 36.9%、
Windows: 16.3%、
maxOS: 14.7%
WebAssembly: 14.4%
Embedded: 7.6%
iOS: 2.9%
BSD: 2.7%
Android: 2.4%
When it comes to what platforms using are targeting for their applications Linux remains the first choice with 36.9%,with Windows as second at 16.3%.
Following close behind Windows are macOS and Web Assembly at 14% each
Linux: 36.9%、
Windows: 16.3%、
maxOS: 14.7%
WebAssembly: 14.4%
Embedded: 7.6%
iOS: 2.9%
BSD: 2.7%
Android: 2.4%
When it comes to what platforms using are targeting for their applications Linux remains the first choice with 36.9%,with Windows as second at 16.3%.
Following close behind Windows are macOS and Web Assembly at 14% each
623デフォルトの名無しさん
2020/06/01(月) 17:53:49.92ID:o7IiynR8 Some a = xxx; // 何か初期済みであると仮定
let b1 = Box::new(a);
let b2 = b1;
とした場合、b1が持っていた所有権はb2に移ってしまい、
b1はこれ以後使えなくなるという理解で有ってますか?
let b1 = Box::new(a);
let b2 = b1;
とした場合、b1が持っていた所有権はb2に移ってしまい、
b1はこれ以後使えなくなるという理解で有ってますか?
624デフォルトの名無しさん
2020/06/01(月) 18:03:59.31ID:o7IiynR8 初心者なもので、正しく(?)は、
let b1 = Box<Some>::new();
let b2 = b1;
なのかも知れません。
let b1 = Box<Some>::new();
let b2 = b1;
なのかも知れません。
625デフォルトの名無しさん
2020/06/01(月) 18:07:45.72ID:lLamlcG6 >>623
とりあえずThe Bookの所有権のところを一通り読んでから質問してください
その質問の答えも試し方も全部書いてますので
https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html
とりあえずThe Bookの所有権のところを一通り読んでから質問してください
その質問の答えも試し方も全部書いてますので
https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html
626デフォルトの名無しさん
2020/06/01(月) 18:23:13.55ID:o7IiynR8627デフォルトの名無しさん
2020/06/01(月) 18:36:04.96ID:0yVOdbpz >>623
お前が正しく理解してるかどうか知らんけど個別の事例として言えば Yes だ。
所有権は移動して、元の変数はもう使えない。
だけどそんなことはやってみたらわかりやすいエラーメッセージが出るじゃないの。
fn main() {
let a = 20;
let b1 = Box::new(a);
let b2 = b1;
println!("{}", b1);
}
みたいなことを書いたら
error[E0382]: use of moved value: `b1`
って出るし、どこでムーブ (所有権の移管) 済みかまでも表示してくれる。
Rust のエラーメッセージはめっちゃ親切なんだから、
「この場合はどうですか」なんて質問する間があったらやってみりゃいいんだよ。
お前が正しく理解してるかどうか知らんけど個別の事例として言えば Yes だ。
所有権は移動して、元の変数はもう使えない。
だけどそんなことはやってみたらわかりやすいエラーメッセージが出るじゃないの。
fn main() {
let a = 20;
let b1 = Box::new(a);
let b2 = b1;
println!("{}", b1);
}
みたいなことを書いたら
error[E0382]: use of moved value: `b1`
って出るし、どこでムーブ (所有権の移管) 済みかまでも表示してくれる。
Rust のエラーメッセージはめっちゃ親切なんだから、
「この場合はどうですか」なんて質問する間があったらやってみりゃいいんだよ。
628デフォルトの名無しさん
2020/06/01(月) 19:13:13.12ID:is4FQXAW Rustのエラーメッセージがすごく親切なのは分かるんだけど、小手先で直そうとするとどんどん修正範囲が広くなっていって最終的に「設計が悪い」みたいな結論になっちゃう
他言語よりコーディング時に考慮すべき点が多いというか違うというか…慣れればそういうことも無くなるのかね
他言語よりコーディング時に考慮すべき点が多いというか違うというか…慣れればそういうことも無くなるのかね
629デフォルトの名無しさん
2020/06/01(月) 22:13:40.55ID:o7IiynR8 >>628
色々調べてる途中だけど、どうも、C言語で出来ていたことの何割かは
Rustでは禁止されていて出来ないと思う。
https://stackoverflow.com/questions/40875152/reference-to-element-in-vector
を見てもRustではarrayの1つの要素に対する参照は作れないようだし。
C/C++では当然、そのようなものへの参照やポインタが好きなように作れる。
これが出来ないことである種の組み合わせ爆発が起こりがちになり、
C/C++よりプログラムがしにくくなるだろう。
色々調べてる途中だけど、どうも、C言語で出来ていたことの何割かは
Rustでは禁止されていて出来ないと思う。
https://stackoverflow.com/questions/40875152/reference-to-element-in-vector
を見てもRustではarrayの1つの要素に対する参照は作れないようだし。
C/C++では当然、そのようなものへの参照やポインタが好きなように作れる。
これが出来ないことである種の組み合わせ爆発が起こりがちになり、
C/C++よりプログラムがしにくくなるだろう。
630デフォルトの名無しさん
2020/06/01(月) 22:19:12.08ID:o7IiynR8 >>729
例えばの話、C言語だと1つのCPerson型のデータをファイルに出力する関数を
void write(FILE *fp, CPerson const *person);
のように作りさえすれば、
CPerson persons[100];
for (int idx=0; idx<100; idx++ ) {
write(fp, &persons[idx]);
}
でCPersonの配列にも対応できてしまう。
このようなことがRustではできなくなるはず。
無理やり観が有るが、CPersonのメンバ関数としてwrite()関数を作ってしまうことで対応できるかも知れない。
例えばの話、C言語だと1つのCPerson型のデータをファイルに出力する関数を
void write(FILE *fp, CPerson const *person);
のように作りさえすれば、
CPerson persons[100];
for (int idx=0; idx<100; idx++ ) {
write(fp, &persons[idx]);
}
でCPersonの配列にも対応できてしまう。
このようなことがRustではできなくなるはず。
無理やり観が有るが、CPersonのメンバ関数としてwrite()関数を作ってしまうことで対応できるかも知れない。
631デフォルトの名無しさん
2020/06/01(月) 22:50:56.49ID:CYB5du4X rustはまだ勉強中だけど、630がアホなこと言ってるのは俺でもわかる。
632デフォルトの名無しさん
2020/06/01(月) 22:53:23.54ID:6zq2VOrY ID:T0vrM+QLやID:bf1cRh+Bと同一人物だね
633デフォルトの名無しさん
2020/06/01(月) 22:54:16.92ID:6zq2VOrY 荒らしの相手するやつも荒らし
634デフォルトの名無しさん
2020/06/01(月) 23:37:56.02ID:QCREwpDy もうこのスレで公式すら読んでないような初心者質問するやつ無視でよくね。文章から見て同一人物っぽいし
それとそのテンプレ追加も次立てる人お願い >>999
それとそのテンプレ追加も次立てる人お願い >>999
635デフォルトの名無しさん
2020/06/02(火) 10:45:35.24ID:7ZgjbGq0636デフォルトの名無しさん
2020/06/02(火) 10:57:29.35ID:UmuMxSnR diesel辛いっていう人多いけど、乗り換えるならどんなクレートになんだろうね
637デフォルトの名無しさん
2020/06/02(火) 11:19:09.02ID:7ZgjbGq0638デフォルトの名無しさん
2020/06/02(火) 19:18:24.00ID:wGjSvc+B 結局c++やらんとrustを理解するなんて無理なんだよ
639デフォルトの名無しさん
2020/06/02(火) 20:16:57.29ID:N0F889O8640デフォルトの名無しさん
2020/06/03(水) 02:21:24.02ID:TdRUmxlv https://users.rust-lang.org/t/isnt-rust-too-difficult-to-be-widely-adopted/6173/37
↑のサイトに寄れば、Blandy & Orendorff の Programming Rust の
評判が良いらしい:
I’m also new to Rust and have found the “Programming Rust” book by Blandy & Orendorff to be very helpful.
Especially the chapters on ownership and references.
It is an expensive book though.
また、Box<T>, Rc<T>, RefCell<T>は必要ないという見方があるらしい。
最初から用意されているコンテナを使えば十分という意味のようだ :
I also didn’t need Box, Rc, RefCell, or friends.
↑のサイトに寄れば、Blandy & Orendorff の Programming Rust の
評判が良いらしい:
I’m also new to Rust and have found the “Programming Rust” book by Blandy & Orendorff to be very helpful.
Especially the chapters on ownership and references.
It is an expensive book though.
また、Box<T>, Rc<T>, RefCell<T>は必要ないという見方があるらしい。
最初から用意されているコンテナを使えば十分という意味のようだ :
I also didn’t need Box, Rc, RefCell, or friends.
641デフォルトの名無しさん
2020/06/03(水) 02:34:58.13ID:TdRUmxlv >>638
(C++は、C++11から大幅に改定されたので)、海外のサイトに寄れば、
C++11より前のC++からRustを学ぼうとすると大変だが、C++11以後
からだと対応関係が分かり易くて楽なのだそうだ。
unique_ptrとBox<T>が対応しているような話か。
ただ、C++の特徴であるtemplateに相当するものがまだRustにはないことが
残念だと書かれていた。
(C++は、C++11から大幅に改定されたので)、海外のサイトに寄れば、
C++11より前のC++からRustを学ぼうとすると大変だが、C++11以後
からだと対応関係が分かり易くて楽なのだそうだ。
unique_ptrとBox<T>が対応しているような話か。
ただ、C++の特徴であるtemplateに相当するものがまだRustにはないことが
残念だと書かれていた。
642デフォルトの名無しさん
2020/06/03(水) 02:45:19.00ID:TdRUmxlv そのサイトに寄れば、Rustで難しいのは、借用や所有の概念ではなく、
lifetimeなのだそうだ。
個人的にも、構造体のlifetimeについて説明不足を感じた。
構造体の変数のスコープと構造体のメタ部分で記述するライフタイムの
関係性がbookなどでは書かれて無いように思えた。
分からんけど。
lifetimeなのだそうだ。
個人的にも、構造体のlifetimeについて説明不足を感じた。
構造体の変数のスコープと構造体のメタ部分で記述するライフタイムの
関係性がbookなどでは書かれて無いように思えた。
分からんけど。
643デフォルトの名無しさん
2020/06/03(水) 02:59:40.24ID:TdRUmxlv 2018/04 の時点でも、まだ、lifetimeに関する資料が足りてないと感じている人がいたそうだ。
Can we maybe have a book or booklet exclusively covering lifetimes?
I don’t think the first level of instruction material on lifetimes which is found
in the rust book and others which talks about the syntax and the aliasing rules and elision is enough.
It leads to an incomplete model which only frustrates when you discover its incompleteness.
Rust nominoc does go further. For example it shows with detailed examples how lifetimes start with
a let binding and how they interact with other lifetimes in the same scope.
This is fundamental stuff and absolutely essential to understanding.
But there are still aspects not covered there.
For instance I realized that lifetimes can be shrunk as needed by the compiler only from this
forum (thanks @vitalyd) which invalidated my previous model.
And I’m sure there are other aspects I don’t know about.
I think we just need one place where one can learn everything about lifetimes and be done with it.
Can we maybe have a book or booklet exclusively covering lifetimes?
I don’t think the first level of instruction material on lifetimes which is found
in the rust book and others which talks about the syntax and the aliasing rules and elision is enough.
It leads to an incomplete model which only frustrates when you discover its incompleteness.
Rust nominoc does go further. For example it shows with detailed examples how lifetimes start with
a let binding and how they interact with other lifetimes in the same scope.
This is fundamental stuff and absolutely essential to understanding.
But there are still aspects not covered there.
For instance I realized that lifetimes can be shrunk as needed by the compiler only from this
forum (thanks @vitalyd) which invalidated my previous model.
And I’m sure there are other aspects I don’t know about.
I think we just need one place where one can learn everything about lifetimes and be done with it.
644デフォルトの名無しさん
2020/06/04(木) 10:31:48.72ID:E8yK5u0i >>641
グロ
グロ
645デフォルトの名無しさん
2020/06/04(木) 12:10:41.88ID:4kMLpsX6 >>636
sqlxじゃないか
sqlxじゃないか
646デフォルトの名無しさん
2020/06/04(木) 13:20:58.04ID:YCN7KCgu 難しいのはネストした場合のオブジェクトに対するイミュータブルかどうかとライフタイムだろう。
647デフォルトの名無しさん
2020/06/04(木) 14:06:07.27ID:hCECm/yf ライフタイムはコンパイラが親切丁寧に指摘してくれるから難しくは無いだろ
依存関係とか指摘出来ない系のエラーで詰まる事のが多い
依存関係とか指摘出来ない系のエラーで詰まる事のが多い
648デフォルトの名無しさん
2020/06/04(木) 19:40:21.91ID:pT22FhoL649デフォルトの名無しさん
2020/06/04(木) 20:10:09.15ID:pX62chi4 競馬かな?
650デフォルトの名無しさん
2020/06/04(木) 20:37:04.46ID:ZbgQHKA+ >>648
難しくないってのは「学習は」難しくないって話じゃね?
いずれは自分でわかるようになるというのは当然の前提で、
まあわかるようになっても間違えることはあるのでそれを指摘してくれるのもありがたい。
難しくないってのは「学習は」難しくないって話じゃね?
いずれは自分でわかるようになるというのは当然の前提で、
まあわかるようになっても間違えることはあるのでそれを指摘してくれるのもありがたい。
651デフォルトの名無しさん
2020/06/04(木) 22:06:35.88ID:x+eVDE0s >>650
ところが、コンパイラを実際に動かさなくても、仕様書や例を見ただけで
理解できる言語も多いんだよ。
たとえば、CやBASIC,JS,Java,C#,Ruby,Python,Perlなどがそれに該当する。
C++は、03まではまあ分かったが、だんだん難しくなっていった。
もはやSTLのソースも仕様書ですらも理解できるのは一部の特殊な人に
限定されてきているかも知れない。STLの
forward()の意味を理解したりどう実装されているかをソースを見て理解できる
る人は本の一握りだろう。
move()とforward()の役割の違いも実装レベルでどれだけの人間が理解できることか。
でもRustも同じように難しくて同じようなことは起こると考えている。
ところが、コンパイラを実際に動かさなくても、仕様書や例を見ただけで
理解できる言語も多いんだよ。
たとえば、CやBASIC,JS,Java,C#,Ruby,Python,Perlなどがそれに該当する。
C++は、03まではまあ分かったが、だんだん難しくなっていった。
もはやSTLのソースも仕様書ですらも理解できるのは一部の特殊な人に
限定されてきているかも知れない。STLの
forward()の意味を理解したりどう実装されているかをソースを見て理解できる
る人は本の一握りだろう。
move()とforward()の役割の違いも実装レベルでどれだけの人間が理解できることか。
でもRustも同じように難しくて同じようなことは起こると考えている。
652デフォルトの名無しさん
2020/06/04(木) 22:49:18.31ID:VyuaeUph そのレベルで理解できてない人がC++使うのはどういうメリットがあるのだろうか
653デフォルトの名無しさん
2020/06/04(木) 22:52:33.61ID:x+eVDE0s 実はC++は、forwardやmove, templateなどの詳細を理解できてなくても高級言語的な部分だけを使ってプログラムすることは出来る。
それはRustでも同じ。
それはRustでも同じ。
654デフォルトの名無しさん
2020/06/04(木) 23:01:33.43ID:iTcUmNL8 C++は仕様が難しいというより
仕様ではないけど当然知ってるべきイディオムが
たくさんあってきつい、という感じがするな。
仕様ではないけど当然知ってるべきイディオムが
たくさんあってきつい、という感じがするな。
655デフォルトの名無しさん
2020/06/05(金) 01:02:20.04ID:D80WdA6t 将棋しか知らない人が囲碁というゲームを見ると
何やってるかわからないしなんだかむずかしそうと言う
しかし実は囲碁はルールそのものはおそろしくシンプルなのだ
ところがルールだけ知っていても、囲碁は打てない
(打てるけど次に何していいかわからなくなる)
なぜなら囲碁はルールとは別に「こういう場面はこういう風に
打ち回す」というイデォムが大量にあってそれを知る必要があるからだ
C++はそれに似ている
何やってるかわからないしなんだかむずかしそうと言う
しかし実は囲碁はルールそのものはおそろしくシンプルなのだ
ところがルールだけ知っていても、囲碁は打てない
(打てるけど次に何していいかわからなくなる)
なぜなら囲碁はルールとは別に「こういう場面はこういう風に
打ち回す」というイデォムが大量にあってそれを知る必要があるからだ
C++はそれに似ている
656デフォルトの名無しさん
2020/06/05(金) 01:41:15.67ID:27EcDywu そもそもRustの仕様って難しいか?
いろんな言語から取り込んだ概念があって
C一筋とかRuby一筋みたいな人には学ぶべきことが多いとは思うけど、
特に複雑な仕様って思い当たらないんだけどな。
JSの型変換の仕様とかの方がよっぽど複雑だしワケわからんと思う。
いろんな言語から取り込んだ概念があって
C一筋とかRuby一筋みたいな人には学ぶべきことが多いとは思うけど、
特に複雑な仕様って思い当たらないんだけどな。
JSの型変換の仕様とかの方がよっぽど複雑だしワケわからんと思う。
657デフォルトの名無しさん
2020/06/05(金) 09:30:38.65ID:9qGH+5zI >>651
C が仕様や例で理解できるってどんな超人だよ。
コンパイルエラーにも実行時エラーにもならない未定義だの処理系定義だのが山もりだろうが。
初心者の書くコードで完全に仕様に沿ったコードなんて見たことないぞ。
C が仕様や例で理解できるってどんな超人だよ。
コンパイルエラーにも実行時エラーにもならない未定義だの処理系定義だのが山もりだろうが。
初心者の書くコードで完全に仕様に沿ったコードなんて見たことないぞ。
658デフォルトの名無しさん
2020/06/05(金) 09:38:30.26ID:9qGH+5zI Haskell の入門書を一通りは読んでたから Rust の型システムは似たようなものとして理解できたなぁ。
ライフタイムもプログラムの字面に書きこそしないでも C/C++ では意識せざるを得ないし、
複雑になるとわけわからんってときは C/C++ で書いてもわけわからんようになるやつ。
ライフタイムもプログラムの字面に書きこそしないでも C/C++ では意識せざるを得ないし、
複雑になるとわけわからんってときは C/C++ で書いてもわけわからんようになるやつ。
659デフォルトの名無しさん
2020/06/05(金) 12:01:32.43ID:lHXK6is7 きっとそういう感じでべた褒めする人が多いから、Rubyみたいに一回大人気言語になった後、急速に衰退する気がする。
Rubyも最初は良いと思われていた。
Rubyも最初は良いと思われていた。
660デフォルトの名無しさん
2020/06/05(金) 12:13:12.11ID:lHXK6is7661デフォルトの名無しさん
2020/06/05(金) 12:14:22.73ID:9qGH+5zI Ruby は今でも十分に使われているよ。 (俺は使ってないけど。)
適切ではないところまで広がった分がそぎ落とされてちょうどいい感じに落ち着いたってだけ。
プログラミング言語の良さはスカラ値で測定できるようなものではなくて、用途による。
利用事例が減ったからといってその勢いで衰退して消えるっていうような話ではない。
Rust はまだ実際のプロダクトでどう使うのが適切なのか見極め切れていないから過剰に広まっている
というのはあると思うが、少なくとも C/C++ で問題だった部分を解決したという側面はある。
そんでそのかわりに出てきた問題ももちろんあるので両方を天秤にかけて判断する材料を集めているとこって感じ。
適切ではないところまで広がった分がそぎ落とされてちょうどいい感じに落ち着いたってだけ。
プログラミング言語の良さはスカラ値で測定できるようなものではなくて、用途による。
利用事例が減ったからといってその勢いで衰退して消えるっていうような話ではない。
Rust はまだ実際のプロダクトでどう使うのが適切なのか見極め切れていないから過剰に広まっている
というのはあると思うが、少なくとも C/C++ で問題だった部分を解決したという側面はある。
そんでそのかわりに出てきた問題ももちろんあるので両方を天秤にかけて判断する材料を集めているとこって感じ。
662デフォルトの名無しさん
2020/06/05(金) 12:15:46.52ID:9qGH+5zI >>660
うん。 C がシンプルで理解しやすいと思い込みやすい言語なのは俺も知ってる。
うん。 C がシンプルで理解しやすいと思い込みやすい言語なのは俺も知ってる。
663デフォルトの名無しさん
2020/06/05(金) 12:32:15.42ID:lHXK6is7 Google Trends によれば、検索数の増加曲線はほぼ kotlinと同じ位。
ただし、kotlinは、2017/05に急激に上がってRustと重なりあった曲線になったのに対し、Rustは、2014/01に急激に上がった後、徐々に増えている感じ。
Rustはこの1年くらいでわずかに増加速度がKotlinより上がったが、それでもKotlinの曲線とほぼ重なった状態からは脱してはいない。
ただし、kotlinは、2017/05に急激に上がってRustと重なりあった曲線になったのに対し、Rustは、2014/01に急激に上がった後、徐々に増えている感じ。
Rustはこの1年くらいでわずかに増加速度がKotlinより上がったが、それでもKotlinの曲線とほぼ重なった状態からは脱してはいない。
664デフォルトの名無しさん
2020/06/05(金) 12:34:07.49ID:lHXK6is7 >>662
匿名性掲示板では何でも言えてしまうが、実績を見れば俺がちゃんとCやC++を使いこなしていることは分かる。
ただし、C++は一度学んでも仕様が大幅に変更されるので、細かいところを理解するのは時間が掛かるようになってきている。
Cはそんなことはなかったが。
匿名性掲示板では何でも言えてしまうが、実績を見れば俺がちゃんとCやC++を使いこなしていることは分かる。
ただし、C++は一度学んでも仕様が大幅に変更されるので、細かいところを理解するのは時間が掛かるようになってきている。
Cはそんなことはなかったが。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国国連大使「日本が中国に武力行使すると脅しをかけたのは初めて」 国連事務総長に書簡★5 [♪♪♪★]
- 【🐼】パンダ、日本で会えなくなる? 中国との関係悪化で不安の声 ★2 [ぐれ★]
- 高市首相告白「『なめられない服』を選ぶことに数時間を費やしました」「外交交渉でマウント取れる服、買わなくてはいかんかもなぁ」★4 [ぐれ★]
- 【芸能】44歳・池脇千鶴、激変ぶりにネット衝撃 「まるで別人…」「変化が凄い!!」の声 [冬月記者★]
- なぜ立花孝志氏の言葉は信じられたのか…"異例の逮捕"が浮き彫りにした「SNSの危険な病理」 [ぐれ★]
- 竹中平蔵氏、万博は大成功だったと持論 批判していた人々にチクリ「反省の弁の一つも聞きたい」 [バイト歴50年★]
- キミと~アイドルプリキュア
- (´-ω-)
- 『スーパーリアル麻雀』VRのクラファンが目標の14倍集まる [435756605]
- おーいもう朝だぞー太陽出る時間だぞー
- VIPでアズールレーン
- 愛国者「日本に手を出したらアメリカが黙ってないぞ?」 [834922174]
