Rust part22

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2024/01/20(土) 23:21:40.08ID:wyzQTwgG
公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust

公式ドキュメント
https://www.rust-lang.org/learn

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

※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 part21
https://mevius.5ch.net/test/read.cgi/tech/1692105879/

ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.2ch.net/test/read.cgi/tech/1514107621/
2024/01/20(土) 23:30:24.59ID:YXP1l1jf
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/
2024/01/20(土) 23:30:59.71ID:YXP1l1jf
Rust Reference Book
https://doc.rust-lang.org/reference/
Rust Standard Library
https://doc.rust-lang.org/std/
Rust rustc Book
https://doc.rust-lang.org/rustc/
Rust rustdoc Book
https://doc.rust-lang.org/rustdoc/
Rust rustup Book
https://rust-lang.github.io/rustup/
Rust Cargo Book
https://doc.rust-lang.org/cargo/
Rust unstable Book
https://doc.rust-lang.org/nightly/unstable-book/
Rust macro Book
https://danielkeep.github.io/tlborm/book/
Rust CLI (Command Line Interface) apps Book
https://rust-cli.github.io/book/
Rust Future Book
https://cfsamson.github.io/books-futures-explained/
Rust async-std Book
https://book.async.rs/
Rust tokio Book
https://tokio.rs/tokio/tutorial
Rust serde Book
https://serde.rs/
2024/01/21(日) 19:52:38.28ID:/dcZ0aWP
Rustを理解していく順序 (文法以外)
ownership 

lifetime (これ以前でも参照を持ち越さない範囲で可)

trait (これ以前でもライブラリ既存traitメソッド使用は可)
generic (これ以前でもライブラリ既存genericメソッド使用は可)

macro (これ以前でも既存macro使用は可)
async (これ以前でも同期で使用可)

unsafe (ほとんどのことはunsafeを使わずに可能)

もしunsafeを使わないと効率よく実装できない安全なパターンを見つけて、
かつ、それが既存ライブラリに存在しない新たなパターンならば、
それは大発見だから皆のためにそのcrateを公開すべし
2024/01/21(日) 20:27:09.29ID:D3jVm/Ct
今、refと&で混乱してるとこ!
6デフォルトの名無しさん
垢版 |
2024/01/21(日) 20:58:34.51ID:RjmgKxew
オーナーシップとかAIにやらせればOK
意識して時間割く必要なし
2024/01/21(日) 21:23:48.87ID:/dcZ0aWP
>>5
パターンマッチングはCopy実装型はcopyされてそれ以外はmoveされる

copyやmoveを避けるには
マッチング対象を参照にすれば
全て参照として受け取れる

しかしある部分はcopyである部分は参照で受け取りたいことがよくある
(例えば数値とStringで構成されてる場合)
その時は参照で受け取りたい部分のみrefを付けるとそこは参照で受け取れる
8デフォルトの名無しさん
垢版 |
2024/01/21(日) 21:33:08.24ID:LhOQKlqN
>>5
refはbind by reference
左辺(相当)でのみ使う(binding生成時のみ)
右辺で&を使うのと同じだけど右辺で&を指定できない場面で使う

&を左辺で使うとパターンマッチでデリファレンス
右辺で*を使うのと基本同じ
2024/01/21(日) 22:36:05.82ID:/n8yifEU
>>https://mevius.5ch.net/test/read.cgi/tech/1692105879/990
一応知らない人のために書いておくけど

「Rustがunsafeコード一切なしでメモリアンセーフ」な事が判明してから半年近く経ってる
特定の機能導入のタイミングでコードが発見されたけど、
「Rustの仕様バグ」だと認識されていて直せない

>>4
そんな事並べて理解したつもりでも、分からないと言っている人の側の主張が正当なんだよ

最近はここでも保証って言われなくなっただろ、当たり前だよRustの仕様に健全性が無いのだから
たぶん知っていて話を逸らしているのか、過去スレでスルーしたかで、この指摘も無理やり矮小化してくるからな
(githubの議論でも矮小化して放置)
気を付けろよ

https://github.com/rust-lang/rust/issues/114936
2024/01/21(日) 22:51:42.90ID:w4jDa8WO
>>9
無意味な揚げ足取りをしてRustを叩きたい人はアンチスレへ
棲み分けしてください

