dupchecked22222../4ta/2chb/793/63/tech166506379321762649217 Rust part17 YouTube動画>1本 ◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

Rust part17 YouTube動画>1本


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1665063793/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

1デフォルトの名無しさん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

2デフォルトの名無しさん2022/10/06(木) 22:43:37.18ID:Re0G7B20
Rust The Book (日本語版)
https://doc.rust-jp.rs/book-ja/
Rust edition guide (日本語版)
https://doc.rust-jp.rs/edition-guide/
Rust by example (日本語版)
https://doc.rust-jp.rs/rust-by-example-ja/
Rust cookbook (日本語版)
https://uma0317.github.io/rust-cookbook-ja/
Rust API guideline (日本語版)
https://sinkuu.github.io/api-guidelines/
Rust nomicon book (日本語版)
https://doc.rust-jp.rs/rust-nomicon-ja/
Rust async book (日本語版)
https://async-book-ja.netlify.app/
Rust WASM book (日本語版)
https://moshg.github.io/rustwasm-book-ja/
Rust embeded book (日本語版)
https://tomoyuki-nakabayashi.github.io/book/
Rust enbeded discovery (日本語版)
https://tomoyuki-nakabayashi.github.io/discovery/
Rust Design Patterns (日本語版)
https://qiita.com/Yappii_111/items/4ccc3a8461cdd4035651
https://qiita.com/Yappii_111/items/654717e6a6a980722189
Rust API guideline (日本語版)
https://sinkuu.github.io/api-guidelines/

3デフォルトの名無しさん2022/10/06(木) 22:43:46.54ID:Re0G7B20

4デフォルトの名無しさん2022/10/06(木) 22:43:58.88ID:Re0G7B20
☆WebAssembly(WASM) https://webassembly.org/ https://ja.m.wikipedia.org/wiki/WebAssembly
・Wasmer - The Universal WebAssembly Runtime https://wasmer.io/
-> WASI(WebAssembly System Interface)とEmscriptenに準拠したWASMを実行できるランタイム
・WAPM - WebAssembly Package Manager https://wapm.io/
-> WebAssembly製ツール/ライブラリのパッケージマネージャー
☆Rust
・wasm-pack - your favorite rust -> wasm workflow tool!
https://github.com/rustwasm/wasm-pack
-> WebAssemblyのrustcコンパイルサポート
・Yew - Rust / Wasm framework for building client web apps https://yew.rs/ja/
-> WebAssembly によってマルチスレッドな Web アプリのフロントエンドを作ることができる、モダンな Rust のフレームワーク
☆最近のWebAssemblyのニュース
・Publickey - Enterprise IT × Cloud Computing × Web Technology / Blog より https://www.publickey1.jp/programming-lang/webassembly/
・WebAssembly活用プロジェクト https://madewithwebassembly.com/
・WebAssemblyが気になるので調べてみた - Qiita https://qiita.com/t_katsumura/items/ff379aaaba6931aad1c4
・WASMとRustはVue.js/React.jsを打倒するのか? - JSへの侵略の歴史 https://zenn.dev/koduki/articles/c07db4179bb7b86086a1
・Typescriptの次はRustかもしれない https://zenn.dev/akfm/articles/81713d4c1275ac64a75c
・WebAssemblyはJVMやeBPFのリバイバルではない WasmがWeb以外でもアツい理由 - ログミーTech https://logmi.jp/tech/articles/324956
・Rust GUI の決定版! Tauri を使ってクロスプラットフォームなデスクトップアプリを作ろう https://zenn.dev/kumassy/books/6e518fe09a86b2
類似スレ
【wasm】ブラウザでC++。Emscriptenを語ろう http://2chb.net/r/tech/1547549448/

5デフォルトの名無しさん2022/10/06(木) 22:44:37.34ID:Re0G7B20
>>1
前スレのurlはれてなったよぉ…
Rust part16
http://2chb.net/r/tech/1656285423/

6デフォルトの名無しさん2022/10/07(金) 01:27:41.85ID:YCt9Quz7
>>1
おつ

7デフォルトの名無しさん2022/10/07(金) 11:28:42.39ID:d4ub3t4L
>>1
O2

Nim に浮気中

8デフォルトの名無しさん2022/10/07(金) 12:26:19.13ID:+0mlf9Ez
Null安全でないGC言語のNimに浮気する人

9デフォルトの名無しさん2022/10/07(金) 12:31:49.01ID:7pvxFIpA
Null安全性が入れば雑なスクリプト用としては使えるんだけどな

10デフォルトの名無しさん2022/10/07(金) 13:04:35.78ID:KVLYaA/l
雑なスクリプト用途ならもっとシェアあって長続きしそうな競合が色々あるからなあ

11デフォルトの名無しさん2022/10/07(金) 13:36:57.50ID:yqDZzsii
Rustも意外に雑に手軽に書けるケースが多いと分かってきた
数値以外は先にスタック上に変数を用意(=メモリ確保)してしまえば
後はその参照を使ってアクセスするだけで所有権もライフタイムも気にせず気楽にコーディングできるんだな

12デフォルトの名無しさん2022/10/07(金) 15:04:20.94ID:xg0qXK5h
lifetimeや所有権よりshared xor mutableの方が煩わしいと感じる人は多そうに思う

13デフォルトの名無しさん2022/10/07(金) 15:24:21.69ID:BlyXu4eU
僕はヌルヌルおまんこは好きですね

14デフォルトの名無しさん2022/10/07(金) 15:25:06.27ID:CNFz94QB
>>12
Cだと可変ポインタだらけだからその感覚では書けないからねぇ
考え方から矯正しなきゃならんし面倒ではある

15デフォルトの名無しさん2022/10/07(金) 15:53:22.67ID:5wCZEj21
スレッド内ならばCellが使えるから可変性も自由自在だよ

16デフォルトの名無しさん2022/10/07(金) 15:57:51.33ID:4o6UHnyi
Cellを使ったら負け

17デフォルトの名無しさん2022/10/07(金) 16:08:39.72ID:CWgGAn1/
Cellは安全性・高速性・利便性を両立するRustの最重要パーツの一つ

18デフォルトの名無しさん2022/10/07(金) 16:27:35.67ID:tZ5nTuVj
だんだんトンデモスレになってきてるね

19デフォルトの名無しさん2022/10/07(金) 16:33:32.37ID:UzCytJZE
Rust2っていつぐらいになりますか?今のままだと使いづらいです。。。

20デフォルトの名無しさん2022/10/07(金) 16:36:51.77ID:XhwpMEr8
Cellを使わずにshared xor mutableに囚われて不自由なプログラミングしている初心者は意外と多いね

21デフォルトの名無しさん2022/10/07(金) 16:38:47.86ID:+z0uh25z
>>18
真に受けて複オジ2世が生まれないことを願ってる

22デフォルトの名無しさん2022/10/07(金) 16:49:17.62ID:Znh4X5V+
Cellの利便性を知らない初心者がいるのは直感に反するからだろう
Cellは可変参照なくても非可変参照だけで書き換えられるからな

23デフォルトの名無しさん2022/10/07(金) 16:51:07.23ID:BSEaYe20
Cellを使うデメリットはないの?
ないならデフォルトがCell相当になっててもよさそう

24デフォルトの名無しさん2022/10/07(金) 16:56:27.41ID:Znh4X5V+
>>23
Cellのデメリットは唯一!Syncだけ
つまりスレッド内部でしか使えない

25デフォルトの名無しさん2022/10/07(金) 17:20:16.20ID:Znh4X5V+
誤解のないように言えば
スレッドを使わずにシングルスレッドの状況でももちろんCellを使える

26デフォルトの名無しさん2022/10/07(金) 17:44:54.27ID:0oTv+2yR
組み込みとかだとヒープの利用が難しいので自然とスタックメインになる

27はちみつ餃子 ◆8X2XSCHEME 2022/10/07(金) 17:45:11.12ID:uxbzrjvk
>>23
コンパイル時の検査を緩めるかわりに実行時に検査が入る。
借用規則に逆らえるわけではない。

28デフォルトの名無しさん2022/10/07(金) 17:53:21.56ID:xg0qXK5h
>>27
それはRefCellでは

29デフォルトの名無しさん2022/10/07(金) 17:55:50.86ID:Znh4X5V+
>>27
Cellは実行時検査も無くコストゼロです
スレッド内なので借用規則に逆らえます

30はちみつ餃子 ◆8X2XSCHEME 2022/10/07(金) 18:21:14.63ID:uxbzrjvk
そっかー。

31デフォルトの名無しさん2022/10/07(金) 19:26:54.49ID:CNFz94QB
CellはCopy traitが必要なので場合によってはとんでなくパフォーマンスが劣化する場合がある

単なる数値なら問題はないが

32デフォルトの名無しさん2022/10/07(金) 19:45:02.34ID:Znh4X5V+
>>31
そんなことはない
Cell<T>のTは完全に自由でありCopy要件はない
Cellで数値だけでなくVecやString等も自由に使える
例外的に一部のメソッドはCopy要件を持つがそれはOption<T>等でも同じでありそのメソッド特定のみの話

33デフォルトの名無しさん2022/10/07(金) 19:48:12.01ID:xg0qXK5h
>>31
Cell::takeやCell::replaceなど追加されたのでCopyを実装してない型でも使えるよ
StringやVecなどCopyできない型を扱う場合でも
元の値をtakeして更新後replaceするなどうまく書けばそれほど非効率にもならない

34デフォルトの名無しさん2022/10/07(金) 19:52:07.74ID:xg0qXK5h
CellやRefCellはshared xor mutableを知った上で適切に使った方が良いと思うので
初学者へ勧めるべきかというと微妙な気はするなあ

35デフォルトの名無しさん2022/10/07(金) 19:58:58.94ID:Znh4X5V+
>>34
Cellは安全性が完全に保証される型
他の型と同様に万が一に間違った使い方をしたらコンパイルエラーとなり常に安全が保証される
初心者かどうかといった区別や考慮はそこに必要ない

