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/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
実績というのは何にも代えがたい証明だからね。
十分に広く長く使われて枯れたライブラリをすぐさま使用停止するほどではないと思う。
長期的には移行せざるを得ないと思うが。
2022/11/15(火) 02:05:15.69ID:9SlnRoJw
>プログラマー側での実行に大きく依存している
言語の問題ではなくて、処理系と設計の問題だろうけど
C/C++と同程度の注意力であっても、
比較的楽に安全な実装が可能という話か
2022/11/15(火) 05:58:46.96ID:XpLYghoG
RubyはRustの誤植な気がする
323デフォルトの名無しさん
垢版 |
2022/11/15(火) 06:20:05.09ID:dw7MQVYD
Javaもnull非安全クソ言語じゃんぬるぽ
2022/11/15(火) 07:20:48.25ID:GEd0aXfX
>>322
元の記事でも
The National Security Agency (NSA) is urging developers to shift to memory safe languages – such as C#, Go, Java, Ruby, Rust, and Swift
って書いてあるから誤植とかでは無いと思うがNSAのソースを示してほしいね
https://www.zdnet.com/article/programming-languages-these-top-four-rule-and-developers-are-happy-for-now/
2022/11/15(火) 08:46:43.91ID:91d2LP66
メモリ安全という意味ではRubyは条件満たしてはいるのでは
Pythonがないのは気になるが
2022/11/15(火) 08:47:01.64ID:UduTysKC
ソース
https://media.defense.gov/2022/Nov/10/2003112742/-1/-1/0/CSI_SOFTWARE_MEMORY_SAFETY.PDF
2022/11/15(火) 09:09:11.17ID:ott+UO1u
人工衛星イザナミ・イザナギでも、mruby を使っている

C はポインターでバグるから、
文字列処理などはポインターを使わない、安全なmrubyが良い

それで、mrubyから、Cのライブラリを呼び出せば安全
328デフォルトの名無しさん
垢版 |
2022/11/15(火) 11:32:13.77ID:LEUpsbho
文字列処理でポインタを使わないってどうやんの?
2022/11/15(火) 11:45:11.75ID:Ohwd0nE1
陽に使わないって事だろ
2022/11/15(火) 12:05:46.25ID:91d2LP66
言わんとすることは分かるけど人工衛星と文字列処理はあんまり関係なさそう
2022/11/15(火) 12:16:51.72ID:REyE3AUr
>>326
これからメモリーセーフな言語が沢山出てきそうだな
2022/11/15(火) 12:57:18.27ID:37NRafRf
メモリセーフかつGC無しの言語ってRust以外に増える気配ないよな
需要あるのに
2022/11/15(火) 13:11:29.50ID:bU8+MPV6
C++ は安全な言語に混ぜてもらえなかったんだな。
C++はCに寄せられてしまったのかと。
2022/11/15(火) 13:50:50.90ID:eF4hIM3d
「生ポインタを使わずスマートポインタを使う」
「オブジェクトのコピーはすべてムーブを使う」
を徹底すればそこまで危険ではないんだけどね
2022/11/15(火) 13:53:08.34ID:Ohwd0nE1
>>333
まあやろうと思えばCと同じことができちゃうからね
2022/11/15(火) 14:25:30.22ID:5Bng48RE
>>334
知っててもクソみたいな誤りをするのが人だからな。
2022/11/15(火) 15:49:10.51ID:91d2LP66
Google Chromeのバグの7割がメモリ安全関連というし、
C++で安全性を保ちつつ大規模複雑なアプリケーションを作るのは難しいのでは
2022/11/15(火) 16:00:29.49ID:AMPFJlS8
そりゃ「〇〇するよう気をつければ良い」が通るんならそもそもバグらないよう気をつけられるはずだしな
人間が気をつけるのと機械的にチェックできることの間には大きな差がある
2022/11/15(火) 21:18:52.91ID:oaKUlL5c
>「オブジェクトのコピーはすべてムーブを使う」

微妙に意味が分からん
2022/11/16(水) 03:16:38.83ID:+3Ecu7Qb
>>339
クラスにムーブコンストラクタとムーブ代入演算子を必ず実装して
それが呼び出されように書くということね
ゼロから書く場合は可能
つまりRustっぽく書く
しかし外部ライブラリを使う場合は破綻するので無理なのだが
2022/11/16(水) 07:33:54.12ID:NR4h2Di6
F#をトライしていたのですが、VSは重いし、VScodeは動かすことができず
Sublimeは何とか動くが、ライブラリをうまくアクセスできず図を出力できず
コマンドラインでの実行もバージョンが古いせいかこれもライブラリにアクセスできず
で、似ているというRUSTをテストしてみました

インストールも簡単、クレートの設定も簡単
コンソールでコンパイル、実行も簡単
webにあるサンプルをテスト、5つほどwarningがでていましたが図を出力できました
F#では実行環境を作るのに四苦八苦しましたが、RUSTはあっというま
感激してここにアップしました
今から勉強します
2022/11/16(水) 07:35:45.01ID:16ZvLDN4
「コピーは使わないでムーブする」なら意味が通じたが
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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