Rustアンチスレ
https://mevius.5ch.net/test/read.cgi/tech/1509028624/
2024/01/22(月) 00:47:14.54ID:jqH5vdYX
仕様バグだから直せないじゃなくて
厳密なチェックをする実装は0から作ったほうが早いから
今使ってる確率的(笑)な実装は変更しないんだよね?
12デフォルトの名無しさん
垢版 |
2024/01/22(月) 03:17:34.54ID:laN06gwL
これマジ? どれくらいの確率で踏むんけ? コンパイルのバクはケアしたくないなあ
2024/01/22(月) 04:28:43.80ID:DrvqbiCd
>>12
意図的にvarianceの穴を突く無意味なコードを書かないと発生しないため>>9は無害
2024/01/22(月) 09:21:43.10ID:k43UrEGh
>>9
こんなコンパイラの脆弱性を突くようなコードを普通なら書かない定期
2024/01/22(月) 21:22:44.12ID:m6FRVxec
>>9は9年前の2015年から既知の有名なパターン
意味のあるプログラミングで絶対に踏むことはないため害はない
その特殊ケースに対応するデメリットの方が大きいため対策されていない
それらを踏まえたうえでIT大手が揃ってRustを採用しRust Foundationも設立された
2024/01/22(月) 21:31:04.02ID:l2He84BH
9のコードの意味が理解できないんだが何が問題なのか説明してくれ
2024/01/22(月) 22:53:37.35ID:6ImN7JeY
c++のテンプレートはチューリングマシンだから
無限ループを起こせるのは仕様の欠陥がどうか聞きたい
18デフォルトの名無しさん
垢版 |
2024/01/22(月) 23:05:33.08ID:YajFhzWL
f: impl for<'s> FnOnce(&'s str) -> (&'static str, [&'static &'s (); 0]) の説明だけ。
ライフタイム 's の str を引数にして、&'static str 型と、[&'static &'s (); 0] 型のタプルを返すクロージャが f ということ。
[&'static &'s (); 0] は &'static &'s () 型の長さ 0 の配列。
&'static &'s () は、ユニット型() のライフタイム 's の参照のライフタイム 'static の参照。

この &'static &'s () の部分で変なことが起きてそうと言っとるな。
2024/01/22(月) 23:14:04.77ID:T1sqP3ZB
>>17
C++ の仕様ではテンプレートの展開深度に上限を設定することを認めているのでチューリングマシンではない。
非現実的な回数のループが起こるのならそれは処理系の欠陥。
2024/01/22(月) 23:41:39.76ID:NA4FP1NO
>>15
1.65.0で新しく導入された回帰バグですって書いてあるし
2015年の#25860とも別だねってコメントも付いてますやん
2024/01/23(火) 00:35:34.27ID:AizsfBYE
>>18
文脈無視してその引用だけで言えそうなことは
&'static &'s T 型が存在するならば 's も 'static でなければならない
このルールに反しない限り &'s str を &'static str に変換してよい
2024/01/25(木) 23:09:32.35ID:iPN7/qe+
安全にこれで&'staticへ変換できる

fn to_static_str(s: &str) -> &'static str {
  s.to_owned().leak()
}
2024/01/26(金) 23:31:43.19ID:ZBdWgzp4
最後までずっと使うものやあるいは
あるメモリ限度内に収まる使い方ならば
リークさせて扱いが楽になるメリット享受を選ぶのもありかもな
2024/01/27(土) 23:34:17.17ID:kvD8ZR3g
>>22
それ&'static strではなく&'static mut strを返してもええねんで
2024/01/28(日) 02:18:12.19ID:tZGISO28
>>22
leakって安全なの?
2024/01/28(日) 04:27:59.88ID:2343IlJN
leakは安全
そのプログラム終了まではその部分のメモリを解放しないだけ
2024/01/28(日) 08:32:52.16ID:hRRbWEE/
>>25
Rust の定義ではメモリリークは安全性を損なわないことになってる。
言語の機能として積極的に阻止しなければならないような動作ではないが、
だからといってむやみにリークさせていいわけでもないのは当然なので
そこらへんはロジック上の必要性を鑑みて「正しく」運用するのはプログラマの責任だよ。
2024/01/28(日) 12:34:08.20ID:tZGISO28
leakは参照を削除するとメモリリークになると書いてあった(機械翻訳)けど参照って削除できるの
29デフォルトの名無しさん
垢版 |
2024/01/28(日) 13:17:17.43ID:lA5rY1V0
>>28
原文は何て書いてるのさ
2024/01/28(日) 14:30:03.90ID:WlHw4mUK
期待した通りの結果になるのは危険ではないという知見は合理的だ
期待や願望よりも地獄のような厳しい現実にこだわるバイアスがかかってない
2024/01/28(日) 15:17:37.40ID:2343IlJN
>>28
leak()は所有者がいなくなるだけ
つまりそのメモリ領域が解放されなくなるだけで安全な行為
そこを指す参照だけになる