36デフォルトの名無しさん2022/10/07(金) 20:08:27.14ID:YCt9Quz7
何がしたいの?

37デフォルトの名無しさん2022/10/07(金) 20:16:39.71ID:CNFz94QB
>>33
takeってデフォルト値に置き換えて所有権をもらうやつでしょ?
うーん、なんか気持ち悪さはあるんだよな

38デフォルトの名無しさん2022/10/07(金) 20:49:01.57ID:3/fEI9MA
>>33
Cellの更新はset()で十分だね
もちろんreplace()してoldを捨てるのと同じ

>>37
take()はdefault値とのreplace()と同じ
これは気持ち悪いことでも何でもなくて
例えばmutableなOption<T>を維持しながら扱う時と同じ操作
その場合もSome(T)からTを取り出す時にdefault値と入れ替えるtake()を使うよね
何かが入っていないと未定義になるからその身代わり
もちろんすぐに更新する場合は概念上だけの扱いとみなせるし
実際の生成コードでもdefault値が入るコードは最適化で消えちゃう
未定義状態を避けるための自然な操作と捉えてよいかと

39デフォルトの名無しさん2022/10/07(金) 21:02:50.21ID:CNFz94QB
>>38
うーむ確かにそう言われるとむしろRust Wayな気がしてきた

40デフォルトの名無しさん2022/10/07(金) 21:12:11.57ID:4RElSAp/
不必要にCellを使ってみたくなるのはRust厨二病によくみられる症状
悪影響は少ないから温かく見守っておけばそのうち治るよ

41デフォルトの名無しさん2022/10/07(金) 21:18:22.03ID:7pvxFIpA
まとめると実行時に値を書き換えたいオブジェクトにはCellを使う
書き込む場合はset
読み込む場合はtakeを使う

RefCellはオワコン

42デフォルトの名無しさん2022/10/07(金) 21:30:00.49ID:Znh4X5V+
>>40
内部可変性を知らないのかな?
Cellは内部可変性を与えるものであり
& mutに縛られずにコーディングの自由度を上げるだけでなく
この内部可変性を使わないと記述できない場合もあるほど重要なもの

43デフォルトの名無しさん2022/10/07(金) 22:49:11.13ID:xg0qXK5h
> inherited mutability is preferred, and interior mutability is something of a last resort.
内部可変性は必要な時だけつかうべき
https://doc.rust-lang.org/std/cell/

44デフォルトの名無しさん2022/10/07(金) 23:05:27.46ID:3/fEI9MA
スレッド間での共有ができないからその場合は内部可変性を避けないとコンパイルエラーとなっちゃう
しかし共有しないものならばいつでも安全に使うことが出来ます
不自由なプログラミングをしてまで内部可変性の利用を避ける必要はありません
そのような場合にはむしろ使うべき時ですよ

45デフォルトの名無しさん2022/10/07(金) 23:15:28.30ID:GE9TWYxP
The Bookの内容も理解してないようだから厨二病というより厨一病だねぇ

46デフォルトの名無しさん2022/10/07(金) 23:27:40.94ID:Znh4X5V+
>>45
The Bookでは
CellはSyncを実装していないからマルチスレッド間では使えないことしか書かれていない

47デフォルトの名無しさん2022/10/07(金) 23:41:21.31ID:xg0qXK5h
>>46
!Syncが許容される場面では常にCellを使うべきだと考えていますか?

48デフォルトの名無しさん2022/10/07(金) 23:44:26.62ID:Znh4X5V+
>>47
常に?
そんな極端な主張を一度もしていない
他のものと同じで有用な時に使えばよい
そして有用な時が多い
それだけだ

49デフォルトの名無しさん2022/10/07(金) 23:59:28.46ID:v90MyUH0
Cellは安全なだけでなく
実行コストもかからないし
データ設計の幅も広がるし
メリットだらけだよね

50デフォルトの名無しさん2022/10/08(土) 00:00:53.53ID:74M5kg9b
後で読むからブログにでもまとめといて

51デフォルトの名無しさん2022/10/08(土) 00:05:55.63ID:PJN/h6/8
Cellを嫌ってる人って何かの病気なの?
数ある型の一つに過ぎないのに

52デフォルトの名無しさん2022/10/08(土) 00:09:24.75ID:STUNJ/8C
Rustレスバトル会場
http://2chb.net/r/tech/1657382429/

53デフォルトの名無しさん2022/10/08(土) 00:21:36.43ID:iVJbbbtq
Cell使わずにshared xor mutableの制限で苦しんでいる人は単なるバカ

54デフォルトの名無しさん2022/10/08(土) 00:35:12.49ID:D3DCz8sQ
CellとかRefCellってRustの本にも殆ど解説がないよな
ちょろっとおまけ程度にしかない
これなしでは現実的なプログラム書けないと思うのだが本の著者らはRustを理解してないんだろうか

55デフォルトの名無しさん2022/10/08(土) 00:52:04.60ID:2tIWkITu
>>54
書籍は見たことないから知らなかったけどそうなのか
自分が使っている著名なcratesのソースを見てみるとCellを使っているcrateも多い
だから普通に皆がCellを使っていてそこにタブーは無いようだ
まあ当たり前か

56デフォルトの名無しさん2022/10/08(土) 00:58:18.16ID:QzbKhEyQ
Cellなしでは現実的なプログラム書けないというのは言い過ぎ
ある種のプログラムではCellが必要になるくらいが適当では

57デフォルトの名無しさん2022/10/08(土) 01:04:15.77ID:2tIWkITu
Cellが必須となるプログラムと
Cellが必須でないプログラムがあるだけだよな
まあこれも当たり前かw

58デフォルトの名無しさん2022/10/08(土) 01:12:26.49ID:M3iYd9Ol
Rustで日本が変わる!世界が変わる!
などとほざいてる人は自分では使っていないと思う。
使ってたら、ウーン、こりゃ使えんなあ・・・って言ってると思う。

59デフォルトの名無しさん2022/10/08(土) 01:34:11.88ID:2tIWkITu
Rustは今までに登場したプログラミング言語の中では一番使いやすく効率がいい程度だな
世界や日本がどうなろうとどうでもいいが
理解できない人たちとの不利有利の二極化は起こるだろう

60デフォルトの名無しさん2022/10/08(土) 03:41:06.69ID:D3DCz8sQ
>>55
The bookにはRefCellの解説はあるけどCellの解説がないんだよね
だからCellを使ってる人が少ないのかと思う

61デフォルトの名無しさん2022/10/08(土) 05:12:58.83ID:ci/6kpez
各crateのソース調べたらtokioもasync-stdもwasm-bindgenもCell使ってるな
別方面でtauriもyewもeguiもCell使ってるな
他にもproc macro用のsynとかCLI用のclapとか様々なcrateがCell使ってるな
この状況を見るとCellは普通に使って当然っぽい

62デフォルトの名無しさん2022/10/08(土) 10:23:03.05ID:2effy6oa
>>38
それってCellから取り出した値がdefaultだった時の処理を書かないとならないんじゃないんですか?

63デフォルトの名無しさん2022/10/08(土) 10:55:13.71ID:/5aPtbi3
>>54
Cellは扱いの小さい本が多いがRefCellはだいたいどの本でもしっかり解説されてるでしょ

オライリー本はCellも解説してる

64デフォルトの名無しさん2022/10/08(土) 10:59:24.30ID:HCP3bqwV
Cellはスレッドローカルの共有状態を管理する時に使う
カウンタとかフラグとか

shared mutability自体多用するもんじゃないからその辺をよく考えてね

65デフォルトの名無しさん2022/10/08(土) 10:59:37.80ID:kYZ69ulT
>>54
Cの入門本の8割はmallocの使い方を説明してない

66デフォルトの名無しさん2022/10/08(土) 13:18:33.57ID:HbWzH6SV
どうせなら不変な部分を取り出せるようにしてすればよかったのにな。
参照カウントみたいなどこでも付いて回るのは厄介だけど。

67デフォルトの名無しさん2022/10/08(土) 13:48:31.81ID:D3DCz8sQ
>>63
ここの議論を見るとCellの解説を最初にやるべきだと思うのになぜRefCellばかりなのだろうという謎が
歴史的経緯みたいなやつか?
日本人の書いた本もRefCellばっかだよ

68デフォルトの名無しさん2022/10/08(土) 14:04:15.39ID:cMY3Tlwa
カジュアルにCellを使って欲しくないからだよ
よく考えて使わないとバグのもとだから
必要な人向けにはリファレンスで詳しく解説してる

69デフォルトの名無しさん2022/10/08(土) 18:26:38.20ID:r98Hfriq
>>62
マルチスレッド間共有していないから
空っぽの時に知らぬ間にアクセスされることはないよ
だから大丈夫
そしてすぐに更新することで最適化される
あとはプログラムの組み立て方の話であって言語による管轄の話ではないね

70デフォルトの名無しさん2022/10/08(土) 19:07:57.58ID:vMI7I1P7
interior mutabilityを持ち所有権を自分が持たないケースは特殊だから説明した方がいいかもしれないが、
interior mutabilityを持ち所有権を自分が持つケースは普通の事だからわざわざ説明するまでもない。

write lockを取るからborrow checkが実行時に遅延されるのも説明しないといけないし。

71デフォルトの名無しさん2022/10/08(土) 19:14:27.64ID:N7i/LeD2
Cellの使い方教えればRustユーザーも増えると思うな
所有権そのものより副作用を簡単には許さないところにハードルがあるから

72デフォルトの名無しさん2022/10/08(土) 19:30:29.77ID:Xn47a3bW
>>70
実行時borrow checkされるのはRefCellだけ
Cellはborrow checkもlockも無くてゼロコスト

