Rust part13

■ このスレッドは過去ログ倉庫に格納されています
2021/11/07(日) 10:04:59.35ID:pJhT3MIE
公式
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のasyncについて知りたければ「async-book」は必読
https://rust-lang.github.io/async-book/

※C++との比較は専用スレへ
C++ vs Rust
https://mevius.5ch.net/test/read.cgi/tech/1619219089/

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

前スレ
Rust part12
https://mevius.5ch.net/test/read.cgi/tech/1629813327/
2021/12/28(火) 01:20:29.34ID:vzPVHyZI
>>407
stdに入ってない理由?
一長一短ある複数のアルゴリズムがあるから外部でいいだろう
2021/12/28(火) 01:57:17.15ID:We8KhoPF
>>408
その理屈だとsortも該当するが
そもそも前提としてaverageをstd
2021/12/28(火) 02:00:22.76ID:We8KhoPF
>>409
途中で書き込んでしまった

そもそもaverageか類似の関数をstdに取り込む議論が過去にあったならそれをポイントしてほしい
2021/12/28(火) 02:37:31.31ID:vzPVHyZI
多数あり外部で十分派なのでそこは興味ない
sortは2種類しかなく2種類とも標準ライブラリでサポートしている
2021/12/28(火) 09:30:51.41ID:y5zg5Cpt
>>411
じゃ一番メジャーな外部ライブラリを教えてよ
413デフォルトの名無しさん
垢版 |
2021/12/28(火) 10:24:44.25ID:ZpntEDp9
外部で十分と言えば、cratesは先着順で名前取れるからこの先優良ライブラリ程クソみたいな名前になっていくよね
2021/12/28(火) 10:41:12.74ID:zga8SsrA
>>413
マジでこれ
いい名前取るだけ取って何年も放置とか多すぎ
なんかいい方法無いかねぇ…
415デフォルトの名無しさん
垢版 |
2021/12/28(火) 11:15:50.74ID:ZpntEDp9
ライブラリの永続性を保つのに名前でマッチさせるのやめてUUIDかハッシュか何かでマッチさせれば良かったのにみたいな気持ちはある
416デフォルトの名無しさん
垢版 |
2021/12/28(火) 11:32:06.72ID:HJMjm+0C
>>414
横から失礼。
個人的にはそもそもcrate.io に頼るのがあまり好きでないなと。
Rust に限らない話だけど、こういった中央集権的なリポジトリを用意すること自体が名前争奪戦の元になるのではないかなと。
それぞれのWEBサイトで勝手に配布すればいいのにってね。
バージョン管理方法の方法論なんかも関わるから簡単な事ではないんだろうけど。
417デフォルトの名無しさん
垢版 |
2021/12/28(火) 11:35:30.26ID:QBGkL4gv
現状でもGitHubから直接落としてくることも出来るけど、GotHubのリポジトリは消せてしまうからな
2021/12/28(火) 13:40:51.12ID:XD/wAJcN
cargo updateでマイナーバージョンアップやらせるのも規約決めたり工夫ご必要だし
専用のリポジトリ用意する方がわかりやすくはあるような
crates.io以外にも複数のリポジトリを混在して使えるようにできれば良いのかな
2021/12/28(火) 14:10:43.98ID:Qs/YVt0a
cargoはどこからでも落とせる
crates.ioなみに安全性、信頼性、永続性が確保できるんなら好きにすればいい
420デフォルトの名無しさん
垢版 |
2021/12/28(火) 14:45:21.34ID:ZpntEDp9
永続性を謳うサービスで名前で管理したらそりゃあいい名前の取り合いになるよなあ
2021/12/28(火) 14:48:37.23ID:XD/wAJcN
>>419
ほんとだ、packageごとにregistry指定できるんだね
https://doc.rust-lang.org/cargo/reference/registries.html
2021/12/28(火) 15:16:22.59ID:c9bIiubz
GoみたいにGithubがデファクトスタンダードなレジストリになっても一覧性の面で不便だし、crates.ioでいいと思うけどなあ
2021/12/28(火) 21:31:42.32ID:VUBOa1a1
セキュリティ監査付きのcrates.ioクローンが欲しい
2021/12/28(火) 21:33:45.43ID:m5VlhgmG
average()が気になってcratesだかcargoだか話逸らしに聞こえる
425デフォルトの名無しさん
垢版 |
2021/12/28(火) 22:07:01.63ID:a7HoB6QX
ぼぼぼ、ぼくちんのために誰か優秀なaverage()をおながいします
2021/12/28(火) 22:22:38.58ID:ndrZKvgW
>>423
cargo auditでは足りない?
2022/01/01(土) 09:34:17.63ID:f7mn356m
>>411
「多数あり外部で十分派」なのに>>412には答えられないの??
2022/01/01(土) 19:34:25.31ID:u2SyaqDt
Why is my Rust build so slow?
2022/01/01(土) 20:01:31.38ID:YfLqYQwV
Because your PC is poor spec.
2022/01/01(土) 23:44:42.88ID:193tzZ58
https://fasterthanli.me/articles/why-is-my-rust-build-so-slow
この人の場合クソデカ型のせいでコンパイルが遅かったという話
2022/01/02(日) 10:42:43.84ID:adsjh4PJ
warpがクソみたいに重いって書いてるな
2022/01/02(日) 11:21:24.79ID:ulXuEZX0
sccacheとか入れてみるか
2022/01/02(日) 13:52:17.06ID:o9R7ffl7
当日お急ぎ便でSSDを買った
2022/01/02(日) 14:41:20.14ID:N3sGBcjr
>>432
bin crateのビルドに時間かかるなら sccache は効果薄いのでは
435デフォルトの名無しさん
垢版 |
2022/01/02(日) 14:53:21.62ID:3FXnOBLq
高度IT人材、富士通は最大年収3500万円へ