一般的に参照は指しているだけ
その参照を表す変数もしくは一時的な値が消えればその参照は消えたことになる
参照が消えても実体には何ら影響なく解放なども生じない
2024/01/28(日) 18:26:28.82ID:WlHw4mUK
メモリリークにならない=参照がデストラクタを呼び出せる
ではなく
参照はデストラクタを呼べないが、参照が永久に残ればメモリリークにならない
2024/01/29(月) 23:08:47.69ID:GnLHDaEQ
メモリリークは多義なので
GC言語でも、今後は使わないオブジェクト等をどこが参照しているため解放されない、これもメモリリークと言う
つまり参照が残っているからメモリリークじゃないとは言えない
逆にRustの場合は、leak()を適用した時点でそこは永久に解放されないのだから、既にメモリリークとも言える
もちろんそれで困らない時に意図的にリークを可能とするものなので、その機能や行為自体に問題はなく、そのプログラムの性質や環境や方針次第
2024/01/30(火) 02:10:08.22ID:gYzmItMj
多義である事実に人間が従うのではなく、定義を変えたいので変えまくった人間に事実が従う
利己主義の結果を予想するのではなく結果を予想できる範囲内で利己的になる
2024/01/30(火) 06:01:38.95ID:lXERqUpG
きちんとメモリ確保・解放する
ただそれだけのことだけどうまく行かないものだね
2024/01/30(火) 07:11:49.27ID:g++Pj77W
>>35
Rustならそれができるし保証される
ただしその基本に加えて融通を利かせることもできる
意図的にリークさせる(解放しない)こともできるしそれを使わないこともできる
意図的に循環参照を作ってリークさせることもできるしそれを避けるための手段も用意している
2024/01/30(火) 11:19:29.95ID:LgX6lgq1
それくらいできてくれないと習得に対して割に合わない
2024/01/30(火) 23:08:46.90ID:shd55QRp
>>35
二回以上解放しない保証は大成功した
一回以上解放する保証をやる気がない
与えられた問題を勝手に分割してやりたい部分だけやってる
2024/01/31(水) 05:41:08.45ID:XSmS7DeM
Rustでは意図的にリークもしくは意図的に循環参照作成の場合を除いて必ず解放される
2024/01/31(水) 22:24:17.87ID:rU+aRD+l
スポーツでも五輪だけが目的のプロがいたら割に合わないが
なんか目的をあやふやにすれば五輪に出ても破産しないよね
41デフォルトの名無しさん
垢版 |
2024/02/01(木) 16:48:45.42ID:ernnY6oF
Microsoft seeks Rust developers to rewrite core C# code
https://www.theregister.com/2024/01/31/microsoft_seeks_rust_developers/

でかいところのバックエンドRust化が増えてきたな
42デフォルトの名無しさん
垢版 |
2024/02/01(木) 17:28:29.31ID:xcOmoIH1
しかしRust流行らんな
2024/02/01(木) 19:27:48.94ID:6WtKOSai
Pythonやkotlinみたいな手軽さで堅牢で高いパフォーマンスが出れば最高なんだけどなかなかね
2024/02/01(木) 20:38:04.52ID:XOfXRWXD
from C to Rust へのマイグレーションは時間がかかるからしゃあない
2024/02/01(木) 21:16:53.56ID:E1I2Gvr8
>>43
Pythonはスクリプトを書く程度ならいいけどプログラミングには不向き
2024/02/01(木) 21:44:37.29ID:Nzd8TkB/
きちんとガベコレしてるのに見下されてるなあPythonは
きちんとしても割に合わない
2024/02/01(木) 21:53:27.11ID:7aZ9tAiW
動的型は堅牢とかきちんとやるみたいなのと相反するんだよな
書き捨てならいいけど長期的にメンテするやつには向いてない
48デフォルトの名無しさん
垢版 |
2024/02/01(木) 21:55:25.71ID:9CL84hYM
Rust、言うほどPythonと比べて手軽でないか?
2024/02/01(木) 22:17:59.13ID:B5mxz6YT
プログラマの意図を書かないと、意図を表せる言語じゃないと「正しい」かどうかは検証しようがない。
だから意図の表現方法として型やライフタイム注釈やらの形を確立したのであって、お手軽に柔軟に動かす言語では実行時に不都合があれば止まるという形にならざるを得ない。
静的型があれば全部が解決ってわけではないけどごく基本的な整合性検査すらせずに実行するまでわからんというのはメンタル的にきつい。動的型はきつい。
自分で把握できる程度の小さな規模なら動的型のほうが楽ってこともあるといえばあるけど、人類は駄目なのでちゃんと把握できる規模は自分で思っているよりだいぶん小さい。
50デフォルトの名無しさん
垢版 |
2024/02/01(木) 22:29:20.68ID:wp2DoW25
Pythonはやっぱり行列を扱うのに長けてる気がするな
ただ静的には何の変数を見ても(Variable)xxx: Anyみたいな型推定しかされていなくて、自分の書いたコードですら訳がわからなくなる
他人の書いたライブラリを使うときはまるで魔法を使ってるかのようだ
2024/02/01(木) 22:40:37.81ID:Nzd8TkB/
Pythonというかインタプリタは部分的にCを使うことを認めざるをえない
それを大多数に納得させるコストが激安
2024/02/01(木) 22:42:10.75ID:tu2Yd+rZ
>Pythonはやっぱり行列を扱うのに長けてる気がするな