73デフォルトの名無しさん2022/10/08(土) 20:24:05.46ID:QzbKhEyQ
カジュアルに使うならマルチスレッドでも使えるMutex使っておけばよいのではという気もするが

74デフォルトの名無しさん2022/10/08(土) 21:19:30.79ID:BDP0djZ+
CellはCにおけるグローバル変数と同じで真に必要な時以外は極力避けるべきもの
ましてやRustの基本的考え方に慣れてないうちから使うべきものじゃない

75デフォルトの名無しさん2022/10/08(土) 22:01:30.85ID:LnEoG2Yz
>>73
そこは真逆
Mutexはlockのコストがかかる
Cellはコストがかからない

>>74
Cellはグローバル変数ではなくローカルにいくつも出現可能
そしてグローバル変数のような極力避けるべきものではない

76デフォルトの名無しさん2022/10/08(土) 22:04:07.45ID:QzbKhEyQ
>>75
ロックのオーバーヘッドを気にする必要があるのはカジュアルに含まれません

77デフォルトの名無しさん2022/10/08(土) 22:06:04.90ID:aSXXl0gc
immutableなのがいいと言いつつ
mutやinterior mutabilityを結局使わせるダサさなw

78デフォルトの名無しさん2022/10/08(土) 22:39:37.88ID:K1piK/7g
>>76
Cell<T>ならスレッド内部専用の代わりにロックがなくてTと同じコストで使えるからオススメ

79デフォルトの名無しさん2022/10/08(土) 22:40:45.08ID:QzbKhEyQ
immutableだけで書きたければそうすれば良いのでは
そのアプローチに窮屈さを感じる人が大半だからshared xor mutableという安全に使えるサブセットが生み出されたわけで

80デフォルトの名無しさん2022/10/08(土) 22:42:33.20ID:QzbKhEyQ
>>78
ただしマルチスレッド対応させようとすると書き換えが必要だし性能面に大きなこだわりがないなら最初からMutexにした方が良いのでは
Cell<T>はランタイムコスト面ではTと同じかもしれないけどコード記述は結局

81デフォルトの名無しさん2022/10/08(土) 22:43:05.48ID:QzbKhEyQ
途中で書き込んでしまった

コードの記述の面ではTとは異なるから同じ使い心地にはならないよね

82デフォルトの名無しさん2022/10/08(土) 22:53:58.00ID:IDy6SwOh
>>80
それは君が勘違いをしている
Cellはマルチスレッドであってもスレッド内で使用することができる
Mutexを使うべき時はマルチスレッドのスレッド間で共有メモリとする時
排他制御のためMutexはコストが重い
したがって両者を互いに代用することは有り得ない

83デフォルトの名無しさん2022/10/09(日) 00:09:47.59ID:RlW+XoWS
よくわかんないんだけどMutex<Cell<T>>は有効なの?

84デフォルトの名無しさん2022/10/09(日) 01:31:18.81ID:LqCUQ5jH
>>83
無効ではない
しかしMutex<T>はlockを取れたら& mut Tも得られて書き込みも可能なのでCellは不要
例えば

fn main() {
 let m = Mutex::new(Vec::new());
 sub(&m);
 let v = m.lock().unwrap();
 assert_eq!(*v, [123, 456]);
}

fn sub(m: &Mutex<Vec<i32>>) {
 let mut v = m.lock().unwrap();
 v.push(123);
 v.push(456);
}

つまりMutexの可変参照をもっていなくても内部の可変性を得られる
ようするにCellで内部可変性を得られるのと同じ
だからMutex<Cell<T>>と二段に重ねる必要はない

85デフォルトの名無しさん2022/10/09(日) 01:46:07.36ID:NMoxe/se
>>84
なるほどー
めちゃくちゃ勉強になる

86デフォルトの名無しさん2022/10/09(日) 01:48:31.99ID:2Hsnp4rW
>>82
ランタイムコストが無視できる場合はMutexが使えるけどCellが使えないシチュエーションはないよね
カジュアル用途なら大は小を兼ねる的な意味でCellよりMutexの方が良いのでは?
Cellにすべき理由あるの?

87デフォルトの名無しさん2022/10/09(日) 01:49:26.64ID:2Hsnp4rW
>>86
一文目逆だった。MutexがCellを置き換えられない場合はないよね、と言いたかった

88デフォルトの名無しさん2022/10/09(日) 01:53:55.32ID:LqCUQ5jH
>>86
話は非常にシンプル
スレッド間でメモリを共有するならばMutex (ただし排他コストがかかる)
共有しないならばCell (コストはかからない)
適切な方を選べばよい

89デフォルトの名無しさん2022/10/09(日) 02:00:16.80ID:NMoxe/se
というかRustマジで良くできてんな
考え尽くされてるわ

90デフォルトの名無しさん2022/10/09(日) 02:01:56.84ID:Z8ziuvVg
要するに変数は全部Cellで囲っておけばいいんでしょ

91デフォルトの名無しさん2022/10/09(日) 02:08:28.77ID:2Hsnp4rW
>>88
スレッド間で共有しなくてもstatic変数だったらCell使えないのでMutexは単純にマルチスレッド用とも言えないのでは
よくわからない人向けにはMutexをまずは勧めるのが良いのでは

92デフォルトの名無しさん2022/10/09(日) 02:24:40.07ID:zCVUy+MP
Qt使おうかと考えているけど
バインディングライブラリのritualを勧めている人がいたけど
最後のコミットが去年でサポーターが心配なんだけど
結局Cのライブラリ読み込みや既存ライブラリの利用とかどれを使えばいいの?

93デフォルトの名無しさん2022/10/09(日) 03:05:30.55ID:LqCUQ5jH
>>91
それは基本的な理解ができていない
static変数はスレッド間で共有が可能なためその型はSync実装を必要とする
だからCellが使えないのは当たり前

スレッド間で共有する必要がないならば
スレッドローカルに持てばSync実装を必要としないためCellを使える
例えば
thread_local! {
 static FOO: Cell<Vec<i32>> = Cell::new(Vec::new());
}
これでスレッド毎に持つことができる
もちろんスレッドを使わないシングルスレッドな状況でも使える

94デフォルトの名無しさん2022/10/09(日) 04:37:34.70ID:8tdOWvz3
Cellって基本的に値がムーブされるから構造体分はmemcpyが起きると思うんだけどそこはどうなの
RefCellやMutexなら直接参照取れるからそっちの方が効率的だよね

95デフォルトの名無しさん2022/10/09(日) 04:57:14.58ID:95mox/4o
複オジの嘘に騙される前には少しは頭使え

96デフォルトの名無しさん2022/10/09(日) 05:51:16.25ID:md7RXs4/
隔離スレに帰れ

97デフォルトの名無しさん2022/10/09(日) 05:51:33.43ID:LqCUQ5jH
>>94
memcpyは起きない
Cellに関係なく一般的にムーブはあくまでもRustの言語レベルにおける概念的なもの
したがって生成コードでは無駄なメモリ間のムーブ(コピー)は起きずに最適化される

Cellの場合でも同様に最適化される
&Cell<T>に対してtake()してTを更新してset()するコードは
& mut Tに対してTを更新するコードと同じ生成コードとなる

例えばそれらの比較コード
https://godbolt.org/z/1TY9v33YP
完全に同じ生成コードとなっていることが分かる
つまりCell<T>はTと比較して実行時ゼロコストである

98デフォルトの名無しさん2022/10/09(日) 07:01:12.90ID:vVo7+K5Y
RustコンパイラとLLVMは凄いなあ
いつでもそうだけど生成コードではがっちり最適化してくれる
抽象的に書いても安全に書いてもCと同じ速さ

99デフォルトの名無しさん2022/10/09(日) 11:45:38.50ID:kycCKtGO
おまえも隔離スレに帰れ!ちょっと前にLLVMだから凄い坊があそこで暴れてたけど、ここはgccrsとかやる人の場だ、市ね

100デフォルトの名無しさん2022/10/09(日) 13:36:44.30ID:1+WY+ral
gccrsって使えるようになったの?

101デフォルトの名無しさん2022/10/09(日) 20:46:00.69ID:yOxuO3a2
Linux6.1ってRustで組んだってこと?

102デフォルトの名無しさん2022/10/09(日) 22:32:00.35ID:pzhOBcZ9
ドライバ等をRustでも書けるようになるだけ

103デフォルトの名無しさん2022/10/09(日) 23:29:48.75ID:FY4RBnfH
Pattern alternativesってなんですか?和訳のパターンORもよくわかりません
https://doc.rust-lang.org/book/appendix-02-operators.html
https://doc.rust-jp.rs/book-ja/appendix-02-operators.html

104デフォルトの名無しさん2022/10/09(日) 23:53:45.87ID:vVo7+K5Y
パターンの代替策
つまり「|」記号が
bit演算のORとしてだけでなく
パターンのORとしても使われるよってこと

105デフォルトの名無しさん2022/10/10(月) 11:32:20.19ID:wEJNunBW
>>69
なるほど
マルチスレッドで共有する場合にはどうするのが適切なんでしょうか?

106デフォルトの名無しさん2022/10/10(月) 11:45:42.80ID:wEJNunBW

107デフォルトの名無しさん2022/10/10(月) 18:49:06.89ID:lNBbmc/N
Linux Kernel6.1は、Rustへ移行した最初のバージョンとなります。
Rustへ移行することにより、C言語バージョンの世代から、およそ30%の高速化を果たしました。

108デフォルトの名無しさん2022/10/10(月) 22:52:16.26ID:3WEeN/aN
気分はCelltic!
「実はshared xor mutableってしっくりこないんです!」

109デフォルトの名無しさん2022/10/10(月) 23:11:02.61ID:U+uG6kFy
>>105
内部可変性を得たい場合
スレッド内ではCell<T>もしくは参照を持ち出したいならRefCell<T>を使う
スレッド内部で普通の共有ならばそれらの&を使う (&mutでなくてもOK)
スレッド内部で所有者が別となる共有ならばそれらのRc<...>を使う

