Rust part17

■ このスレッドは過去ログ倉庫に格納されています
2022/10/06(木) 22:43:13.96ID:Re0G7B20
公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust

Web上の実行環境
https://play.rust-lang.org

日本語の情報
https://rust-jp.rs/

※Rustを学びたい人はまず最初に公式のThe Bookを読むこと
https://doc.rust-lang.org/book/

※Rustを学ぶ際に犯しがちな12の過ち
https://dystroy.org/blog/how-not-to-learn-rust

※Rustのasyncについて知りたければ「async-book」は必読
https://rust-lang.github.io/async-book/

※次スレは原則>>980が立てること

前スレ
Rust part16
2022/10/26(水) 00:21:17.27ID:+/Fbza6R
>>220
Pin<Box<dyn Future<Output = T>>> ではだめ?
2022/10/26(水) 01:59:13.05ID:TlW6c1+d
>>221
Box<dyn Fn() -> Pin<Box<dyn Future<Output = T>>>>
こんな感じ
2022/10/26(水) 03:12:53.76ID:J4zGWIbj
>>210
全部とは言っていないローカル変数だけだ
224デフォルトの名無しさん
垢版 |
2022/10/26(水) 07:48:04.37ID:i0Q+rT9S
>>223
GoだってJavaだってローカル変数はスタックを利用する。
2022/10/26(水) 08:03:17.30ID:xzd5i3vP
>>224
Go は知らんが Java は値型しかスタックに確保しないよ
配列使うだけでヒープ使う
226デフォルトの名無しさん
垢版 |
2022/10/26(水) 10:03:48.91ID:8iR+QuRY
んなこと言ったらRustだってBox使うだけでヒープ使われるだろ
2022/10/26(水) 10:28:26.80ID:poB2zSjv
ピープアレルギーでも湧いたのか?
2022/10/26(水) 10:55:30.37ID:xzd5i3vP
>>226
そりゃあえてBox使えばヒープ使うわな
極論バカ乙w
2022/10/26(水) 12:39:08.43ID:61QnplYU
ヒープで思いついたけどtest::benchってなんで使用したメモリ量出てこないの?Rustだってアロケーター自作できるなら出せなくないと思うんだが
2022/10/26(水) 13:39:05.90ID:29TlHyS0
c言語なんかも int a[n] とかはスタックから取ってきてる。昔はmallocしてたが。
とはいえlinuxのスタック領域はヒープとそんな変わらん。
2022/10/26(水) 13:49:21.71ID:OrdcPqRc
環境によるが、Rust のスレッドごとのスタックサイズのデフォルトが2MBとかで
バカでかいローカル変数や引数を使おうとすると、
簡単に実行時エラー/スタックオーバーフローを実現できるという
ちなみに、String はヒープを使う
232デフォルトの名無しさん
垢版 |
2022/10/26(水) 14:58:21.99ID:XcmPInF1
>>230
ん?
何が変わらんの?
2022/10/26(水) 16:10:38.33ID:+/Fbza6R
>>229
issueはあるが放置されてる
https://github.com/rust-lang/rust/issues/22666
こういうのは欲しい人が積極的に動かないとなかなか進まないよね
2022/10/26(水) 18:56:12.77ID:m/VlzFSs
C 以外の言語は、すべて浅いコピー・shallow copy でしょ。
実体はコピーされずに、参照だけがコピーされる

たぶん、ローカル変数も参照だけがスタックにあって、
実体はヒープにあるのでしょ
2022/10/26(水) 19:32:11.84ID:/Jbhrlo+
そもそもスクリプト言語はマシンスタック使ってないから
C/C++/Rust/Goみたいなコンパイル言語とスクリプト言語(PythonとかRuby)とではメモリモデルが全く違う