pythonのどこが?numpyがあるだけじゃね。
2024/02/01(木) 22:45:58.52ID:E1I2Gvr8
PythonはC/C++/Rustで書いたライブラリを呼び出すスクリプト言語として使っている限りは問題ない
プログラミング言語としては不向きで使うべきではない
2024/02/01(木) 22:54:05.96ID:Nzd8TkB/
OSのカーネルにはPythonは不向きだからクソどうでもいい生存競争をしなくてすむ
55デフォルトの名無しさん
垢版 |
2024/02/01(木) 23:06:17.91ID:0Yigz0zQ
使い分けが出来ない人はスキルが低いだけ
言語に限らずどの技術でも同じこと
2024/02/01(木) 23:13:02.07ID:iVey9ypb
各種カーネルのRust移植に時間かかってるけどC/C++からRustへの書き直しってそんなに大変なの?
2024/02/01(木) 23:14:24.05ID:h0D2/F6d
Pythonもプログラミング言語だしシェルスクリプトも立派なプログラミング言語だよ
2024/02/01(木) 23:23:51.23ID:itS/z8tN
プログラミング言語はそれに付随するフレームワークの質で需要が変わってくるけど、
C/C++/Rust/アセンブラなど低水準言語はガべコレのランタイムが不要というアドバンテージがある
だからカーネル用途での需要が高い
2024/02/01(木) 23:26:15.91ID:B5mxz6YT
Ruby もだいぶん長いことバイトコード化すらせずに木を辿るクソ遅い設計だったんだぞ。
でもなあ、使い分けといってもやっぱり慣れたらもうちょっと他の場所でも使いたくなるし、速度の要求も静的検証の要求も出てくる。
今の Ruby は Jit で速くなったし型チェックのサポートも本格的になった。
使い分けは要るがせずにすむならそれに越したこともないんよ。
2024/02/01(木) 23:26:33.20ID:8nChHaP8
>>56
そのまま移植はほぼ不可能でしょ
データ構造から設計しなおさらないと
クソコードになりがち
2024/02/01(木) 23:33:40.62ID:B5mxz6YT
C の世界の文字列はゼロ終端やんか。
カーネルのインターフェイスにもその規約がそのまま現れてる。
内部的な設計は Rust 的にしつつも外向きのインターフェイスは変えないように置き換えるなら微妙な変換があらゆるところに出てくるよ。
まあそのへんは適当な専用フレームワークを確立させればたいしたことでもないが、そういう地味なことの積み重ねがいっぱい要るよ。
2024/02/02(金) 00:29:39.63ID:wYh3cvfE
C/C++からJavaってのはすげー移植しやすかったのよ
その利点はほとんどないと多くの人が気がつくのに20年もかかってしまったけど
2024/02/02(金) 00:36:47.62ID:iO9F+zBT
>>56
書き直しさえすれば何でもいいというのは大変だろうね
何でもいいというのは嘘で
本当は好き嫌いがあるから
2024/02/02(金) 01:16:00.31ID:fEMhv+T7
コード移植なんてつまらなくて言語差で面倒なだけ
守るべき仕様さえはっきりしてるならゼロから書いたほうが結果的に早くて質も良くて楽しい
2024/02/02(金) 01:28:41.76ID:iO9F+zBT
仕様とか契約とか目的とかは未来を予測する根拠としてはイマイチ科学的でない
2024/02/02(金) 01:38:03.89ID:ZFQgO+dm
Linux だとバイナリ互換性もかなり大事にしてる。
(Windows ほどじゃないが。)
仕様として明文化してない挙動に依存するアプリケーションであっても今まで動いていたものが動かなくなるのは良くないという方針。
「守るべき仕様がはっきりしていれば」という前提がなりたたないから困るんだよ。
そしてそれはよくあること。
2024/02/02(金) 01:40:32.02ID:fEMhv+T7
ときどき仕様も要件定義もはっきりせず発注者が把握できていないものの言語移植ケースがあるがその仕事を引き受けないほうがいい
バグらしきもの含めて現存コードと同じ動作をするよう求めてくるためムダな面倒に精神力が奪われる
2024/02/02(金) 11:04:47.16ID:VI0tbigR
仕様さえ守っていればいいみたいな考えに従うと最近はお役所系でもちらほら見るクローム以外を
排除する極右Webサイトが出来上がったりするんだろうな。発注側でも受注側でもね
2024/02/02(金) 11:10:52.47ID:BQKaaqcl
ちゃんと充分な調査費用も出るならやらんでもないけどな。
大きなシステムの一部をリライトする場合には一から作る場合より数倍のコストがかかっても
全体をやり直すよりはマシだから「同じもの」を求めるのはそれなりに合理性がある。
全部をリプレイスするのに前と同じという要求するやつがいたら、
前と同じがいいならそのまま使っとけやという気持ちになる。
2024/02/02(金) 11:38:15.79ID:cSpiCBqt
C/C++→Rust 安全化とそのデバッグ開発効率化
C/C++以外→Rust 高速化と省メモリ化