スレッド間では完全排他のMutex<T>もしくはreaders複数可のRwLock<T>を使う
(ただしTがi32やboolならばもっと軽いAtomicI32やAtomicBoolが使える)
スレッド間で共有は所有者が別となるのでそれらのArc<...>を使う

110デフォルトの名無しさん2022/10/11(火) 18:04:30.49ID:BiNGLwWh
>>97
最適化頑張ってるだけでムーブは概念的なものじゃないぞ。RBMMなんだから。

111デフォルトの名無しさん2022/10/11(火) 19:16:08.16ID:Bl5ahscm
moveがmemcpy呼び出しになるかどうかはあくまでも実装の話で
move自体のセマンティクスはデータのコピーを要求しないということが言いたいのでは

最適化offにして構造体サイズ大きくするとmemcpy呼び出されるから、memcpy起きないというのは嘘だけど

112デフォルトの名無しさん2022/10/11(火) 19:23:40.64ID:61VrJvDY
>>110
あくまでもRustの言語レベルでの抽象的なレベルではムーブはムーブであってビットコピーの保証はそこには一切ない
そして我々は抽象的な概念に基づいてプログラミングすればよい
生成コードはムーブという抽象的な概念だけを保証して最適化される
だからこそ生成コードではムーブでビットコピーが消え得る

113デフォルトの名無しさん2022/10/11(火) 19:29:43.10ID:61VrJvDY
>>111
memcpyはたまたまムーブの最適化なしのデフォルト状態で行われる可能性のあるコードにすぎないね
Rustの言語としてはmemcpyが必ず行われることなんて全く保証しない
ムーブはもっと上位の概念であってRustが保証するのはその上位の概念のみだね

114デフォルトの名無しさん2022/10/11(火) 19:51:08.13ID:Bl5ahscm
>>113
はいはい、>>111は誤読されかねない表現でしたね
(常に)memcpy起きないというのは嘘
と読み替えておいてください

元々の>>94のRefCellやMutexの方が効率的かという質問については、そういう場合もある、というのが答えで良いですよね

生成されるコードがどうなるかは最適化レベルや周囲のコードに依存するわけで、必ずどちらかが効率が高いと言えるようなものではない
感覚的には格納するデータサイズが大きい方がRefCell/Mutexが有利に、小さければCellが有利になりそうだけど、
ちゃんと測定したわけではないので実際のところは分からない

115デフォルトの名無しさん2022/10/11(火) 20:23:10.29ID:iRs2n6UT
>>114
実はRefCell構造体のメンバーにCellが使われている(現状)

使用されるメモリサイズ
Cell<T> ← Tと同じサイズ
RefCell<T> ← Tのサイズに加えてborrow管理のために内部で使用するCellサイズ分加算

動作コスト
Cell<T> ← (利用後すぐset()すれば)Tと同じコスト
RefCell<T> ← Tのコストに加えてborrow管理のために内部で使用するCellの読み書き操作コスト分加算

116デフォルトの名無しさん2022/10/11(火) 21:44:42.19ID:P/g9+OyI
ホント笑っちゃうくらい嘘を散りばめてくるよねw

117デフォルトの名無しさん2022/10/11(火) 21:58:52.19ID:lchMb24F
>>114
RefCellやMutexの方が効率的かという質問については
代用として使うならばそれらの方が遅いでしょう
RefCellはボローチェック処理が必ず入ります
Mutexは排他的ロック処理が入るのでさらに遅いです

118デフォルトの名無しさん2022/10/11(火) 22:06:38.86ID:Bl5ahscm
>>115
動作コストはT全体を置き換える場合だよね
TがVecで、一要素追加する場合のコストも計算してみてよ

>>117
ボローチェック処理が最適化で消えないことは保証されてるの?
ボローチェックや排他処理のコストはCellで発生するデータコピーより必ず高コストになるの?

119デフォルトの名無しさん2022/10/12(水) 14:10:22.75ID:IRDyECLz
ムーブ元の変数が使われないことがわかってるんだから
その変数の領域を使い回せばよいだけでしょ?
普通に考えてコピーとか起きないと思うんだが

120デフォルトの名無しさん2022/10/12(水) 18:26:20.15ID:R7/twQcO
自称分かってる人同士のケンカ

121デフォルトの名無しさん2022/10/12(水) 21:47:16.08ID:TdLmkMrU
RefCell使うのはアロケーションを避けたいからでしょ

122デフォルトの名無しさん2022/10/12(水) 23:29:45.96ID:MmGzrhE7
Cell<T>もTもメモリ領域は同じサイズで性質が異なるだけなのね

Cell<T>の更新はこうなるから
(1) メモリ→value読み出し // take()その1
(2) メモリ←default-value書き込み // take()その2
(3) valueを更新してnew-value
(4) メモリ←new-value書き込み // set()
コンパイラがまともなら(2)の部分はムダと判断して無くせそうね

さらにvalueの更新内容によっては (例えば足し算など算術の場合など)
その後にLLVMが最適化でメモリに対して直接実行する命令コードにするだろうから読み出し書き込みも消えるわけね

123デフォルトの名無しさん2022/10/13(木) 01:04:10.25ID:v9vBAx/l
CopyじゃないStringやVecで&mut selfとるメソッドを試せば違いが分かるよ

124デフォルトの名無しさん2022/10/13(木) 02:00:58.56ID:m/K7Pbd2
Copyを実装しない適当な構造体
#[derive(Default)]
struct Foo {
 inner: i32,
}
の &Cell<Foo> と &mut i32 の両方のケースで
>>122の最適化により同じ生成コードとなるから
Copyを実装してるか否かは関係ないみたい

125デフォルトの名無しさん2022/10/13(木) 03:36:21.71ID:Oo+uXzBV
>>124
それだと簡単にインライン化出来るからね
アロケーションが必要な型という意味でCopyじゃないStringやVecと言ったんだけど
Dropと言ったほうがよかったのかな

126デフォルトの名無しさん2022/10/13(木) 04:02:18.88ID:cMF4wuqy
アロケーション発生しなくても(i32, i32)とかにするだけでもう生成アセンブリ同じじゃなくなるね

127デフォルトの名無しさん2022/10/13(木) 08:01:16.32ID:wSzwAK9q
コンパイラが>>122
(2) メモリ←default-value書き込み
を削除する最適化をすれば
Copy実装なかろうがヒープを使おうが
生成コードは同じになるんじゃね?

128デフォルトの名無しさん2022/10/13(木) 15:12:31.34ID:FWxI+s/s
>>126
Copyにしてget/setにすれば同じになるかも

129デフォルトの名無しさん2022/10/13(木) 15:31:24.77ID:WZ96xtHr
macOSにおけるFirefoxのパフォーマンスを劇的に改善した方法とは?
メモリアロケーター「jemalloc」を独自にカスタマイズしたアロケーターを用いてメモリ管理を行っています。Firefoxのアロケーターでは並列処理時のロックを効率的に行うためにOSごとにネイティブなAPIを使用しているとのこと。このロックAPIとして、macOSではOSSpinLockが用いられていました。
https://gigazine.net/news/20221011-firefox-macos/

これって、Rustのメモリアロケーターがjemallocを基にしたRust実装になってるってことだよね?大昔はjemallocだったという話で

130はちみつ餃子 ◆8X2XSCHEME 2022/10/13(木) 16:10:29.83ID:PFF+OL8h
>>129
現在の Rust はデフォルトではシステム標準のアロケータを使うはず。
一時期は Jemalloc (のバインディング) を使っていたけどだいぶん前にやめてる。
やりたければアロケータの差し替えは簡単に出来るので
大きなプロジェクトだと (必要な性質にあわせて) 専用のアロケータを持っていることはあるかも。

131デフォルトの名無しさん2022/10/13(木) 16:44:36.94ID:7pqOU2dm
>>129
この記事はrustまったく関係ないよ
Firefoxはすべてがrustで書かれているわけではない

132デフォルトの名無しさん2022/10/13(木) 17:51:45.20ID:Fb+ro4ZF
>>129
Rustでは1.32.0(2019/01/17)から jemalloc がデフォルトでなくなりましたが、理由はjemallocのほうがマルチスレッドでは
微妙に低負荷で速いですが、コンパイルバイナリで300kB追加されるのとjemalloc自体のバグなどで問題が出ていたから。

Firefoxは恐らく、Cargo.tomlでアロケターをjemalloc系(多分tikv-jemallocator)に変えていて速度を稼いでるのでは?
(完全に想像だけど・・・)

Rust で jemalloc を使ったら並列処理が速くなった
https://zenn.dev/hankei6km/articles/using-jemalloc-in-rust-speeds-up-parallelism

133デフォルトの名無しさん2022/10/13(木) 20:45:15.45ID:7pqOU2dm
>>132
C++とのinteropあるからrust側はC++のallocator呼び出しているだけで
独自に(オリジナルの)jemallocをリンクすることはしてないと思うよ

134デフォルトの名無しさん2022/10/13(木) 23:11:21.07ID:Fb+ro4ZF
>>133
元記事見ると、jemallocそのものを一部、リプレースして書き換えてるみたいね。firefoxのレタリングエンジン自体はservoで
tikv-jemallocatorを使ってるみたいだけど、リンクしてるのはその通りオリジナルではなく書き換えたjemallocになってるみたい
https://github.com/servo/servo/blob/master/components/allocator/Cargo.toml
https://searchfox.org/mozilla-central/source/memory/replace/logalloc/README

135デフォルトの名無しさん2022/10/13(木) 23:14:01.26ID:Fb+ro4ZF
いや動的リンクはしてないのかな?jemallocソースをリプレースして実行ファイルに組み込んでる

136デフォルトの名無しさん2022/10/13(木) 23:25:53.83ID:cMF4wuqy
Firefoxはservo使ってない定期

