公式
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:c48cFuZJ635デフォルトの名無しさん
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: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 自動化をあきらめることは賛成
だが手動で解放する技術を不要な技術と見なすことには反対する
だが手動で解放する技術を不要な技術と見なすことには反対する
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国国営メディア「沖縄は日本ではない」… ★6 [BFU★]
- 高市政権にパイプ役不在…日中高まる緊張 公明党の連立離脱影響、自民内にも懸念「自分でまいた種は自分で刈り取ってもらわないと」★2 [ぐれ★]
- 【速報】 日経平均の下落率3%超す、財政懸念で長期金利上昇 [お断り★]
- ナイツ塙が指摘のローソンコーヒーカップ、ロゴ「L」で誤解生みデザイン変更へ 在庫使い切る3か月後にリニューアル [muffin★]
- 【速報】 高市政権、「日本版DOGE」を立ち上げ 米国で歳出削減をした「政府効率化省(DOGE)」になぞらえたもの [お断り★]
- 清涼飲料水から麻薬成分東京都が注意喚起 [おっさん友の会★]
- 生活保護廃止、公務員の給与に最低賃金を適用⇦これをやるだけで国民の9割の不満が解消されるのにやらない理由 [218488394]
- 【悲報】早速高市首相のせいで全国の民泊でキャンセルラッシュwwwwwwwwwwww 経営者も嘆き「こんな事は初めてだ…」😲 [871926377]
- 【動画】男女混合レスリングのガチ試合の様子がこちら [738130642]
- 中国「高市が謝罪撤回しないとこれ全部なくなるけどどうする?」 [931948549]
- 【日刊】暇空茜、また敗訴🥸 [359965264]
- 台湾政党が高市首相「存立危機事態」発言に感謝の書簡「我々の心を強く奮い立たせるものでした」 [834922174]