これらの恩恵があるため
安全でないことによるバグ発生で困っているならC/C++→Rustを
CPUメモリリソース削減が求められてあるならC/C++以外→Rustを
たとえ同じ仕様のままでもやる意味が生じる
2024/02/02(金) 12:27:55.82ID:ndCfDt6c
>>70
費用対効果考えると厳しいな。

c++のプロジェクトをRustに切り替えるよりか、コーティング規約組んでlint用意して強制したほうが効果高そう。
既存コードの扱いが難しいけど。
2024/02/02(金) 13:20:50.14ID:ujySZ5KU
Webアプリ用途でもAxumやActixがフレームワークとして十分使いやすいから、もっとRustは普及していい
73デフォルトの名無しさん
垢版 |
2024/02/02(金) 13:32:21.68ID:gukHO/4I
c++ から rust に移すなら、その前に c++ コードのリファクタリングとしてmove使用コードに直すだろうし、
それやったらもうそれで良くね?ってなると思うわな。
2024/02/02(金) 15:02:39.89ID:SOk2CQ22
言語移植はそのうちAIがなんとかしてくれるんじゃなかろうか
2024/02/02(金) 17:43:40.65ID:wsXMOW5f
所有権があるから GC 言語からの移行でも安全になる恩恵はあるんだよなぁ。