137デフォルトの名無しさん2022/10/14(金) 01:05:31.38ID:2gl6G2n+
>>127
コンパイラはそんなに賢くないってことじゃね?

138デフォルトの名無しさん2022/10/14(金) 10:36:15.19ID:P+TQoSXr
複オジの嘘をまともに相手してたらキリが無いよ

139デフォルトの名無しさん2022/10/14(金) 11:07:41.50ID:t+3JDnfr
おじさんなんで最近こっちにいるの?
隔離スレが機能しなくなったのとリンクしてるのが面白い

140デフォルトの名無しさん2022/10/14(金) 21:09:01.17ID:iCatm8xv
>>136
シッタカも出来ないかまってちゃん不定期
https://searchfox.org/mozilla-central/search?q=servo%2F&path=&case=false®exp=false

141デフォルトの名無しさん2022/10/15(土) 00:38:51.20ID:ZRY2KlKK
>>140
servoを構成するコンポーネントのうちfirefoxに取り込まれたstyloしか登場してないように見えるが

142デフォルトの名無しさん2022/10/15(土) 10:12:30.40ID:kho15VFl
複オジにマジレスしても意味ないよ

143デフォルトの名無しさん2022/10/15(土) 21:19:13.19ID:Sue68NiD
お前の主張は「Firefoxはservo使ってない」であって「styloしか登場してない」では無い、そもそもstyloだけじゃない
途方もなく低い技術力でマウント取りたいことが生きがいの薄汚いオッサン

144デフォルトの名無しさん2022/10/16(日) 01:52:37.08ID:xR2EqnpB
servoは独立したレンダリングエンジンだからservoを使うと言えるのはgeckoを丸々置き換えた場合では
というかallocatorの話はどうなったんだ

145デフォルトの名無しさん2022/10/16(日) 13:06:47.08ID:I4ihc4bO
「Firefoxはservo使ってない」定期、顔真っ赤の話しそらしオジサン、geckoを丸々置き換えた場合とか言い出したw
「styloしか登場してない」も消えたwww
あんたはアロケーターなんて興味ないだろwww
したけりゃしろ。自分からは詳しい技術的な話何もできない、マウントしたいだけ、業界にいる寄生虫

146デフォルトの名無しさん2022/10/16(日) 16:22:20.12ID:xR2EqnpB
>>134
firefoxのレンダリングエンジンはservoじゃなくてgeckoのままだよ
servoは次世代ブラウザ向けのレンダリングエンジンの実装を模索するための実験プロジェクトで、geckoを置き換えることを意図したものではないよ
servoの一部のコンポーネントは完成度が高くgeckoに取り込まれてはいたので、
servoが発展していったらgecko全体がservoで置き換えられる未来もありえたけど、
mozillaがservoの開発者レイオフしちゃったのでその可能性もなくなっちゃったかと

動的ライブラリや静的ライブラリとして他のアプリケーションにリンクするcrateの場合、リンク先のアプリケーションバイナリに含まれる(または、動的リンクされる)allocatorを利用するのが普通なので、
geckoのservo由来のrustコードもそうなっていて独自にallocatorを定義することはしていないんじゃないかな

147デフォルトの名無しさん2022/10/16(日) 18:59:51.30ID:qTG+zV4j
rust関係ないけどjemallocを日本語で読む時
ジェ-マロック派?それともジェム-アロック派?

148デフォルトの名無しさん2022/10/16(日) 20:24:24.45ID:xR2EqnpB
Json Evans mallocだからジェーイーマロックって呼んでる

149はちみつ餃子 ◆8X2XSCHEME 2022/10/16(日) 22:45:33.29ID:SvF0Fhwf
それを言うなら malloc が (たぶん) memory allocate の略なんだから
ジェーイーエムアロックと呼ぶのが筋というものでは……。

俺はそもそも口頭で読み上げる機会がないから考えたこともなかった。

150デフォルトの名無しさん2022/10/16(日) 23:11:22.79ID:sz/XVYMu
開発者本人の動画見るとジェイ・マロックに聞こえるが
ジェイ・イー・マロックが短くなってるだけかなこれ


151デフォルトの名無しさん2022/10/17(月) 18:50:40.32ID:q3uOCHzu
>>146
servoじゃなくてgeckoのままは言い過ぎです、現にベクター系の2Dや、Canvasなどに使用するレンダラーはservo由来の
レンダラーが使用されます。その他はその通りでしょう

152デフォルトの名無しさん2022/10/17(月) 19:52:15.71ID:gBqRn20s
>>151
geckoを構成するコンポーネントの入れ替わりはあったけど
firefoxのレンダリングエンジンは生まれたときからずっとgeckoだよ
逆にgeckoじゃなかったら何なんだ

153デフォルトの名無しさん2022/10/17(月) 19:58:16.39ID:gBqRn20s
>>151
FirefoxにRustのコンポーネントを多く導入したQuantumプロジェクトの説明でも、ServoのコンポーネントをGeckoに取り込むと言っていて、
Geckoを置き換えるとは言っていない
https://wiki.mozilla.org/Quantum

154デフォルトの名無しさん2022/10/17(月) 21:29:09.32ID:MqsTBCMt
Rust関係ないからFirefoxスレでどうぞ

155デフォルトの名無しさん2022/10/17(月) 22:43:40.85ID:GuOtjDmV
もうその話題はいいよ
しつこいな

156デフォルトの名無しさん2022/10/18(火) 10:08:56.84ID:1nhFYrk9
しつこくやって『Cell<T>はTと同じコスト』(真っ赤な嘘)を流したかったんでしょw

157デフォルトの名無しさん2022/10/18(火) 11:26:14.64ID:f2tKHPpy
termuxのrustずっとバージョン不整合で動かないな
rustupじゃそもそもインストール出来ない

158デフォルトの名無しさん2022/10/18(火) 12:14:53.29ID:PMaXG0c3
>>157 俺は普通に動いてる
一応聞きたいんだけど、TermuxはF-Droidから入れたよね?
Play Store版はもうメンテナンスされてないから色々バグると思う

159デフォルトの名無しさん2022/10/18(火) 12:23:43.08ID:lAl7R2Of
>>153
あー、それ見てワカッタ風吹かしてんのな。「Rustのコンポーネントを多く導入」と言ってる時点で、styloだけじゃないし
2DレタリングのwebrenderもservoからのRust製だわ。”誰も”Geckoを置き換える=Geckoが無いなんて言ってない
https://github.com/servo/webrender

160デフォルトの名無しさん2022/10/18(火) 14:03:11.76ID:f2tKHPpy
>>158
F-Droidから入れてる
何故かlibllvm-14.soのリンクが出来ないと怒られてしまう
で入ってるllvmのバージョンが更新で15に上がってしまってる状態
俺環かも知れんね

161デフォルトの名無しさん2022/10/18(火) 14:27:25.95ID:jB7ekv9R
あんまり自信がある訳じゃないんだけど、カーネルが64bitでユーザーランドが32bitみたいな環境だったりしない?

162デフォルトの名無しさん2022/10/18(火) 14:27:28.03ID:SAVTW7Pl
>>159
Geckoのコンポーネントを置き換える

Geckoを置き換える
は全然意味が違うでしょ

まあ日本語の問題で意図してるところは食い違ってないから反応するのはこれで終わりにするわ

163デフォルトの名無しさん2022/10/18(火) 14:32:25.86ID:JxWDHfdB
グーグル、Rustで書かれたセキュアなOS「KataOS」を発表
https://japan.zdnet.com/article/35194751/

164デフォルトの名無しさん2022/10/18(火) 15:37:54.47ID:f2tKHPpy
>>158,161
すまぬ色々やってる中で入れたnightlyの影響だった
お騒がせした

165デフォルトの名無しさん2022/10/19(水) 03:30:17.24ID:cvhlJCwu
fucsia「僕はいらない子なの?」

166デフォルトの名無しさん2022/10/19(水) 07:05:26.07ID:CJepXKVA
>>163
昔「おおっ!!!あのグーグルがまた何か新しいことを始めたぞ!すごそうだ!」
今「まぁーーたはじまったよ・・・」

167デフォルトの名無しさん2022/10/19(水) 11:11:44.42ID:H7L8/zfi
Googleが立ち上げては潰してきたサービス一覧「Killed by Google」
killedbygoogle.com

168デフォルトの名無しさん2022/10/19(水) 11:23:33.38ID:iHEkpSLR
何も産まないよりは健全よね

169デフォルトの名無しさん2022/10/19(水) 11:35:06.09ID:Dqx/r4FW
役に立つかどうかわからんものに手を出せる余裕が
個別の結果に関わらず
部分的な成果の積み上げで会社をブーストさせるんよ

170デフォルトの名無しさん2022/10/19(水) 11:38:58.17ID:Sj+PYk/j
まあ堅そうな名前ではあるな

171デフォルトの名無しさん2022/10/19(水) 12:24:59.02ID:j2B3ovC/
IoT向けOSって言ってるし組み込みOSなんて元々百花繚乱だろ。
組み込み機器の脆弱性対応なんて大変だし、そもそもその手の脆弱性が入り込みにくい言語を採用するのは合理的だと思う。

172デフォルトの名無しさん2022/10/19(水) 12:46:33.84ID:xwPbcXKV
日本ってやらない理由、出来ない理由並べる奴が多いよな
多くの日本企業よりGoogleの方が多く生み出しているし世の役に立っている

173デフォルトの名無しさん2022/10/19(水) 12:48:40.76ID:aUvB23KT
南朝鮮ってやらない理由、出来ない理由並べる奴が多いよな 多くの南朝鮮企業よりGoogleの方が多く生み出しているし世の役に立っている