JVMのJITはVMスタックをマシンスタックに引き継ぐって処理をやってるけど
2022/10/26(水) 19:35:12.65ID:+/Fbza6R
>>234
Cにdeep copyの概念ある?
2022/10/26(水) 19:39:57.27ID:UI6BPQPg
>>236
たぶん >>234 は Java や C# などでいう参照型のことを言ってると思う。
2022/10/26(水) 19:41:30.91ID:WAf5RIwU
Box<T>って出現頻度の割に表記が長いよな
boxキーワードに変える案はどうなったんだ?
2022/10/26(水) 20:19:12.15ID:SEIcgM+j
>>230
まーた思いつきで適当なこと言ってるの?
2022/10/26(水) 21:39:27.98ID:xibmu52f
シャローコピーもディープコピーもプログラマに意識させるような言語の方がいいと思うけどなあ
2022/10/27(木) 17:59:59.22ID:36nf4K/2
C言語は低レベルすぎるからshallow copyやdeep copyを意識する必要がそもそもないしな
ポインタをそのまま複製するのがshallow copyでポインタをデリファレンスしてからその値を複製するのがdeep copyってだけやし
2022/10/27(木) 18:19:49.08ID:mzG41rMz
cだってポインタがネストされてたら順番に見てかないといけないのは他の言語と同じでしょ。
ネストを考慮しなくて良いならjavaだってcloneで一発コピーできる
2022/10/27(木) 22:00:27.64ID:rMi5UTbc
>>241
> C言語は低レベルすぎるからshallow copyやdeep copyを意識する必要がそもそもないしな
むしろ意識しまくりだろ
shallow copyとかdeep Copyとかのおしゃれな名前では呼んでないけど
244デフォルトの名無しさん
垢版 |
2022/10/27(木) 22:11:49.94ID:olmwGZ8d
複製おじさんディープコピー知らなかったもんねw
2022/10/27(木) 22:27:03.43ID:DBkkmtck
あえていうならCにおいては構造体のメンバをそのまま代入するのがshallow copy
構造体のメンバのポインタの領域を新しく領域を確保してコピー元の構造体を再帰的にmemcpyするのがdeep cooy
2022/10/27(木) 23:13:57.69ID:qcIge2ki
Cではというが大多数の言語がそうじゃね
2022/10/28(金) 00:02:58.28ID:Rl5QKwW8
deep copy は、ネストするから難しい

Ruby などは参照のリンクを断つために、
一旦、JSON などの文字列にしてから、オブジェクトを再構築したりする

Marshal もあるけど、色々な条件がつく。
IO, Proc, 特異メソッドが使えないとか
2022/10/28(金) 01:13:37.77ID:jXOvR4PJ
なんか話の脈絡も流れもなく各人が単語に反応して書きたいこと垂れ流すだけのスレと化してんな
2022/10/28(金) 03:43:44.96ID:01u53tKZ
高階関数はGCの性能に影響を及ぼすの?
2022/10/28(金) 09:27:53.24ID:jXOvR4PJ
Webpackの後継となる新バンドルツール「Turbopack」が登場。Rust製のネイティブアプリケーションでWebpackの700倍高速に。Next.js Conf 2022 - Publickey
https://www.publickey1.jp/blog/22/webpackturbopackrustwebpack700nextjs_conf_2022.html
2022/10/28(金) 16:15:00.57ID:AMrJHSke
JavaScriptっていつまでバンドルとかやるん?
252デフォルトの名無しさん
垢版 |
2022/10/28(金) 16:24:46.58ID:muqJ433+
いっそコンパイルしたら
2022/10/28(金) 16:28:04.57ID:AMrJHSke
wasmでそれやろうとしてるけど
wasmランタイムよりJavaScriptランタイムの方がまだ速いというトホホな状態
2022/10/28(金) 19:59:50.54ID:eNUtjibx
じゃあasmjsでよくね
255デフォルトの名無しさん
垢版 |
2022/10/30(日) 11:39:14.94ID:zV+ownbZ
何いってんだ
JavaScriptはRustの大口顧客だぞ
バカにするなんてとんでもない
JavaScriptの市場が大きいほどRustが儲かる仕組みなんだ
2022/10/30(日) 13:52:59.67ID:Ffhte1rz
moziraとgoogle, Microsoftと主要ブラウザメーカーが推進してるからな
2022/10/30(日) 19:41:21.29ID:TG2fSMWC
なんでvecの&mutに*が不必要なのか、いまいち理解してなかったけど

fn calc(n: &mut Vec<usize>) {
 (*n).push(1);
}

こういうことかー。そういうことだったのかー
258デフォルトの名無しさん
垢版 |
2022/10/30(日) 23:24:15.56ID:tkb7REiJ
struct User {
name : String,
age : u32,
}

fn main() {
let mut user = User {
name : "sato".to_string(),
age : 30,
};
user.age = 40;
user.name = "aaaa".to_string();
println!("{}{}", user.name, user.age);
}