ほんとエポックメイキングな言語だよ。
76デフォルトの名無しさん
垢版 |
2024/02/02(金) 19:12:44.91ID:6TGLHO8E
rustの最大のメリットは、絶対では無いけどコンパイルさえ通ってれば他人のクソコードに悩まされずに済む点じゃないかね。
77デフォルトの名無しさん
垢版 |
2024/02/02(金) 21:11:58.02ID:K0BmHg5g
>>76
なんで悩まされないの?
2024/02/02(金) 21:33:43.48ID:ya0nDY0I
Rustでも糞コード見かける
たとえば非常に単純な例でいうと元の部分strを返せば済むのにString作っちゃうなど無駄にヒープ使ってしまうケース
でも見抜きやすく手直しもしやすい
2024/02/02(金) 21:34:56.76ID:ya0nDY0I
Rust以外でよく見かけるのはど
こで書き換わっているかわかりにくく副作用や競合が心配なケース
Rustではデータ競合が起きないしグローバル変数も制限があるためこの手の類には悩まされない
2024/02/02(金) 22:24:30.77ID:BZlEVlBD
メリットが欲しいと思ったことはないな
新しいジャンルで唯一の選択肢なのでメリットの大きさを比較する必要がない
異なるジャンルでは比較する意味がわからない
2024/02/02(金) 22:27:27.20ID:ASeaHMD6
>>78
1周回ってString返したほうが良くなる状況もあるからそんなに単純じゃないよ
2024/02/02(金) 22:29:00.17ID:ASeaHMD6
>メリットが欲しいと思ったことはないな
誰もメリットが欲しいかどうかについては話してないよw
2024/02/02(金) 22:34:00.04ID:ya0nDY0I
>>81
それは絶対にない
部分str返しで済むなら必ずそうすべき
それを返された側がString化が必要な時のみ行なう
2024/02/02(金) 22:36:34.16ID:BZlEVlBD
欲しくないものを供給している可能性を誰も想定していないのか
2024/02/02(金) 22:47:15.09ID:P1ceRtbI
わかりやすいのがstr.trim()かな
前後のスペースを取り除く関数だけど当然Stringではなくstrの一部分を返す
Stringがほしい人はstr.trim().to_string()
2024/02/02(金) 22:52:35.98ID:SRUTe3RO
>>85
欲しい人にもそうでない人にも対応できるように&strがベストとは思わんか?
2024/02/02(金) 22:55:20.18ID:P1ceRtbI
>>86
同じ主張だよ
str返しが可能ならStringを返してはいけない
slice返しが可能ならVecを返してはいけない
2024/02/02(金) 23:19:45.92ID:BZlEVlBD
上書きされる前に別の場所にコピーした方が比較的安全というメリットが消えた
Rustが消した
2024/02/02(金) 23:26:54.37ID:ya0nDY0I
>>88
Rust以外ではいつ書き換えられたりor解放されたりするかわからないから
安全なプログラミングということで(無駄になる恐れもあるけど)コピーしておく安全策をとることがあった

Rustでは知らぬ間に書き換えられたりor解放されたりすることはないので
安全策を保ったままで無駄なコピーが不要となった
2024/02/02(金) 23:26:59.82ID:9Dc3A0qD
Stringを使うことで無駄に専有されるヒープメモリはそこまで悪に感じないわ
カーネル作ってるわけでも競技やってるわけでもないんだったらね
可読性のために型を統一させるほうを優先する
2024/02/02(金) 23:34:55.21ID:v5+jJWMk
>>90
主張がよくわかりません
&strを渡せば済むところをString渡しで統一したりしてるのですか?
それで可読性が上がるとは思えません
2024/02/03(土) 00:06:15.17ID:zqTPQxFe
>>90
そのためにムダにto_string()やそのclone()をするのは間違い
他の言語やスクリプト言語ですらそんな酷いことは行われずにコピーオンライトやインターン化でムダを防いでいる
Rustではまずは&strで行ける範囲は&strで行き次にCow併用そして同じ中身のStringが複数できるならstring_cacheなどでインターン化など
2024/02/03(土) 00:06:54.99ID:26gTKyDM
C++でもstring_viewとstringは使い分けるぞ
2024/02/03(土) 00:39:47.95ID:x4y7pcy2
&strでいいなら&strで返すのが基本だけどプログラム全体を見たときにStringで返したほうがものすごくコードを単純にできる場合がある
アロケーションコストが全く問題にならない状況であれば&strに固執する必要はない
無駄なヒープアロケーションは増えるけど違う観点の無駄を削減してる
トレードオフだよ

型を統一するって話はよくわからんけど
2024/02/03(土) 00:41:39.18ID:26gTKyDM
そこ気にしないなら普通にスクリプト言語でも使っとけば良いと思うよ
2024/02/03(土) 00:44:03.79ID:zqTPQxFe
>>94
そんな例は起きない
strを返された側でString化が必要な時のみするのがベスト
2024/02/03(土) 05:44:40.82ID:/t14gmUC
>>96
そりゃベストはそうだろうけどさ…
c++で言うchar型で良いところをわざわざstdのStringを使うなって話でしょ?
動的メモリ確保になってようがその程度の誤差くらい動けばどっちでもいいわ…
2024/02/03(土) 06:03:57.16ID:HSW3HPjS
>>95
Rustから一気にスクリプト言語は飛躍しすぎだからスクリプト言語より先にガべコレ付き言語を薦めてくれ
ガべコレ付き言語はヒープメモリを気にしない人にはおすすめだよ
2024/02/03(土) 06:28:46.54ID:zqTPQxFe
>>97
文字列だけでなく一般的な話
部分スライスを返せば済むところをわざわざVecにして返すことが許されるのか?という話だぞ
これを誤差だと言い張るならRustを使う資格はない
2024/02/03(土) 06:58:55.64ID:SxNvW1DJ
こだわりの強い人がおるなあ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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