公式
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:c48cFuZJ653デフォルトの名無しさん
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:spBkjUqU680デフォルトの名無しさん
2024/11/08(金) 23:54:55.29ID:B3hB3UkR681デフォルトの名無しさん
2024/11/09(土) 00:23:52.73ID:3a9p/42P それはRegexの内部実装なので無関係だね
CloneできるようにArcを使ってるよくある手だよ
CloneできるようにArcを使ってるよくある手だよ
682デフォルトの名無しさん
2024/11/09(土) 01:08:06.88ID:CKaEi0Af ?
内部実装の話をしてるんではないのか
内部実装の話をしてるんではないのか
683デフォルトの名無しさん
2024/11/09(土) 01:20:28.66ID:3a9p/42P 再コンパイルを避けるためにstaticで持ったりオブジェクトメンバーで持ったりと利用プログラマー側の話でしょ
その時に必要ならCloneもできるということ
その時に必要ならCloneもできるということ
684デフォルトの名無しさん
2024/11/09(土) 01:27:01.06ID:NTU1NPwJ 何の話をしてるのか、誰か一人でも分かってるんだろうか
685デフォルトの名無しさん
2024/11/09(土) 04:13:52.23ID:MgyqC3I+686デフォルトの名無しさん
2024/11/09(土) 05:26:31.68ID:tGFuX1+9 話の流れが良く分からないけど、つまり正規表現をconst文脈でコンパイルできないRustはクソってこと?
687デフォルトの名無しさん
2024/11/09(土) 09:50:01.85ID:V8dNW5L0 単に複オジがクソだってこと
688デフォルトの名無しさん
2024/11/09(土) 12:02:14.96ID:6/tB/poi いわゆるlet over lambdaがなかった時代には
static over fn
だったという話
static over fn
だったという話
689デフォルトの名無しさん
2024/11/09(土) 12:56:57.97ID:Z6VLqth0 コーディング時に確定できる静的な正規表現と
実行時にならないと確定できない動的な正規表現は
用途も違うしプログラム内での扱い方も全然違うよね
前者が他言語なら正規表現リテラルでRustならstaticを使う分野
後者は普通staticは使わない(immutableなのかmutableなのかでまた少し違う)
Javaでstaticというのは前者だろうな
後者でも使えなくはないけど純Java脳の人は違うやり方をするはず
実行時にならないと確定できない動的な正規表現は
用途も違うしプログラム内での扱い方も全然違うよね
前者が他言語なら正規表現リテラルでRustならstaticを使う分野
後者は普通staticは使わない(immutableなのかmutableなのかでまた少し違う)
Javaでstaticというのは前者だろうな
後者でも使えなくはないけど純Java脳の人は違うやり方をするはず
690デフォルトの名無しさん
2024/11/09(土) 13:21:26.67ID:F1r07c7a いつになったら、Rustで正規表現をconst文脈でコンパイルできるようになるの?
原理的に見込みない話?
原理的に見込みない話?
691デフォルトの名無しさん
2024/11/09(土) 14:07:10.40ID:6/tB/poi ヒープの話に戻るが、サイズが静的に確定すればヒープを一切使わない保証もできる
692デフォルトの名無しさん
2024/11/09(土) 14:59:50.94ID:JFkCBQN+693デフォルトの名無しさん
2024/11/09(土) 15:06:22.46ID:CKaEi0Af694デフォルトの名無しさん
2024/11/09(土) 15:09:47.03ID:F1r07c7a695デフォルトの名無しさん
2024/11/09(土) 17:12:28.10ID:bFGQ+yoR696デフォルトの名無しさん
2024/11/09(土) 17:13:55.79ID:6/tB/poi 願望は笑いものになるが失望はそうでもない
前者は単独犯で後者は不特定多数だからだ
前者は単独犯で後者は不特定多数だからだ
697デフォルトの名無しさん
2024/11/09(土) 17:22:40.75ID:IbVEcqQg 正規表現の単なる説明例じゃないのか
しかも正規表現自体も単なる例でstaticに突っ込む話の説明例だろ
そもそもの話はヒープをプログラムの最後まで解放しなくていい話でstaticはその一例として出てきただけだよな
一番どうでもいい末節の正規表現で騒いでいて違和感
しかも正規表現自体も単なる例でstaticに突っ込む話の説明例だろ
そもそもの話はヒープをプログラムの最後まで解放しなくていい話でstaticはその一例として出てきただけだよな
一番どうでもいい末節の正規表現で騒いでいて違和感
698デフォルトの名無しさん
2024/11/09(土) 17:29:31.37ID:8+qKiGsp >>693
読んでみたが機能充実(制限)と実行速度とバイナリサイズのどれを優先するかもしくはどの二つまで両立させるかで
どのエンジンやどんな中間表現やどこまで機能制限を行なうかのバリエーションが多すぎるようだ
万人の矛盾した要求を全て満たす万能なものを実現するのは不可能だから別々に叶えるしかないな
読んでみたが機能充実(制限)と実行速度とバイナリサイズのどれを優先するかもしくはどの二つまで両立させるかで
どのエンジンやどんな中間表現やどこまで機能制限を行なうかのバリエーションが多すぎるようだ
万人の矛盾した要求を全て満たす万能なものを実現するのは不可能だから別々に叶えるしかないな
699デフォルトの名無しさん
2024/11/09(土) 18:03:48.00ID:LybhxYMR >>690
RustのconstってC++のconstexprだよな
どうやってヒープ領域を返すんだ?
C++だとconstexprの計算中はnew/deleteでヒープを一時利用できるけど
deleteせずに返すのはできないよな
RustのconstってC++のconstexprだよな
どうやってヒープ領域を返すんだ?
C++だとconstexprの計算中はnew/deleteでヒープを一時利用できるけど
deleteせずに返すのはできないよな
700デフォルトの名無しさん
2024/11/09(土) 18:14:19.13ID:6/tB/poi 正規とか文脈自由とかいうのは仕様のバリエーション
実装のバリエーションなど知ったことではない
実装のバリエーションなど知ったことではない
701デフォルトの名無しさん
2024/11/09(土) 22:22:44.34ID:bFGQ+yoR >>697
例として出したものが
正規表現リテラルの代替策な上に
内部実装の都合上ヒープを確保してるだけで
本来はヒープである必然性もない
機能不足の代替策として
プログラムの最後まで開放しないような
ヒープの使い方もあるだろうという話なのか?
例として出したものが
正規表現リテラルの代替策な上に
内部実装の都合上ヒープを確保してるだけで
本来はヒープである必然性もない
機能不足の代替策として
プログラムの最後まで開放しないような
ヒープの使い方もあるだろうという話なのか?
702デフォルトの名無しさん
2024/11/09(土) 23:06:21.72ID:6/tB/poi ロックして解放してロック解除しなければいい
703デフォルトの名無しさん
2024/11/09(土) 23:11:14.97ID:Dc7LpAyZ704デフォルトの名無しさん
2024/11/10(日) 00:07:10.13ID:QiolRTDD705デフォルトの名無しさん
2024/11/10(日) 02:33:30.98ID:OGC8ujy2 は~~~~キレそう
706デフォルトの名無しさん
2024/11/10(日) 02:34:34.55ID:OGC8ujy2 なんの意味があんねや、このスレ
707デフォルトの名無しさん
2024/11/10(日) 02:36:54.54ID:OGC8ujy2 Rustプログラマにとって有益な情報はこれ以上出ないし、まともなRustプログラマは全員逃げたことが確定して久しいので
次スレあたりから「Rust vs 世界中の全言語 Part27」とか「複製おじさんと遊ぼう Part27」とかにしましょっか
他にもスレタイ案募集
次スレあたりから「Rust vs 世界中の全言語 Part27」とか「複製おじさんと遊ぼう Part27」とかにしましょっか
他にもスレタイ案募集
708デフォルトの名無しさん
2024/11/10(日) 06:48:35.70ID:xIqOi7JH709デフォルトの名無しさん
2024/11/10(日) 11:17:24.55ID:dkv1a77w 入力がコンパイル時に確定してるならサイズも確定するでしょ
理屈としては以下のようなものは作れると思う
struct CompTimeRegex<const N: usize> {
data: [u8; N]
}
// 正規表現オブジェクトをコンパイル時に計算
// サイズは入力に応じて変わる
// 入力はリテラルのみ
let r = make_regex!("+\\d");
面倒だし、それでパフォーマンスが劇的に良くなるわけでも無いだろうから必要性は微妙なところ
詳しくないけど、手続きマクロの中なら計算のためにヒープを使うこともできるよね?
理屈としては以下のようなものは作れると思う
struct CompTimeRegex<const N: usize> {
data: [u8; N]
}
// 正規表現オブジェクトをコンパイル時に計算
// サイズは入力に応じて変わる
// 入力はリテラルのみ
let r = make_regex!("+\\d");
面倒だし、それでパフォーマンスが劇的に良くなるわけでも無いだろうから必要性は微妙なところ
詳しくないけど、手続きマクロの中なら計算のためにヒープを使うこともできるよね?
710デフォルトの名無しさん
2024/11/10(日) 11:58:38.78ID:WMkhj3nA BurntSushiのベンチ結果見た?
711デフォルトの名無しさん
2024/11/10(日) 12:03:57.56ID:xIqOi7JH それは入力固定で出力の型も別仕様の別の話だな
regex::Regexは実行時に正規表現が作られてもよく
それをコンパイルするためヒープが
使われている
regex::Regexは実行時に正規表現が作られてもよく
それをコンパイルするためヒープが
使われている
712デフォルトの名無しさん
2024/11/10(日) 12:23:01.33ID:mfp7bShs 正規表現をコンパイルするのと比べてヌル代入を許容するのは極めて容易で
ヌルを代入すればヒープが解放される
ヌルを代入すればヒープが解放される
713デフォルトの名無しさん
2024/11/10(日) 12:27:06.24ID:z1ldQRPb const文脈って、実際今なんか有効な活用されてるの?
714デフォルトの名無しさん
2024/11/10(日) 12:30:28.79ID:z1ldQRPb ちなみにzigの似た機能は有効活用されまくり
715デフォルトの名無しさん
2024/11/10(日) 12:38:27.50ID:OGC8ujy2 ぐちゃぐちゃできるとかできない言ってるが自分で実装する気のある人間は一人もいねえんだろ???
だったら終わりだよ
だったら終わりだよ
716デフォルトの名無しさん
2024/11/10(日) 13:02:04.64ID:OGC8ujy2717デフォルトの名無しさん
2024/11/10(日) 13:06:11.38ID:OGC8ujy2 意図的な誤読、ストローマン論法、誰もがわかりきった説明を脈絡無く貼って議論を拡散させる
マジで不毛
マジで不毛
718デフォルトの名無しさん
2024/11/10(日) 13:11:04.55ID:OGC8ujy2 結局さ
ヒープは全部開放しなさい派閥は>>661のコードでRegex内部のArcが未解放のままプロセス終了するのは、ええんか??ええんか??どうなんだオラ??って話ってことでええんよな
ヒープは全部開放しなさい派閥は>>661のコードでRegex内部のArcが未解放のままプロセス終了するのは、ええんか??ええんか??どうなんだオラ??って話ってことでええんよな
719デフォルトの名無しさん
2024/11/10(日) 13:16:48.60ID:xIqOi7JH >>716
全く別の話であり、これまでのregex::Regexについての話への言及・反論にはなっていないことを自覚できているならそれでよろしい
全く別の話であり、これまでのregex::Regexについての話への言及・反論にはなっていないことを自覚できているならそれでよろしい
720デフォルトの名無しさん
2024/11/10(日) 13:18:41.74ID:nOHdM7oG >>718
Rustの標準ライブラリstdは
プログラム終了時に自動的にメモリが解放されるようなまともなOS環境を対象にしていて区別しているので大丈夫
OS無しの組み込み環境では#![no_std]を宣言してcoreライブラリのみサポートされる中でのプログラミングを行なう
Rustの標準ライブラリstdは
プログラム終了時に自動的にメモリが解放されるようなまともなOS環境を対象にしていて区別しているので大丈夫
OS無しの組み込み環境では#![no_std]を宣言してcoreライブラリのみサポートされる中でのプログラミングを行なう
721デフォルトの名無しさん
2024/11/10(日) 14:48:06.15ID:AfmJKCJ3 >>707
みんな何処に逃げた?
みんな何処に逃げた?
722デフォルトの名無しさん
2024/11/10(日) 15:04:06.89ID:qC3Ky4ZL >>661
スコープを外れた場合と同じようにモジュールがアンロードされる際にデストラクトされる
スコープを外れた場合と同じようにモジュールがアンロードされる際にデストラクトされる
723デフォルトの名無しさん
2024/11/10(日) 16:19:33.44ID:OGC8ujy2 >>720
OS側でプロセスを終了させる際にメモリマップを捨てる処理のことを「解放」って呼んでるから君と君以外で話がすれ違うんだと思うよ
OS側でプロセスを終了させる際にメモリマップを捨てる処理のことを「解放」って呼んでるから君と君以外で話がすれ違うんだと思うよ
724デフォルトの名無しさん
2024/11/10(日) 16:24:01.76ID:OGC8ujy2725デフォルトの名無しさん
2024/11/10(日) 16:26:17.63ID:OGC8ujy2726デフォルトの名無しさん
2024/11/10(日) 16:30:14.58ID:dkv1a77w 5chで聞くよりもChatGPTの方が適切な回答をくれると思う
Rustに限らず他の言語でも
Rustに限らず他の言語でも
727デフォルトの名無しさん
2024/11/10(日) 16:34:57.50ID:OGC8ujy2 ChatGPTもついでにCopilot Chatもゴミだよ
省略されたライフタイムの展開が自分でやったのが合ってるか自信がなくて、試しにやらせてみたらメチャクチャなことばっか言いやがった挙げ句、キレてthe Refrenceのelision rulesのところをペタペタ3回くらいコピペしたらすみません間違っていました、何度も申し訳ございません言いながらやっと正解を返してくれた
決定論的な問題を解かせるのにはまったく向いてない
省略されたライフタイムの展開が自分でやったのが合ってるか自信がなくて、試しにやらせてみたらメチャクチャなことばっか言いやがった挙げ句、キレてthe Refrenceのelision rulesのところをペタペタ3回くらいコピペしたらすみません間違っていました、何度も申し訳ございません言いながらやっと正解を返してくれた
決定論的な問題を解かせるのにはまったく向いてない
728デフォルトの名無しさん
2024/11/10(日) 16:36:43.08ID:z1ldQRPb >>727
最初からキレて始めればいいのでは?
最初からキレて始めればいいのでは?
729デフォルトの名無しさん
2024/11/10(日) 16:39:08.93ID:OGC8ujy2 英語が話せる人はこっちに移住しよう!!! できない人もDeepL片手にカモン!!!
https://www.rust-lang.org/community
日本語コミュはこちら!!!ってかいい加減放置されきった翻訳版の責任者のケツ叩きに行こうぜ!!!
https://rust-lang-jp.zulipchat.com/
https://www.rust-lang.org/community
日本語コミュはこちら!!!ってかいい加減放置されきった翻訳版の責任者のケツ叩きに行こうぜ!!!
https://rust-lang-jp.zulipchat.com/
730デフォルトの名無しさん
2024/11/10(日) 16:41:30.83ID:tFJCBt9m >>728
キレるはともかく最初からelision rules貼ればよかった説は確かにそう、残念ながら二回目の機会がないが次はそうしてみるぜ
でもよお……こんなのrust-analyzerが完璧なinlay hint実装してくれりゃやらなくて済む話でもあるんだぜ
キレるはともかく最初からelision rules貼ればよかった説は確かにそう、残念ながら二回目の機会がないが次はそうしてみるぜ
でもよお……こんなのrust-analyzerが完璧なinlay hint実装してくれりゃやらなくて済む話でもあるんだぜ
731デフォルトの名無しさん
2024/11/10(日) 16:42:25.60ID:OGC8ujy2 およ? ID変わった
ID:OGC8ujy2=ID:tFJCBt9mです
ID:OGC8ujy2=ID:tFJCBt9mです
732デフォルトの名無しさん
2024/11/10(日) 16:53:56.32ID:ES+o9VJl >>722
staticはdrop呼ばれない
staticはdrop呼ばれない
733デフォルトの名無しさん
2024/11/10(日) 17:11:30.76ID:a6nPaG4v C++ で static オブジェクトの初期化順 (解体順) は問題を起こしがちだし、いっそそのへんは取り扱わないというのも妥当な判断のひとつではあるわな。
734デフォルトの名無しさん
2024/11/10(日) 17:43:15.44ID:mfp7bShs 自動化をあきらめることは賛成
だが手動で解放する技術を不要な技術と見なすことには反対する
だが手動で解放する技術を不要な技術と見なすことには反対する
735デフォルトの名無しさん
2024/11/10(日) 18:43:44.99ID:dkv1a77w StringやVecみたいなヒープを使う型をstaticで管理させた場合って、valgrindみたいなメモリリーク検出ツールに引っかかったりする?
dropが呼ばれなくても終了時に一応はメモリ解放してるのか、それとも本当に何もしていないのか
dropが呼ばれなくても終了時に一応はメモリ解放してるのか、それとも本当に何もしていないのか
736デフォルトの名無しさん
2024/11/10(日) 19:15:15.74ID:xIqOi7JH >>733
Rustならstatic変数初期化はOnceLockやLazyLockでマルチスレッド競合を含めて安全に初期化できる
static変数でdropはプログラムの終了時も起きないがメモリ解放問題は普通のOS環境では関係ないため問題ない
どうしてもdropしたいなら例えばOptionで包んでtake()で取り出すなどで手動drop()が可能
>>735
手動dropしないならばヒープ領域を持っていても解放されない
これはBox::leak()などで意図的にメモリを解放しないようにした場合でも同様
普通のOS環境ならこれでも問題は全く起きないが
組み込み環境などで確実にメモリ解放したいならば用意するメモリアロケータで対応する
つまりプログラム終了時にメモリアロケータを呼び出して管理している全メモリを解放させればよい
Rustならstatic変数初期化はOnceLockやLazyLockでマルチスレッド競合を含めて安全に初期化できる
static変数でdropはプログラムの終了時も起きないがメモリ解放問題は普通のOS環境では関係ないため問題ない
どうしてもdropしたいなら例えばOptionで包んでtake()で取り出すなどで手動drop()が可能
>>735
手動dropしないならばヒープ領域を持っていても解放されない
これはBox::leak()などで意図的にメモリを解放しないようにした場合でも同様
普通のOS環境ならこれでも問題は全く起きないが
組み込み環境などで確実にメモリ解放したいならば用意するメモリアロケータで対応する
つまりプログラム終了時にメモリアロケータを呼び出して管理している全メモリを解放させればよい
737デフォルトの名無しさん
2024/11/10(日) 19:59:43.87ID:tFJCBt9m 質問の答えになってないし、組み込み環境で「プログラムが終了」したり、「管理している全メモリを解放」できるアロケータが必要などとまで言い出した
いやはや
いやはや
738デフォルトの名無しさん
2024/11/10(日) 20:16:38.46ID:tFJCBt9m >>735
>>661に適当にこれだけのmain足してvalgrindかけてみた
fn main() {
let s = "2021/07/04";
let (year, month, day) = yyyymmdd(s).unwrap();
println!("{}-{}-{}", year, month, day);
}
https://pastebin.com/UN84vEFb
まあ、リーク扱いで出るよね
こういうのがあんまり多いとマジのリークと区別付きづらくて大変そうだけど、なんかアノテーションみたいなので対策できたりするのかな?
>>661に適当にこれだけのmain足してvalgrindかけてみた
fn main() {
let s = "2021/07/04";
let (year, month, day) = yyyymmdd(s).unwrap();
println!("{}-{}-{}", year, month, day);
}
https://pastebin.com/UN84vEFb
まあ、リーク扱いで出るよね
こういうのがあんまり多いとマジのリークと区別付きづらくて大変そうだけど、なんかアノテーションみたいなので対策できたりするのかな?
739デフォルトの名無しさん
2024/11/10(日) 20:28:05.31ID:dkv1a77w >>738
サンクス
過去にC++で似たようなケースで顧客から「あなたの所のライブラリを使うとメモリリークが検出されるんだけど?」って指摘されたことがあって気になった
説明して伝わる相手なら良いけど、そういう面倒な人からのクレームを避けたい場合はstaticは避けたほうが良さそうだな
本質的には重要な問題でないと思うけども
サンクス
過去にC++で似たようなケースで顧客から「あなたの所のライブラリを使うとメモリリークが検出されるんだけど?」って指摘されたことがあって気になった
説明して伝わる相手なら良いけど、そういう面倒な人からのクレームを避けたい場合はstaticは避けたほうが良さそうだな
本質的には重要な問題でないと思うけども
740デフォルトの名無しさん
2024/11/10(日) 20:28:35.21ID:xIqOi7JH >>737
組み込み環境であろうとなかろうと各プログラムは終了する
さらにOS環境でOS内であっても各カーネルモジュールのプログラムはアンロードで終了する
一方でもし完全にモノリシックな一つのシステムなら終了後をそもそも考える必要がない
メモリアロケータについては自作したことあるなら管理してるメモリの全解放なんて楽勝だと理解できるだろ
割り当て用に確保しているバッファを返却するだけだ
組み込み環境であろうとなかろうと各プログラムは終了する
さらにOS環境でOS内であっても各カーネルモジュールのプログラムはアンロードで終了する
一方でもし完全にモノリシックな一つのシステムなら終了後をそもそも考える必要がない
メモリアロケータについては自作したことあるなら管理してるメモリの全解放なんて楽勝だと理解できるだろ
割り当て用に確保しているバッファを返却するだけだ
741デフォルトの名無しさん
2024/11/10(日) 20:52:25.18ID:Qvjt9L31 お前ら、Rustでプログラム書いた後にvalgrind ってるの?
もうそういうの終わりにしたいからRust使ってるんじゃないの?
もうそういうの終わりにしたいからRust使ってるんじゃないの?
742デフォルトの名無しさん
2024/11/10(日) 20:53:16.70ID:tFJCBt9m 相変らず単語ひとつひとつが独自用法すぎて解読が困難だね
mallocみたいなグローバルアロケータを自分で実装しようという話をしているのか?
それとも(allocator_apiがいまだにunstableなせいでボイラープレートモリモリ書かされる)typed_arenaやbumpaloのようなカスタムアロケータの話をしているのか?
前者だとしたらバッファという言葉が出てくるのがまず分からない、もしかしてヒープ領域全体のことをバッファと呼んでいて、確保/解放はsbrkのことを言っているのか?
後者だと「管理してるメモリの全解放」ですべての内容のDropしないといけなくて……って考えるとどう考えてもゲロクソむずいけど、全オブジェクトをManuallyDropに包んで返して責任放棄するのかな……
mallocみたいなグローバルアロケータを自分で実装しようという話をしているのか?
それとも(allocator_apiがいまだにunstableなせいでボイラープレートモリモリ書かされる)typed_arenaやbumpaloのようなカスタムアロケータの話をしているのか?
前者だとしたらバッファという言葉が出てくるのがまず分からない、もしかしてヒープ領域全体のことをバッファと呼んでいて、確保/解放はsbrkのことを言っているのか?
後者だと「管理してるメモリの全解放」ですべての内容のDropしないといけなくて……って考えるとどう考えてもゲロクソむずいけど、全オブジェクトをManuallyDropに包んで返して責任放棄するのかな……
743デフォルトの名無しさん
2024/11/10(日) 20:56:00.86ID:tFJCBt9m >>741
できねーもんはできねーんだから適切な道具を使うんだよ、笑うならそこの嘘吐き宣教師を笑うんだな
できねーもんはできねーんだから適切な道具を使うんだよ、笑うならそこの嘘吐き宣教師を笑うんだな
744デフォルトの名無しさん
2024/11/10(日) 21:08:26.24ID:xIqOi7JH >>742
プログラム本体終了後のメモリ解放のためにdropは必要ない
プログラム全体終了後のメモリリークが組み込みなどで困るケースが対象なのだからそれらメモリを返却するだけでよい
sbrkのあるOS環境ならsbrkでOSへ全メモリを返還できるのはその通りだが
それをしなくてもプログラム終了後にメモリリークは起きないので普通のアロケータでは行われていない
メモリリークが起きうる特殊なOSや組み込みならアロケータが借りてるメモリを全返却すればよい
プログラム本体終了後のメモリ解放のためにdropは必要ない
プログラム全体終了後のメモリリークが組み込みなどで困るケースが対象なのだからそれらメモリを返却するだけでよい
sbrkのあるOS環境ならsbrkでOSへ全メモリを返還できるのはその通りだが
それをしなくてもプログラム終了後にメモリリークは起きないので普通のアロケータでは行われていない
メモリリークが起きうる特殊なOSや組み込みならアロケータが借りてるメモリを全返却すればよい
745デフォルトの名無しさん
2024/11/10(日) 21:16:26.31ID:tFJCBt9m >>744
んでどっちのアロケータの話をしてるの?って
んでどっちのアロケータの話をしてるの?って
746デフォルトの名無しさん
2024/11/10(日) 21:22:25.58ID:xIqOi7JH >>745
普通の仮想メモリOS環境ならstaticでもBox::leakでもプログラム終了後にメモリリークは起きないから対策の必要がない
そうでない特殊なOSや組み込み環境ならばそれ用に用意するメモリアロケータをプログラム終了直前に呼び出して全メモリ返却させればメモリリークは起きない
普通の仮想メモリOS環境ならstaticでもBox::leakでもプログラム終了後にメモリリークは起きないから対策の必要がない
そうでない特殊なOSや組み込み環境ならばそれ用に用意するメモリアロケータをプログラム終了直前に呼び出して全メモリ返却させればメモリリークは起きない
747デフォルトの名無しさん
2024/11/10(日) 21:35:16.61ID:tFJCBt9m748デフォルトの名無しさん
2024/11/10(日) 21:41:49.64ID:tFJCBt9m 少なくともvalgrindとかperfmonみたいなやつは、プログラム終了時にヒープを辿って解放済みマークの無い場所を見つけたらリークって報告するんだし、一般的にはそれがリークだよ
プロセス終了時にメモリマップの割り当てが解除されるとか、どうでもええわ
プロセス終了時にメモリマップの割り当てが解除されるとか、どうでもええわ
749デフォルトの名無しさん
2024/11/10(日) 21:48:10.22ID:xIqOi7JH >>747
Rustでは#[global_allocator]指定でカスタムなグローバルアロケータを使える
プログラム終了後にメモリリークが起きうる組み込み環境なら対応した自作のアロケータを実装してそのように指定して用いる
Rustでは#[global_allocator]指定でカスタムなグローバルアロケータを使える
プログラム終了後にメモリリークが起きうる組み込み環境なら対応した自作のアロケータを実装してそのように指定して用いる
750デフォルトの名無しさん
2024/11/10(日) 22:10:00.14ID:E3OFY7Tp >>729
May I talk about the ownership reproduction in the formal community web page?
May I talk about the ownership reproduction in the formal community web page?
751デフォルトの名無しさん
2024/11/10(日) 22:15:02.72ID:tFJCBt9m > プログラム終了後にメモリリークが起きうる組み込み環境
組み込みやったことないから知らんけど、そんな環境があんの?
組み込みやったことないから知らんけど、そんな環境があんの?
752デフォルトの名無しさん
2024/11/10(日) 22:27:44.25ID:tFJCBt9m https://github.com/rust-embedded/embedded-alloc
組み込みの典型的なコードってこのREADMEのサンプルコードみたいなんでいいのかね
プログラム(main)は終了しない
ヒープの「解放」処理も無い
合ってるよな?
自由に使える物理アドレス空間の一部を実行時アロケーションのために使用するってだけなら、使い終わりにやる「解放」の処理というのは何の話を言ってるんだ? って思ってたけど
そんなものはない、で合ってるのよな?
組み込みの典型的なコードってこのREADMEのサンプルコードみたいなんでいいのかね
プログラム(main)は終了しない
ヒープの「解放」処理も無い
合ってるよな?
自由に使える物理アドレス空間の一部を実行時アロケーションのために使用するってだけなら、使い終わりにやる「解放」の処理というのは何の話を言ってるんだ? って思ってたけど
そんなものはない、で合ってるのよな?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 [ぐれ★]
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… ★3 [BFU★]
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… ★2 [BFU★]
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 ★2 [Hitzeschleier★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★2 [BFU★]
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 [Hitzeschleier★]
- 中国高官と話す外務省局長の表情、やばい ★2 [175344491]
- ラーメン屋「日高屋が安いせいで客が来ない!日高屋はもっと値上げしろ!」 [449534113]
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 外務省局長、よくわからないまま帰国へ [834922174]
- 本日開催の人口戦略本部に安倍晋三が出席😲 生きとったんかワレ [884040186]
- 中国外務省「日中関係の悪化は高市早苗首相が原因」と名指しで強く非難。キタ━(゚∀゚)━! [153490809]