「富士通年収3500万!」日本のIT企業の年収も、高額化してきました

AI人材の獲得に超本気 NECが新人事制度を9人に適用、富士通は最大年収3500万円へ

【年収3500万円も】富士通、「ジョブ型」人事制度を導入 幹部社員から 高度IT人材

来年度から副業解禁 人材多様化へ―大同生命次期社長

第一生命HD、副業解禁 約1万5000人対象

第一生命HD、副業解禁 1万5000人対象―大手生保初

IHI、国内8000人の副業解禁 重厚長大企業も転機

IHI、社外兼業を解禁 社内副業もルール化
2022/01/02(日) 21:56:13.39ID:Uu3cvt4h
効率を求め過ぎてモノリシックになりすぎると様々なコストが上昇してしまう
そこで分割
さらに内部もcrate分割で並行コンパイル
437デフォルトの名無しさん
垢版 |
2022/01/04(火) 02:27:09.98ID:L+p8nbVX
Rustでノードが追加されたり消されたりする双方向グラフ扱いたくなったらどうするんだろ
Arenaじゃ追加削除してるうちにゴミがメモリ圧迫していくし
2022/01/04(火) 09:43:25.00ID:aGnbM+4r
>>437
Cursor使う

Arenaの場合はfree list用意して削除済み要素を再利用すればよい
Arenaが埋まったらreallocするのではなく同じサイズの新たなArenaを獲得していくようにすれば
不要になったArenaから解放できるからmalloc使う場合と同等のメモリ使用量に抑えられるかと
これでも不足するなら copy GC 的に compaction するしかなさそう
439デフォルトの名無しさん
垢版 |
2022/01/04(火) 18:15:54.62ID:L+p8nbVX
>>438
なるほど…… 結構ガッツリ実装しなきゃいけなそうね。ありがとう。最後はGCを実装することになりそうなので、それならいい感じのGCを残しておいてくれたら良かったのにって気になるな
440デフォルトの名無しさん
垢版 |
2022/01/04(火) 18:22:33.23ID:L+p8nbVX
Cursorってなんでしょう?
2022/01/04(火) 19:44:07.16ID:aGnbM+4r
>>440
これのこと (まだunatable)
https://doc.rust-lang.org/std/collections/linked_list/struct.CursorMut.html
2022/01/04(火) 20:59:48.62ID:/2oFrrnl
>>439
GCを必要とする用途は非常にレア
だから標準ライブラリには不要だが外部ライブラリに色々あるので大丈夫
2022/01/04(火) 22:15:51.15ID:aGnbM+4r
>>442
GCのライブラリ使ったことある?実用的だった?
2022/01/04(火) 22:53:03.36ID:NZNEJALT
特殊な案件でしかGCを使うことはないため
その場合は汎用GCライブラリ利用よりも
データ構造とアロケーションとGCを密に設計する方がベターかも
2022/01/05(水) 00:28:17.64ID:GzN74lxE
ちゃんとしたスマートポインタを自作する時点で結構大変だから用途特化した方が確かによさそう
2022/01/05(水) 01:03:11.75ID:o/mlVe5X
グラフみたいなデータ構造を実装するだけでも、GCが必要になったりするもんなん?
447デフォルトの名無しさん
垢版 |
2022/01/05(水) 01:37:16.98ID:hbslRCuW
>>441
ありがとうございます!
2022/01/05(水) 01:46:20.36ID:yOKwmyBj
グラフ構造表現するだけならArenaや、少し安全にするならGenerationalArenaで事足りるかと
copy GC的なものが必要になるのは大量にノードを作成してほとんど削除、一部残存みたいな状況でfreeできないArenaが残ってしまうケース
449デフォルトの名無しさん
垢版 |
2022/01/05(水) 04:00:13.07ID:6kre97ZR
ちゃんとしたGCはないのに、参照カウントだけは標準ライブラリに入っていて循環参照には気をつけましょうねーって運用でカバーなのはなんか中途半端なものを感じる
そもそも参照カウントなんてGCとしてはかなりイケてない部類なのになんで参照カウントなんだ気持ちもある
2022/01/05(水) 04:09:37.27ID:VoX97L81
単純にRcやArcはGCを目的としたものではないから
2022/01/05(水) 06:50:20.96ID:wTheSKj8
分かってる風で語るのはカッコ悪いね
2022/01/05(水) 07:42:18.23ID:jCayWhDI
単なるスマートポインタをGCと言っちゃうあたり・・・
あれは単にRAIIでヒープを処理してるだけのことであって
わざわざGCと呼ぶような大したもんではない
2022/01/05(水) 07:48:16.03ID:yhx54h3v
9分で轟沈したのに2時間後に死体蹴りせんでも。