174デフォルトの名無しさん2022/10/19(水) 13:00:38.45ID:xwPbcXKV
Rust Foundationへの参加はNECやFUJITSUよりSamsungの方が早いんじゃないかなぁ
国内大手で積極的にRustを推していこうなんて所はなさそうに見えるし
組み込みのRenesasとかもやる気なさそうだしな

175デフォルトの名無しさん2022/10/19(水) 19:58:52.34ID:+MAum9P/
出来ない理由を考えるのではなく!

176デフォルトの名無しさん2022/10/19(水) 21:32:43.94ID:mHa4T+cl
日本が後進国になってきたのは政治の責任が大きいけど
IT分野で遅れてるのは総じて教育水準が低いからだよ

177デフォルトの名無しさん2022/10/19(水) 22:51:58.05ID:owfoFln4
民主主義国は政治の責任=有権者の責任

178デフォルトの名無しさん2022/10/19(水) 23:03:48.16ID:kLmY2FYt
>>177
利権差配と中抜きしか考えない国賊を礼讃して
統一創価売国与党に投票し続けたやつの責任だろ

179デフォルトの名無しさん2022/10/20(木) 00:02:58.60ID:ce/AQgdF
まったく読むに値しないクソ書き込みの羅列の中で
>>170 だけが唯一価値ある輝きをはなっている

180デフォルトの名無しさん2022/10/20(木) 13:00:10.90ID:Px+TgmX7
在日だらけ。IT分野で遅れてるのは米国(英語圏)・中国の人口差だし、日本の人口減でもある。
世界中で、歴史上、移民以外で人口減を解決した国は1つもない
そういう意味では韓国などはでは優れたソフトウエアは1つもない。馬鹿な半島はAndoridのOSを
握ろうとTizenなどというゴミを掲げたが、食いついたのはNTTドコモぐらい
いま韓国で起こってるのはソフトウエアサービスの””ガラパゴス化””であり、GoogleやAmazon
Apple Payなどに対して参入障壁を作り防御するような、大昔の古臭い日本あった不公正貿易。
民主党政権時代だって3年あったわけだが、利権と中抜きしかしてない。やったことは仕分けだが
1つも役に立たないどころか、地方医療を崩壊させ、気象変動へ対処できるインフラ投資を
一時的止めた害悪しかなかった。その他にも野田政権による執拗な消費税増税もあった。
今彼らは英国が減税を匂わせただけで大混乱していることを見ずに、消費税ゼロを掲げている。

卑劣にも矛先を反らし、リベラルなのに移民反対派で、リベラルなのに「国賊、売国」などという言葉を使い、
まるで戦争前夜か、共産主義や社会主義のような物言いをするアホが出る時点で若い人の人材不足といえる。

181デフォルトの名無しさん2022/10/20(木) 16:07:13.38ID:zGrDbuOl
英国が減税しただけで、支持率が7% になったw
米国の金利上昇で、韓国の金利も0.5% 上がったw

なのに、借金が1千兆円もある日本の金利が、0%w

狂った世界中の経済学者達が、日本は不正をしている。
日本国債は破綻しなければおかしいと言ってるw

外人が幾ら日本国債を売っても、金利が上がらない。
破綻しないw

いい加減、借金が1千兆円もあるという財務省の嘘に気付け!w

YouTube で勉強しろ。
【TVじゃ絶対言えない話】国の借金は嘘!?中田敦彦が解説

182デフォルトの名無しさん2022/10/21(金) 19:45:15.15ID:xXJwtueL
WEB+DB PRESS、何度目のRust入門なんだい?

183デフォルトの名無しさん2022/10/21(金) 20:10:13.59ID:HoCfXQGg
Rust入門は初めて

184デフォルトの名無しさん2022/10/21(金) 21:22:06.02ID:2TP3mE4K
pythonとrustを一通り試してみた
for文の入れ子で外側のforをbreakできるとか、数値を1_000_000と表現できるとか、
そんなところでrustのほうが行き届いている感じがした

ただpythonのリスト内包表記、添え字の-1で配列の一番最後を表すとかそんなのは便利だな

185デフォルトの名無しさん2022/10/21(金) 21:26:14.55ID:gnp0h5uN
Rust入門という感じではないな
Rustを使ったWeb入門という感じ

186デフォルトの名無しさん2022/10/21(金) 22:25:35.46ID:YCtBy6Lb
>>185
Web+DB Press読者は簡単なWebアプリ開発はいろんな言語で経験済みで理解しやすいだろうからチュートリアルの対象に選んだだけでは?

187デフォルトの名無しさん2022/10/22(土) 13:19:56.51ID:OES5lhv+
>>186
普段読まないけどRustなので買ってみた
なかなかわかりやすかった
基本文法の解説が明らかに足りないけど
サンプルを理解するだけならこの程度で良いのか
面倒な部分が表に出ないようにうまくサンプルを調整してるし

188デフォルトの名無しさん2022/10/22(土) 21:03:49.60ID:Vp6sRBIs
借用がどうGCに関係するのかよくわからない
うまく説明しているサイトはないですか?

189デフォルトの名無しさん2022/10/22(土) 21:38:11.55ID:OES5lhv+
まずスタックとヒープを理解せよ
これは口を酸っぱくして言ってる
でないとRustは理解できない

190デフォルトの名無しさん2022/10/22(土) 21:39:04.07ID:PO/EA+oY
とりあえずThe Bookの4章
https://doc.rust-lang.org/book/ch04-02-references-and-borrowing.html

Rustをそれなりに習得しようと思うなら
The Bookとオライリー本を読むのが一番近道

191デフォルトの名無しさん2022/10/22(土) 23:56:07.88ID:OES5lhv+
両方とも初心者には辛いよなあ
わかりやすい入門書が待たれる

192デフォルトの名無しさん2022/10/23(日) 00:22:18.48ID:LnniM1YV
借用するときにデータをスタックに積む
スコープを抜けるときに一気にpopするので
GCがいらない、つまり、早い
heapだとGCのときにデータの移動が必要になる
ので遅い
この理解であってる?

193デフォルトの名無しさん2022/10/23(日) 00:29:31.67ID:jNoMv4k0
ポインタとか参照とか他の言語で扱ったことない?

194デフォルトの名無しさん2022/10/23(日) 00:44:57.32ID:h/oZflgJ
heapが遅いの要因は、メモリの割り当て解放処理があるから処理量が多いとか、
割り当てた領域がバラバラになることでキャッシュ効率がさがることとかかと

195デフォルトの名無しさん2022/10/23(日) 13:47:22.46ID:/F23RQvw
ページング処理みたいなのが、ヒープだと2重に行われるんじゃないの?

196デフォルトの名無しさん2022/10/23(日) 14:14:22.62ID:ioVOctq2
>>192
Rustでのその辺のメモリの動きはオライリー本に詳しく書いてあった気がするから読むべし

197デフォルトの名無しさん2022/10/23(日) 15:30:09.10ID:t4UBj2/5
>>192
>>195
お前ら、具体的にどうされてるからスタックだと速いかわかって無いだろ、、、

198デフォルトの名無しさん2022/10/23(日) 18:33:19.09ID:QEVtmAwk
>>192
そんなに物事が単純なら良かったのに...
”スコープを抜けるときにGCがいらない、つまり、早い”、これは間違いでもある。インライン展開されるような高階関数なら良いが
ループ中でアロケーションしてしまうような記述をすると、その度に確保・解放されるので非効率になりかねないし、借用による
メモリーの管理ではないが、参照カウントを使用するSwiftでは、ループでボトルネックになることはある。
このためRustでは高階関数で書く事が一般的に(分かり易く)良い事とされる。あとスタックでどの言語も大体はスコープ外で
消えるのでヒープとスタックの区別は付けましょう

独立したGCスレッドが動く言語だと、スコープ外れでGCするとは限らないので、速い場合がある。一方で、高負荷な環境では
GCスレッドがありで、回収などインターラプトが入るのでRustが有利になる(=※こちらのほうがRustが重要視される理由)
いわゆるSTOP THE WORLD(DIO様風)だ。ただ、これが無ければ良いということではなく、循環参照などを作らなければ
問題ないという話で循環参照を作ってしまうのであれば、独立したGCスレッドは便利でもある

”GCのときにデータの移動が必要”になるかどうかは、GCのアルゴリズム次第であり、厳密には”データの移動が必要”になるのは
メモリーのフラグメント解消つまりコンパクション処理によるところが大きい。これは、近代的なOSでは似たような事を行っていて
これ自体が速度に大幅に影響を及ぼすとは言い難い

199デフォルトの名無しさん2022/10/23(日) 19:03:12.25ID:NZM9O6ur
>>198
> ループ中でアロケーションしてしまうような記述をすると
アホなコードで議論する必要あるの?

200デフォルトの名無しさん2022/10/23(日) 20:51:00.62ID:h/oZflgJ
一体何と何を比較しているのだ

201デフォルトの名無しさん2022/10/23(日) 22:09:39.72ID:HOBBKeJ+
なんかすごい早口で支離滅裂なこと言ってるけど
頭を整理した方が良いよ

202デフォルトの名無しさん2022/10/24(月) 16:50:56.92ID:SgELnO58
スコープを抜けるときにGCがいらない、つまり、早い

これが間違っている理由を教えてください

203はちみつ餃子 ◆8X2XSCHEME 2022/10/24(月) 18:09:05.87ID:VKX4Fsrh
ヒープメモリの管理はそれなりに重い処理だというのが論旨のように見える。

GC を使った場合のように不要なオブジェクトの判別をしていくコストは Rust では生じないが
それを除けば空いてる箇所と使用中の箇所を上手いこと管理する実行時コストは
GC (に付随するメモリ割り当て) でやってるのとたぶんそんなに差はないんじゃね。

204デフォルトの名無しさん2022/10/24(月) 18:49:41.29ID:8+UVFZyO
>>202
>スコープを抜けるときにGCがいらない、つまり、早い

確保したメモリはいつ解放するんだよバカ。

