公式
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 part25
https://mevius.5ch.net/test/read.cgi/tech/1722354386/
ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.net/test/read.cgi/tech/1514107621/
探検
Rust part26
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2024/09/20(金) 22:18:38.38ID:c48cFuZJ579デフォルトの名無しさん
2024/11/01(金) 00:52:09.22ID:YZO2XE1P C言語で出来ることの大部分は実はRustでは出来ない。
580デフォルトの名無しさん
2024/11/01(金) 00:52:09.90ID:YZO2XE1P C言語で出来ることの大部分は実はRustでは出来ない。
581デフォルトの名無しさん
2024/11/01(金) 01:18:56.49ID:MT2bV/S9 longjmpとか?
582デフォルトの名無しさん
2024/11/01(金) 01:28:27.65ID:YZO2XE1P いや。ほとんどのデータ構造とアルゴリズムが、Rustでは効率良く使用不可能。
583デフォルトの名無しさん
2024/11/01(金) 01:34:16.91ID:3Qm9+gDD584デフォルトの名無しさん
2024/11/01(金) 03:23:25.98ID:eE8SKVMG rustのgcって型に情報はみ出てんじゃん
ローカルでしか使えんし
ローカルでしか使えんし
585デフォルトの名無しさん
2024/11/01(金) 05:52:59.83ID:0qsWeWDL RustにGC無いよ
586デフォルトの名無しさん
2024/11/01(金) 08:50:35.34ID:wlON8pP2 >>579
激遅でいいんならRustで出来るだろ
激遅でいいんならRustで出来るだろ
587デフォルトの名無しさん
2024/11/01(金) 09:12:07.99ID:gzsDik24 libcクレート使えば、CとそっくりのRustプログラムできるでしょ
588デフォルトの名無しさん
2024/11/01(金) 11:20:36.22ID:7FgA9x/Y589デフォルトの名無しさん
2024/11/01(金) 18:44:17.66ID:DQt7FtoO >>579
名前空間が無いからってマクロで識別子を生成するのはもう勘弁してください
名前空間が無いからってマクロで識別子を生成するのはもう勘弁してください
590デフォルトの名無しさん
2024/11/01(金) 18:49:49.50ID:I9IxltIy GCついてるRustが欲しい
rustのtraitシステムは好きだが静的メモリ安全性まではいらない
rustのtraitシステムは好きだが静的メモリ安全性まではいらない
591デフォルトの名無しさん
2024/11/01(金) 19:00:04.84ID:0wzgx2ON592デフォルトの名無しさん
2024/11/01(金) 19:25:45.68ID:FTeJ4swx まともなGCライブラリなんかないよ
おとなしくRustらしいコードを書くか、Rustをやめるかだ
おとなしくRustらしいコードを書くか、Rustをやめるかだ
593デフォルトの名無しさん
2024/11/01(金) 21:49:04.02ID:lqBEgicJ594デフォルトの名無しさん
2024/11/01(金) 22:49:51.10ID:XWaTPxZT >>592
だよな
だよな
595デフォルトの名無しさん
2024/11/01(金) 23:32:34.62ID:Y/NQYWW3 >>593
メモリリークするかどうかはOSやアロケータ依存
メモリリークするかどうかはOSやアロケータ依存
596デフォルトの名無しさん
2024/11/01(金) 23:58:44.68ID:zgZjB7HD597デフォルトの名無しさん
2024/11/02(土) 00:41:46.39ID:3NvQMTDb598デフォルトの名無しさん
2024/11/02(土) 01:36:59.35ID:tAgBVlMI Tと&TとRc<T>を区別できるのは静的型付けの成果なんだよな
LispがすべてをGCの対象にするのは型を宣言しないからだし
それに、副作用のある関数とない関数を「型」で区別できなかったから
すべてが純粋な関数だったら (動的型でも) 分かりやすいという話になった
LispがすべてをGCの対象にするのは型を宣言しないからだし
それに、副作用のある関数とない関数を「型」で区別できなかったから
すべてが純粋な関数だったら (動的型でも) 分かりやすいという話になった
599デフォルトの名無しさん
2024/11/02(土) 04:46:39.55ID:3NvQMTDb 成果でもなんでもない
言語的にそうせざるをえないだけ
型で区別するのはいいことばかりじゃない
言語的にそうせざるをえないだけ
型で区別するのはいいことばかりじゃない
600デフォルトの名無しさん
2024/11/02(土) 07:03:08.78ID:tAgBVlMI 技術の話をたまにしかしない人達に
技術は善いことばかりじゃないと説教するのは的外れすぎるだろ
技術は善いことばかりじゃないと説教するのは的外れすぎるだろ
601デフォルトの名無しさん
2024/11/02(土) 07:06:40.35ID:3NvQMTDb 技術的な話をしてるから的外れ
型の弊害の経験ないからピンとこない
型の弊害の経験ないからピンとこない
602デフォルトの名無しさん
2024/11/02(土) 09:53:55.89ID:+GKIPsT4 enumで解消
603デフォルトの名無しさん
2024/11/02(土) 14:38:12.14ID:tAgBVlMI とりあえず両極端を経験してみるのはじつは拙速で、巧遅でも清書でもない
どっちも弊害があると語る第三者が最も遅いのだ
どっちも弊害があると語る第三者が最も遅いのだ
604デフォルトの名無しさん
2024/11/02(土) 23:52:01.28ID:aIv/CPhG >>595
それはむしろ逆
freeを完全にすることでメモリリークを防ぐことはできない
freeはアロケータが管理するメモリバッファへ返還する動作しかしない
malloc/free交互にするたびにそのバッファをゼロにするためOSやその他システムへバッファを返還する非効率をしない
アロケータが管理するバッファはfree後も常に一定量が残っている
つまりバッファを完全にシステム側に返還する責務をfreeは持たないしfreeで実現は無理だ
そこは各システムが別の機構として責務を持っている
普通のOSならプロセス終了でバッファ含めて使用メモリ全体を自動解放することになる
組み込みシステムでもそのプログラム終了時に少なくともバッファ部分を解放する仕組みを持たなければならない
freeを忘れてもあるいはfreeせぬまま異常終了となってもその仕組みによりメモリリークは起きない
それはむしろ逆
freeを完全にすることでメモリリークを防ぐことはできない
freeはアロケータが管理するメモリバッファへ返還する動作しかしない
malloc/free交互にするたびにそのバッファをゼロにするためOSやその他システムへバッファを返還する非効率をしない
アロケータが管理するバッファはfree後も常に一定量が残っている
つまりバッファを完全にシステム側に返還する責務をfreeは持たないしfreeで実現は無理だ
そこは各システムが別の機構として責務を持っている
普通のOSならプロセス終了でバッファ含めて使用メモリ全体を自動解放することになる
組み込みシステムでもそのプログラム終了時に少なくともバッファ部分を解放する仕組みを持たなければならない
freeを忘れてもあるいはfreeせぬまま異常終了となってもその仕組みによりメモリリークは起きない
605デフォルトの名無しさん
2024/11/03(日) 01:07:42.39ID:GP4mHnVt606デフォルトの名無しさん
2024/11/03(日) 08:19:11.87ID:OLDVpvrl まともなOSならfreeせずに終了しても問題が起こらないように作ってあるよ
そうしないと異常終了のようなケースでリークし続けることになるし
(古いものやマイナーなものも含めた全てのOSがそうだとは言い切れないけど)
その上でだけど、上記はOSの動作の問題であって、言語のルールとしては「mallocしたら対になるfreeを呼ぶこと」だろうから、自分の好みとしてはfreeをちゃんと呼ぶよう作りたい派
「OSが解放するから問題ない」というのは「プログラマが責任をサボっても問題は起こらない」という感じがしてて、行儀の良いコードでないように感じる
そうしないと異常終了のようなケースでリークし続けることになるし
(古いものやマイナーなものも含めた全てのOSがそうだとは言い切れないけど)
その上でだけど、上記はOSの動作の問題であって、言語のルールとしては「mallocしたら対になるfreeを呼ぶこと」だろうから、自分の好みとしてはfreeをちゃんと呼ぶよう作りたい派
「OSが解放するから問題ない」というのは「プログラマが責任をサボっても問題は起こらない」という感じがしてて、行儀の良いコードでないように感じる
607デフォルトの名無しさん
2024/11/03(日) 08:27:05.14ID:vgT2G1ym mallocしたら対になるfreeを呼ばずに終了するのはマナー違反
目上のOSに対して失礼に当たる
目上のOSに対して失礼に当たる
608デフォルトの名無しさん
2024/11/03(日) 08:32:32.56ID:muWl0Gle こういうやつに限って問題が起きると「想定外でした」と恥ずかしげもなく言うんだよな
609デフォルトの名無しさん
2024/11/03(日) 08:32:33.64ID:W/WQS3jI メモリリークが問題になるのは、むしろ終了させずに長期間稼働させ続ける場面でのことだと思うが…。
特に鯖とか医療機器・自動車組み込みなど、経済・人命に影響が大きい分野。
特に鯖とか医療機器・自動車組み込みなど、経済・人命に影響が大きい分野。
610デフォルトの名無しさん
2024/11/03(日) 08:37:43.84ID:vgT2G1ym >>609
そういう分野では、そもそも動的にメモリ確保しない
そういう分野では、そもそも動的にメモリ確保しない
611デフォルトの名無しさん
2024/11/03(日) 09:04:30.66ID:DnnuC4NT 動的確保をしないものもあればするものもある
自分の知ってる範囲が世の中の全てだと勘違いしないことだな
自分の知ってる範囲が世の中の全てだと勘違いしないことだな
612デフォルトの名無しさん
2024/11/03(日) 09:25:18.11ID:OLDVpvrl 医療機器や自動車ほど重要なものではないけど、自分の仕事だと組込みでも動的確保を使うよ
Windows EmbeddedやUbuntuようなOSが入ってるし、それなりのリソースがある環境での話だけど
「大きなバッファはプログラムの最初に1度だけ確保する」ことはするけど、それ以降のヒープ確保をしないとか、static領域のみを使うとかまではしてない
(Rustスレでいうのもなんだけど現状はC++)
一般化できる話かは分からないけど、例えばカメラを使う機器かつ複数種類のハードウェアを扱うプログラムなら動的確保は必要じゃない?
想定するカメラ画像のうち最も大きいサイズに合わせたメモリを静的確保する作りでも良いと思うけど、プログラム起動後にハードウェアに問い合わせて、それを元に必要分のバッファを確保する作りも多いと思う
Windows EmbeddedやUbuntuようなOSが入ってるし、それなりのリソースがある環境での話だけど
「大きなバッファはプログラムの最初に1度だけ確保する」ことはするけど、それ以降のヒープ確保をしないとか、static領域のみを使うとかまではしてない
(Rustスレでいうのもなんだけど現状はC++)
一般化できる話かは分からないけど、例えばカメラを使う機器かつ複数種類のハードウェアを扱うプログラムなら動的確保は必要じゃない?
想定するカメラ画像のうち最も大きいサイズに合わせたメモリを静的確保する作りでも良いと思うけど、プログラム起動後にハードウェアに問い合わせて、それを元に必要分のバッファを確保する作りも多いと思う
613デフォルトの名無しさん
2024/11/03(日) 10:22:36.62ID:e8fWHn4Q614デフォルトの名無しさん
2024/11/03(日) 11:21:00.89ID:wZ/A1hEq mallocが駄目ならsbrkを使えば良いじゃない。by マリー
615デフォルトの名無しさん
2024/11/03(日) 11:34:52.74ID:8jL1esrh > malloc/free交互にするたびにそのバッファをゼロにするためOSやその他システムへバッファを返還する非効率をしない
なんやこの悪文は
なんやこの悪文は
616デフォルトの名無しさん
2024/11/03(日) 11:49:46.99ID:kGU90lSm >>609-610
手術中にGC走り出したら困るもんなー
手術中にGC走り出したら困るもんなー
617デフォルトの名無しさん
2024/11/03(日) 11:52:19.67ID:kGU90lSm >>615
chatGPTに聴いて造らせたような文章だな
chatGPTに聴いて造らせたような文章だな
618デフォルトの名無しさん
2024/11/03(日) 13:59:19.14ID:yWge6Gp+ ChatGPTはそんな変な文を作らない。
619デフォルトの名無しさん
2024/11/03(日) 16:50:47.89ID:zQdSfX4F MS-DOSですら、free忘れようが何しようが、
プロセス終了時にちゃんとOSがプロセスが確保した
メモリーを解放してたよ。
プロセス終了時にちゃんとOSがプロセスが確保した
メモリーを解放してたよ。
620デフォルトの名無しさん
2024/11/03(日) 17:05:19.83ID:zQdSfX4F なんせ、MS-DOSのように「意味的には」ページングして無い場合には、
メモリー解放はOS目線で見れば簡単と言えば簡単だからね。
for ( プロセスが確保していたメモリーブロックを全て巡る ) {
(そのメモリーを解放);
}
みたいなロジックであって。
WindowsやLinuxのようなOSでは、ページングや色々なこと
してるから複雑だけど、それでもOSは頑張って解放するよ。
メモリー解放はOS目線で見れば簡単と言えば簡単だからね。
for ( プロセスが確保していたメモリーブロックを全て巡る ) {
(そのメモリーを解放);
}
みたいなロジックであって。
WindowsやLinuxのようなOSでは、ページングや色々なこと
してるから複雑だけど、それでもOSは頑張って解放するよ。
621デフォルトの名無しさん
2024/11/03(日) 17:20:04.38ID:X/+mpRk0 素人質問で大変恐縮ですが、CPU/GPUのファームウェアをrustで書くことは可能?
622デフォルトの名無しさん
2024/11/03(日) 17:46:00.06ID:OLDVpvrl >>613
>確実にメモリ不足が起こらないこと保証できるのそれ?
それは悪魔の証明に近くないか?
保証はできないけど、普通に使う分には使えてるものだよ
人命に関わるような分野ではない&長時間 (例えば24時間以上) 連続で動かす機器ではないという条件だけど
「組込みでは動的確保をしてはならない」と言うなら、例えば組込みJetsonなんて製品が世に存在するわけがないでしょ
あれはNVIDEAのGPUを積んでて、CUDAを使った処理などを行える機器だけど、組込み向けとして売られてる
GPUメモリの確保は当然動的確保になるわけで
>確実にメモリ不足が起こらないこと保証できるのそれ?
それは悪魔の証明に近くないか?
保証はできないけど、普通に使う分には使えてるものだよ
人命に関わるような分野ではない&長時間 (例えば24時間以上) 連続で動かす機器ではないという条件だけど
「組込みでは動的確保をしてはならない」と言うなら、例えば組込みJetsonなんて製品が世に存在するわけがないでしょ
あれはNVIDEAのGPUを積んでて、CUDAを使った処理などを行える機器だけど、組込み向けとして売られてる
GPUメモリの確保は当然動的確保になるわけで
623デフォルトの名無しさん
2024/11/03(日) 18:50:54.75ID:W/WQS3jI >>621
デバイスドライバって意味なら書ける。
https://qiita.com/lalafell/items/be50f696a35fc6dbce62
win以外
ラズパイのキーボードファームウェアの記事。
https://zenn.dev/nazo6/articles/keyball-embassy-rp2040
こんな調子でCPUやGPUも理論的には行けるはず。
Googleはある程度道筋経ててるみたいね。
C/C++からRustへ:Googleが示すファームウェア進化の道筋
https://xenospectrum.com/google-revamps-firmware-with-rust/
Googleは最近、Android仮想化フレームワークの保護された仮想マシン用ファームウェアをRustプログラミング言語で書き直し、その経験をもとに他の開発者にも、“メモリセーフ”な言語である、Rustへの移行を強く推奨し、ブログでその詳細を解説している。
デバイスドライバって意味なら書ける。
https://qiita.com/lalafell/items/be50f696a35fc6dbce62
win以外
ラズパイのキーボードファームウェアの記事。
https://zenn.dev/nazo6/articles/keyball-embassy-rp2040
こんな調子でCPUやGPUも理論的には行けるはず。
Googleはある程度道筋経ててるみたいね。
C/C++からRustへ:Googleが示すファームウェア進化の道筋
https://xenospectrum.com/google-revamps-firmware-with-rust/
Googleは最近、Android仮想化フレームワークの保護された仮想マシン用ファームウェアをRustプログラミング言語で書き直し、その経験をもとに他の開発者にも、“メモリセーフ”な言語である、Rustへの移行を強く推奨し、ブログでその詳細を解説している。
624デフォルトの名無しさん
2024/11/03(日) 18:52:21.77ID:XxnHrPnR Linuxなんて勝手にプロセス殺して知らんぷりする糞OSですし
625デフォルトの名無しさん
2024/11/03(日) 18:56:19.56ID:W/WQS3jI626デフォルトの名無しさん
2024/11/03(日) 19:43:19.04ID:X/+mpRk0 >>623
ありがとうございます
ありがとうございます
627デフォルトの名無しさん
2024/11/03(日) 20:51:25.90ID:e8fWHn4Q628デフォルトの名無しさん
2024/11/03(日) 21:09:49.26ID:X/+mpRk0 Staticこそ至高
629デフォルトの名無しさん
2024/11/03(日) 21:34:55.27ID:OLDVpvrl >>627
書いた通り、大きなメモリ (主に画像用) は最初に必要分を確保して使い回してるし、当然そのサイズは機器の搭載RAMサイズを考慮しているよ
処理によっては一時的なメモリ確保は生じるけど、適切に解放してるしメモリリークしてるわけでもない
組込みって分野が広いし、あくまでこれは自分の分野の話だというのは念頭においてくれ
メモリが32KBしかないマイコンと、8GBや16GBのメモリを積んでる機器とでは条件が全然違う
リソースが限られていたり、24時間360日動くような機器なら動的確保を避けろというのはその通りだと思う
書いた通り、大きなメモリ (主に画像用) は最初に必要分を確保して使い回してるし、当然そのサイズは機器の搭載RAMサイズを考慮しているよ
処理によっては一時的なメモリ確保は生じるけど、適切に解放してるしメモリリークしてるわけでもない
組込みって分野が広いし、あくまでこれは自分の分野の話だというのは念頭においてくれ
メモリが32KBしかないマイコンと、8GBや16GBのメモリを積んでる機器とでは条件が全然違う
リソースが限られていたり、24時間360日動くような機器なら動的確保を避けろというのはその通りだと思う
630デフォルトの名無しさん
2024/11/03(日) 21:46:04.58ID:OLDVpvrl >24時間360日
これは365日の誤字
これは365日の誤字
631デフォルトの名無しさん
2024/11/03(日) 22:22:34.29ID:etptyyzP >>607
普通のプログラマーが対象とする普通のOS環境においてfree()とOSは関連がない
そしてfree()せずにプログラムが終了してもメモリリークは起きない
関係するのプログラム動作中にメモリの再利用ができないことでメモリを使い果たさないかどうかのみだ
つまりGCに頼る言語でGCが起きる以前にプログラム実行が終わってしまうようなタイプのプログラムなら同様にfree()を行わなくても構わない
起動時にまとめてメモリを確保して終了時まで放さないタイプでもfree()を行なう必要はない
free()を行なわないことでプログラミングをより平易かつ安全にすることができる
普通のプログラマーが対象とする普通のOS環境においてfree()とOSは関連がない
そしてfree()せずにプログラムが終了してもメモリリークは起きない
関係するのプログラム動作中にメモリの再利用ができないことでメモリを使い果たさないかどうかのみだ
つまりGCに頼る言語でGCが起きる以前にプログラム実行が終わってしまうようなタイプのプログラムなら同様にfree()を行わなくても構わない
起動時にまとめてメモリを確保して終了時まで放さないタイプでもfree()を行なう必要はない
free()を行なわないことでプログラミングをより平易かつ安全にすることができる
632デフォルトの名無しさん
2024/11/03(日) 22:34:17.00ID:tj8/H5Bl 結論:
複オジが対象としているタイプのプログラムではfree()を行なわないことでプログラミングをより平易かつ安全にすることができる
以上。
複オジが対象としているタイプのプログラムではfree()を行なわないことでプログラミングをより平易かつ安全にすることができる
以上。
633デフォルトの名無しさん
2024/11/03(日) 22:50:04.49ID:JgJhJeSd freeしないコードのコードレビューはしたくないな
こだわりが強そうだし、本当に安全なのか確かめるのも大変
こだわりが強そうだし、本当に安全なのか確かめるのも大変
634デフォルトの名無しさん
2024/11/03(日) 23:14:53.65ID:/IbdFPbo635デフォルトの名無しさん
2024/11/04(月) 01:39:27.51ID:nRSMDwEy freeを使ってないがreallocは使ってるみたいな
敵視してない敵がいる
つまり敵味方は自由に選べないので、同意してないコストを強制されることもある
敵視してない敵がいる
つまり敵味方は自由に選べないので、同意してないコストを強制されることもある
636デフォルトの名無しさん
2024/11/04(月) 02:53:23.37ID:Bn72OgcT Rustの話を、しよう
637デフォルトの名無しさん
2024/11/04(月) 14:38:06.42ID:dJ1Yp7fe638デフォルトの名無しさん
2024/11/04(月) 14:59:59.47ID:IyJSMCPH お話してから、しましょう
639デフォルトの名無しさん
2024/11/04(月) 16:28:27.25ID:613UlU6B >>637
いや俺はそいつとは違うが絶対安全なのは事実
いや俺はそいつとは違うが絶対安全なのは事実
640デフォルトの名無しさん
2024/11/04(月) 17:33:20.85ID:Jcd4tSdQ 何が絶対安全なの?
641デフォルトの名無しさん
2024/11/04(月) 17:41:55.51ID:P+qabS46 >>639
いや完全に脳みそ複オジでしょ
いや完全に脳みそ複オジでしょ
642デフォルトの名無しさん
2024/11/04(月) 18:04:13.97ID:mBJjb45a >>566
亀レスだけどアドレスにリスナーをバインドすればnetstat -aの結果にLISTEN状態で出てくるぞ
亀レスだけどアドレスにリスナーをバインドすればnetstat -aの結果にLISTEN状態で出てくるぞ
643デフォルトの名無しさん
2024/11/04(月) 18:21:55.56ID:613UlU6B644デフォルトの名無しさん
2024/11/04(月) 18:36:09.56ID:+Zn5uplp そんなイキれるほど頭のいいこと言ってないから
freeしなきゃ安全!
はずいわ
freeしなきゃ安全!
はずいわ
645デフォルトの名無しさん
2024/11/04(月) 18:36:26.40ID:0co8NUe7 そりゃ安全ではあるけど別の大問題を生むし……
わざわざそれを言ってるのって「Cであえて解放しないようにするとC++/RustでRAIIに任せるのと比べて(誤差レベルで)早い」って意見に対してくだらない意地張ってるだけじゃないですか
わざわざそれを言ってるのって「Cであえて解放しないようにするとC++/RustでRAIIに任せるのと比べて(誤差レベルで)早い」って意見に対してくだらない意地張ってるだけじゃないですか
646デフォルトの名無しさん
2024/11/04(月) 18:45:22.71ID:UYP+oEN0 >>643
#include <stdio.h>
int main() {
int x;
printf("%d\n", x);
return 0;
}
↑freeしてないけどメモリ安全ではないよ
何が安全なのか知らんけど
#include <stdio.h>
int main() {
int x;
printf("%d\n", x);
return 0;
}
↑freeしてないけどメモリ安全ではないよ
何が安全なのか知らんけど
647デフォルトの名無しさん
2024/11/04(月) 19:51:08.05ID:3WEWZAvC648デフォルトの名無しさん
2024/11/04(月) 19:52:09.07ID:3WEWZAvC >>645
俺は寿命が短時間なのか想定されるプログラムで敢えてfreeしないアプローチを取るのは賛成やが
俺は寿命が短時間なのか想定されるプログラムで敢えてfreeしないアプローチを取るのは賛成やが
649デフォルトの名無しさん
2024/11/04(月) 19:52:59.06ID:3WEWZAvC >>646
この本ではdangling pointerのエラーについては発生しないこどメモリ安全だと主張している
この本ではdangling pointerのエラーについては発生しないこどメモリ安全だと主張している
650デフォルトの名無しさん
2024/11/04(月) 21:16:42.38ID:nRSMDwEy RAIIより単純なアプローチがもしあればRAIIは非科学的だぞという
このオッカムの剃刀自体が、科学的な実験やデータを必要としない哲学の思想だ
このオッカムの剃刀自体が、科学的な実験やデータを必要としない哲学の思想だ
651デフォルトの名無しさん
2024/11/04(月) 21:43:03.80ID:C+a/rILf >>636
Rustでももちろん意図的に解放しない有用な方法を公式にサポートしている
これはヒープ領域の一部を解放しないことにして例えばスタティック領域のようにみなすことができる
つまりライフタイムを'staticにできるため構造体メンバーに制約なく組み込めて関数からも自由に返せるようになる
この機能はsafeなRustの標準ライブラリとして提供されている
Rustでももちろん意図的に解放しない有用な方法を公式にサポートしている
これはヒープ領域の一部を解放しないことにして例えばスタティック領域のようにみなすことができる
つまりライフタイムを'staticにできるため構造体メンバーに制約なく組み込めて関数からも自由に返せるようになる
この機能はsafeなRustの標準ライブラリとして提供されている
652デフォルトの名無しさん
2024/11/04(月) 22:47:38.24ID:pw9M2oNL >>649
そりゃ「確保した参照を絶対解放しない言語」ならdangling pointerは発生しないだろ
でもC言語はそうじゃないしはfreeしなくてもdangling pointerは発生するから全然安全じゃない
結局「freeしなければ絶対安全」の正体は
「freeしなければfree起因によるdangling pointerは発生しない」というだけ
当たり前すぎて泣けてくる
そりゃ「確保した参照を絶対解放しない言語」ならdangling pointerは発生しないだろ
でもC言語はそうじゃないしはfreeしなくてもdangling pointerは発生するから全然安全じゃない
結局「freeしなければ絶対安全」の正体は
「freeしなければfree起因によるdangling pointerは発生しない」というだけ
当たり前すぎて泣けてくる
653デフォルトの名無しさん
2024/11/04(月) 23:29:15.46ID:nRSMDwEy 政治起因による制約さえ無くなれば経済が偉大になるという謎理論があるからな
654デフォルトの名無しさん
2024/11/05(火) 22:33:43.60ID:foggTYfW655デフォルトの名無しさん
2024/11/05(火) 23:42:46.08ID:fXJW6BJV &'static mut Tに何か代入したらどうなるの
代入前の値にdropが定義されてたら呼び出される?
それは実質的にfreeしてるのと同じなのでは
代入前の値にdropが定義されてたら呼び出される?
それは実質的にfreeしてるのと同じなのでは
656デフォルトの名無しさん
2024/11/06(水) 00:29:29.78ID:40oev9+T >>655
デストラクタはその型の値に対して行われるものであって
一般的にはヒープメモリとは関係がない
たまたまその型(の一部)がヒープメモリを所有すれば当然解放される
一方で&'static mut Tの元はBox<T>そして&'static mut [T]の元はVec<T>
つまり解放されないのはBoxやVecという入れ物でありTの話ではない
デストラクタはその型の値に対して行われるものであって
一般的にはヒープメモリとは関係がない
たまたまその型(の一部)がヒープメモリを所有すれば当然解放される
一方で&'static mut Tの元はBox<T>そして&'static mut [T]の元はVec<T>
つまり解放されないのはBoxやVecという入れ物でありTの話ではない
657デフォルトの名無しさん
2024/11/06(水) 07:25:52.71ID:wYgAHnia 構造体メンバーに!Copyを入れれば制約が生じる
Box<T>が!Copyだとしても&'static TはCopyだから制約がなくなった
ように見えるが、ヒープとか解放とかいうクソどうでもいい条件が増えてるんだよな
Box<T>が!Copyだとしても&'static TはCopyだから制約がなくなった
ように見えるが、ヒープとか解放とかいうクソどうでもいい条件が増えてるんだよな
658デフォルトの名無しさん
2024/11/06(水) 08:04:15.27ID:40oev9+T &Tにスタック領域かヒープ領域かスタティック領域かの区別はなく意識することさえ必要ない
唯一の制約はライフタイムであり
staticでない&'a Tは所有者である'a Tより延命できない制約がある
一方&'static Tはプログラム終了時まで永遠に生きるため制約がない
唯一の制約はライフタイムであり
staticでない&'a Tは所有者である'a Tより延命できない制約がある
一方&'static Tはプログラム終了時まで永遠に生きるため制約がない
659デフォルトの名無しさん
2024/11/06(水) 23:12:54.20ID:wYgAHnia 同時に意識しろとはいわないが
少しずつでも森羅万象を意識しないと客観的にならない
少しずつでも森羅万象を意識しないと客観的にならない
660デフォルトの名無しさん
2024/11/07(木) 22:29:40.21ID:/292LLXT >森羅万象
いわばまさに、だーらば
いわばまさに、だーらば
661デフォルトの名無しさん
2024/11/07(木) 22:47:47.58ID:SSxPh9YO static変数へ入れてしまう場合もプログラムの最後までヒープ解放しないよね
例えば以下は正規表現わざわざ使うまでもない簡単な例だけど
ヒープ領域を確保して内部に持つRegexを何度も作り直すムダを避けるためにstaticに持つよくあるパターンとか
それを解放するきっかけは最後までやって来ないよね
fn yyyymmdd(s: &str) -> Option<(u32, u32, u32)> {
const YYYYMMDD: &str = r"(\d\d\d\d)/(\d\d)/(\d\d)";
static RE: LazyLock<Regex> = LazyLock::new(|| Regex::new(YYYYMMDD).unwrap());
if let Some((_, [year, month, day])) = RE.captures(s).map(|caps| caps.extract()) {
let year = year.parse().ok()?;
let month = month.parse().ok()?;
let day = day.parse().ok()?;
Some((year, month, day))
} else {
None
}
}
例えば以下は正規表現わざわざ使うまでもない簡単な例だけど
ヒープ領域を確保して内部に持つRegexを何度も作り直すムダを避けるためにstaticに持つよくあるパターンとか
それを解放するきっかけは最後までやって来ないよね
fn yyyymmdd(s: &str) -> Option<(u32, u32, u32)> {
const YYYYMMDD: &str = r"(\d\d\d\d)/(\d\d)/(\d\d)";
static RE: LazyLock<Regex> = LazyLock::new(|| Regex::new(YYYYMMDD).unwrap());
if let Some((_, [year, month, day])) = RE.captures(s).map(|caps| caps.extract()) {
let year = year.parse().ok()?;
let month = month.parse().ok()?;
let day = day.parse().ok()?;
Some((year, month, day))
} else {
None
}
}
662デフォルトの名無しさん
2024/11/08(金) 07:27:08.10ID:6g9EuKad RustにJAVA厨が流れ着いてるのか
663デフォルトの名無しさん
2024/11/08(金) 08:29:50.38ID:b6NZ3Dbv }
else {
else {
664デフォルトの名無しさん
2024/11/08(金) 10:14:50.92ID:3hecOEMV 汚ジコード乙
665デフォルトの名無しさん
2024/11/08(金) 12:15:41.38ID:F9yTI1pl 毎回初期化を避けるためにstatic←JAVA脳
ローカル変数やauto変数にいちいちstatic描かなくても一回しか初期化されない←関数脳
ローカル変数やauto変数にいちいちstatic描かなくても一回しか初期化されない←関数脳
666デフォルトの名無しさん
2024/11/08(金) 12:28:38.12ID:spBkjUqU >>665
JavaだけでなくCでもRustでもどの言語でも同じだろ
JavaだけでなくCでもRustでもどの言語でも同じだろ
667デフォルトの名無しさん
2024/11/08(金) 15:26:29.46ID:/u/AnA38 regex literalのある言語を知らないとか原始人かよw
668デフォルトの名無しさん
2024/11/08(金) 17:32:32.77ID:3z6JS0FZ >>667
regex literalのある言語でもパターンが変数により変わる場合は別途生成になる
その場合に正規表現からオートマトンへのコンパイル結果をキャッシュする責務はプログラマー
それを何らかのオブジェクトに入れて毎回持ち回るのか避けてstatic変数などに入れてしまうかの話ではないか
regex literalのある言語でもパターンが変数により変わる場合は別途生成になる
その場合に正規表現からオートマトンへのコンパイル結果をキャッシュする責務はプログラマー
それを何らかのオブジェクトに入れて毎回持ち回るのか避けてstatic変数などに入れてしまうかの話ではないか
669デフォルトの名無しさん
2024/11/08(金) 18:37:15.71ID:cYDKHcpz670デフォルトの名無しさん
2024/11/08(金) 19:37:52.69ID:/iMoAsCH 今確信したけどここまでの流れを見て断言するけど
Rustが主流の言語になることはないわな
Rustが主流の言語になることはないわな
671デフォルトの名無しさん
2024/11/08(金) 20:12:43.27ID:3z6JS0FZ >>669
正規表現パターンに変数やその式を使ったことないのかい?
それら式を用いるとコンパイル結果を自分でキャッシュ管理しなければならなくなる
具体的にはregex literalの有無で
(1) 無い言語の例としてPythonは効率化のためにはre.compile(パターン, ...)結果のキャッシュが必要
(2) 有る言語の例としてRubyは式を含む場合のみ毎回評価し直すためキャッシュが必要
(3) 有るがパターンに式を書けない言語の例としてJavaScriptはnew RegExp(パターン, ...)結果のキャッシュが必要
いずれもregex literalの有無に関わらずコンパイル結果のキャッシュが必要となる
正規表現パターンに変数やその式を使ったことないのかい?
それら式を用いるとコンパイル結果を自分でキャッシュ管理しなければならなくなる
具体的にはregex literalの有無で
(1) 無い言語の例としてPythonは効率化のためにはre.compile(パターン, ...)結果のキャッシュが必要
(2) 有る言語の例としてRubyは式を含む場合のみ毎回評価し直すためキャッシュが必要
(3) 有るがパターンに式を書けない言語の例としてJavaScriptはnew RegExp(パターン, ...)結果のキャッシュが必要
いずれもregex literalの有無に関わらずコンパイル結果のキャッシュが必要となる
672デフォルトの名無しさん
2024/11/08(金) 20:55:31.49ID:Me1tPYCI ものによるが暗黙にキャッシュする (プログラマが保存しないでよい) 言語処理系は存在するよ。
673デフォルトの名無しさん
2024/11/08(金) 21:02:51.24ID:yNVczeuC むしろ、コンパイルしてないほう(Arc<String>)をキャッシュする
そのStringが生きている間だけコンパイル結果を生かしておく
キャッシュが必要ならArcが必要と判明したせいでGC界隈の常識が覆された
そのStringが生きている間だけコンパイル結果を生かしておく
キャッシュが必要ならArcが必要と判明したせいでGC界隈の常識が覆された
674デフォルトの名無しさん
2024/11/08(金) 21:23:43.02ID:3z6JS0FZ675デフォルトの名無しさん
2024/11/08(金) 21:40:49.75ID:Me1tPYCI >>674
いや、キャッシュというかいわゆるメモ化かな。
入力される値は変わりうるが、同じ入力に対しては同じ結果であることは保証される (かつ現実的な用途では同じ値が入力される可能性が高い) ので値とセットで記憶しておく方法で十分に処理コストを減らせる。
いや、キャッシュというかいわゆるメモ化かな。
入力される値は変わりうるが、同じ入力に対しては同じ結果であることは保証される (かつ現実的な用途では同じ値が入力される可能性が高い) ので値とセットで記憶しておく方法で十分に処理コストを減らせる。
676デフォルトの名無しさん
2024/11/08(金) 21:58:06.73ID:HF5jYlyP 全く異なるユースケースを持ち出してまで
「どの言語も同じ」ということにしたいらしい
「どの言語も同じ」ということにしたいらしい
677デフォルトの名無しさん
2024/11/08(金) 22:27:14.73ID:Jmd1EJmL >>674
Pythonのreなら直近の512個まで自動的にキャッシュされてるよ
Pythonのreなら直近の512個まで自動的にキャッシュされてるよ
678デフォルトの名無しさん
2024/11/08(金) 22:28:21.24ID:Me1tPYCI ワンライナーみたいな使い方をする言語では (結果的に無駄になってでも) 暗黙に色々やっといてくれるほうが便利ってこともあるからどんな言語でも Rust と同じ方式のはずとは言えんわな。
679デフォルトの名無しさん
2024/11/08(金) 23:01:18.69ID:spBkjUqU■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 ★2 [Hitzeschleier★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★2 [ぐれ★]
- 【中国局長】両国関係に「深刻な影響」 首相発言の撤回要求 [蚤の市★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★3 [BFU★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 【維新】吉村知事「中国人観光客だけに頼るビジネスモデル変えていかないといけない」「高市総理の発言は撤回する必要はない」 [Hitzeschleier★]
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 【実況】博衣こよりのえちえち歌枠🧪
- 高市「発言は撤回しない。謝罪もするな。外務省局長!任せたぞ。」👈なにをさせたかったの?😲 [826239858]
- 【速報】51歳まで自衛隊になれるように法改正ww [347751896]
- 外務省局長、よくわからないまま帰国へ [834922174]
- 自分に自信がない女の子、陽キャ美容室で80cmのエクステを付けた結果wwwwwwwwwwwwwwwwwww [329329848]