LLVMにレジスタとスタック使わないよう教える術がないし
rustは意地でもスタックに置きたがるしplacement系が削除されたから保守的になるよね。
実際、保守的gcってどれくらい回収できんの?
2022/01/05(水) 07:52:39.60ID:/PNLes9I
>>449
即時解放がやりやすい&実装が簡単だから、だろ。

そういう説明をしないで>>452とか言うやつはRust普及の足を引っ張っているだけだから、書き込みしないほうがいいと思う。
2022/01/05(水) 08:39:25.19ID:yhx54h3v
>>454
>>450の言う通りrustのreference counting gcは
メモリ管理のためではなく共有された参照を数えるためのもので
シングルスレッド用のRcがあるのはrustがaffine typeだから
共有された可変を認めないからで、ついでに>>452の言うことも半分あってるよ。
rustは自動参照カウントにRAII併用するけどgcのない言語しか経験がない人が
gcをスマートポインタと混同するのもよくある事。

あと、rustの参照カウンタは弱参照があるから循環参照が切れる代わりに
単純な参照カウンタのオーバーヘッドが少ない・開放されるタイミングが
予測可能というメリットはないからrustが参照カウンタを用意する
メリットは>>450が指摘したものしか無いよ。
2022/01/05(水) 09:30:04.08ID:HAtvMNOo
学問的には参照カウントはGCの一方式として分類されるのが普通だよ
まあなんの前置きもなくGCといったらトレーシングGCがイメージされるというのもその通りだが
RcがGCだと言っても間違ってるということはない