"sato".to_string()で生成したStringは
user.name = "aaaa".to_string()後はどうなるの?
mainの}抜ける=プログラム終了時ようやく解放?
2022/10/30(日) 23:41:49.13ID:fG4j0a7a
Dropを自分で実装した型で試せばわかる
2022/10/31(月) 19:06:46.94ID:DHbQvQ7c
相変わらずLinusに怒られまくってるね
2022/11/01(火) 06:39:05.97ID:y5vMQo4Y
rust導入してもディレクトリ構造が汚くなるだけなのにどうして導入したんだろうね
正直撤回して欲しいわ
2022/11/01(火) 07:47:38.45ID:6ZBnCRFC
ディレクトリ構造なんかより優先すべきことがあるからだろ
rust使う意味を何も分かってないな
2022/11/01(火) 14:04:14.12ID:w6yg6Ajb
もうlinusがカーネル用にsafeな言語作った方がいいんじゃないの
既成言語じゃ既存の処理系と整合性をとらないといけないから
いろいろな不整合が生じる
2022/11/01(火) 14:12:23.10ID:XoXOtAeK
エコシステムの充実はユーザ規模によるところがあるから
たとえ言語の設計としてベストマッチでも特化しすぎると
(使い手が増えなくて) 雑多なツールやライブラリが出揃い難いということもありうる。

Linux くらいの規模なら専用言語を作っても割に合ったりするかな?
2022/11/01(火) 14:25:52.66ID:smDWdngC
linusがなんか言ったの?
ググってもlinux 6.1にrustが取り込まれた話しか見つけられなかった
2022/11/01(火) 14:50:17.04ID:FsVxrWah
>>263
なにそのgitな流れは。
凄まじく少ないコードで実現してしまいそうで恐ろしい。
ピーキーなのになって、普通の人は使えないのを期待しちゃう。
2022/11/01(火) 14:58:39.21ID:O+5UiM+O
>>263
linusはgcc拡張のCが最高だと思ってる人だよ
268デフォルトの名無しさん
垢版 |
2022/11/01(火) 18:29:34.49ID:cxS6KzKc
>>260
どれ?
2022/11/02(水) 15:56:44.98ID:ohjjd8k9
linuxもデフォルトcというよりもかなりカーネル用の拡張してるからrustもそうすればええわってのが
linusの主張でしょ。
2022/11/02(水) 16:18:07.00ID:qqWWqhkC
一応clangでもlinuxカーネルコンパイルできるようになっているということは、
LLVMに必要な機能はそろっているということだろうから、
rustcからそれらの機能を呼び出せるようにできれば良いのかね
271デフォルトの名無しさん
垢版 |
2022/11/02(水) 16:35:45.00ID:F11hp17c
リーナスゴシップとかどうでもいいスレチネタを続けるなよ
2022/11/03(木) 02:16:08.55ID:atTBpfYp
しょーもないシンタックスの話より有意義だけどな。
273デフォルトの名無しさん
垢版 |
2022/11/03(木) 05:38:58.72ID:CtTK5dM6
1要素タプルの書き方Pythonと同じなんだね
パターンマッチで参照外しと絡むとややこしいなぁ
// 要素1のタプルはカンマ必要
let (mut a, ) = (1, );
a = 100;
println!("{}", a); //=> 100

// 要素1のタプルはカンマ必要
let &(mut a, ) = &(1, );
a = 100;
println!("{}", a); //=> 100

// (式)と区別つかないからとか
let &(mut a) = &(1);
a = 100;
println!("{}", a); //=> 100

// error[E0308]: mismatched types
let &mut a = &1; // ←ココ
a = 100;
println!("{}", a);

// こっちはok
let &(mut a) = &1;
a = 100;
println!("{}", a); //=> 100

mutがどっちに付くのが優先なのか(イミュータブルなaの参照なのかaのイミュータブル参照なのか)覚えてないと適切に()付けられないね、覚えりゃいいんだけども
Rustの話に限らずもっと根本的な解決方法ってないのかな?
()をいろんな意味に酷使し過ぎでは?関数の引数部分、式の評価順変更、タプル、等々
型は後置修飾なのに&やmutはなんで前から懸かるの?
これ全部RPNにすれば解釈の曖昧さがなくなって優先順位の()が要らなくなり、関数呼び出しもf1(1, f2(2, 3), f3(4))は1 2 3 f2 4 f3 f1となって、タプル以外の()撲滅できないか?
274デフォルトの名無しさん
垢版 |
2022/11/03(木) 19:40:23.88ID:4W4icteo
>>273
()を色々使いすぎというのは同意だけどRPNだと今よりもっと使われないよ。
連鎖性言語とか好きだけど。
2022/11/03(木) 21:14:31.73ID:Z+updFpk
()については他の言語と同じだしそこで変に独自性を出してもなぁという感じ
2022/11/03(木) 21:15:01.48ID:t6ap+kyc
for &i in vec![0_usize; 5].iter() {
 //iのままなんちゃら
}