205デフォルトの名無しさん2022/10/24(月) 19:05:34.14ID:Off49nvS
文法で制約したら、書き手もコンパイラも
変数の寿命を厳密に特定することができて便利だろって事で、
どこにどう確保すると速いとか、そういう話とは別では

206デフォルトの名無しさん2022/10/24(月) 19:14:17.25ID:FdEAHzhz
GCがないので速い←わかる
スコープを抜けたらpopするだけなので速い←わかる
スコープを抜けるときにGCがいらない←スコープとGCは何の関係もないよね

207デフォルトの名無しさん2022/10/24(月) 20:07:47.96ID:rCA25jH/
まあGCは常に動く可能性があるからな
逆に全く動かない可能性もある
そこはGCのアルゴリズムによりけり

208デフォルトの名無しさん2022/10/24(月) 21:01:10.53ID:SgELnO58
スタックを使っているから
pop すればそのままメモリが解放されるという意味では?

209デフォルトの名無しさん2022/10/24(月) 21:39:23.30ID:UxIqfb1a
何と何を比べて何が速いと思ってるのか整理しなよ
話はそれからだ

210デフォルトの名無しさん2022/10/24(月) 22:49:30.31ID:c7GaYtEs
>>208
動的データ全部スタックに積むのか。すげーな。

211デフォルトの名無しさん2022/10/24(月) 22:54:45.01ID:9jOSWWIs
そんなことよりコンパイルの遅さマジでテコ入れろYO、非力なCeleronでactix-webのコンパイルしたら10分とかふざけてんのか?

212デフォルトの名無しさん2022/10/24(月) 23:05:21.00ID:XsMeW9pb
コンセプトがコンパイル遅くしても賢くするだから無理

213デフォルトの名無しさん2022/10/24(月) 23:18:23.86ID:b0depGja
依存ライブラリまで全部自前ビルドさせられてるわけだからな
コンパイル済みcrateの配布とかやってくれればなんとかなりそうではあるが

214デフォルトの名無しさん2022/10/24(月) 23:42:51.24ID:cJUnO/Lg
コンパイル高速化はユーザー側でもいろいろ工夫の余地はあるが
コア数多いマシンを使うのがいちばん効果がある

215デフォルトの名無しさん2022/10/25(火) 07:14:07.04ID:0Y9XP165
分散コンパイルか、差分コンパイルか、常にバックエンドでコンパイルか

216デフォルトの名無しさん2022/10/25(火) 08:16:49.84ID:A5TY3R0Y
>>211
流石にもっと良いマシン買えでFA

217デフォルトの名無しさん2022/10/25(火) 08:49:49.17ID:1jHrAe9o
でもRustって錆だよね

218デフォルトの名無しさん2022/10/25(火) 11:17:17.09ID:5EjxpvPU
ライブラリ類も複雑化・大型化の一途をたどっているご時世だし
Androidをビルド出来ないようなマシンは開発用としては時代遅れじゃね

219デフォルトの名無しさん2022/10/25(火) 16:49:21.94ID:pUVcngq8
環境負荷を下げるためにもTier1プラットフォームはビルド済みか半分ビルド済みを配布できるようにすべき

220デフォルトの名無しさん2022/10/25(火) 18:21:31.05ID:RZIJ148t
structのフィールドにasyncのクロージャ持たせるの面倒だな

221デフォルトの名無しさん2022/10/26(水) 00:21:17.27ID:+/Fbza6R
>>220
Pin<Box<dyn Future<Output = T>>> ではだめ?

222デフォルトの名無しさん2022/10/26(水) 01:59:13.05ID:TlW6c1+d
>>221
Box<dyn Fn() -> Pin<Box<dyn Future<Output = T>>>>
こんな感じ

223デフォルトの名無しさん2022/10/26(水) 03:12:53.76ID:J4zGWIbj
>>210
全部とは言っていないローカル変数だけだ

224デフォルトの名無しさん2022/10/26(水) 07:48:04.37ID:i0Q+rT9S
>>223
GoだってJavaだってローカル変数はスタックを利用する。

225デフォルトの名無しさん2022/10/26(水) 08:03:17.30ID:xzd5i3vP
>>224
Go は知らんが Java は値型しかスタックに確保しないよ
配列使うだけでヒープ使う

226デフォルトの名無しさん2022/10/26(水) 10:03:48.91ID:8iR+QuRY
んなこと言ったらRustだってBox使うだけでヒープ使われるだろ

227デフォルトの名無しさん2022/10/26(水) 10:28:26.80ID:poB2zSjv
ピープアレルギーでも湧いたのか?

228デフォルトの名無しさん2022/10/26(水) 10:55:30.37ID:xzd5i3vP
>>226
そりゃあえてBox使えばヒープ使うわな
極論バカ乙w

229デフォルトの名無しさん2022/10/26(水) 12:39:08.43ID:61QnplYU
ヒープで思いついたけどtest::benchってなんで使用したメモリ量出てこないの?Rustだってアロケーター自作できるなら出せなくないと思うんだが

230デフォルトの名無しさん2022/10/26(水) 13:39:05.90ID:29TlHyS0
c言語なんかも int a[n] とかはスタックから取ってきてる。昔はmallocしてたが。
とはいえlinuxのスタック領域はヒープとそんな変わらん。

231デフォルトの名無しさん2022/10/26(水) 13:49:21.71ID:OrdcPqRc
環境によるが、Rust のスレッドごとのスタックサイズのデフォルトが2MBとかで
バカでかいローカル変数や引数を使おうとすると、
簡単に実行時エラー/スタックオーバーフローを実現できるという
ちなみに、String はヒープを使う

232デフォルトの名無しさん2022/10/26(水) 14:58:21.99ID:XcmPInF1
>>230
ん?
何が変わらんの?

233デフォルトの名無しさん2022/10/26(水) 16:10:38.33ID:+/Fbza6R
>>229
issueはあるが放置されてる
https://github.com/rust-lang/rust/issues/22666
こういうのは欲しい人が積極的に動かないとなかなか進まないよね

234デフォルトの名無しさん2022/10/26(水) 18:56:12.77ID:m/VlzFSs
C 以外の言語は、すべて浅いコピー・shallow copy でしょ。
実体はコピーされずに、参照だけがコピーされる

たぶん、ローカル変数も参照だけがスタックにあって、
実体はヒープにあるのでしょ

235デフォルトの名無しさん2022/10/26(水) 19:32:11.84ID:/Jbhrlo+
そもそもスクリプト言語はマシンスタック使ってないから
C/C++/Rust/Goみたいなコンパイル言語とスクリプト言語(PythonとかRuby)とではメモリモデルが全く違う

JVMのJITはVMスタックをマシンスタックに引き継ぐって処理をやってるけど

236デフォルトの名無しさん2022/10/26(水) 19:35:12.65ID:+/Fbza6R
>>234
Cにdeep copyの概念ある?

237はちみつ餃子 ◆8X2XSCHEME 2022/10/26(水) 19:39:57.27ID:UI6BPQPg
>>236
たぶん >>234 は Java や C# などでいう参照型のことを言ってると思う。

238デフォルトの名無しさん2022/10/26(水) 19:41:30.91ID:WAf5RIwU
Box<T>って出現頻度の割に表記が長いよな
boxキーワードに変える案はどうなったんだ?

239デフォルトの名無しさん2022/10/26(水) 20:19:12.15ID:SEIcgM+j
>>230
まーた思いつきで適当なこと言ってるの?

240デフォルトの名無しさん2022/10/26(水) 21:39:27.98ID:xibmu52f
シャローコピーもディープコピーもプログラマに意識させるような言語の方がいいと思うけどなあ

241デフォルトの名無しさん2022/10/27(木) 17:59:59.22ID:36nf4K/2
C言語は低レベルすぎるからshallow copyやdeep copyを意識する必要がそもそもないしな
ポインタをそのまま複製するのがshallow copyでポインタをデリファレンスしてからその値を複製するのがdeep copyってだけやし

242デフォルトの名無しさん2022/10/27(木) 18:19:49.08ID:mzG41rMz
cだってポインタがネストされてたら順番に見てかないといけないのは他の言語と同じでしょ。
ネストを考慮しなくて良いならjavaだってcloneで一発コピーできる

243デフォルトの名無しさん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

245デフォルトの名無しさん2022/10/27(木) 22:27:03.43ID:DBkkmtck
あえていうならCにおいては構造体のメンバをそのまま代入するのがshallow copy
構造体のメンバのポインタの領域を新しく領域を確保してコピー元の構造体を再帰的にmemcpyするのがdeep cooy

246デフォルトの名無しさん2022/10/27(木) 23:13:57.69ID:qcIge2ki
Cではというが大多数の言語がそうじゃね

247デフォルトの名無しさん2022/10/28(金) 00:02:58.28ID:Rl5QKwW8
deep copy は、ネストするから難しい

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

Marshal もあるけど、色々な条件がつく。
IO, Proc, 特異メソッドが使えないとか

248デフォルトの名無しさん2022/10/28(金) 01:13:37.77ID:jXOvR4PJ
なんか話の脈絡も流れもなく各人が単語に反応して書きたいこと垂れ流すだけのスレと化してんな

249デフォルトの名無しさん2022/10/28(金) 03:43:44.96ID:01u53tKZ
高階関数はGCの性能に影響を及ぼすの?

250デフォルトの名無しさん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

251デフォルトの名無しさん2022/10/28(金) 16:15:00.57ID:AMrJHSke
JavaScriptっていつまでバンドルとかやるん?

252デフォルトの名無しさん2022/10/28(金) 16:24:46.58ID:muqJ433+
いっそコンパイルしたら

253デフォルトの名無しさん2022/10/28(金) 16:28:04.57ID:AMrJHSke
wasmでそれやろうとしてるけど
wasmランタイムよりJavaScriptランタイムの方がまだ速いというトホホな状態