RustのstdにトレーシングGCがないのは、単に標準ライブラリを大きくしない方針に従ってるだけじゃない?
本格的なGCが必要なケースは限られるし、外部クレートで十分と思うが
2022/01/05(水) 09:44:11.20ID:l0gfYUX+
いつものやつホント気持ち悪いな
2022/01/05(水) 12:11:20.98ID:g7d2BHp/
>>457
コテハンつけるかID変えないならまだいいんだけどな
2022/01/06(木) 01:29:23.74ID:Izanmpcc
気持ち悪さは長文から来る。reference counting gcとかわざわざ参照カウントを英文で書いてカッコつける所も
減点項目。個人の主観的には文中に>>を挟む特徴が読み手の事を一切考えないオナニーに見える
2022/01/06(木) 08:00:17.28ID:AA9pZn/O
それあなたの感想ですよね
2022/01/06(木) 08:47:42.41ID:zkS6fEay
文中に >> 挟むのだめなのか
どのレスのこと指してるのか明確になって良いと思うが
2022/01/06(木) 09:03:44.55ID:8b5imbdG
>>レス番
↑これで引用先に飛べるリンクが張られるの知らなさそう
5chにPCからアクセスしたり
専用ブラウザからアクセスしたときそうなってるのよ
2022/01/06(木) 10:12:38.67ID:soGE7KAW
Rustのメモリ安全性ってどうやって保証してんの?
テスト?
2022/01/06(木) 11:33:54.14ID:Djcmy5st
>>462
君はHTML知らなそうw
2022/01/06(木) 16:21:52.81ID:a887VGZI
ダメというわけじゃないが、同じ人が言ってるわけじゃないのに文中に一つにまとめて自分の考えだけを
長々と話している時点で意味わからん、リンクの話じゃない。気持ち悪さがどこからくるかという話。
感想といえばその通りで、個人的な主観と言ってるが多くの人はそう感じるのはこうではないか?という話
2022/01/06(木) 17:27:19.44ID:Gs63EiHG
長いから3文字にまとめて😪
2022/01/06(木) 17:28:58.84ID:fX6pq/OF
>>465
Rustスレで学級会始めるおまえも気持ち悪いよ
2022/01/06(木) 17:49:08.32ID:AA9pZn/O
>>がリンクにならない環境を知らんのだが
2022/01/06(木) 18:13:44.84ID:jbChckmf
>>465
よくわかる
いつも中身ないので即NG
だがやつは自演魔なんでマジタチ悪い
2022/01/06(木) 21:11:27.35ID:Q5dnJVm5
>>469がいつものキチガイの典型例
文句をつける意味不明な書き込みをしてその後に自演で同意のレスを付けてくる
スレを荒らすことが目的
2022/01/06(木) 22:28:23.35ID:s+xoikwS
お前らが誰と戦ってるのか
正直理解できない
2022/01/06(木) 23:39:45.17ID:ZA0J9QW6
このスレ常駐の荒らしは以下の特徴があるから無視すればよい
「気持ち悪」「ゲロ」「汚」などの言葉を好む
別案・別情報・別解釈などを具体的に出せず文句を付けるだけ
そのような無意味な書き込みになぜか賛同レス
2022/01/06(木) 23:48:00.39ID:NzY/+9uF
などと>>455氏が言っており
2022/01/07(金) 00:34:18.06ID:QTrF6/lG
2022/01/07(金) 00:34:18.20ID:cXPu1ueH
>>463
コンパイル時にチェックされるものと実行時にチェックされるものがあるよ
多くの場合は前者で済むけど、可変参照を複数箇所で共有したい場合は後者が必要になる
2022/01/07(金) 01:59:05.78ID:QJvziKfk
キモいと思うレスは黙ってNGしといてこれやるといいよ
https://dtolnay.github.io/rust-quiz/