for i in vec![0_usize; 5].iter() {
 //*iでなんちゃら
}

参照外しはどっちをつかってる人のほうが一般的なん?
2022/11/03(木) 21:21:15.76ID:0fRPRys5
Copy実装してる型なら別にどっちでも……
2022/11/03(木) 21:35:17.79ID:b1nVlp4p
union で定義した型があり、タグビットに相当するビットで variant を区別できる場合に
enum と同じ表現でパターンマッチするというようなことは出来ませんかね?
マニュアルを見た感じでは出来なさそうなので駄目で元々な相談なんですが……。

それが欲しくなった事情としては抽象的なバイトコードマシンが定義されていて
そのバイトコードをそのまま enum にマッピングできれば楽なのになと思った次第です。
279デフォルトの名無しさん
垢版 |
2022/11/04(金) 04:42:50.90ID:QJXSkaei
.expect("なんとかかんとかfailed.");
expectの引数はこんな文章になりがち
.expect("なんとかexpected, but かんとか found");
ならまだいいけど
コード読むときexpectというメソッド名からその引数には"期待しているものの説明"を"期待"してしまう
慣れるんだろうか…
2022/11/04(金) 08:57:52.35ID:KcmeiRV8
>>279
英単語を声に出して読んでみ
2022/11/04(金) 09:12:11.15ID:NSu48ax/
>>279
公式のドキュメントにも
.expect("failed to parse number")
という例があるしあまり気にしない方がよさそう
https://doc.rust-lang.org/std/result/enum.Result.html#method.inspect
2022/11/04(金) 09:15:25.47ID:yWEsFaag
>>281
これ英語の分からん奴が書いたんだろう
2022/11/04(金) 09:25:36.66ID:u3TD418O
>>279
まあ慣れるしかないわな
俺もこの名前はおかしいと思うし世の中でもおかしいと思う人はいるようだ
https://stackoverflow.com/questions/66362625/why-is-rusts-expect-called-expect
284デフォルトの名無しさん
垢版 |
2022/11/04(金) 09:47:45.14ID:QJXSkaei
>>283
よかった、俺だけではなかったか
2022/11/04(金) 09:54:11.00ID:NSu48ax/
推奨されるメッセージのスタイルが定義されているので>>279は正しい
https://doc.rust-lang.org/std/result/enum.Result.html#recommended-message-style
どうしても気になるならこれを根拠にしてメッセージを修正するpull req送ると良いと思う
286デフォルトの名無しさん
垢版 |
2022/11/04(金) 11:58:42.90ID:hgziOenm
君、ぼくのおちんちんを舐めてみないかい
2022/11/04(金) 12:36:39.57ID:8jcY9XF+
.expect("ン拒否するゥ");
2022/11/04(金) 13:14:11.67ID:u3TD418O
.expect("もう少しぶっといイチモツを用意すべきです")
2022/11/05(土) 21:07:51.50ID:EPLuMYxk
expectがそもそも期待するという意味より、予想するという意味合いで使われてることが多い気がする
2022/11/05(土) 21:47:55.53ID:6MdwxjIj
ここまで1.65の話題ゼロか
291デフォルトの名無しさん
垢版 |
2022/11/05(土) 21:51:57.09ID:4ktyBPoJ
GAT難しいからw
292デフォルトの名無しさん
垢版 |
2022/11/05(土) 21:58:52.83ID:B2i8Nuif
Rust 1.65.0 の発表
2022 年 11 月 3 日 · Rust リリース チーム
https://blog.rust-lang.org/2022/11/03/Rust-1.65.0.html
新しい Rust リリースの詳細に入る前に、イランの宗教道徳警察によるMahsa Amini の悲劇的な死と、他の多くの人々の死と暴力的な抑圧に注意を向けたいと思います。詳細については、 https://en.wikipedia.org/wiki/Mahsa_Amini_protestsを参照してください。私たちは、人権のために闘っているイランの人々と連帯します。

