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
664デフォルトの名無しさん
2020/06/05(金) 12:34:07.49ID:lHXK6is7 >>662
匿名性掲示板では何でも言えてしまうが、実績を見れば俺がちゃんとCやC++を使いこなしていることは分かる。
ただし、C++は一度学んでも仕様が大幅に変更されるので、細かいところを理解するのは時間が掛かるようになってきている。
Cはそんなことはなかったが。
匿名性掲示板では何でも言えてしまうが、実績を見れば俺がちゃんとCやC++を使いこなしていることは分かる。
ただし、C++は一度学んでも仕様が大幅に変更されるので、細かいところを理解するのは時間が掛かるようになってきている。
Cはそんなことはなかったが。
665デフォルトの名無しさん
2020/06/05(金) 12:58:47.64ID:AaIN4ymo もしかして伝説のスーパーハカーさんですか!?
666デフォルトの名無しさん
2020/06/05(金) 13:22:50.72ID:YL2P8Olu chronoつかってるんだけど、このyearってなんでi32なの?
https://docs.rs/chrono/0.4.11/chrono/offset/trait.TimeZone.html#method.ymd
fn ymd(&self, year: i32, month: u32, day: u32) -> Date<Self>
https://docs.rs/chrono/0.4.11/chrono/offset/trait.TimeZone.html#method.ymd
fn ymd(&self, year: i32, month: u32, day: u32) -> Date<Self>
667デフォルトの名無しさん
2020/06/05(金) 13:32:05.31ID:9qGH+5zI668デフォルトの名無しさん
2020/06/05(金) 13:35:12.28ID:9qGH+5zI669デフォルトの名無しさん
2020/06/05(金) 13:44:02.67ID:o7GNRsMO 合ってんじゃね?
知らんけど。
知らんけど。
670デフォルトの名無しさん
2020/06/05(金) 14:06:52.05ID:B8WhcAqO C++の仕様が大幅に変更されたというのは
なんのことだ?
なんのことだ?
671デフォルトの名無しさん
2020/06/05(金) 14:17:19.64ID:lHXK6is7 >>670
有る意味では僅かな修正であっても、基礎的な部分における修正は多大な影響を及ぼすことがある。
moveを出来るようにするために追加されたもろもろの事や、=を書かないタイプの{}
による初期化はそれに該当する。
なんでも無いようでいて、可読性を下げたり危険をもたらすことがある。
有る意味では僅かな修正であっても、基礎的な部分における修正は多大な影響を及ぼすことがある。
moveを出来るようにするために追加されたもろもろの事や、=を書かないタイプの{}
による初期化はそれに該当する。
なんでも無いようでいて、可読性を下げたり危険をもたらすことがある。
672デフォルトの名無しさん
2020/06/05(金) 14:41:22.49ID:rO0o1lhv >>662
Cほどシンプルな言語もないだろ。それと簡単に使いこなせるかは別問題。
Cほどシンプルな言語もないだろ。それと簡単に使いこなせるかは別問題。
673デフォルトの名無しさん
2020/06/05(金) 14:48:48.89ID:B8WhcAqO >>671
それ仕様の変更なの?
それ仕様の変更なの?
674デフォルトの名無しさん
2020/06/05(金) 14:55:26.22ID:vEUs2R05 >>666
そこに書いとるやん
This assumes the proleptic Gregorian calendar, with the year 0 being 1 BCE.
つまり-1は2 BC
そこに書いとるやん
This assumes the proleptic Gregorian calendar, with the year 0 being 1 BCE.
つまり-1は2 BC
675デフォルトの名無しさん
2020/06/05(金) 15:08:35.22ID:8BtILZXI Cのプリプロセッサやパーサーを書くと全然シンプルじゃないことが分かる
676デフォルトの名無しさん
2020/06/05(金) 15:11:02.16ID:lHXK6is7 >>675
それは、使う側にはシンプルそうに見えるCも実は細かく見るとシンプルではないということであって、使う側目線で既に複雑なものはそれ以前の問題他。
それは、使う側にはシンプルそうに見えるCも実は細かく見るとシンプルではないということであって、使う側目線で既に複雑なものはそれ以前の問題他。
677デフォルトの名無しさん
2020/06/05(金) 15:43:45.14ID:9qGH+5zI 依存先より寿命が長くなってはいけないなんていうのは C でも当たり前のことだろ。
Rust のライフタイムはライフタイムを簡単に「表現 (したものをチェック)」する言語機能であって、
C でプログラマがやってる (はずの) ライフタイムの管理より複雑ということはない。
Rust なら処理系がチェックしてくれることを
C ではプログラマがやってたんだぞ。
C で出来てたことが Rust ではやれないってのは言語のせいか?
Rust のライフタイムの管理は制約が厳しいとか面倒くさいとかいうなら話はわかるが、
複雑だとか学習難易度が高いというのは納得しかねる。
Rust のライフタイムはライフタイムを簡単に「表現 (したものをチェック)」する言語機能であって、
C でプログラマがやってる (はずの) ライフタイムの管理より複雑ということはない。
Rust なら処理系がチェックしてくれることを
C ではプログラマがやってたんだぞ。
C で出来てたことが Rust ではやれないってのは言語のせいか?
Rust のライフタイムの管理は制約が厳しいとか面倒くさいとかいうなら話はわかるが、
複雑だとか学習難易度が高いというのは納得しかねる。
678デフォルトの名無しさん
2020/06/05(金) 15:54:02.73ID:lHXK6is7 >>677
>Rust のライフタイムの管理は制約が厳しいとか面倒くさいとかいうなら話はわかるが、
>複雑だとか学習難易度が高いというのは納得しかねる。
一つあるとすれば、難しさは、ちゃんと本も読んでいるか、ネットに書かれている情報だけに頼っているかの違いに起因している可能性。
>Rust のライフタイムの管理は制約が厳しいとか面倒くさいとかいうなら話はわかるが、
>複雑だとか学習難易度が高いというのは納得しかねる。
一つあるとすれば、難しさは、ちゃんと本も読んでいるか、ネットに書かれている情報だけに頼っているかの違いに起因している可能性。
679デフォルトの名無しさん
2020/06/05(金) 21:26:05.32ID:Py5zog1r これにて、このスレがRust関連の本の作者の巣窟であることが証明されました。
680デフォルトの名無しさん
2020/06/05(金) 21:32:24.36ID:cXh0Dvtv だいぶ前からじつは言語系のスレはほとんどソレなんだな
宣伝してるやつは気付かれれないと思ってるだろうけど
宣伝してるやつは気付かれれないと思ってるだろうけど
681デフォルトの名無しさん
2020/06/05(金) 21:49:15.38ID:Py5zog1r >>618
2018/11/28の時点で、
https://www.infoworld.com/article/3324488/rust-language-is-too-hard-to-learn-and-use-says-user-survey.html
ユーザーの調査によると、Rust言語は習得も使用も難しい
Rustユーザーの調査では、メモリの安全性と正確性のためにこの言語の非常に宣伝されている機能に困難と不満を感じています
Rust言語チームが実施したRustユーザーコミュニティの新しい調査では、言語とその使用への関心が高まっていますが、プロジェクトが利点として宣伝しているいくつかのRust機能に対するユーザーの不満も示されています。
Rustの習得が難しいのはなぜですか?ユーザーは、Rustの最も特徴的な2つの機能(寿命と所有権/借用システム)は、「トリッキー」、「非常に難しい」、または「まだ得られない」ものであると報告しました。
その他の質問は、Rustを続行するための課題を中心に展開されました。Rustの使用をやめた人の約半分は、わずか1か月後にそうしました。Rustを使用していない最も一般的な理由は、「威圧的すぎる、習得が難しい、または複雑すぎる」(25%)、
2018/11/28の時点で、
https://www.infoworld.com/article/3324488/rust-language-is-too-hard-to-learn-and-use-says-user-survey.html
ユーザーの調査によると、Rust言語は習得も使用も難しい
Rustユーザーの調査では、メモリの安全性と正確性のためにこの言語の非常に宣伝されている機能に困難と不満を感じています
Rust言語チームが実施したRustユーザーコミュニティの新しい調査では、言語とその使用への関心が高まっていますが、プロジェクトが利点として宣伝しているいくつかのRust機能に対するユーザーの不満も示されています。
Rustの習得が難しいのはなぜですか?ユーザーは、Rustの最も特徴的な2つの機能(寿命と所有権/借用システム)は、「トリッキー」、「非常に難しい」、または「まだ得られない」ものであると報告しました。
その他の質問は、Rustを続行するための課題を中心に展開されました。Rustの使用をやめた人の約半分は、わずか1か月後にそうしました。Rustを使用していない最も一般的な理由は、「威圧的すぎる、習得が難しい、または複雑すぎる」(25%)、
682デフォルトの名無しさん
2020/06/05(金) 22:00:56.76ID:Py5zog1r Rust言語は、学んだり使ったりするのが難しすぎるということが、ユーザーに対する調査で分かった。
--Rustユーザーに対する調査では、安全性と正確性のために言語が非常にうるさく押し付けてくる特長により困難と欲求不満を感じていることが分かった。
Rust language is too hard to learn and use, says user survey
A survey of Rust users finds difficulty and frustration with the language’s highly touted features for memory safety and correctness.
tout = 押し売りする, うるさく勧誘する, 客引きする
(tout for custom うるさく注文を求める.)
・切符をプレミア付きで売る, ダフ屋をやる.
・うるさく勧める.
・ほめちぎる.
--Rustユーザーに対する調査では、安全性と正確性のために言語が非常にうるさく押し付けてくる特長により困難と欲求不満を感じていることが分かった。
Rust language is too hard to learn and use, says user survey
A survey of Rust users finds difficulty and frustration with the language’s highly touted features for memory safety and correctness.
tout = 押し売りする, うるさく勧誘する, 客引きする
(tout for custom うるさく注文を求める.)
・切符をプレミア付きで売る, ダフ屋をやる.
・うるさく勧める.
・ほめちぎる.
683デフォルトの名無しさん
2020/06/05(金) 22:04:18.63ID:Py5zog1r 誤:安全性と正確性のために言語が非常にうるさく押し付けてくる特長
誤:安全性と正確性のために言語が非常にうるさく押し付けてくる機構(機能)
誤:安全性と正確性のために言語が非常にうるさく押し付けてくる機構(機能)
684デフォルトの名無しさん
2020/06/05(金) 23:15:24.59ID:9qGH+5zI >>674
へー。 西暦にゼロ年っていうのは無いのか。
へー。 西暦にゼロ年っていうのは無いのか。
685デフォルトの名無しさん
2020/06/06(土) 04:00:23.67ID:Vvt5YBJp この言語廃れてきそうな気がした。
だってみんなが触るって未来が想像できないもん
だってみんなが触るって未来が想像できないもん
686デフォルトの名無しさん
2020/06/06(土) 04:10:18.67ID:Oxqgflbz みんなが触る言語なんて世の中に存在するか?
687デフォルトの名無しさん
2020/06/06(土) 05:29:47.06ID:i8tpraSw Rustを使ったことはないけどC++は既存の資源で堅実に作るのに対して
Rustは一人のスーパープログラマが複雑高度なライブラリやモジュールを一点突破で書くのに使われそうなイメージ
Rustは一人のスーパープログラマが複雑高度なライブラリやモジュールを一点突破で書くのに使われそうなイメージ
688デフォルトの名無しさん
2020/06/06(土) 09:51:25.89ID:9F/1KVDa まあScalaと同じ道を辿るだろうね
あっちはビッグウェア系でそれなりに採用されてたから被害が甚大だったけど、
Rustに関してはそういうビジネス的な得意分野は今のところ無いのが救いか
あっちはビッグウェア系でそれなりに採用されてたから被害が甚大だったけど、
Rustに関してはそういうビジネス的な得意分野は今のところ無いのが救いか
689デフォルトの名無しさん
2020/06/06(土) 15:58:34.19ID:HBMrgMqa >>687
ところがスーパープログラマは、C++でもメモリー関連のバグで詰んで挫折したりすることはないんだな、これが。
ところがスーパープログラマは、C++でもメモリー関連のバグで詰んで挫折したりすることはないんだな、これが。
690デフォルトの名無しさん
2020/06/06(土) 17:06:05.01ID:58RXXUUu691デフォルトの名無しさん
2020/06/06(土) 17:17:15.77ID:P/b6XOwm C++は標準のライブラリリポジトリと標準のビルドツールがあればなぁ、と思う。
野良のは乱立してるけど、結局ほしいライブラリはなかったりするし…。
野良のは乱立してるけど、結局ほしいライブラリはなかったりするし…。
692デフォルトの名無しさん
2020/06/06(土) 17:37:45.92ID:wqdan8fc693デフォルトの名無しさん
2020/06/06(土) 18:11:03.05ID:58RXXUUu694デフォルトの名無しさん
2020/06/06(土) 18:38:18.22ID:Vvt5YBJp >>690
crates.ioがダメダメだから代替のサイトあるのってご存知でない?
crates.ioがダメダメだから代替のサイトあるのってご存知でない?
695デフォルトの名無しさん
2020/06/06(土) 18:42:21.81ID:nPYA670X Webサイトの話をしてるわけじゃないだろ
696デフォルトの名無しさん
2020/06/06(土) 18:56:38.50ID:7YMZq5d4 >>691
漏れは、Windows 10, WSL, Ubuntu 18.04 で、
anyenv(rbenv)で、Ruby をコンパイルするのに、build-essential を使っているけど
build-essential には、
gcc(GNU C compiler), g++(GNU C++ compiler), libc6-dev(GNU C Library), make などが入っています
パッケージ: build-essential
https://packages.ubuntu.com/ja/bionic/build-essential
漏れは、Windows 10, WSL, Ubuntu 18.04 で、
anyenv(rbenv)で、Ruby をコンパイルするのに、build-essential を使っているけど
build-essential には、
gcc(GNU C compiler), g++(GNU C++ compiler), libc6-dev(GNU C Library), make などが入っています
パッケージ: build-essential
https://packages.ubuntu.com/ja/bionic/build-essential
697デフォルトの名無しさん
2020/06/06(土) 19:37:13.44ID:P/b6XOwm698デフォルトの名無しさん
2020/06/06(土) 21:37:30.50ID:nFHIDUIo Rustでプロキシーサーバー実装してみようと思ったんだけどTCPStreamとreqwest::headerの連携がうまくいかない
699696
2020/06/06(土) 22:21:08.03ID:7YMZq5d4 漏れは、日本人が作った、バージョンマネージャーのanyenv で、
rbenv, nodenv を使って、ruby 2.6.6, node 12.16.2 を入れた
環境構築が、各言語でバラバラになるのは面倒なので、
anyenv・asdf などを使えば?
rbenv, nodenv を使って、ruby 2.6.6, node 12.16.2 を入れた
環境構築が、各言語でバラバラになるのは面倒なので、
anyenv・asdf などを使えば?
700デフォルトの名無しさん
2020/06/06(土) 23:04:13.04ID:nFHIDUIo hyperのサンプルに答えがありました
701デフォルトの名無しさん
2020/06/07(日) 00:03:49.64ID:uvQLWD0s こんな書き込みを見つけた:
loop {
// 1. you finally understood lifetimes
// 2. you get compiler lifetime /borrow complaints
// 3. you feel stupid for taking hours to fix <5 LoC
}
loop {
// 1. you finally understood lifetimes
// 2. you get compiler lifetime /borrow complaints
// 3. you feel stupid for taking hours to fix <5 LoC
}
702デフォルトの名無しさん
2020/06/07(日) 00:19:04.85ID:uvQLWD0s ループ {
// 1. あなたはついに lifetime を理解した。
// 2. あなたはコンパイラに lifetimeやborrow の苦情を複数個言われる。
// 3. 5行未満のコードを直すのに何時間もとられることにあなたは馬鹿馬鹿しさを感じる。
}
// 1. あなたはついに lifetime を理解した。
// 2. あなたはコンパイラに lifetimeやborrow の苦情を複数個言われる。
// 3. 5行未満のコードを直すのに何時間もとられることにあなたは馬鹿馬鹿しさを感じる。
}
703デフォルトの名無しさん
2020/06/07(日) 11:58:43.41ID:CPBtFfEp コンパイラに緊縛されて未定義動作を踏まないという快感を得るプレイ
704デフォルトの名無しさん
2020/06/07(日) 17:57:12.72ID:WIpxuhAg Rsutって、早い話が、CやC++に、NULLバグ等々が発生しないようにするための補助機能がついた言語ってこと?
705デフォルトの名無しさん
2020/06/07(日) 18:44:36.11ID:r/6oC92T そうだね〜、で、俺様はNullチェックは忘れないしダングリングポインタなんて組み込まないのでC/C++で良いや
という俺様スパハカがゴミグラムを生み出してきたのでRustは必須
という俺様スパハカがゴミグラムを生み出してきたのでRustは必須
706デフォルトの名無しさん
2020/06/07(日) 18:48:57.09ID:HzkE9Nko >>704
書き方がC/C++の文化とはかけ離れているように感じるが。
書き方がC/C++の文化とはかけ離れているように感じるが。
707デフォルトの名無しさん
2020/06/07(日) 19:46:37.12ID:WIpxuhAg708デフォルトの名無しさん
2020/06/07(日) 19:59:02.69ID:uZfe/Sta どっちかというと「関数型C++」な印象
709デフォルトの名無しさん
2020/06/07(日) 22:51:27.97ID:fhJ4vSsJ Hindley-Milner 型推論を元にしているから考え方は ML 系統からの影響は大きいと思う。
710デフォルトの名無しさん
2020/06/08(月) 02:06:14.90ID:jeqh3aBJ C++の地獄をML(とアフィン型)の知見で楽にしようとした言語
Cの遺産を引き摺ったが故に煩雑だった前者の記法を捨てて後者のいいとこを貰ってきたので、記法が後者に似てるように見えはするけど、やってる事はそう大きく変わってはいない
Cの遺産を引き摺ったが故に煩雑だった前者の記法を捨てて後者のいいとこを貰ってきたので、記法が後者に似てるように見えはするけど、やってる事はそう大きく変わってはいない
711デフォルトの名無しさん
2020/06/08(月) 10:53:34.76ID:KAmnJXdU 「C++ のメンバ関数の実態は this を暗黙に渡しているだけ」ってのを露骨にしたのも Rust の面白い部分だよね。
関数的な意味論を用いながらも構文糖としてのメソッド記法も用意することでオブジェクト指向的な表現が出来る。
関数的な意味論を用いながらも構文糖としてのメソッド記法も用意することでオブジェクト指向的な表現が出来る。
712デフォルトの名無しさん
2020/06/08(月) 13:11:59.47ID:LDYBA2kC RustはC++ではゼロコストで出来ていたものが、出来なくなってしまっていることが多い。
713デフォルトの名無しさん
2020/06/08(月) 13:14:25.82ID:KAmnJXdU >>712
具体的には?
具体的には?
714デフォルトの名無しさん
2020/06/08(月) 13:19:16.88ID:NanZmWBA 関数的な意味論ねぇ
表層的に一部それっぽいってだけでは?
表層的に一部それっぽいってだけでは?
715デフォルトの名無しさん
2020/06/08(月) 13:28:01.70ID:KAmnJXdU 言語として純粋関数型に分類される Haskell ですら
オブジェクト指向のスタイルで構築されたライブラリは有るから……。
(そのためのフレームワークである lens はまあまあ人気。)
言語仕様での理屈がどうあれ最終的には使い方次第。
オブジェクト指向のスタイルで構築されたライブラリは有るから……。
(そのためのフレームワークである lens はまあまあ人気。)
言語仕様での理屈がどうあれ最終的には使い方次第。
716デフォルトの名無しさん
2020/06/08(月) 13:36:41.82ID:LDYBA2kC >>713
言うと改善されるので言わない。
言うと改善されるので言わない。
717デフォルトの名無しさん
2020/06/08(月) 13:46:18.64ID:LDYBA2kC memmove()すらunsafeなしではかけないし。
718デフォルトの名無しさん
2020/06/08(月) 13:53:57.25ID:LDYBA2kC RustではpChildがHeapにとられている時、次のようなループすら書けない。
CPerson *pChild=pPerson->pChild;
while(pChild != NULL) {
(pChildに対する処理);
pChild=pChild->pNext;
}
CPerson *pChild=pPerson->pChild;
while(pChild != NULL) {
(pChildに対する処理);
pChild=pChild->pNext;
}
719デフォルトの名無しさん
2020/06/08(月) 14:30:52.23ID:KAmnJXdU >>718
こういう感じのこと?
#[derive(Default)]
struct Person {
pub childs: Box<[Person]>
}
fn main() {
let person : Person = Default::default();
let childs = person.childs;
for ref child in childs.iter() {
// child に対する処理
}
}
こういう感じのこと?
#[derive(Default)]
struct Person {
pub childs: Box<[Person]>
}
fn main() {
let person : Person = Default::default();
let childs = person.childs;
for ref child in childs.iter() {
// child に対する処理
}
}
720デフォルトの名無しさん
2020/06/08(月) 14:39:32.30ID:LDYBA2kC >>719
Heap領域にある構造体の中に、さらにHeap領域にあるデータへの
参照を持つためにBox型のメンバが有る場合、後者のBoxは、unique_ptrなので
ローカル変数にmoveすることができないためコンパイルエラーになる。
なので、参照カウント方式のRcを使う必要がある。
Heap領域にある構造体の中に、さらにHeap領域にあるデータへの
参照を持つためにBox型のメンバが有る場合、後者のBoxは、unique_ptrなので
ローカル変数にmoveすることができないためコンパイルエラーになる。
なので、参照カウント方式のRcを使う必要がある。
721デフォルトの名無しさん
2020/06/08(月) 14:44:31.30ID:LDYBA2kC722デフォルトの名無しさん
2020/06/08(月) 14:48:41.29ID:KAmnJXdU >>721
ならない。
(完)
ならない。
(完)
723デフォルトの名無しさん
2020/06/08(月) 14:53:38.92ID:faeMvMKI チュートリアルも読まない難癖おじいちゃんの相手すんなし
724デフォルトの名無しさん
2020/06/08(月) 14:56:15.14ID:LDYBA2kC そもそも、
struct Person {
pub child: Box<[Person]>
}
がおかしくて、正しくは、
struct Person {
pub child: Box<Person>
pub next: Box<Person>
}
だ。
struct Person {
pub child: Box<[Person]>
}
がおかしくて、正しくは、
struct Person {
pub child: Box<Person>
pub next: Box<Person>
}
だ。
725デフォルトの名無しさん
2020/06/08(月) 14:56:44.39ID:LDYBA2kC >>722
全く同じではないが、こっちの環境ではなったがな。
全く同じではないが、こっちの環境ではなったがな。
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+ 実際にプログラミングするのは英語話者ばかりではないので
既に浸透した用語を使って欲しいというのはわからんでもないんだが、
似て非なるものに同じ名前を与えると調べにくかったりすることもあるしなぁ。
他の言語からの「移行」という視線でばかり見ていると良くなった部分も移行コストに見えてしまうんだなというのはわかった。
既に浸透した用語を使って欲しいというのはわからんでもないんだが、
似て非なるものに同じ名前を与えると調べにくかったりすることもあるしなぁ。
他の言語からの「移行」という視線でばかり見ていると良くなった部分も移行コストに見えてしまうんだなというのはわかった。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】 中国国営新聞社 「日本はすでに代価を支払った」 中国SNSで1位に 高市総理の発言めぐり ★2 [お断り★]
- 高市早苗総理 G20サミット“遅刻” 会議後の夕食会出席も見送り [Hitzeschleier★]
- スペイン、移民受け入れで成長 1人当たりGDP日本超え [蚤の市★]
- 小泉進次郎防衛相「共産党が日本の弾薬の数や配備を質問してきた、そんなこと言うわけない、手の内を見せるべきではない」 [お断り★]
- 【産経新聞】高市政権をバッシングする勢力、中国と一部のオールドメディアと緊縮財政派か [Hitzeschleier★]
- 中国国連大使「日本が中国に武力行使すると脅しをかけたのは初めて」 国連事務総長に書簡★7 [♪♪♪★]
- 他サポ2025-265
- 2025 SUPER FORMULA Lap20
- とらせん 2
- 【DAZN】フォーミュラGP【F1 2 3 SF P】Lap1809
- 【フジテレビ】2025 FORMULA 1【NEXT】Lap603
- ベガルタ仙台実況 ★3
- 勤労感謝🙏の日のちゅちょ👶り放題スレ🏡
- 小野田大臣に「混血の雑種」…誹謗中傷が限界突破 [545512288]
- 【悲報】「みいちゃんと山田さん」とうとう一流紙に名指しで批判される [811796219]
- 小野田紀美・経済安保相、「じゃけなんなん?じゃけどしたん?」 自身への誹謗中傷に岡山弁で応戦 [947959745]
- 【競馬】ホロライブさくらみこ王、ジャンタルマンタル単勝に10万円 [268244553]
- 【急募】逆に若者が離れてるどころか吸い寄せられてるモノWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