Rustの文法はもうバッチリと思ってる人向け
重箱の隅をつつく問題なんだけどすごく勉強になる
2022/01/07(金) 03:03:06.42ID:7ncHJZDo
クソむずい
2022/01/07(金) 08:11:58.75ID:AAqP4BQM
c++の悪いとこばっか真似してどうすんの。。
2022/01/07(金) 08:58:17.17ID:3q+e3WNv
>>475
コンパイル時のチェックって結局人手で書いたコードによるチェックなんでしょ?
ということは担保は単体テストってこと?
2022/01/07(金) 09:16:18.88ID:3w3matv0
>>479
実行時じゃなくて?
2022/01/07(金) 09:25:48.12ID:9KLybwvT
そもそもだかマシン語でみりゃ
メモリに型もなんもないよw
単なるバイトだらけ
コンパイルの段階で変なコードか
けないようにしてるだけ
でもこれだとぬるぽ!が回避できないので
仕方なく仕組み入れたのがRustでしょ
482デフォルトの名無しさん
垢版 |
2022/01/07(金) 10:01:43.31ID:FjJ2oZu9
Rust書くときは常にIDEに直してもらいながら書いてるから>>476みたいなの全然解けないわw
2022/01/07(金) 10:06:26.42ID:27W+wb2V
>>476
確かにこれは勉強になる
知らなかったことばっかり
2022/01/07(金) 10:10:35.06ID:FVraLxVf
Rustのメモリ安全って、null安全のことだったの?しょぼ
2022/01/07(金) 10:57:05.72ID:9qeGIYdY
>>479
コンパイラのコードのこと?
安全性の保証に形式的証明を与えようという取り組みはあるけどコンパイラの実装が正しいかはコンパイラのテスト頼りだね
https://plv.mpi-sws.org/rustbelt/popl18/
2022/01/07(金) 11:28:53.58ID:9KLybwvT
「Rustは安全でも難しい」といわれる理由――メモリ安全を実現する「所有権」の仕組み
https://atmarkit.itmedia.co.jp/ait/spv/2111/25/news008.html
2022/01/07(金) 12:00:56.69ID:24FxYl/s
>>486
初心者向けにわかりやすく解説しようという試みは評価するが
間違いが多すぎて萎える
ここで初心者の質問に回答してる初心者と同じ
2022/01/07(金) 12:22:15.55ID:9qeGIYdY
>>487
例えばどこが間違ってるの?
2022/01/07(金) 18:09:24.83ID:KzGvgOV1
>>488
整数型や浮動小数点型といったスカラー型の変数は、変数間の代入において所有権は基本的に複製されます。これを「所有権の複製(コピー)」といいます。変数間の代入などにおいて所有権は複製されるので、値の所有者は常に1個でなければならないというルールは守られます。
2022/01/07(金) 19:34:39.40ID:9qeGIYdY
>>489
正しいこと言ってるように見えるけど
どう間違ってるの?
2022/01/07(金) 19:39:44.12ID:pFd15XiZ
所有者が無能だったら終わりです
2022/01/08(土) 00:17:04.62ID:GxMqZbIC
所有権が複製されるって表現はなんかRcを想像してしまうな
493デフォルトの名無しさん
垢版 |
2022/01/08(土) 00:19:22.76ID:tLJ6VgIA
整数型とかの単純のヤツはCopyだかCloneだかをderiveしててデフォのmove semantics機能してなかった気がするな
最近書いてねぇから忘れてんなこれ(´・ω・`)
2022/01/08(土) 06:57:19.85ID:5x1u92SJ
数値型が特別扱いされているわけではない
Copy traitを実装すればcopyされる
Copy traitを実装しなければmoveされる
2022/01/08(土) 23:30:01.75ID:lz8RPHEi
Copyで複製されるのは所有権じゃなくて値だよね
代入先の変数が複製された新しい値の所有権を持つことになるけど、所有権が複製されるんじゃあない
2022/01/09(日) 16:14:36.11ID:uxfV5OFq
copyだけでなくmoveされるのも対象は値
所有権ではない

値をmoveした結果
値に紐付く所有権がくっついてくる
2022/01/09(日) 16:51:12.42ID:TifKF/RV
値と同時に所有権 "も" copy/moveされると捉えることもできるのでは
2022/01/09(日) 18:01:55.54ID:yd7evZmg
個人的に間違った捉え方をするのは自由だが
それを初心者に広めるのはやめていただきたい
2022/01/09(日) 18:56:17.00ID:KYx55eM0
あんたらのお仲間他スレで暴れてばかりだよ、引き取りに来い
2022/01/09(日) 19:06:20.22ID:EvEIewTi
これ結構いいな
概出?
https://docs.microsoft.com/en-us/learn/paths/rust-first-steps/
2022/01/09(日) 19:18:00.80ID:n32zl2Pe
所有権が複製できちゃったら「一個の値に一個の所有者」ってルールが守れないやん(´・ω・`)
2022/01/09(日) 20:01:19.31ID:wa3WbZ82
所有権を持っていると年2回の配当金がもらえます
2022/01/09(日) 20:12:54.12ID:ASvenOj7
しょーゆー拳!
2022/01/09(日) 20:17:43.06ID:QVmVQA75
>>492
> 所有権が複製されるって表現はなんかRcを想像してしまうな

https://doc.rust-lang.org/std/rc/index.html
> The type Rc<T> provides shared ownership of a value of type T

shared ownershipという表現でうまく説明できててrustっていいなと思う
2022/01/09(日) 20:20:09.14ID:Yd6TUYc2
というかCあたりの関数の引数も
コピーじゃなかった?
中身を渡した先でもいじらせる場合とかは
ポインター渡しとかなんかやってた記憶
2022/01/09(日) 21:35:14.41ID:f6gH817b
大半の言語はデフォルトで値渡しだよ
2022/01/09(日) 21:41:43.59ID:QVmVQA75
Cでポインタ型の値を渡してるだけのことを
参照渡しと言っちゃう害悪がネットにチラホラ残ってて悲しい
ポインタ渡しとかいうすっとんきょうな用語も必要性を感じない
Javaで単に参照型変数の値を渡してるだけのことを
参照渡しと言っちゃうのも割りとあって悲しい
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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