↑BLMといいウクライナといい海外ITの政治的主張入れて当然みたいなノリ苦手
質実剛健のイメージだったがRustチームも同じでちょっとガッカリ
2022/11/05(土) 22:23:37.34ID:CC30py/U
嫌な世の中だな
2022/11/05(土) 22:33:26.02ID:zxpwXxCd
そういうのが嫌なら使わなければよろしい
2022/11/06(日) 03:47:36.18ID:5A+TXyoz
お、Backtraceがstabilizeされたか
めでたい
296デフォルトの名無しさん
垢版 |
2022/11/06(日) 23:25:31.82ID:tr7TV8Z+
>>295
うむ
2022/11/07(月) 14:30:18.00ID:5gh9UgGm
むしろ政治的な要素が少しでもあると過敏反応する日本IT連中のがキモいわ
2022/11/07(月) 14:37:07.26ID:3k6QMezQ
RustってSDGsだよね
2022/11/07(月) 16:35:16.97ID:F5fz3af4
みんなMSRVいくつにしてる?
2022/11/07(月) 21:29:16.68ID:oBOm8exD
日本人はまあ事なかれ主義だから仕方がない
2022/11/09(水) 08:18:29.70ID:JQdb1AnG
過剰反応というかツイッターでも左翼のトレンド操作がバレてしまったし
そういう必死な印象操作する奴らに全く反応しないのも正常性バイアスなだけで危険だと思うけどね
2022/11/09(水) 08:49:14.30ID:jv4fVWS/
別に操作でもなんでもなく前から人が選んでるって言ってたじゃん。
だからそういうのを過剰反応って言うんだよ。
303デフォルトの名無しさん
垢版 |
2022/11/09(水) 09:39:55.00ID:LmGx5OMY
>>301
ナイーブなやっちゃなぁ
どの国でも底辺ほど極右化しちゃうのは物事が見えてないからなんやな
2022/11/09(水) 09:48:57.31ID:fSnT1d04
貧困老人って左傾化してるイメージある
2022/11/09(水) 12:28:40.18ID:aAawVede
>>302
トレンドはどのように決定されますか?
トレンドはアルゴリズムによって決定され、初期設定では、フォローしているアカウント、興味関心、位置情報をもとにカスタマイズされています。

こういうAI系にRustが使われる可能性ありそうかな?
2022/11/09(水) 12:56:20.73ID:YZQA7nNX
>>305
コア部分がC++、FortranからRustに変わるとかはありそう
307デフォルトの名無しさん
垢版 |
2022/11/09(水) 13:03:43.26ID:tbXsBHme
>>304
それもまたナイーブな見方やなぁ
反自民党なら左、親自民党なら右やと思ってるんやろ?
2022/11/09(水) 14:25:41.02ID:bNBw/HLH
>>306
rustのGPU周りのツールチェインは整備進んでるの?
2022/11/09(水) 19:49:39.97ID:8uuc6jgH
>>308
GPGPU系は普通に使えそうな感じはしてるけどdeep learning周りはNvidiaが乗り気になるまで無理かもしれないと思えてきた
2022/11/12(土) 21:53:46.90ID:PWetNf5n
eguiつよそうだけどみんな興味ないの?
2022/11/13(日) 01:00:16.84ID:1Xo91Kz4
guiはeguiとtauriの2強になりそう
2022/11/13(日) 02:09:24.41ID:Uh0BavN1
eguiはエグイ
313デフォルトの名無しさん
垢版 |
2022/11/13(日) 02:33:53.13ID:RFRBhoEy
言うほど2強か?
https://www.publickey1.jp/blog/22/electrontauriguitauri-egui_010.html
2022/11/13(日) 21:44:40.30ID:SeSkk5iM
丸の内線ってマジでいらんよな
2022/11/13(日) 22:06:12.87ID:iM/fRtPp
脱Electronした純Rust製コードエディタが出ないことには評価し辛いな。
2022/11/13(日) 22:58:55.78ID:T5PK/vl5
そんなんLapceがあるだろ
317デフォルトの名無しさん
垢版 |
2022/11/15(火) 00:12:55.17ID:dw7MQVYD
Bevyの変更量エグいな。1.0到達まで様子見するわ
https://bevyengine.org/news/bevy-0-9/
2022/11/15(火) 00:20:45.30ID:aZkMwykQ
米国家安全保障局、CやC++からメモリー安全性の高いJavaなどへの移行を推奨
https://japan.zdnet.com/article/35195997/

ハッカーらによるリモートコード実行(RCE)をはじめとするさまざまな攻撃からコードを保護するために、C#やGo、Java、Ruby、Swift、Rustといったメモリー安全性の高い言語に移行するよう推奨している。
2022/11/15(火) 00:37:48.72ID:91d2LP66
CやC++で書かれているライブラリに依存するのもやめた方が良いのかね
2022/11/15(火) 01:26:07.72ID:5Bng48RE
実績というのは何にも代えがたい証明だからね。
十分に広く長く使われて枯れたライブラリをすぐさま使用停止するほどではないと思う。
長期的には移行せざるを得ないと思うが。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況