公式
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/
探検
Rust part22
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2024/01/20(土) 23:21:40.08ID:wyzQTwgG2024/01/22(月) 23:14:04.77ID:T1sqP3ZB
2024/01/22(月) 23:41:39.76ID:NA4FP1NO
2024/01/23(火) 00:35:34.27ID:AizsfBYE
>>18
文脈無視してその引用だけで言えそうなことは
&'static &'s T 型が存在するならば 's も 'static でなければならない
このルールに反しない限り &'s str を &'static str に変換してよい
文脈無視してその引用だけで言えそうなことは
&'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()
}
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を返してもええねんで
それ&'static strではなく&'static mut strを返してもええねんで
2024/01/28(日) 02:18:12.19ID:tZGISO28
>>22
leakって安全なの?
leakって安全なの?
2024/01/28(日) 04:27:59.88ID:2343IlJN
leakは安全
そのプログラム終了まではその部分のメモリを解放しないだけ
そのプログラム終了まではその部分のメモリを解放しないだけ
2024/01/28(日) 08:32:52.16ID:hRRbWEE/
>>25
Rust の定義ではメモリリークは安全性を損なわないことになってる。
言語の機能として積極的に阻止しなければならないような動作ではないが、
だからといってむやみにリークさせていいわけでもないのは当然なので
そこらへんはロジック上の必要性を鑑みて「正しく」運用するのはプログラマの責任だよ。
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()は所有者がいなくなるだけ
つまりそのメモリ領域が解放されなくなるだけで安全な行為
そこを指す参照だけになる
一般的に参照は指しているだけ
その参照を表す変数もしくは一時的な値が消えればその参照は消えたことになる
参照が消えても実体には何ら影響なく解放なども生じない
leak()は所有者がいなくなるだけ
つまりそのメモリ領域が解放されなくなるだけで安全な行為
そこを指す参照だけになる
一般的に参照は指しているだけ
その参照を表す変数もしくは一時的な値が消えればその参照は消えたことになる
参照が消えても実体には何ら影響なく解放なども生じない
2024/01/28(日) 18:26:28.82ID:WlHw4mUK
メモリリークにならない=参照がデストラクタを呼び出せる
ではなく
参照はデストラクタを呼べないが、参照が永久に残ればメモリリークにならない
ではなく
参照はデストラクタを呼べないが、参照が永久に残ればメモリリークにならない
2024/01/29(月) 23:08:47.69ID:GnLHDaEQ
メモリリークは多義なので
GC言語でも、今後は使わないオブジェクト等をどこが参照しているため解放されない、これもメモリリークと言う
つまり参照が残っているからメモリリークじゃないとは言えない
逆にRustの場合は、leak()を適用した時点でそこは永久に解放されないのだから、既にメモリリークとも言える
もちろんそれで困らない時に意図的にリークを可能とするものなので、その機能や行為自体に問題はなく、そのプログラムの性質や環境や方針次第
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ならそれができるし保証される
ただしその基本に加えて融通を利かせることもできる
意図的にリークさせる(解放しない)こともできるしそれを使わないこともできる
意図的に循環参照を作ってリークさせることもできるしそれを避けるための手段も用意している
Rustならそれができるし保証される
ただしその基本に加えて融通を利かせることもできる
意図的にリークさせる(解放しない)こともできるしそれを使わないこともできる
意図的に循環参照を作ってリークさせることもできるしそれを避けるための手段も用意している
2024/01/30(火) 11:19:29.95ID:LgX6lgq1
それくらいできてくれないと習得に対して割に合わない
2024/01/30(火) 23:08:46.90ID:shd55QRp
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化が増えてきたな
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はスクリプトを書く程度ならいいけどプログラミングには不向き
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みたいな型推定しかされていなくて、自分の書いたコードですら訳がわからなくなる
他人の書いたライブラリを使うときはまるで魔法を使ってるかのようだ
ただ静的には何の変数を見ても(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があるだけじゃね。
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/アセンブラなど低水準言語はガべコレのランタイムが不要というアドバンテージがある
だからカーネル用途での需要が高い
C/C++/Rust/アセンブラなど低水準言語はガべコレのランタイムが不要というアドバンテージがある
だからカーネル用途での需要が高い
2024/02/01(木) 23:26:15.91ID:B5mxz6YT
Ruby もだいぶん長いことバイトコード化すらせずに木を辿るクソ遅い設計だったんだぞ。
でもなあ、使い分けといってもやっぱり慣れたらもうちょっと他の場所でも使いたくなるし、速度の要求も静的検証の要求も出てくる。
今の Ruby は Jit で速くなったし型チェックのサポートも本格的になった。
使い分けは要るがせずにすむならそれに越したこともないんよ。
でもなあ、使い分けといってもやっぱり慣れたらもうちょっと他の場所でも使いたくなるし、速度の要求も静的検証の要求も出てくる。
今の Ruby は Jit で速くなったし型チェックのサポートも本格的になった。
使い分けは要るがせずにすむならそれに越したこともないんよ。
2024/02/01(木) 23:26:33.20ID:8nChHaP8
2024/02/01(木) 23:33:40.62ID:B5mxz6YT
C の世界の文字列はゼロ終端やんか。
カーネルのインターフェイスにもその規約がそのまま現れてる。
内部的な設計は Rust 的にしつつも外向きのインターフェイスは変えないように置き換えるなら微妙な変換があらゆるところに出てくるよ。
まあそのへんは適当な専用フレームワークを確立させればたいしたことでもないが、そういう地味なことの積み重ねがいっぱい要るよ。
カーネルのインターフェイスにもその規約がそのまま現れてる。
内部的な設計は Rust 的にしつつも外向きのインターフェイスは変えないように置き換えるなら微妙な変換があらゆるところに出てくるよ。
まあそのへんは適当な専用フレームワークを確立させればたいしたことでもないが、そういう地味なことの積み重ねがいっぱい要るよ。
2024/02/02(金) 00:29:39.63ID:wYh3cvfE
C/C++からJavaってのはすげー移植しやすかったのよ
その利点はほとんどないと多くの人が気がつくのに20年もかかってしまったけど
その利点はほとんどないと多くの人が気がつくのに20年もかかってしまったけど
2024/02/02(金) 00:36:47.62ID:iO9F+zBT
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 ほどじゃないが。)
仕様として明文化してない挙動に依存するアプリケーションであっても今まで動いていたものが動かなくなるのは良くないという方針。
「守るべき仕様がはっきりしていれば」という前提がなりたたないから困るんだよ。
そしてそれはよくあること。
(Windows ほどじゃないが。)
仕様として明文化してない挙動に依存するアプリケーションであっても今まで動いていたものが動かなくなるのは良くないという方針。
「守るべき仕様がはっきりしていれば」という前提がなりたたないから困るんだよ。
そしてそれはよくあること。
2024/02/02(金) 01:40:32.02ID:fEMhv+T7
ときどき仕様も要件定義もはっきりせず発注者が把握できていないものの言語移植ケースがあるがその仕事を引き受けないほうがいい
バグらしきもの含めて現存コードと同じ動作をするよう求めてくるためムダな面倒に精神力が奪われる
バグらしきもの含めて現存コードと同じ動作をするよう求めてくるためムダな面倒に精神力が奪われる
2024/02/02(金) 11:04:47.16ID:VI0tbigR
仕様さえ守っていればいいみたいな考えに従うと最近はお役所系でもちらほら見るクローム以外を
排除する極右Webサイトが出来上がったりするんだろうな。発注側でも受注側でもね
排除する極右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を
たとえ同じ仕様のままでもやる意味が生じる
C/C++以外→Rust 高速化と省メモリ化
これらの恩恵があるため
安全でないことによるバグ発生で困っているならC/C++→Rustを
CPUメモリリソース削減が求められてあるならC/C++以外→Rustを
たとえ同じ仕様のままでもやる意味が生じる
2024/02/02(金) 12:27:55.82ID:ndCfDt6c
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作っちゃうなど無駄にヒープ使ってしまうケース
でも見抜きやすく手直しもしやすい
たとえば非常に単純な例でいうと元の部分strを返せば済むのにString作っちゃうなど無駄にヒープ使ってしまうケース
でも見抜きやすく手直しもしやすい
2024/02/02(金) 21:34:56.76ID:ya0nDY0I
Rust以外でよく見かけるのはど
こで書き換わっているかわかりにくく副作用や競合が心配なケース
Rustではデータ競合が起きないしグローバル変数も制限があるためこの手の類には悩まされない
こで書き換わっているかわかりにくく副作用や競合が心配なケース
Rustではデータ競合が起きないしグローバル変数も制限があるためこの手の類には悩まされない
2024/02/02(金) 22:24:30.77ID:BZlEVlBD
メリットが欲しいと思ったことはないな
新しいジャンルで唯一の選択肢なのでメリットの大きさを比較する必要がない
異なるジャンルでは比較する意味がわからない
新しいジャンルで唯一の選択肢なのでメリットの大きさを比較する必要がない
異なるジャンルでは比較する意味がわからない
2024/02/02(金) 22:27:27.20ID:ASeaHMD6
>>78
1周回ってString返したほうが良くなる状況もあるからそんなに単純じゃないよ
1周回ってString返したほうが良くなる状況もあるからそんなに単純じゃないよ
2024/02/02(金) 22:29:00.17ID:ASeaHMD6
>メリットが欲しいと思ったことはないな
誰もメリットが欲しいかどうかについては話してないよw
誰もメリットが欲しいかどうかについては話してないよw
2024/02/02(金) 22:34:00.04ID:ya0nDY0I
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()
前後のスペースを取り除く関数だけど当然Stringではなくstrの一部分を返す
Stringがほしい人はstr.trim().to_string()
2024/02/02(金) 22:52:35.98ID:SRUTe3RO
>>85
欲しい人にもそうでない人にも対応できるように&strがベストとは思わんか?
欲しい人にもそうでない人にも対応できるように&strがベストとは思わんか?
2024/02/02(金) 22:55:20.18ID:P1ceRtbI
2024/02/02(金) 23:19:45.92ID:BZlEVlBD
上書きされる前に別の場所にコピーした方が比較的安全というメリットが消えた
Rustが消した
Rustが消した
2024/02/02(金) 23:26:54.37ID:ya0nDY0I
>>88
Rust以外ではいつ書き換えられたりor解放されたりするかわからないから
安全なプログラミングということで(無駄になる恐れもあるけど)コピーしておく安全策をとることがあった
Rustでは知らぬ間に書き換えられたりor解放されたりすることはないので
安全策を保ったままで無駄なコピーが不要となった
Rust以外ではいつ書き換えられたりor解放されたりするかわからないから
安全なプログラミングということで(無駄になる恐れもあるけど)コピーしておく安全策をとることがあった
Rustでは知らぬ間に書き換えられたりor解放されたりすることはないので
安全策を保ったままで無駄なコピーが不要となった
2024/02/02(金) 23:26:59.82ID:9Dc3A0qD
Stringを使うことで無駄に専有されるヒープメモリはそこまで悪に感じないわ
カーネル作ってるわけでも競技やってるわけでもないんだったらね
可読性のために型を統一させるほうを優先する
カーネル作ってるわけでも競技やってるわけでもないんだったらね
可読性のために型を統一させるほうを優先する
2024/02/02(金) 23:34:55.21ID:v5+jJWMk
2024/02/03(土) 00:06:15.17ID:zqTPQxFe
>>90
そのためにムダにto_string()やそのclone()をするのは間違い
他の言語やスクリプト言語ですらそんな酷いことは行われずにコピーオンライトやインターン化でムダを防いでいる
Rustではまずは&strで行ける範囲は&strで行き次にCow併用そして同じ中身のStringが複数できるならstring_cacheなどでインターン化など
そのためにムダに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に固執する必要はない
無駄なヒープアロケーションは増えるけど違う観点の無駄を削減してる
トレードオフだよ
型を統一するって話はよくわからんけど
アロケーションコストが全く問題にならない状況であれば&strに固執する必要はない
無駄なヒープアロケーションは増えるけど違う観点の無駄を削減してる
トレードオフだよ
型を統一するって話はよくわからんけど
2024/02/03(土) 00:41:39.18ID:26gTKyDM
そこ気にしないなら普通にスクリプト言語でも使っとけば良いと思うよ
2024/02/03(土) 00:44:03.79ID:zqTPQxFe
2024/02/03(土) 05:44:40.82ID:/t14gmUC
>>96
そりゃベストはそうだろうけどさ…
c++で言うchar型で良いところをわざわざstdのStringを使うなって話でしょ?
動的メモリ確保になってようがその程度の誤差くらい動けばどっちでもいいわ…
そりゃベストはそうだろうけどさ…
c++で言うchar型で良いところをわざわざstdのStringを使うなって話でしょ?
動的メモリ確保になってようがその程度の誤差くらい動けばどっちでもいいわ…
2024/02/03(土) 06:03:57.16ID:HSW3HPjS
2024/02/03(土) 06:28:46.54ID:zqTPQxFe
100デフォルトの名無しさん
2024/02/03(土) 06:58:55.64ID:SxNvW1DJ こだわりの強い人がおるなあ
101デフォルトの名無しさん
2024/02/03(土) 07:31:56.62ID:0zMBHAmc sliceやstrですむのにVecやStringを使ってしまう人はlifetime parameterを習得できていなくて使えこなせないからだと思うよ
structやfnでlifetime parameterを付けたことのない初心者に多いね
structやfnでlifetime parameterを付けたことのない初心者に多いね
102デフォルトの名無しさん
2024/02/03(土) 07:36:46.05ID:Sa0HPxlU こういうふうに面倒くさい人がRust使いには多いから普及しないんだろうなあ
アルゴリズムとデータ構造の分野からみてもクッソどうでもいい議論だよ
アルゴリズムとデータ構造の分野からみてもクッソどうでもいい議論だよ
103デフォルトの名無しさん
2024/02/03(土) 07:41:20.05ID:0zMBHAmc >>102
アルゴリズムとデータ構造の一番の基本が無駄なコピーをしないこと
アルゴリズムとデータ構造の一番の基本が無駄なコピーをしないこと
104デフォルトの名無しさん
2024/02/03(土) 09:16:17.07ID:EvhZrc0+ strで返せるがあえてStringで返すと良い具体例を出せばいいのではと思った。
105デフォルトの名無しさん
2024/02/03(土) 11:13:51.22ID:26gTKyDM 富豪的プログラミングしたいならrustは向いてないよ
普通にpythonで十分
普通にpythonで十分
106デフォルトの名無しさん
2024/02/03(土) 11:17:22.51ID:3G/0wdmC でもPythonのDjangoは遅くてゴミじゃん
省メモリ最速のWebアプリ作るならRust一択だわ
省メモリ最速のWebアプリ作るならRust一択だわ
107デフォルトの名無しさん
2024/02/03(土) 11:17:53.18ID:JbxU5Bja 例えばsplitみたいなのはstrで返せるけど、それを大量に呼んで受け側でto_stringをつける場合、
コードがto_stringだらけで見づらくなるとかはあるかな
そういう時にsplit_to_stringみたいな名前でString返すようにしたりはするけど
自分の場合、どっちかっていうとパフォーマンス云々より関数名から内部でアロケーションが連想されるかどうかを重視してる気はする
コードがto_stringだらけで見づらくなるとかはあるかな
そういう時にsplit_to_stringみたいな名前でString返すようにしたりはするけど
自分の場合、どっちかっていうとパフォーマンス云々より関数名から内部でアロケーションが連想されるかどうかを重視してる気はする
108デフォルトの名無しさん
2024/02/03(土) 11:24:32.59ID:e0i4PPZm rustでwebアプリなんてコストかかりすぎでは?ふつーにgoかjava/kotlinかc#で作ればいいじゃん
109デフォルトの名無しさん
2024/02/03(土) 11:28:03.29ID:26gTKyDM >>104
ないでしょ
少なくともその関数側で判断できるものではない
帰ってきた文字列をどうするかは使う側が決める
これはrustに限った話ではなくプログラミングのお作法の話
文字列を変更したいという意図で所有権を持った文字列を作りたいならto_ownedすべきだし
そうでないならライフタイムを意識してそのまま使えばよろしい
C/C++でも全く同じ話よ
C++ならstring_viewを返す
そこであえてstringを返す意味はライブラリ提供者側にはない
例えば10000回のループの中でそのような関数が呼ばれたらどうなるか?
恐ろしいことになる
C/C++だと常にそういうことを考えてる
pythonとかだと全部stringだから意識してないのだろうけどさ
本来は意味のないアロケーションであることが多い
ないでしょ
少なくともその関数側で判断できるものではない
帰ってきた文字列をどうするかは使う側が決める
これはrustに限った話ではなくプログラミングのお作法の話
文字列を変更したいという意図で所有権を持った文字列を作りたいならto_ownedすべきだし
そうでないならライフタイムを意識してそのまま使えばよろしい
C/C++でも全く同じ話よ
C++ならstring_viewを返す
そこであえてstringを返す意味はライブラリ提供者側にはない
例えば10000回のループの中でそのような関数が呼ばれたらどうなるか?
恐ろしいことになる
C/C++だと常にそういうことを考えてる
pythonとかだと全部stringだから意識してないのだろうけどさ
本来は意味のないアロケーションであることが多い
110デフォルトの名無しさん
2024/02/03(土) 11:32:33.77ID:XsYnyWq4 >>107
大量であっても&strのままでよいものはString化しない
String化が避けられない場合でも大量ならばイテレータで処理してるはずなので.into()の数は少ないはず
いずれの場合でも関数は&strを返せばすむ
大量であっても&strのままでよいものはString化しない
String化が避けられない場合でも大量ならばイテレータで処理してるはずなので.into()の数は少ないはず
いずれの場合でも関数は&strを返せばすむ
111デフォルトの名無しさん
2024/02/03(土) 11:33:55.72ID:AHA4uyfa 正しいことが必ずしも正義とはならない、とだけ言っとくわ
112デフォルトの名無しさん
2024/02/03(土) 11:36:04.38ID:XsYnyWq4113デフォルトの名無しさん
2024/02/03(土) 11:47:22.41ID:TZcb9n30 rustあんま使ってない人だけど、strはImmutableでstringはMutableなんでしょ?
文字列配列を柔軟に扱いたいときだけstringで色々して、データを受け渡しするときは当然strを使うのがモラルってもんでしょ
immutable_stringはよく知らん
文字列配列を柔軟に扱いたいときだけstringで色々して、データを受け渡しするときは当然strを使うのがモラルってもんでしょ
immutable_stringはよく知らん
114デフォルトの名無しさん
2024/02/03(土) 11:50:08.77ID:3gDommQf 今現在Rustが実際に多く使われてる分野って、スクリプト言語の下まわり、ライブラリ高速化だよね
だからそれはWeb用だと言われたらまぁそう
だからそれはWeb用だと言われたらまぁそう
115デフォルトの名無しさん
2024/02/03(土) 11:51:38.36ID:gN1hlXLs116デフォルトの名無しさん
2024/02/03(土) 11:53:33.66ID:gN1hlXLs 単なるWebサイトの演算処理の補助用途とWebアプリ用途を一緒にしてほしくない
全然違うねん
全然違うねん
117デフォルトの名無しさん
2024/02/03(土) 12:03:32.16ID:XsYnyWq4 >>114>>115
Rustの利用で最も多いのは
Webサーバーサイド・バックエンド・クラウド
https://gihyo.jp/assets/images/article/2022/09/rust-monthly-topics/in_what_technology_domain_is_Rust_used_at_your_company.png
>>116
Webアプリのサーバーサイドとして使われています
Rustの利用で最も多いのは
Webサーバーサイド・バックエンド・クラウド
https://gihyo.jp/assets/images/article/2022/09/rust-monthly-topics/in_what_technology_domain_is_Rust_used_at_your_company.png
>>116
Webアプリのサーバーサイドとして使われています
118デフォルトの名無しさん
2024/02/03(土) 12:09:03.48ID:3gDommQf■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 ★2 [Hitzeschleier★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★2 [ぐれ★]
- 【中国局長】両国関係に「深刻な影響」 首相発言の撤回要求 [蚤の市★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★3 [BFU★]
- 【卓球】早田ひな、「総額100万スられた」「ずっと憧れていたスペインとイタリア…」ヨーロッパ旅行で悲劇 スリ被害を告白 [muffin★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 産経新聞「高市早苗の答弁さぁ……思慮が足りてなくね?官僚と詰めずに思いつきで話しているでしょ」 [175344491]
- 【実況】博衣こよりのえちえち歌枠🧪
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 【雑談】暇人集会所part18
- 高市早苗「支持者の理解を得られないので台湾発言を撤回できない」 [931948549]
- 外務省局長、よくわからないまま帰国へ [834922174]