254デフォルトの名無しさん2022/10/28(金) 19:59:50.54ID:eNUtjibx
じゃあasmjsでよくね

255デフォルトの名無しさん2022/10/30(日) 11:39:14.94ID:zV+ownbZ
何いってんだ
JavaScriptはRustの大口顧客だぞ
バカにするなんてとんでもない
JavaScriptの市場が大きいほどRustが儲かる仕組みなんだ

256デフォルトの名無しさん2022/10/30(日) 13:52:59.67ID:Ffhte1rz
moziraとgoogle, Microsoftと主要ブラウザメーカーが推進してるからな

257デフォルトの名無しさん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の}抜ける=プログラム終了時ようやく解放?

259デフォルトの名無しさん2022/10/30(日) 23:41:49.13ID:fG4j0a7a
Dropを自分で実装した型で試せばわかる

260デフォルトの名無しさん2022/10/31(月) 19:06:46.94ID:DHbQvQ7c
相変わらずLinusに怒られまくってるね

261デフォルトの名無しさん2022/11/01(火) 06:39:05.97ID:y5vMQo4Y
rust導入してもディレクトリ構造が汚くなるだけなのにどうして導入したんだろうね
正直撤回して欲しいわ

262デフォルトの名無しさん2022/11/01(火) 07:47:38.45ID:6ZBnCRFC
ディレクトリ構造なんかより優先すべきことがあるからだろ
rust使う意味を何も分かってないな

263デフォルトの名無しさん2022/11/01(火) 14:04:14.12ID:w6yg6Ajb
もうlinusがカーネル用にsafeな言語作った方がいいんじゃないの
既成言語じゃ既存の処理系と整合性をとらないといけないから
いろいろな不整合が生じる

264はちみつ餃子 ◆8X2XSCHEME 2022/11/01(火) 14:12:23.10ID:XoXOtAeK
エコシステムの充実はユーザ規模によるところがあるから
たとえ言語の設計としてベストマッチでも特化しすぎると
(使い手が増えなくて) 雑多なツールやライブラリが出揃い難いということもありうる。

Linux くらいの規模なら専用言語を作っても割に合ったりするかな?

265デフォルトの名無しさん2022/11/01(火) 14:25:52.66ID:smDWdngC
linusがなんか言ったの?
ググってもlinux 6.1にrustが取り込まれた話しか見つけられなかった

266デフォルトの名無しさん2022/11/01(火) 14:50:17.04ID:FsVxrWah
>>263
なにそのgitな流れは。
凄まじく少ないコードで実現してしまいそうで恐ろしい。
ピーキーなのになって、普通の人は使えないのを期待しちゃう。

267デフォルトの名無しさん2022/11/01(火) 14:58:39.21ID:O+5UiM+O
>>263
linusはgcc拡張のCが最高だと思ってる人だよ

268デフォルトの名無しさん2022/11/01(火) 18:29:34.49ID:cxS6KzKc
>>260
どれ?

269デフォルトの名無しさん2022/11/02(水) 15:56:44.98ID:ohjjd8k9
linuxもデフォルトcというよりもかなりカーネル用の拡張してるからrustもそうすればええわってのが
linusの主張でしょ。

270デフォルトの名無しさん2022/11/02(水) 16:18:07.00ID:qqWWqhkC
一応clangでもlinuxカーネルコンパイルできるようになっているということは、
LLVMに必要な機能はそろっているということだろうから、
rustcからそれらの機能を呼び出せるようにできれば良いのかね

271デフォルトの名無しさん2022/11/02(水) 16:35:45.00ID:F11hp17c
リーナスゴシップとかどうでもいいスレチネタを続けるなよ

272デフォルトの名無しさん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だと今よりもっと使われないよ。
連鎖性言語とか好きだけど。

275デフォルトの名無しさん2022/11/03(木) 21:14:31.73ID:Z+updFpk
()については他の言語と同じだしそこで変に独自性を出してもなぁという感じ

276デフォルトの名無しさん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でなんちゃら
}

参照外しはどっちをつかってる人のほうが一般的なん?

277デフォルトの名無しさん2022/11/03(木) 21:21:15.76ID:0fRPRys5
Copy実装してる型なら別にどっちでも……

278デフォルトの名無しさん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というメソッド名からその引数には"期待しているものの説明"を"期待"してしまう
慣れるんだろうか…

280デフォルトの名無しさん2022/11/04(金) 08:57:52.35ID:KcmeiRV8
>>279
英単語を声に出して読んでみ

281デフォルトの名無しさん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

282デフォルトの名無しさん2022/11/04(金) 09:15:25.47ID:yWEsFaag
>>281
これ英語の分からん奴が書いたんだろう

283デフォルトの名無しさん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
よかった、俺だけではなかったか

285デフォルトの名無しさん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
君、ぼくのおちんちんを舐めてみないかい

287デフォルトの名無しさん2022/11/04(金) 12:36:39.57ID:8jcY9XF+
.expect("ン拒否するゥ");

288デフォルトの名無しさん2022/11/04(金) 13:14:11.67ID:u3TD418O
.expect("もう少しぶっといイチモツを用意すべきです")

289デフォルトの名無しさん2022/11/05(土) 21:07:51.50ID:EPLuMYxk
expectがそもそも期待するという意味より、予想するという意味合いで使われてることが多い気がする

290デフォルトの名無しさん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チームも同じでちょっとガッカリ

293デフォルトの名無しさん2022/11/05(土) 22:23:37.34ID:CC30py/U
嫌な世の中だな

294デフォルトの名無しさん2022/11/05(土) 22:33:26.02ID:zxpwXxCd
そういうのが嫌なら使わなければよろしい

295デフォルトの名無しさん2022/11/06(日) 03:47:36.18ID:5A+TXyoz
お、Backtraceがstabilizeされたか
めでたい

296デフォルトの名無しさん2022/11/06(日) 23:25:31.82ID:tr7TV8Z+
>>295
うむ

297デフォルトの名無しさん2022/11/07(月) 14:30:18.00ID:5gh9UgGm
むしろ政治的な要素が少しでもあると過敏反応する日本IT連中のがキモいわ

298デフォルトの名無しさん2022/11/07(月) 14:37:07.26ID:3k6QMezQ
RustってSDGsだよね

299デフォルトの名無しさん2022/11/07(月) 16:35:16.97ID:F5fz3af4
みんなMSRVいくつにしてる?

300デフォルトの名無しさん2022/11/07(月) 21:29:16.68ID:oBOm8exD
日本人はまあ事なかれ主義だから仕方がない

301デフォルトの名無しさん2022/11/09(水) 08:18:29.70ID:JQdb1AnG
過剰反応というかツイッターでも左翼のトレンド操作がバレてしまったし
そういう必死な印象操作する奴らに全く反応しないのも正常性バイアスなだけで危険だと思うけどね

302デフォルトの名無しさん2022/11/09(水) 08:49:14.30ID:jv4fVWS/
別に操作でもなんでもなく前から人が選んでるって言ってたじゃん。
だからそういうのを過剰反応って言うんだよ。

303デフォルトの名無しさん2022/11/09(水) 09:39:55.00ID:LmGx5OMY
>>301
ナイーブなやっちゃなぁ
どの国でも底辺ほど極右化しちゃうのは物事が見えてないからなんやな

304デフォルトの名無しさん2022/11/09(水) 09:48:57.31ID:fSnT1d04
貧困老人って左傾化してるイメージある

305デフォルトの名無しさん2022/11/09(水) 12:28:40.18ID:aAawVede
>>302
トレンドはどのように決定されますか?
トレンドはアルゴリズムによって決定され、初期設定では、フォローしているアカウント、興味関心、位置情報をもとにカスタマイズされています。

こういうAI系にRustが使われる可能性ありそうかな?

306デフォルトの名無しさん2022/11/09(水) 12:56:20.73ID:YZQA7nNX
>>305
コア部分がC++、FortranからRustに変わるとかはありそう

307デフォルトの名無しさん2022/11/09(水) 13:03:43.26ID:tbXsBHme
>>304
それもまたナイーブな見方やなぁ
反自民党なら左、親自民党なら右やと思ってるんやろ?

308デフォルトの名無しさん2022/11/09(水) 14:25:41.02ID:bNBw/HLH
>>306
rustのGPU周りのツールチェインは整備進んでるの?


lud20221109164855
このスレへの固定リンク: http://5chb.net/r/tech/1665063793/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  
このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ



全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「Rust part17 YouTube動画>1本 」を見た人も見ています:
なんUSTR部
なんUSTR部
なんUSTR部
なんUSTR部
なんUSTR部
なんUSTR部
なんUSTR部
なんUSTR部
なんUSTR部
なんUSTR部
なんUSTR部
SATORU
なんJ RUST部
なんG RUST部
Naru Sato
SOUL TRAIN
DONGURTES
STERUSS 2
catch surf
Rust vs Go
Surgeon pt2
SUPER GT+
Fkindustry
SUPER GT+
test sure
Suzu Part1
Crossout
SUPER GT+
The Surge
SUPER GT+
SUPER GT+
Rust part9
Rust part13
Rust part18
Rust part16
DISTURBED
なんUSTR部 ★2
Soul Captor
Sproutsスレ
PUSHIM Part1
Rust part12
SUPER GT+
なんUSTR部 ★2
azusa part4
Rust part8
tjrssukilou
Rust part14
男Uber Eats
Botulus Rex
SUPER GT+
UberEats仙台
MUSIC TRACK
unused part5
Busted Part.1
Creepy Nuts
south central
Usher Part.3
Rust part21
UserAgent情報
Rust part27
shu3 Part1
なんG 正月RUST部
unused part8
Virtue Stone
unused part 6
Rust part31
19:46:57 up 17 days, 11:09, 0 users, load average: 15.56, 15.18, 14.91

in 0.027182102203369 sec @0.027182102203369@0.1 on 110909