X



Rust part29

2025/05/05(月) 11:44:04.39ID:EffckoF6
>>165
知らんがな
俺は必須パラメータの問題を指摘している
2025/05/05(月) 11:44:39.10ID:upfK5ln+
>>162
p[0]やp[1]など
可読性の悪いコードを書くやつは失格
p.red p.green p.blueにしろ
2025/05/05(月) 11:45:55.35ID:jqQPAhm/
>>167
dataと言うバイト列の中の一部だとしたら?
2025/05/05(月) 11:47:59.01ID:upfK5ln+
>>166
おっちょこちょいだな
直前のこれを見ろ
必須ではなくオプションパラメーターだ

>>160
> RGB各値は指定が必須とは限らない
> defaltで各値が0指定されていて同じなら書く必要がない
2025/05/05(月) 11:50:23.87ID:upfK5ln+
>>168
バイト列?
各8bitなのか各16bitなのかそれ以上なのかそれでは構造がわからん
ちゃんと構造体の列にするべきだ
2025/05/05(月) 11:54:15.50ID:jqQPAhm/
>>170
また真面に回答できないから適当に話をごまかして議論のための議論しようとしてる
受信データなどのバイト列から値を取り出すのは一般的だろう
必ずしも構造体の列構造とは限らない

それと数値指定無くすならコーディング規約でこう書かないとアウトですとするのか?
blue=data[ i + blue_index_offset];
red=data[ i + red_index_offset];
green=data[ i + green_index_offset];
2025/05/05(月) 12:01:19.27ID:upfK5ln+
>>171
あのさ
Rustでプログラミングしたことないの?
Rust以外でもシリアライズとデシリアライズしたことないの?
まともなプログラミングしたことある人ならRustですぐにserdeにたどりつく
2025/05/05(月) 12:10:05.78ID:aemkUy0l
まともな人が言ったのか人形が言ったのか全然わからない時代だ
人形が言ったにすぎないなら、そんな言葉は存在しないのと同じ
2025/05/05(月) 12:14:04.97ID:jqQPAhm/
>>172
お前はわざと議論のための議論してるだけだろ
通常のコーティングで出てくるであろう例を誤魔化している
2025/05/05(月) 12:16:46.89ID:jqQPAhm/
p[ i+0 ],p[ i+1 ],p[i +2 ]を取り出すだけのためにどれだけコーディング量を増やして
ライブラリ依存させていくのか
本当に意味不明
2025/05/05(月) 12:33:03.95ID:upfK5ln+
>>175
そんな可読性が悪くてミスしやすいプログラミングは避けるべきだ
構造化と抽象化が不得手でプログラマやエンジニアに向いてないな
serdeは構造体に#[derive(Serialize, Deserialize)]など付加するだけでデシリアライズ関数などは自動生成される
2025/05/05(月) 12:57:25.54ID:jqQPAhm/
>>176
構造体にって自分で書いてるだろ
単なるバイト列からp[ i+0 ],p[ i+1 ],p[i +2 ]を取り出すだけのために構造体などを作らないといけない
178デフォルトの名無しさん
垢版 |
2025/05/05(月) 13:06:55.72ID:Q0EqhiJQ
p[ i+0/*0=赤*/ ],p[ i+1/*1=緑*/ ],p[i +2/*2=青*/ ]
俺ならこうするよ
コメントを見れば0が赤、1が緑、2が青と見たん瞬間わかる
日本語なので英語より間違えにくい
もし間違った数字が間違ってたらコメントと比べればすぐわかる
2025/05/05(月) 14:25:06.41ID:aemkUy0l
(言語を強化することにより)アプリのコーディング量を減らせという話はなかなか面白い
言語の数がアプリの数より多い気がする原因はこれかもしれない
180デフォルトの名無しさん
垢版 |
2025/05/05(月) 15:35:05.95ID:4XowqzeV
>>174
議論のための議論をしてるのはお前だろ
それともガチで何も意味を読み取れないインデックスアクセスが正義と思ってるわけ?
どんなみじめな経験を積んできたんだよ
害悪プログラマすぎて仕事で関わらないことを願うわ
181デフォルトの名無しさん
垢版 |
2025/05/05(月) 15:41:59.59ID:AjenNrLi
議論とは関係ないけど大体の画像処理ライブラリだとRGBもBGRも扱えるように channel[0], channel[1], channel[2] のようにアクセスさせると思う
内部のデータによって channel 数は1や4 (アルファチャネル付き) もあるし
182デフォルトの名無しさん
垢版 |
2025/05/05(月) 16:02:16.97ID:Q0EqhiJQ
仕事はお金を貰ってやることだから丁寧に書いて上司に褒められる必要があるけれど
趣味とか経営者とかなら何を書いてもじゆうなんだよな
183デフォルトの名無しさん
垢版 |
2025/05/05(月) 16:11:32.03ID:Q0EqhiJQ
簡潔で見にくいコードを書くか
冗長で醜いコードを書くか
2択だな
2025/05/05(月) 16:35:32.16ID:0Pl94lQ7
>>181
これはそう
画像に限らず構造化されたバイナリデータを扱うときに一般に言えることだけど、
単純にビット列をそのまま構造体として読み替える間違いは、低水準に踏み込める言語に入門して調子乗ってる初心者がやりがち
2025/05/05(月) 16:47:29.64ID:aemkUy0l
上司はunsafeの箇所をチェックすればいいのに
コンパイラが自動で調べてエラーがなかった箇所を、手動で調べ直して逆張りするのが胡散臭い
2025/05/05(月) 18:15:43.01ID:fQ8xBj6s
Serdeは暗黙のCopyしがち
2025/05/05(月) 18:29:47.69ID:jqQPAhm/
>>180
80代のおじいさんと仕事をする機会はないかな
2025/05/05(月) 22:23:21.43ID:I4eA7HrP
話を整理すると

>>82
>> .G(p[0]).R(p[1]).B(p[2]).build()
>> のところを容易に
>> .R(p[0]).G(p[1]).B(p[2]).build()と間違え

と彼は言い出すから
それは名前付けせずにp[0]を用いていることが間違える本質的な問題という話だよな
2025/05/05(月) 22:25:33.48ID:I4eA7HrP
さらに

>>160
> RGB各値は指定が必須とは限らない
> defaltで各値が0指定されていて同じなら書く必要がない

と彼は言ってるので
彼の好み通りにp[0]を用いるとして

名前付きオプション引数方式
foo(
 green = p[0],
 blue = p[2],
)

ビルダーメソッド方式
foo()
 .green(p[0])
 .blue(p2])

どちらの方式でも同じだな
仮にミスが起きるとしたらそれは名前を付けずにp[0]を使っていることが本質的な問題であると確定
2025/05/05(月) 22:47:31.22ID:fQ8xBj6s
構造体は
foo{green:green,blue:blue}

foo{green,blue}
と描ける訳で
ビルダーメソッド方式とやらも
foo().green().blue()
的に描ければ無駄が減るから改良してくれんかのぅ
2025/05/05(月) 23:13:19.16ID:If8Py5os
>>189
その大量連投していた彼はRustをほぼ知らないと判明した上に他の言語の経験値も低そうなので彼自身に問題があることを理解できないと思う
2025/05/05(月) 23:39:40.43ID:Cn3HeiMA
その連投してスレを荒らしていた人が
「おじ」「複おじ」「おじいさん」「おじいちゃん」使いの人だったとはね
>>61 >>70
193デフォルトの名無しさん
垢版 |
2025/05/05(月) 23:42:50.66ID:fQ8xBj6s
foo().(green).(blue)
でもいいな
2025/05/05(月) 23:55:27.76ID:hXT/3Bxe
RustはJavaよりも構造体リテラルの表記が強力だから
Builder使うよりOptions構造体1つで渡す方が楽かもしれんね
パターンとしてはBuilderよりマイナーだけど
2025/05/05(月) 23:58:49.46ID:+Xl4Ck1b
>>190
引数なしで何を指定するのか?

>>193
メソッド名なしはエラー

どんな方式を取ろうとも大元の変数(ex. rgbやp)は指定せざるをえない
foo().green(rgb).blue(rgb)
2025/05/06(火) 09:36:09.23ID:sXCqetJD
>オプション引数やキーワード引数については他言語が内部的にやってることをRustの場合は開発者が自分でやらなきゃいけないことになっててバカらしい

>しかも関数シグニチャに情報をまとめられないから書く方も読む方も煩雑になるだけで開発者的には何もメリットがない

これに尽きる
言語に機能が不足してるから何でもかんでもビルダーパターンにしなきゃいけなくてサードパーティのマクロに依存することになる
アホらし
2025/05/06(火) 09:48:17.91ID:j5CJU7Aq
>>196
真逆だろ
キーワード付オプション引数をズラズラ並べた長い長い関数シグニチャはデメリットしかない欠陥品
しかも機能拡張したらさらにキーワード付オプション引数が増えて関数シグニチャが変わるアホらしさ
2025/05/06(火) 09:51:10.91ID:HDXWn70Z
複数IDと口調を使い分けて自分のレスに賛成するキチガイが複おじ
199デフォルトの名無しさん
垢版 |
2025/05/06(火) 09:51:38.50ID:K1Pjz07i
Rustのダサい処は認めるべき
2025/05/06(火) 09:56:28.46ID:HDXWn70Z
>>197
ビルダーパターンは30年以上前から知られていたけどあまり有用ではないので使われていない
過去に誰かがざっくりデザインパターンを否定してたけど、その人の言うにはデザインパターンで有用なものは言語自体に取り込まれるはずだと

実際いくつかは新しい言語では取り込まれている
2025/05/06(火) 09:56:50.79ID:SvTeM3j9
マクロで解決可能なんだろ? それは「不足している」のか?
まあ標準ライブラリとして入っているべきみたいな論はあるかもしれんけど、マクロでの解決が悪くて言語機能として直接サポートするのが良いとする根拠は出てないな。

言語ユーザがそれぞれのやり方で解決できる自由さと言語の方針を強制する一貫性は両立しないがそれぞれに良さはあるし、 Rust は今のところ自由さをとりつつもデファクトな地位のライブラリはあるという状況だ。
手頃な妥協点と言えるだろ。
2025/05/06(火) 10:01:33.47ID:HDXWn70Z
些細な内容なら初期化関数を複数作ればよい話で更に多くなればオプション指定する構造体を作ればよい
mutに拘る必要が無ければさらに多くの可能性がある

わざわざ穴の多いビルダーパターンを使う必要はない
2025/05/06(火) 10:08:26.28ID:SvTeM3j9
>>200
ポールグレアムはイディオム (デザインパターン) は言語機能として持つかライブラリにまとめるべきと述べていて、考えられる様々なパターン (またはこれから登場する未知のパターン) をライブラリにまとめるには「本物のマクロ」が必要と主張してた。
そして本物のマクロを持つ実用的な言語は Common Lisp くらいしかなかったんだが、 Rust のマクロは彼の言う本物のマクロだ。

マクロで抽象化されてるならその実装がビルダーパターンでもそうでなくてもどうでもいいよ。
2025/05/06(火) 10:10:04.33ID:j5CJU7Aq
>>202
初期化関数を複数作るとオプション分の組み合わせ爆発となる一番アホな方式
それならビルダー方式がよい
2025/05/06(火) 10:12:49.15ID:HDXWn70Z
>>204
他の言語では大体オーバーロードでオプション指定しているけどそれが馬鹿だとは思わないけどね
2025/05/06(火) 10:15:57.89ID:j5CJU7Aq
>>205
それはオプションが増えると組み合わせ爆発が起こる馬鹿な方式
2025/05/06(火) 10:17:10.44ID:HDXWn70Z
>>206
同じ主張と文章を繰り返すやり方が複おじそっくりですね

オーバーロードの初期化関数で馬鹿らしいと思うのは型が同じで対象が違うものがある時
重複を避けるためにシグネチャの設計をしなくては成らないことは馬鹿らしいと思うよ

例えば基本的に2つだけ引数があって後はオプションがずらずら並ぶならやはりオプション内容を含む構造体渡せばいいと思う
そちらも設計が必要だけど
2025/05/06(火) 10:18:50.49ID:j5CJU7Aq
>>205
それ以前にオーバーロードは欠陥機能
オーバーロードを使うとred,green,blueのオプション実装すらできない
2025/05/06(火) 10:19:38.79ID:K1Pjz07i
>Rust のマクロは彼の言う本物のマクロ

macro_rules! は偽物のマクロ
proc_macro2 が本物のマクロ
2025/05/06(火) 10:20:41.45ID:HDXWn70Z
普通は書き込み内容が単調にならないように人は文章に揺らぎをいれてくるんだけど
複おじは基本全部同じ

口調を変えても同じなので同一人物なんじゃないかと思って見ていると後で全く同じ書き込みを始めるので同じ人間なんだなと
2025/05/06(火) 10:20:45.54ID:j5CJU7Aq
>>209
どちらも本物だ
衛生マクロの概念すら知らないのか?
2025/05/06(火) 10:20:58.22ID:AZSw2w0R
>>208
何の問題もないと思うが、具体的には?
2025/05/06(火) 10:22:59.33ID:HDXWn70Z
本物のマクロと言う主張は面白い

でライブラリ作成者ではなく一般的なユーザ側が書いてるマクロはどっちなのかと
2025/05/06(火) 10:23:21.48ID:j5CJU7Aq
>>212
オーバーロードの制限を知らないのかね?
red,green,blueそれぞれだけを指定したい関数をオーバーロードで書いてごらん
2025/05/06(火) 10:24:49.05ID:j5CJU7Aq
>>213
衛生的なマクロとは何かを勉強するといいよ
2025/05/06(火) 10:24:50.06ID:HDXWn70Z
オーバーロード自体は良い仕組みだと思うけど設計が必要だ
最近の言語が取り入れていないのはヒューマンエラー対策という名目

だったらビルダーパターンもヒューマンエラー対策で禁止になるかと言えばそうでもない
2025/05/06(火) 10:27:37.75ID:j5CJU7Aq
>>216
オーバーロードは最悪な仕組み
欠陥が多すぎる上に
red,green,blue各オプションしてすら実現できない
2025/05/06(火) 10:28:08.85ID:HDXWn70Z
徐々に文体におじいさんぽさが出てきたね
2025/05/06(火) 10:47:02.68ID:46q0jEJS
AIを屈服させるレベルの改善ができるなら改善してもいいけどね
どうせAIが勝つという前提なら何も修正しないのが合理的だ
2025/05/06(火) 10:51:59.27ID:K1Pjz07i
今のAI()の実力ってこんなもんか
>2つのリンゴを3人で分ける場合、1つのリンゴを2つに切り、もう1つのリンゴも2つに切って、3人で分けます。
>そうすると、3人ともリンゴの切れ目と半分になります。
>具体的な分け方
1. 1つのリンゴを半分に切る:1つのリンゴを真ん中から半分に切り、2つの半分のリンゴにします。
2. もう1つのリンゴも半分に切る:もう1つのリンゴも同じように半分に切り、さらに2つの半分のリンゴにします。
3. リンゴを合計4つの半分に分ける:2つのリンゴを合わせて、全部で4つの半分に切ったリンゴが手に入ります。
4. 3人で分配する:3人でリンゴの半分を1つずつ取ると、3人とも1つずつ取ることができます。
5. 残った1つを3人で分ける:1つの半分に切ったリンゴが残りますが、それを3人で分けることができます。
例えば、さらに半分に切って3人で分けたり、3つの小さく切って3人で分けたりできます。
2025/05/06(火) 10:52:27.53ID:SvTeM3j9
>>209
本物のマクロというのが何であるか明瞭な定義はされてないのだが、文脈的に「構文木の操作が出来る」というのが要件だと一般的に解されている。
トークン単位の置き換えしか出来ない C のマクロのようなものを除外するための言い回しだ。
構文木を操作できるなら操作できる範囲の違いは本物のマクロかどうかには重要ではない。
(もちろん出来ることが多いほうがより良い本物のマクロとは言えるだろうが、出来ることが多いほうが危険な間違いも引き起こしやすいので現実には適度に制限があったほうが良いこともある。)
macro_rules! も普通は本物のマクロと解される。
2025/05/06(火) 11:06:32.44ID:46q0jEJS
リスパーはmatchを知らない

matchを知らなくても理解できるマクロが本物のマクロ
2025/05/06(火) 11:11:44.35ID:HDXWn70Z
複数ID使用おじ

別人が複おじと疑われたら自分は複おじじゃねーよと反論する
気持ち悪いから
ところが何故かしない

複おじはそういうのに反論しない仕組みになっている
2025/05/06(火) 11:19:55.25ID:AZSw2w0R
>>214
ヒント:
struct Red(u8);
2025/05/06(火) 11:20:28.10ID:HDXWn70Z
マクロ自体がただの似たような機能の概念の総称であってその中で本物だ、元祖だと言っても笑われるだけ
キーボードマクロは真のマクロではないとか衛生的ではないと言われてもそうですかと
2025/05/06(火) 11:22:58.43ID:HDXWn70Z
ID:j5CJU7Aq  の反応待ちのawait状態です
2025/05/06(火) 11:23:42.97ID:K1Pjz07i
>>223
複OGはどうでも良いけど
5chはもう禿しく過疎ってるのにこのスレだけやけに延びてるのは不自然だと感じる
2025/05/06(火) 11:31:04.25ID:SvTeM3j9
>>225
「本物のマクロ」というのは正しさとか起源を主張しているわけではなくそういう名前の分類。
少なくとも C のマクロなどでは様々なイディオムを抽象化するには不十分だというごく当然の話をしてる。
2025/05/06(火) 11:33:12.59ID:AZSw2w0R
なお、名前付き引数での呼び出しを前提とするならばhoge(red) と hoge(green)を名前付き引数の引数名だけで呼び分けるオーバーロードは技術的には実装できない理由は特にない
しかし、多くの言語では名前付き引数の使用はオプションだしこの場合はhoge_red(val)のように機械的に名前変えりゃいいだけだから、実装コストに見合わないという判断をされているのだろう
2025/05/06(火) 11:39:56.59ID:ZZS2r6Zz
>>224
こうですか?わかりません

impl From<Red> for Color {...}
impl From<Green> for Color {...}
impl From<Blue> for Color {...}
impl From<(Red, Green)> for Color {...}
impl From<(Red, Blue)> for Color {...}
impl From<(Green, Blue)> for Color {...}
impl From<(Red, Green, Blue)> for Color {...}

let red = Color::from(Red(255));
let yellow = Color::from((Red(255), Green(255)));
let white = Color::from((Red(255), Green(255), Blue(255));
2025/05/06(火) 11:48:34.17ID:46q0jEJS
メリットが不確実なだけでしょ
メリットもコストも確定していてなおかつ見合わないという話ではない
2025/05/06(火) 12:18:40.67ID:0KYdit4+
このスレでずっと自演してる人って糖質とかなんだろうなあ
2025/05/06(火) 12:28:45.22ID:K1Pjz07i
traitで騒いでた自演と同じ人だろう
2025/05/06(火) 12:40:06.43ID:WV2uqB5+
オーバーロードはそもそもCのAPIにありがちな、後で〇〇2だの〇〇exだのが増えて格好悪くなる問題を解消するためのもの
後で引数名だけ異なるオーバーロードが増えたら名前付き引数を使っていない既存の呼び出しがエラーになるのは、互換性維持という本来の目的からすれば論外
2025/05/06(火) 12:49:02.99ID:w/CyTLi+
話題のderive_builderを使ってみた
構造体に属性を付けるだけで初期化関数を書かなくて済むのは便利だね
ドキュメント見ると今回は使ってないけど色々と機能が充実してるみたい
話題のred/green/blueはこれでいいのかな

use derive_builder::Builder;

#[derive(Default, Builder, Debug)]
struct Color {
#[builder(default = "0")]
red: u8,
#[builder(default = "0")]
green: u8,
#[builder(default = "0")]
blue: u8,
}

fn main() {
let pink = ColorBuilder::default().red(255).blue(200).build().unwrap();
println!("{pink:?}"); // Color { red: 255, green: 0, blue: 200 }
}
2025/05/06(火) 12:57:12.48ID:aXFsP9SC
>>235
よくない
散々言われている通り、必須属性の設定を忘れると実行時エラーになるという致命的な問題がある
2025/05/06(火) 13:06:06.15ID:w/CyTLi+
>>236
例えばファイル名を打ち間違えちゃったけど
まずリリースモードの前にデバッグモードの時点で実行時エラーで気付いて
直してしまえばそれ以降は大丈夫と同じじゃないのかな
特に問題ないような
2025/05/06(火) 13:10:03.39ID:w/CyTLi+
補足するとファイル名は必須項目だけど
コンパイル時にチェックできるのは型だけだから現実的にチェックできることはほとんどないよね
2025/05/06(火) 13:16:05.70ID:sXCqetJD
お前らめちゃくちゃ暇人だな
レス多すぎ
2025/05/06(火) 13:18:37.75ID:sXCqetJD
>>201
>マクロで解決可能なんだろ?
ビルダーパターンの手書きコード量を多少なりとも削減したいという問題は解決してるかもね
それが本当に解決したい問題だと思ってるのならそれでいいんじゃない
2025/05/06(火) 13:24:33.64ID:w/CyTLi+
ビルダー方式でも他の方式でもなんでもいいけど
初期化のための関数を自分で書くよりも>>235のように構造体への属性マクロ指定だけにするのがいいと思う
面倒がなくコードがすっきりとしてプログラミングミスも起きないから
2025/05/06(火) 13:44:43.14ID:aXFsP9SC
>>238
それはそうなのだけど、だからといってコンパイル時のチェックを安易に諦めたら、極論Cでいいだろって話になっちゃう
Rustの存在意義が問われる危険な思想
2025/05/06(火) 13:46:48.63ID:ZZS2r6Zz
現時点のderive_builderはFooBuilder::new()に必須項目を渡すパターンには対応してないっぽいな
全部default()でも構わないケースだと使えるけどRegexBuilder::new(pattern)みたいなケースもあるから万能ではない
2025/05/06(火) 13:53:00.39ID:K1Pjz07i
良い例があるな
https://mevius.5ch.net/test/read.cgi/tech/1643696741/33
貴方が配慮を欠いている
そのx^nつまりxのn乗を求めるにしても
例えば2^100を求めたいならば128bitがないと溢れるのでu128::pow(2, 100)となるが
2^5を求めたいだけで結果も8bitで十分ならばu8::pow(2, 5)となる
このようにメモリサイズも異なってくるので別々の関数が必要
もちろんu128::pow(x, n)があればu8::(x, n)をカバーできるが明らかに無駄である
そこで符号なし整数だけでも
u8::pow(x, n)
u16::pow(x, n)
u32::pow(x, n)
u64::pow(x, n)
u128::pow(x, n)
と5つの関数が必要となる
一方でxの型が確定しているのであればpowで再び型指定は不要なので
x.pow(n)と表記することも可能
以上は整数の場合だがxとpowの結果が小数の場合は2種類の関数が必要となる
f32::powi(x, n) 【nが整数の場合】
f32::powf(x, n) 【nも小数の場合】
もちろんnが小数のpowfだけあればpowiもカバーできるが明らかに無駄なので2種類必要となる
さらに32bit小数だけでなく64bit小数も扱う必要があるため以下も必要
f64::powi(x, n) 【nが整数の場合】
f64::powf(x, n) 【nも小数の場合】
これらもxの型が確定していれば以下のように略して書くことも可能
x.powi(n) 【nが整数の場合】
x.powf(n) 【nも小数の場合】
ちなみに「x^n」を表記するのに不自然な「pow(x, n)」よりも「x.pow(n)」の方がたまたま自然に見えるが誤差だろう
どちらでも好きな表記法を選べばよいだけにすぎない
2025/05/06(火) 14:21:46.28ID:97zxA3f+
>>244
例えば
このように
もちろん
そこで
一方で
以上は
もちろん
さらに
これらも
ちなみに


そのx から始まって論理的?接続で参照を握ったままで最後まで離さないな
読みにくいのは当然
2025/05/06(火) 14:26:52.22ID:97zxA3f+
id変わってしまった
2025/05/06(火) 14:30:10.65ID:97zxA3f+
上の強烈な接続もビルダーパターンの一種かな?と思ってしまう
2025/05/06(火) 15:04:10.81ID:46q0jEJS
>>242
忠臣蔵みたいに、諦めたふりをするぐらいがちょうどいい
危険思想?
なんのことやら
2025/05/07(水) 00:06:42.37ID:oRVzsgHT
>>245
複おじ語録よくぞまとめてくれたな
ほめてつかわす
2025/05/07(水) 10:19:22.81ID:0n7pwB6u
後から〇〇2や〇〇exが増える問題ってRustだとどう対処するのが一般的なんだろう
まあRustの場合ABIを維持する必要のあるケースは比較的限られてるけど、引数増やしたら既存のソースは壊れるよね
最初から構造体にしておけというのは意味のない意見なので無しで
2025/05/07(水) 10:32:45.05ID:Gjm+c4fd
普通に関数が増える
2025/05/07(水) 10:59:58.84ID:jrPMMEx+
>>250
ダイナミックリンクで提供する場合はバイナリ互換性が必要な場面も多いのは Rust でも変わらないよ。
言語の文化としてはスタティックリンクを使いがちではあるけど。
ダイナミックリンクは OS の機能なので言語の側からどうにか出来る余地も少ないし、 OS の文化に乗っかるしかない。
2025/05/07(水) 11:36:16.32ID:hcgUqjSt
○○exがある言語でJVMを実装し、○○exに依存してないと主張する
2025/05/07(水) 13:51:32.15ID:nPKhYJKb
Ubuntu 25.10から、sudoがsudo-rsに置き換わるそうだ
2025/05/07(水) 14:09:26.72ID:jrPMMEx+
まあ Rust が良いかどうかはともかくたまには刷新したほうがええやろ。
2025/05/07(水) 14:24:28.93ID:4cRsIVof
いや、sudoのようなパフォーマンスが重要でないコマンドなら
RustではなくGoで書くべきだった
2025/05/07(水) 14:25:34.83ID:iQ9Crc5o
どんなものでも機能も速さも同じだとしても
C/C++製よりRust製を選ぶわ
C/C++のせいでのセキュリティホールが後からいくらでも見つかってる現状
2025/05/07(水) 14:27:05.51ID:iQ9Crc5o
>>256
余分なランタイムが必要なGoはありえない
2025/05/07(水) 14:50:13.61ID:sBD46f0F
>>250
外部ライブラリならメジャーバージョン増やして普通に破壊する
旧バージョンのAPIをcompatモジュールとかに入れとけば親切

標準ライブラリはエディションで切り替える形になりそう
std::preludeのサブモジュール名は最初v1だったけど今はrust_20XXに方針転換してる
グローバルな名前の追加も一種の破壊だし
260デフォルトの名無しさん
垢版 |
2025/05/07(水) 15:20:58.49ID:7aByWlek
下記は全て2025年5月7日の記事

OpenAI、ChatGPTの6つのモデルの違いと適切なプロンプトを解説
https://news.mynavi.jp/techplus/article/20250507-3275757/

Microsoftの新規のソースコードの約3割をAIが生成、Nadella氏が明かす
https://news.mynavi.jp/techplus/article/20250507-3271749/

スコットランドの住民を悩ます謎の怪音「ヘブリディアン・ハム」の正体はいまだ不明
https://karapaia.com/archives/507130.html
2025/05/07(水) 18:35:48.88ID:hcgUqjSt
モダンなライブラリはdeprecateしやすいのか
古いCと最新のRustだけが残されて中途半端な時代は無かったことになりそうだ
2025/05/07(水) 19:03:14.70ID:3Nv7PA1l
いや、利用者が少ないうちに直しとけ心理で、どんな技術も通る道だよ
sudo-rsがいい例だがこういう長期間にわたって重要な役割を果たす、かつあまり変更が必要とされない用途が増えてくると、だんだんと進化は遅くなるものだ
2025/05/07(水) 19:08:29.35ID:Ja3pQWVu
>>257

(´・ω・)マジ?
2025/05/07(水) 22:26:25.21ID:LUGJMjLo
>>254
この国際的なプロジェクトでセキュリティ的に重要なものから順にRust化されていく一環だよ

Memory Safety for the Internet's most critical infrastructure
https://www.memorysafety.org/
2025/05/08(木) 09:08:51.16ID:8ptxnmrn
>>244-245
このように.drop();
もちろん.drop();
そこで.drop();
一方で.drop();
以上は.drop();
もちろん.drop();
さらに.drop();
これらも.drop();
ちなみに.drop();
2025/05/08(木) 09:25:34.07ID:xZxJToWs
ubuntuはsudoだけでなく、cp, ls, find, diff なんかもRust化する予定なんだな
ntpdもRust化が進められてる
2025/05/08(木) 09:33:12.04ID:n2pO1y9P
>>265
error[E0040]: explicit use of destructor method
help: consider using `drop` function

参考:https://doc.rust-lang.org/error_codes/E0040.html
2025/05/08(木) 10:28:22.03ID:1mgB1EfY
>>266
Ubuntuに限らず誰もが全てをC/C++製から安全なRust製へ変えたいと思っているが一気には無理なので重要なものや新たなものからRust採用という感じ
2025/05/08(木) 12:25:36.55ID:d06WSi70
全てを変えたい、とかいうビジョンは無意味
意味のないビジョンだよ
2025/05/08(木) 12:38:14.55ID:jIG0GCL4
安全でないC/C++を早く全廃したい世界の流れ
2025/05/08(木) 12:49:37.23ID:iRreO2Ee
Linuxコマンド開発専用言語Rust
2025/05/08(木) 12:51:53.54ID:Crcrgp42
メンテナ高齢化問題の対策としては良い取り組みなんじゃないかな
作業するのもインターンの学生が中心だろうし
2025/05/08(木) 12:55:02.85ID:Ad6EgOfh
多くのシステムやインフラがRust化してるね
この5chが使ってるCloudflareもRust製へと移行した
https://github.com/cloudflare/pingora
2025/05/08(木) 13:05:00.97ID:8ptxnmrn
コマンドツールがRustになってもAPIがRust用じゃない限り
CのAPIのラッパーでしかないけどそういう造りでもRust化したってカウントして良いのかは疑問
2025/05/08(木) 13:09:51.90ID:Ad6EgOfh
>>274
コマンドツールが誰に対するAPI??
プログラムを書いたことないのかな?
2025/05/08(木) 15:06:07.28ID:a6DlXdfJ
こういうのってFedoraやらArchやらGentooあたりが人柱やってから普及していくものだと思ってたが…
Canonicalのくせに思い切ったことするなあ
2025/05/08(木) 15:26:10.55ID:n2pO1y9P
Ubuntuはカジュアル路線でしょ
初期状態だとrootも使えなかったと思う
他よりもsudoの負荷が大きい
2025/05/08(木) 18:54:46.08ID:gU6gKsMd
5chは真の漢が使う言語perlで書かれている
2025/05/08(木) 21:50:58.54ID:Ad6EgOfh
5chはperlだけでなくサーバも貧弱なのでキャッシュしてくれるCDNに頼らないと成り立たない
5chが利用しているCDNは>>273のCloudflareでRust製だよ
2025/05/09(金) 00:22:05.59ID:tlxkaAFs
>>279
誰が見てもただの印象操作
子供でも分かる
2025/05/09(金) 00:29:31.48ID:2I38bFbw
5chどうこうよりも
インターネットを支えるCDN世界トップシェアのCloudflareがRust化したインパクトが大きいよな
2025/05/09(金) 00:31:49.35ID:tlxkaAFs
そういう幼稚な書き込みはやめとけよw
283デフォルトの名無しさん
垢版 |
2025/05/09(金) 07:07:43.56ID:rj7v79QA
もう見抜けない、最先端のAIディープフェイク動画は心臓の鼓動まで再現、判別が困難に
2025-05-08
https://karapaia.com/archives/507859.html
2025/05/09(金) 08:08:28.79ID:oZuZXuL3
クラウド界トップのAWSもRust製に
2025/05/09(金) 10:14:04.36ID:52E7/scg
AWSのプラットフォームはほぼJavaでしょ
ハードウェア寄りのローレベルな部分だけシステムプログラミング言語を使っていて、更にその中の一部でRustを使っているものもある、という程度
2025/05/09(金) 11:14:51.12ID:OK+uD+G+
https://japan.zdnet.com/article/35183866/
2022-02-22 14:31
Amazon Web Services(AWS)は、同社のエンジニアたちがプログラミング言語「Rust」を使っている大きな理由として、エネルギー効率の高さを挙げる。
Rustはメモリー安全性を高め、セキュリティ関連の不具合を減らす役に立つだけでなく、PythonやJavaよりもはるかに「エネルギー効率に優れている」という。
Amazonは、2025年までにデータセンターの100%を再生エネルギーでまかなうという目標を掲げ、データセンターの環境負荷の軽減に取り組んでいる。
Rustの採用はその一翼を担うという。

Rustで構築されたAWSサービスの例としては、コンテナーアプリ用のサーバーレスプラットフォーム「Lamba」を支える「Firecracker」、「Amazon Simple Storage Service(S3)」「Amazon Elastic Compute Cloud(EC2)」、コンテンツ配信ネットワーク「Amazon CloudFront」、LinuxベースのコンテナーOS「Bottlerocket」がある。
2025/05/09(金) 11:17:44.85ID:/9qtDNkV
大半は既存のソフトウェアの組み合わせなんで、仮に自社内で書いているプログラムの全てを Rust で書いても割合としては数割ってところだろう。
ただ、これから割合が増えることはあっても減りはしないとは思う。
2025/05/09(金) 11:50:43.35ID:OnJLIdRJ
Rustがこのままオワコンになったら撤廃もあり得るだろ
2025/05/09(金) 11:56:12.65ID:Olh4o+f/
AWSもRust製か
Rust製のクラウドとJava製のクラウドが競争したらJava側が100%負けるだろうしな
2025/05/09(金) 12:53:15.09ID:84hPiMCY
クラウドってなに?
ハイパーバイザがrustで作り直されたの?
2025/05/09(金) 14:06:44.17ID:uNK6cNVH
>>286
これは誤訳
原文だと、それらのサービスにRustを使っていると書かれているだけ
RedditなんかでAWS社員のコメントとか探してみりゃわかるが、AWSは基本Java
2025/05/09(金) 15:01:02.33ID:tXd4RgSB
エネルギー効率に劣るJavaなんかで構築していたら笑うわ
>>286でもそう書いてるよな
2025/05/09(金) 15:25:02.70ID:61qYlkzR
Rustって人気なのね
AIにC#から移植できる?って聞いてみたらいやだって言われちゃったからRustが広まるの、なんか困る
2025/05/09(金) 15:30:45.33ID:EODoJGlX
JVM前提な特殊環境を除き
Rustの登場でJavaを使う意味は全くなくなった
2025/05/09(金) 15:41:48.51ID:xdbk/Yg/
何の前提も縛りも無い環境こそが特殊
2025/05/09(金) 15:59:06.67ID:U8gSLCWq
コンテナ化は Java の有力なメリットだったけど Docker の隆盛で様変わりしちゃったね。
297デフォルトの名無しさん
垢版 |
2025/05/09(金) 18:53:55.90ID:lGkzhvel
>>293
いやだと言うAI、なんかいいな
2025/05/09(金) 22:11:52.71ID:dSLYIzJ3
>>291
サービス提供には安全性が一番重要なのでC++ではなくJavaを採用していた
Javaより安全で性能の良いRustが出現したため切り替えた
そしてAWSが発起人となってRust Foundationを設立した
299デフォルトの名無しさん
垢版 |
2025/05/10(土) 00:48:13.31ID:tNjV2wjQ
Rustで戦う領域ではない気もするけど、エンタープライズ向けはまだ弱いと思う
ここはまだJavaや.NETの資産が大きい

「ファイルが見つかりません」みたいにユーザーの言語でエラーメッセージが出たり、文字列のソート (例えば「あアいイ」のように、ひらがなカタカナを考慮した自然な順になる) だったり、そういうのが外部ライブラリ無しで揃ってるのが Java や .NET なわけで

規模としては相対的に小さくなってるけど、こういうのが必要な領域は普通にあるし、Javaが消えることは無いと思う
2025/05/10(土) 01:05:07.51ID:yPNtL6wL
>>299
外部ライブラリ無しで揃ってるという発想が頭おかしい
そんな間違った奇妙な視点を持ってしまうとRustには正規表現も乱数も何もかも存在しないことになるぞ
考えを改めなさい
301デフォルトの名無しさん
垢版 |
2025/05/10(土) 01:42:38.39ID:JK+pyj3t
ここでグチャグチャ言ってる間に徐々に置き換わって行きそうだな
2025/05/10(土) 03:04:27.68ID:39sc/8ak
firefoxが全部Rustに置き換わるのに100年ぐらい掛かりそうだけどな
2025/05/10(土) 03:26:38.07ID:qt+KVMl5
止まってるFirefoxより
ChromeとIEが着々とRust化を進めてるから先だろな
304デフォルトの名無しさん
垢版 |
2025/05/10(土) 08:39:56.30ID:tNjV2wjQ
IE?
2025/05/10(土) 08:45:29.97ID:K3qP9/A2
>>300
何でこいつ偉そうなんだ?
2025/05/10(土) 08:47:09.62ID:APagMvUq
>>299
人月業界は考えるだけ無駄として、SaaSだと新規開発は圧倒的にフルスタックTypeScriptが多いね
Rustは海外では革新的なDB作るぜみたいなエンタープライズの基盤系スタートアップでの採用例は見かけるが、国内ではその手のスタートアップは皆無に近いから絶望的な状況
2025/05/10(土) 09:09:05.25ID:B2q0uvrQ
品質に関する考え方は良い要素を揃えれば良くなるという単純なものじゃないよ。
結局のところ、どんな問題が出てくるかは事前にわからない。
出てきた問題に対処し続けるという歴史によって品質が作られるんだ。
確かに C や C++ に比べて Rust は全面的に良いけれども、活発な巨大プロジェクトではもう問題に対処しつくしていて Rust に置き換えるメリットは相対的に小さい。
部分的に Rust に置き換えることはあっても問題が起こってない箇所まで含めて全面書き換えを目指すのは割に合わない。
2025/05/10(土) 09:11:51.42ID:R8e2Bn+8
>>306
サーバーサイドでTypeScriptを使っているようでは負けるわ
309デフォルトの名無しさん
垢版 |
2025/05/10(土) 09:22:18.39ID:tNjV2wjQ
>>308
「負ける」というのは何において?
Rustで実装すると、そのサービスは使いやすくなったり、機能豊富になったり、プロトタイプを高速に作ったり、ユーザーの要望をより速く実現できたりするの?

勝ち負けが決まるのって、サービスの内容、ユーザー体験、リリース速度などが重要で、それを実現できるなら言語自体はさほど重要でない
TypeScriptはエコシステムが充実してるから、それに乗っかるのは一つの選択
(バックエンドTSはつらい点もあるから、他の技術を持ってるところなら他のものの方が良いと個人的には思うけど、そういう選択肢が世の中にあって割と普通に受け入れられてるのは現実として理解してる)
2025/05/10(土) 09:29:02.26ID:TSWWK3ZE
>>307
未だにC/C++が原因のセキュリティ脆弱性報告が常に何件も出続けている現実を見なきゃ
2025/05/10(土) 09:43:16.06ID:203d4oBt
>>309
それらの点ではどの言語でもほとんど同じだね
遅くてメモリも喰うJS/TSをフロントエンド以外で使うのは適材適所ではないから不利だけど
312デフォルトの名無しさん
垢版 |
2025/05/10(土) 09:49:57.08ID:DZgbwKL1
仮に外部ライブラリを使ってもRustはエンプラには向かないでしょ
この分野はオラクルやMicrosoftのような企業が時間かけて作ったきたからできたもので、現状Rustはこの分野向けのライブラリが充実してるわけでもないし、Rustコミュニティが力を入れるとも思えない (したとしても優先度は低い)

それに、安定性や将来の入手性が最も必要な分野で、多くの部分をOSSに頼るというのは業界として受け入れないと思う
(昨今OSS絡みの事件は多い)

低レイヤやWebバックエンドなど、Rustが強みになる分野があるのはその通り
2025/05/10(土) 09:51:04.61ID:K3qP9/A2
>>310
それでも何十年もc++が捨てられずに使われているのはなぜかと考えたことはないのか?
2025/05/10(土) 09:52:37.21ID:12iOKYOz
ひらがなカタカナ交じりの自然なソートなんて
今更Rustで描いても半日もかからんやろ
2025/05/10(土) 09:57:05.62ID:203d4oBt
c++はrustに勝てる点が全くなく既存資産だけが頼みの綱で終わりでしょう
巨大な既存資産だけは消えるまでに時間がかかることでしょう
2025/05/10(土) 10:00:12.38ID:K3qP9/A2
超超超熟練度が必要なCOBOLになる

C、C++、COBOL まとめてC*
317デフォルトの名無しさん
垢版 |
2025/05/10(土) 10:05:17.70ID:tNjV2wjQ
>>314
漢字も当然含むし、ロシア語や中国語などを含む世界の多数の言語にも対応する必要もあるぞ?
時刻や日時の表記も国によって違う
Javaや.NETはランタイムが大きいと言われるけど、その中にはこういうのも含まれる
手間も大きいし、この分野を再実装するのも面倒でしょ
(自分が知らないだけで、既にそういう取り組みがあるのかもしれないけど)
2025/05/10(土) 10:08:42.67ID:K3qP9/A2
.NETでソートサーバを作ってそれにソートさせて結果をrustで使う
2025/05/10(土) 10:09:24.80ID:fdsy2R9k
日本だとエンプラよりは自動車の方が早いかもね
ボルボにはもう入ってるし10年以内にトヨタ車に入るくらいならあり得るかも
2025/05/10(土) 10:17:39.16ID:K3qP9/A2
システム周りでは標準で使われて、それ以外は他の言語の下請けになるのかと思ったが実際は違うと言うことか?

システム周りにもかかわらず外部に依存が必要であれば使われない
ライブラリが充実しないと完全な下請けにはなれず、c++のDLLのように一部高速化部位での限定利用になる
2025/05/10(土) 10:26:23.15ID:TkZSyEZj
証券取引みたいに、最高のパフォーマンスと最高の信頼性が求められるガチな領域もエンタープライズにあるのは事実で、
内部的にRustを使っているところがあってもおかしくはないが、そういうのって性質上外に情報が出てこないから盛り上がんないんだよね
自動運転もそうだけど、限界の性能を出そうとすると結局は頭の良い人間を上に据えたスペースシャトル型の厳格なウォーターフォールになるんで、夢がなくてつまらないという面も
2025/05/10(土) 10:38:30.67ID:B2q0uvrQ
COBOL なんか古代の遺物みたいに言われつつもかなり広くつかわれてるもんな……
2025/05/10(土) 10:44:10.80ID:M/F23qJj
最高のパフォーマンスを出すにはC/C++/Rustしかない
安全性を満たすRustは唯一の存在
これから少なくとも数十年間は天下を取るのだろう
324デフォルトの名無しさん
垢版 |
2025/05/10(土) 10:52:25.23ID:b8JFbEp9
>>303
EDGEか
2025/05/10(土) 10:55:11.42ID:B2q0uvrQ
AI が台頭してから電力使用量が劇的に伸びてるからな。
自動車の運転を人間のプロ水準で自動化するなら動力と同じくらいの電力が計算に必要という見積りもある。
AI がまだまだ伸びる分野なら効率は重要だ。
これはコストがどうのとかいうレベルではなくコストをかけても無いものは無い (足りない) という深刻な話で、プラットフォームを担う業者がいっせいに Rust に注目しているのも無理からぬことなのかもしれぬ。
2025/05/10(土) 11:33:01.79ID:SCGzG6Ua
そんな見積もり知らんけど50wでLv5運転できる人間が最高だな
327デフォルトの名無しさん
垢版 |
2025/05/10(土) 13:30:52.43ID:+8W9QSNf
やったことないけど組み込みの世界ではどうなの
Rust使われてる?
2025/05/10(土) 13:34:10.15ID:gWEfPBXM
トヨタはこの前、Rustで求人広告出してたじゃん
329デフォルトの名無しさん
垢版 |
2025/05/10(土) 13:36:27.29ID:zAVOQ4IK
組み込みはRustが多いですね
新規案件は殆どがRust
単品ではmrubyが多いですね
2025/05/10(土) 14:07:29.73ID:tG+fugNq
トヨタ系は基本的に愛知勤務だからな
Rustでもなんでも使って求人票を飾らないと厳しいんだろう
2025/05/10(土) 14:11:56.01ID:USkPlt1I
Rust使えるなら都落ちして田舎で開発するのも悪くないかも
今はたいていタイプスクリプトばっかだから変化が欲しい
332デフォルトの名無しさん
垢版 |
2025/05/10(土) 14:50:39.44ID:tNjV2wjQ
TSはフロント側とサーバー側を包括するフレームワークがあるのが強いんだよね
APIを定義してフロント側とバック側を区切る開発なら、バック側はコンパイルされるものが良いというのは同意なんだけど
TSを使うメリットがないと主張してる人は、こういう技術を知らないか、机上論を述べたいだけで実際の開発はしないから生産性など関係ないという人でしょ
2025/05/10(土) 15:01:33.78ID:M/F23qJj
>>332
その程度なら誰でも知ってるよ
SSR/SSGからhydrationしてCSRするコードも自作したことある
2025/05/10(土) 15:17:51.64ID:TkZSyEZj
今のWeb開発では、独立したバックエンドAPIはオプションだからね
Next.jsでサーバーサイドロジックが存在するのがデフォなので、よほどCPU intensiveな処理でない限りは、
Rustで別途独立したバックエンドを作ることはかえって遅延とコストを増大させる
フロントエンドまでRustエンジニアが自分で面倒見るってんなら好きにすりゃいいけど、
Rustエンジニアがフロントエンドやりたいかねえ
2025/05/10(土) 15:25:32.84ID:K3qP9/A2
フロントとバックエンドで常に齟齬が無ければいいんだけどと言う話になるとTSが出てくる
2025/05/10(土) 15:32:42.03ID:M/F23qJj
>>334
それはJS/TSだけでやろうとするからそういう制限になってしまう
RustとWasmも組み合わせてどこまでやるかで色んなパターンがある
2025/05/10(土) 15:45:18.30ID:Mv0kFcWv
>>332
RPC は昔からある取り組みじゃないか。
半世紀もかけて TS でしか実用にならない状況だと本気で思ってるのか?
338デフォルトの名無しさん
垢版 |
2025/05/10(土) 15:49:00.61ID:tNjV2wjQ
Wasmはサイズがね…
ごく最近のニュースだと、Prismaが実装をRustからTypeScriptに置き換えたのが話題になってたな
デプロイ時のサイズが問題になる分野だから妥当ではあるけど

フロントだとビルド時間の長さが課題になりそう
UIの位置やサイズを微調整したい場合でも、確認のために毎回重ためのビルドが必要になると面倒じゃない?
2025/05/10(土) 15:54:13.08ID:Mv0kFcWv
>>338
UI 記述言語で書いて形になってから Wasm (にコンパイル可能なプログラミング言語) に変換するような仕組みもある。
340デフォルトの名無しさん
垢版 |
2025/05/10(土) 15:57:42.52ID:JFaFsVis
>>337
RPCじゃなくてUIの描画込みの話だぞ
同じフレームワーク内でクライアントサイドのレンダリングとサーバーサイドのレンダリングを繋げたりできる
>>333 が書いてるようなもの
2025/05/10(土) 16:03:27.89ID:M/F23qJj
>>339
色んなパターンのうちそのUI記述言語を採用してのSSG/CSRのレンダリングコード共通化が有力の一つだよね
サーバーサイドからJavaScriptを完全排除してパフォーマンスを上げる方向性が正しいので
2025/05/10(土) 17:37:33.64ID:K3qP9/A2
web開発の現場に言ってRustとwasmの組合せを使いなさいと言っても鼻で笑われるだけ
2025/05/10(土) 17:57:46.62ID:GFzLbQz1
精神障害児で周りを振り回す無能です。
この業界で俺は死ぬかも。
悲しみ
2025/05/10(土) 17:58:59.59ID:GFzLbQz1
自慢したりとか怒ると自分の首を絞める。
死ぬ。
俺はプログラミング向いてないが、この業界に行くぞ。
どうも死んだほうが良い人間です。
2025/05/10(土) 18:01:36.75ID:GFzLbQz1
rustも分からんし三年間学んでプログラム書けない無能です。
質問ある?
2025/05/10(土) 18:01:51.09ID:GFzLbQz1
もちろんrustも分からん。
2025/05/10(土) 18:03:05.22ID:K3qP9/A2
rust is must
2025/05/10(土) 18:03:13.86ID:GFzLbQz1
そもそもこの世の中教えてくれない人が悪いと奥底で思っている無能。
人との縁を切って一人で後悔しがち。
ゴミ人間だよ!
2025/05/10(土) 18:04:21.67ID:GFzLbQz1
俺はガイジだ…
ガイガイガイジのガガイのガイ。
ガイジのボッチのやる気のある無能。
ゴミカス死んだほうが良い。
2025/05/10(土) 18:05:59.49ID:GFzLbQz1
がががーがががががががががががが~が~が~障害児
2025/05/10(土) 18:06:29.45ID:GFzLbQz1
我はガイジガガガイジ天地入れざる障害児
2025/05/10(土) 18:11:29.44ID:K3qP9/A2
不勉強で天地入れざると言う言葉を知らなかったが
明治とかの言葉なのかな?

学があるね
2025/05/10(土) 18:22:28.75ID:GFzLbQz1
>>352
ありがとう!
言葉を表面上の意味しか捉えられないガイジだけど、他人に迷惑かけるのは良くないよね…
スレ荒らしてすみませんでした…
2025/05/10(土) 18:23:33.01ID:K3qP9/A2
どうせ俺以外誰も見ていないから好きなだけ荒らせばいいと思うよ
2025/05/10(土) 18:23:55.63ID:GFzLbQz1
おちつきました。すみませんでした…
2025/05/10(土) 18:29:52.94ID:Mv0kFcWv
>>352
抜刀隊の歌詞にあるから知ってた。
ミリタリー趣味の人ならまあまあ知ってるんじゃないかな。
私は音楽側の趣味で知ったんだけど。
2025/05/10(土) 18:58:55.45ID:Pq21kD+5
夏休みはまだ早いぞ
2025/05/10(土) 19:15:47.47ID:K3qP9/A2
業界には何らかの形でメンタルを病んでる人間が50万人以上いると思う
2025/05/10(土) 19:53:17.55ID:39sc/8ak
このスレは特殊だから騙されないように
2025/05/10(土) 20:19:31.95ID:K3qP9/A2
自分は悪質でなければ荒らしを許容するスレにいた

そこでは荒らしとも楽しく話してそのうち荒らしが真面目なコテになったりしていた
みんなもうどこかに行ってしまったのが残念だけどそれも運命だなと
361デフォルトの名無しさん
垢版 |
2025/05/10(土) 20:45:49.44ID:+8W9QSNf
病院行けよ
俺は今日行ったぞ
2025/05/10(土) 21:12:29.85ID:RAkiMuTX
unsafeなライブラリのラッパーでsafeに設計するのってどうやるの
363デフォルトの名無しさん
垢版 |
2025/05/10(土) 21:22:13.51ID:JK+pyj3t
F-22 ada
F-35 C++
2025/05/10(土) 21:48:52.45ID:Mv0kFcWv
>>362
結局のところ、外側から見て safe な振る舞いになるようにするというだけ。
場合によっては不可能なこともあるけど具体的な状況がわからないとなんとも言えない。
2025/05/10(土) 21:52:02.98ID:arKsDnK7
>>362
未定義動作の可能性を排除するために必要な条件を全部チェックする
panicとデッドロックはOKらしい(停止すれば許される)

No matter what, Safe Rust can't cause Undefined Behavior.
https://doc.rust-lang.org/nomicon/safe-unsafe-meaning.html
2025/05/10(土) 22:22:13.21ID:M/F23qJj
>>342
そういう低レベルな現場は無視してもいいんだよ
現在もJSのフレームワークは乱立しながら変化進化し続けているように多様性がある
今回の件と関係なくwasmを既に併用しているところも多いからその点もだいじょうぶ
2025/05/10(土) 22:48:31.18ID:K3qP9/A2
誰がその多様性とかについていくのか?
お前が低レベルな現場と呼ぶ環境だろう?
368デフォルトの名無しさん
垢版 |
2025/05/10(土) 23:29:16.41ID:tNjV2wjQ
フロントにRustを使ってる「高レベル」なプロダクトって何があるの?
バックエンドなら分かるけど
その基準なら世の中のビジネス的に成功してるサービスの殆どが低レベルでしょ
2025/05/11(日) 00:02:17.99ID:1LIDIycD
>>364-365
関数の内側にunsafe書くだけ?
それだと見た目はsafeだけど内部はunsafeだから実質的にunsafeではないか?
2025/05/11(日) 00:43:43.27ID:qcGHvz/x
子供が使うバリアの高度版
2025/05/11(日) 00:48:37.35ID:kSJwinQr
内部で使う関数がunsafeである理由を理解して未定義動作の可能性を排除できてないなら
外側の関数にもunsafeをつける約束
372デフォルトの名無しさん
垢版 |
2025/05/11(日) 00:49:47.08ID:/xxB2yrb
unsafeは「危険」というよりも「コンパイラが安全性をチェックできない」ブロックだと思う
内部的に unsafe を使ってても、ラップした型や関数を外から使う分には安全とみなせるなら問題ない

理想的には
・内部的にunsafeを使っているけど、外から見れば安全 -> unsafe を外して良い
・内部的に unsafe を使っており、かつその関数は利用者が適切にコードを書かないと危険 -> その関数も unsafe とマークするべき

標準ライブラリやきちんとしたライブラリは基本的にこの法則に従ってる
問題はユーザーのコードで、書こうと思えば「問題はあるけど unsafe とマークされてない関数」は作れてしまう
そこは自己責任の問題

けど、セグフォみたいなバグが実際に起きた場合に、直接の原因となるコードは unsafe ブロックの中に絞れる (ことが多い) から、それでもかなりマシだと思う
C++だとコード全体が unsafe ブロックの中にあるようなものなので…
2025/05/11(日) 00:50:52.82ID:10YJ6Wg3
>>365
Undefinedの有無もなにも標準化されてないからなぁ
2025/05/11(日) 00:52:29.93ID:qcGHvz/x
バリア!バリアしたから大丈夫!
2025/05/11(日) 01:02:20.84ID:kSJwinQr
未完成らしいけど目安
https://doc.rust-lang.org/reference/behavior-considered-undefined.html
2025/05/11(日) 01:18:27.03ID:OAc7wOSx
unsafe = Rustコンパイラが安全性を保証してくれない = プログラマが自分の責任で安全性を保証しなければならない = C/C++と同じ状態

逆に言えば、safeつまりunsafeではない、とは、Rustコンパイラが安全性を保証できる状況にしないといけない
未定義動作がないことが根幹にある
だから未定義動作とは何か、どういう時に起きるのか、どうすれば無くせるのか、が最重要
それを完全に理解するまでは、関数内部でunsafeを使って外をsafeな関数、にする判断をしてはいけない
2025/05/11(日) 01:20:41.47ID:Vd6Ddgx+
unsafe functionは使いどころが微妙だね
unsafe指定の理由が不明だし基準も開発者次第でまちまち
C#みたいにunsafeにはコンテキストとしての役割しか持たせない方が一貫性がある
呼び出し元に注意させたいんならunsafe_hogeみたいなネーミングルールで十分だった
2025/05/11(日) 01:31:46.55ID:kSJwinQr
バリアより感染症対策で流行ったゾーニングのイメージだな
感染リスクのあるunsafeゾーンと安全なsafeゾーンがあって
unsafeからsafeに持ち込むときは消毒(検査)が必須みたいな感じ

運用が雑になって事故るのも同じ
379デフォルトの名無しさん
垢版 |
2025/05/11(日) 01:36:40.21ID:/xxB2yrb
>>376
> それを完全に理解するまでは、関数内部でunsafeを使って外をsafeな関数、にする判断をしてはいけない
それをやると、一つの関数を unsafe にした時点でそれが呼び出し元に波及して、プログラム全体に unsafe が広がらない?
深刻なバグがコード内のどこで起こってるかを特定したい場面だと、 unsafeは本当に unsafe な操作をしてる箇所に限定されてた方が探しやすいと思う
2025/05/11(日) 01:47:17.60ID:OAc7wOSx
>>377
呼び出し元に注意を持たせるものではない
unsafeブロック(関数)内はRustコンパイラが安全性を保証しない
それ以外の部分はRustコンパイラが安全性を保証してくれる
C/C++はプログラム全体がunsafeブロック内にある状況と同じと説明できる

>>379
そうだよ
理解するまではunsafeを使ったらunsafeな関数しか作れない
safeな関数にしてよいかどうかの判断が一番大事なところ
勝手に判断してsafeにしたらプログラム全体に問題が波及しかねない
まずは理解してからunsafeに手を出しましょうということ
2025/05/11(日) 02:07:37.23ID:OAc7wOSx
「unsafe利用箇所をunsafeブロックで囲えば終わり」は、よくある勘違い
まず一次的には「それを含む関数もunsafe fnにしなければならない」が正解
その上で「内部でunsafeを使ったことで生じる問題が、その関数単独でまたはモジュール全体で閉じ込めることができているかを判断できてから、ようやくunsafe fnをfnにできる」が正解
2025/05/11(日) 06:19:57.03ID:Skl5F9WB
unsafeな理由をブロック外部で処理すりゃsafeに出来るじゃん
たとえばなraw pointer参照が危険だとして渡す前にスタックまたはヒープ内の正しいアドレスであることを確認して引数を渡すとかの、外部でのチェック(unsafeに至る条件の排除)すれば無毒化できるわけで

そんなんC言語だって変わらんやん。Cで汎用的な関数書いたらほぼほぼポインターだらけになるし、ポインターのチェックせずに使うなんてことは危険すぎてありえんのと一緒やん

C言語にrustコンパイラーのunsafeの枠組みだけ組み込んでsafeじゃなきゃエラーにしますにしたら、コードの5割ぐらいはunsafeになってそうやけどな。標準ライブラリーからしていくらでも危険なアクセスできるし
2025/05/11(日) 07:03:44.41ID:Ix0M85KV
>>382
Rustでプログラミングしたことない人には理解できないのは仕方ないが的外れ
そのCで手動でチェックをして使うようなことは
Rustではunsafeを使わずとも普通に書くことができて自動的にチェックしてくれて安全かつ楽

むしろRustでunsafeを使う頻出パターンの一つは真逆
その自動チェックを無くすためにunsafeが使われる
例えばあるアルゴリズムで既に自動チェックされて既に安全なものがアルゴリズムの都合で二重に自動チェックされてしまいコンパイルでの最適化でも消えないとする
その2回目の自動チェックを無くすためにunsafeを使う
もしそのアルゴリズムが1つの関数で完了するならばその関数外に影響はないため
関数内部でunsafeを使っていても関数自体は外向けにsafeにすることができる
そのアルゴリズムで2回目の自動チェック省略が常に正しく安全なことはプログラマが安全性を保証することになる
これがunsafeを用いて極限まで速くしつつ安全な関数を生み出すRustの典型的なパターン
2025/05/11(日) 08:49:42.45ID:tAEYEseM
https://doc.rust-lang.org/book/ch20-01-unsafe-rust.html
これが全て
unsafe function に関しては、長文複おじが主張するほどunsafeを含む関数に対して積極的に指定すべきものではなく、
むしろ極力safeとしてラップすることを推奨するトーンで書かれているように感じる
「unsafe functionは呼び出し元に注意させるためのマーク」という解釈は適切であり、常識的に考えて中でunsafe使ってようと呼び方によって未定義動作が生じるような関数はそもそも作るべきではない
2025/05/11(日) 09:06:54.66ID:qcGHvz/x
unsafe指定の理由が不明って斬新な視点だと思うけどね
他の言語でunsafe使ってるから意味は理解出来る
2025/05/11(日) 09:11:42.89ID:1l4O+k/P
>>384
逆だぞ
未定義動作が発生しうるパーツがunsafe関数
そのパーツを上手く使ったり組み合わせたりして未定義動作を発生させなくしたものがsafe関数
2025/05/11(日) 09:15:33.06ID:qcGHvz/x
変わった人が集まって3行で済んでいた話を広げていく
2025/05/11(日) 10:06:07.52ID:WmmDZjaJ
>>368
無いから自演してまでしてRustを盛り上げようしてる
2025/05/11(日) 10:11:53.93ID:kgU6ATNU
ここスレが立って1週間で300レスかよ
さすが究極のプログラミング言語だけあるな
関心持つ人多すぎ
2025/05/11(日) 11:15:42.58ID:UTf8BgbA
>>369
その理屈だとRustで描かれたコードはすべてunsafeだ
391デフォルトの名無しさん
垢版 |
2025/05/11(日) 11:22:17.69ID:u8yQJoO0
>>389
何なんだよこの気持ち悪い複オジのレスはw
2025/05/11(日) 11:30:45.60ID:UTf8BgbA
>>383
borrow mut な部分を unsafe {} で囲むとコンパイル通せるんだっけ?
2025/05/11(日) 11:38:18.14ID:B7Jyctor
>>392
unsafeであろうとRustの参照ルールは変わらない
ナマポ受給は可能
2025/05/11(日) 11:38:36.95ID:qcGHvz/x
unsafeで囲むとその中で危険な必殺技が使える
強力だけどその間はリミッター解除され保護されていない状況にも近い諸刃の剣
それを呼び出す部位もunsafe扱いしたらmainまでunsafeになり危険極まりないw
2025/05/11(日) 11:48:02.09ID:2w2LR5Qj
やってることはC言語でコメントにunsafeって書くのと変わらねえじゃん
2025/05/11(日) 11:53:03.94ID:qcGHvz/x
違いが判らないなら理解力が不足しているだろう
unsafeだと通常は許されないことが可能になる
2025/05/11(日) 12:00:44.68ID:B7Jyctor
>>395
全く異なる
Rustではunsafe部分のみ人間が安全性を保証する義務がある
それ以外はRustの言語仕様により自動的に安全性が保証される
一般プログラマはunsafeを使う必要がない
2025/05/11(日) 12:19:58.74ID:2w2LR5Qj
>>396
俺が言ってる意味がわからない方が理解力が不足してるかもよw
2025/05/11(日) 12:37:43.07ID:qcGHvz/x
>>398
unsafeじゃない部分を無視してそれを言うのは意味がないこと
typescriptで書かれたコードがjsに変換されてそれに型が残っていないと言うのと似たような主張
2025/05/11(日) 12:41:23.78ID:qcGHvz/x
他の言語でもunsafe以外では保護されている部分もunsafeで制約が解除されている
2025/05/11(日) 13:01:06.68ID:bksu5Opa
>>369
unsafeな関数には関数を呼び出す側が守るべきsafetyルールがそれぞれ定義されている
ラッパー関数がそのルールを関数内のみで不変的に守ることが保証できるのならsafe
できないなら上位で保証してもらう必要があるからunsafe

いずれにしてもunsafe関数を呼び出す側が守るべきsafetyルールは
アプリケーションのどこかの段階ではすべて守られることを保証しないといけない
2025/05/11(日) 13:53:51.61ID:UTf8BgbA
>>396
その理屈だと二重の borrow mut も unsafe{} で許可してもらえるととってもありがたいんだが
2025/05/11(日) 14:09:26.63ID:ARIO0JMx
>>402
unsafeの使用は安全性を守るためだけに使われるのだ
安全を脅かすためにunsafeを用いてはならないのだ
2025/05/11(日) 14:48:00.02ID:0bg/IfOK
>>396
unsafeブロック内でも外でもRustのルールは基本的に同じ
何でも出来るようになるわけではない

unsafeブロック内でのみ出来ること
・unsafeな関数やメソッドの呼び出し
・unsafeなトレイトの実装
・生ポインタの逆参照
・共有体フィールドの読み取り
・可変静的変数の読み書き
このたった5つのみが許可される
2025/05/11(日) 16:26:32.64ID:qcGHvz/x
文意を取れない病気なのだろうか?
2025/05/11(日) 17:38:39.22ID:9sJVUicm
まあ病気だろうね
2025/05/11(日) 20:01:04.55ID:8gkdAC4l
unsafeってそんなに不味いんですね...
2025/05/11(日) 20:20:01.31ID:LzpU3Ybb
特殊な環境を抜きにすると普通の開発でunsafeが使われることはほとんどない
むしろコンセンサス無くunsafeを使う人がいたら問題児認定されても仕方ない
ボトルネックがあってunsafeを使うことで安全かつ劇的に改善されるなどの共通認識が出来たら注意深くみんなの監視の下で使われる
2025/05/11(日) 20:23:01.43ID:8gkdAC4l
特殊な環境って...具体的にどういうのがあるんですかね...
2025/05/11(日) 21:10:41.96ID:kSJwinQr
安全に使うための条件が分からないunsafeは不味い
標準ライブラリのunsafe関数は大体Safetyで明示してる
2025/05/11(日) 23:58:19.36ID:UbETPlY9
>>378
メモリに対するバリアはunsafeを必要とせずにsafe Rustで使える
モデルはC++と同じでstd::sync::atomic::AcquireとReleaseでバリアを構成する
412デフォルトの名無しさん
垢版 |
2025/05/12(月) 11:03:30.61ID:zCv6/zTu
OS提供のヘッダーファイルと連携しないといけないからね
rustだってOSのAPIとして使われるようになったら今の形のままでは済まされないはず
2025/05/12(月) 11:09:27.48ID:pU5GgKWj
その頃にはもう人間がAPIを管理することはないだろうから我々が気にする必要はない
2025/05/12(月) 11:22:05.12ID:0DBz50aj
atomicを使える局面なら最速を狙えるが
素人は無難にMutexにしとけ
2025/05/12(月) 11:51:31.03ID:pU5GgKWj
処理が性能上クリティカルじゃないことが分かってる上で手を抜くのはいいけど、必要に応じてロックフリーを実装できないレベルならさすがに言語の選択から考え直すべき
場合によっちゃゲロ遅スクリプト言語でロックフリーに書かれたコードより遅くなるぞ
2025/05/12(月) 11:55:41.87ID:iYjqcrbw
誰もメモリバリアの話なんかしてないだろストローオジ
417デフォルトの名無しさん
垢版 |
2025/05/12(月) 11:57:36.67ID:zCv6/zTu
>>415
その通り
2025/05/12(月) 12:21:58.09ID:0DBz50aj
>>415
ロックフリーにできるならatomicを使う方が当然よい
しかし素人がABA問題からRISCのアクセス順序崩壊まで様々な問題を理解しつつ
compare_exchange系などを正しく使いながら各々のRelaxed/Release/Acquired/SeqCstを最善に選べると思えない
複数のatomicが複雑に絡むとロックフリーはプロでも間違える歴史を繰り返してきた分野だ
さらに言えばatomicよりMutexが有利になるケースの存在も理解して適切に選ぶ必要がある
プロでも単純明快な状況でない場合はまずMutexで実装して後から見極めた上でatomicにするかどうか決める
これらの知識を身に付けるまで素人は無難にMutexにしとけ
2025/05/12(月) 15:44:13.42ID:zCv6/zTu
unsafeについて
https://www.youtube.com/watch?v=lx86iUb2xiI
2025/05/12(月) 22:25:38.81ID:/cK4qYsj
https://play.rust-lang.org/?version=stable&mode=debug&edition=2024&gist=18df19416bd6d705356724788636ab13
これをResultのmapとかand_thenとかを使ってスッキリ書く方法ってないでしょうか?
421デフォルトの名無しさん
垢版 |
2025/05/13(火) 00:03:38.80ID:tnscGN8Z
>>420
let z = x.or(y).or(Err("ko"));

2025/05/13(火) 00:12:19.92ID:8MDWNT4X
>>421
x=Some(false), y=Some(true)のときz=Some(false)になるからダメじゃね?
2025/05/13(火) 00:18:54.30ID:8MDWNT4X
すまんOptionとResult勘違いしてた
424デフォルトの名無しさん
垢版 |
2025/05/13(火) 00:29:45.70ID:tnscGN8Z
>>422
たし🦀

let z = x.and_then(|b1| y.map(|b2| b1 || b2).or(Ok(b1))).or_else(|_| y.or(Err("ko")));

直したらこんなんなったんだが
matchが一番わかりやすい気がする
2025/05/13(火) 00:30:51.37ID:hUpkj0hB
x.map(|x| y.map_or(x, |y| x || y)).or(y).or(Err("ko"))とかになるからmatch以上にスッキリ書く方法はないんじゃないかな
2025/05/13(火) 00:46:34.37ID:8MDWNT4X
一応x,yが増えた時のためにイテレータ使うパターン
let z = [x, y].into_iter().filter_map(Result::ok).reduce(|b1, b2| b1 || b2).ok_or("ko");

2つならmatchでいい気がする
2025/05/13(火) 07:26:56.06ID:Ubv8VExT
たくさんある時はOk(true)でショートカットしたいケースが多そう
例えば素直に

let mut is_ok = false;
while let Some(x) = iter.next() {
 match x {
  Ok(true) => return x,
  Ok(_) => is_ok = true,
  _ => (),
 }
}
is_ok.then_some(false).ok_or("ko")
428デフォルトの名無しさん
垢版 |
2025/05/13(火) 07:31:54.57ID:RE8LmKUD
幻聴で半分人間半分AIと話していたので
1 私に成りすまして話しているようにいさせている
2 成りすましの声でも身体攻撃の部分は私本人も同じ状態に陥っている
3 犯人が使用していたとしても清廉潔白の人物のように見せれる

【2025年最新】自然な声の音声読み上げソフト5選!AI技術で ...
https://ondoku3.com/ja/post/natural-voice-software/
※インストール不要で無料で5000文字まで複数声質の音声合成エンジンで読み上げ可能

ローカルで各種AIモデルを実行できる無料ソフト「llama.cpp」がマルチモーダル入力をサポートし画像の説明などが可能に
2025年05月12日 20時00分
https://gigazine.net/news/20250512-llama-cpp--multimodal-vision-support/
>>llama.cppの詳細情報は以下のリンク先で公開されており、ソースコードやインストール手順などを確認できます。
※画像を認識させてテキスト入力が可能

ローカルでAIを動かして「コード生成」「ウェブ上の情報収集」「ファイル検索」などの操作を実行できるAIエージェント「AgenticSeek」、無料で使えてプライバシーも守れるのが強み
2025年05月05日 16時02分
https://gigazine.net/news/20250505-agenticseek-local-ai-agent
>>AgenticSeekのインストール手順は以下のページにまとまっています。
※複数サイトからレポート作成可能
2025/05/13(火) 10:17:11.92ID:C/NhftFY
>>422-423
このようにRustは面倒
2025/05/13(火) 10:29:55.43ID:Oaa+uu3G
>>429
その点ではRustが最も優れています
2025/05/13(火) 11:06:20.16ID:C/NhftFY
優れてるなら間違わないように設計汁
2025/05/13(火) 11:13:08.18ID:Oaa+uu3G
>>431
Rustは強い静的型付け言語なので間違えることはありません
2025/05/13(火) 12:48:35.47ID:HDWw9il3
>>429
わかるわ
ResultやOptionはわりと継ぎはぎだらけでasyncでの使い勝手もあってコアな開発者でもコンビネータよりもmatch推奨する人が増えてる
2025/05/13(火) 14:00:36.56ID:EnWQFSGx
>>433
継ぎはぎはない
根本の理解を間違えているからそんな変な発想になる

基本はmatchで書くのが当然
例えば
match foo {
 Some(x) => Some(f(x)),
 None => None,
}
こう書いた時に意味するところはSome時にfによる写像
だからこれをfoo.map(f)と略記できるというのが根本
短く記述でき可読性も上がる

asyncでの使い勝手というのも同様
このfの形とクロージャでのキャプチャなどの制限を満たせば使えて満たさなければ使えないだけの話
matchを推奨しているのではなくmatchが基本
そのうえで可読性がよくなるメソッドが適用できるならそれを使う
メソッドチェーンもそれで短く可読性が上がるなら使う
>>420はmatchのままが可読性がいい
それだけの話
2025/05/13(火) 14:18:16.15ID:C/NhftFY
だからRustは清書用(キリっ)って言われるんだろうね
2025/05/13(火) 14:28:55.14ID:EnWQFSGx
>>435
そんな話は聞いたことない
今回の話との関連すら不明
2025/05/13(火) 16:46:51.79ID:JaffXz8x
>>434
またバカおじの意味のない長文
アンチRust活動は他所でやれ
2025/05/13(火) 18:59:19.16ID:XAG2WzZA
>>433
確かに最初の頃に比べると
イテレーター&コンビネーターの使用頻度がやや下がって
代わりにループ&マッチの使用頻度が上がったな

冗長でダサく感じるけど汎用性が高まる場合が多い
2025/05/13(火) 19:20:56.54ID:GUUfpWjP
早期脱出はループで書くほうがわかりやすいものやループでしか実現できないことも多い
特にラベル指定など
2025/05/13(火) 19:50:54.91ID:r+Qycp2R
実際どうなるかなんてその時次第だから

今回は結果をまとめて出してるんだろうけど
それぞれの実行結果で制御が加われば別に結果をまとめる必要はない場合もでて来るので綺麗に書ける必要はゼロ
2025/05/13(火) 19:51:24.47ID:QxvoeLWz
>>420
ちょっと主旨から外れるけど、matchは
match (x, y) {
(Ok(b1), Ok(b2)) => Ok(b1 || b2),
(Ok(_), _ ) => x,
_ => y,
};
まで整理できますね。
2回評価するのが嫌なら二段matchがいいかと。
2025/05/13(火) 19:57:18.96ID:r+Qycp2R
綺麗だねw
2025/05/13(火) 20:06:13.63ID:QaPl6AoM
実際にはOk/Err得られた時点で既に実行済みだからその後の工夫は効果薄くて
>>427のような早期脱出になるかな
next()呼び出しで実行されるとして
2025/05/13(火) 20:08:00.80ID:r+Qycp2R
関数の実行結果x,yがあります
それぞれのx,yが成功していればそれを出力してください
ただしx,y共に成功であれば結果を論理和して出力してください
x,y共にエラーである場合はエラーを出力してください
2025/05/13(火) 20:15:06.96ID:hmzDHhd1
結果が揃っていたら悩むところないよな
現実には結果が一部しか出ていない段階で欲しい結果が得られたから以降は打ち切り、または、エラーが出たから打ち切り
2025/05/13(火) 20:46:34.57ID:QxvoeLWz
二段matchも書いてみた。
let z = match x {
Err(_) => y,
Ok(false) => match y {
Err(_) => x,
_=>y,
},
_ => x,
};
普通はこんな書き方しないだろうけど。
447デフォルトの名無しさん
垢版 |
2025/05/13(火) 21:23:14.88ID:tnscGN8Z
まあしかし
元の

let z = match (x, y) {
(Ok(b1), Ok(b2)) => Ok(b1 || b2),
(Ok(b1), Err(_)) => Ok(b1),
(Err(_), Ok(b2)) => Ok(b2),
(Err(_), Err(_)) => Err("ko"),
};

これが一番可読性高くて網羅性も一目でわかっていいと思うわ
2025/05/13(火) 21:30:58.39ID:upONs1LW
結局のところは意図が表れていて読み取りやすいことが重要で、スマートに書けてても見た他人がなんのこっちゃとなるようではあかんからな。
2025/05/13(火) 22:06:17.20ID:QxvoeLWz
>>446
蛇足だけど、こっちの方がいいか。
let z = match x {
Err(_) => y,
Ok(true) => x,
_ => match y {
Err(_) => x,
_=>y,
},

};
2025/05/13(火) 22:11:12.56ID:r+Qycp2R
他の言語でもあるんだけど元々シンプルに書けていたものを
その言語特有の機能で書き換えたい勢がいる

パズルとしては別に構わないけどそれでどれだけ時間を費やすのか考えてなさそう
2025/05/13(火) 22:17:38.03ID:tYuP2+yw
>>441
さすが汚コーダーと呼ばれるだけはあるな
2025/05/14(水) 00:10:10.91ID:DnF/2YAd
汚コーダーと言いたい気持ちもわかる
俺たちの時代は変数名は一文字で可能ならワンライナーで処理が終わるように工夫しまくってた。2行だったのが1行79文字に収まったぞ!的な
この美的感覚を共有できる仲間がいてくれて幸せである
2025/05/14(水) 00:21:08.28ID:mNhYSwgp
両方Okの場合だけx.or(y)と違う動作をさせたいと考えるならそう書けばいいと思う
match (x, y) {
(Ok(b1), Ok(b2)) => Ok(b1 || b2),
_ => x.or(y),
}

入力が増える場合は上の処理を関数にしたものをループ内で呼ぶ
forループとか使っとけばショートサーキットも簡単

あと本当にErrを捨ててもいいんであればResult<bool, &str>じゃなくて
Option<bool>を受け取って返す形にしておいたほうが扱いも楽だしスッキリする
2025/05/14(水) 00:32:45.62ID:mNhYSwgp
>>426のはOption<bool>化して最終的にNoneならErr(“ko”)にfallbackさせてるから
読みやすいかどうかは別にして考え方としてはわりと好み
2025/05/14(水) 00:34:10.14ID:JvBAAG1/
結局>>427でええやん
456デフォルトの名無しさん
垢版 |
2025/05/14(水) 13:32:41.36ID:tetNkY+Z
AIチャットボットに「偽の記憶」を植え付けることで仮想通貨を盗む攻撃が報告される
2025年05月14日 12時00分
https://gigazine.net/news/20250514-web3-ai-agents-with-fake-memories/
>>プリンストン大学の研究チーム

過去に流通した誤情報に接触した人の半分が「正しい情報」と思っていて25%が何らかの手段で拡散している
2025年05月14日 11時25分
https://gigazine.net/news/20250514-fake-news/
>>総務省
2025/05/14(水) 16:29:27.92ID:plMg3hee
「Firefox」の開発リポジトリが「GitHub」に移行
https://forest.watch.impress.co.jp/docs/serial/yajiuma/2013958.html
https://github.com/mozilla-firefox/firefox
JavaScript 28.5%
C++ 28.1%
HTML 22.0%
C 10.5%
Python 2.9%
Kotlin 2.5%
Other 5.5%
458デフォルトの名無しさん
垢版 |
2025/05/14(水) 17:34:57.56ID:Ga6mti+e
5次方程式に新公式を発見:ルートを超える新理論
2025.05.14 17:05:56 WEDNESDAY
https://nazology.kusuguru.co.jp/archives/177496
>>オーストラリアのニューサウスウェールズ大学(UNSW)で行われた研究
プログらまーも覚えるとよい

125年越しに解決したかもしれない「ヒルベルトの第6問題」とは?
2025年05月10日 15時00分
https://gigazine.net/news/20250510-hilberts-6th-problem-solved/
2025/05/14(水) 19:02:58.62ID:mIHvW3MM
Mercurialが積極的にRust化を進めていたのは少なからずFirefoxの影響があったと思うが
酷い梯子外しで草
2025/05/14(水) 19:23:03.41ID:+nUwZiWy
Mercurial は開発履歴管理で Git はパッチの連鎖管理という理念の違いがある。
それって結局は同じことじゃないのか……と思うんだけどやっぱり違うんだよな。
概念的に整理されていて理解しやすいのは Mercurual だけど、実務的に必要なのは Git。
ツールがどんな言語で書かれているとかはあまり関係なく、大規模開発だと Git のほうがやり易いというとても簡単な話。
2025/05/14(水) 20:24:41.62ID:u4PNt/Ez
Rust用のJITコンパイラ・インタプリタ的なものはありませんか?
PythonやJavaScriptのようにコンパイル時間を待たずにデバッグしたいんです。
462デフォルトの名無しさん
垢版 |
2025/05/14(水) 20:46:01.38ID:Msome2l0
RustもGo言語のように、消えてゆく運命ですか?
2025/05/14(水) 20:52:07.16ID:W1FBX8Fx
>>461
371 デフォルトの名無しさん sage 2025/05/14(水) 20:25:52.45 ID:u4PNt/Ez
TypeScriptを(C++等のように機械語に)コンパイルする方法が知りたいです(´・ω・)
2025/05/14(水) 20:55:34.77ID:FZDf1LBL
>>462
C++標準委員会がRustを参考にしたコーダー用Safe C++(C++呼び出し専用の限定版)を作ればC++に回帰する可能性があるけど、そんな動きは無いから当面安泰じゃない?
2025/05/14(水) 21:44:29.60ID:iGtYlO1p
コンパイラから全ソースコードが見えていて好きなだけ時間を使ってチェックさせるのか
商用を含め様々な出所のコンパイル済みバイナリでもリンク(静的、動的)して動かすのか
役割と責務が違う
2025/05/14(水) 23:43:28.56ID:1UsCEMhi
>>457
FirefoxはメインがC+のまま変わっていない
Rust化した部分はレポジトリが別
2025/05/15(木) 10:01:15.43ID:6KG6JIoe
>>460
それはよくある勘違いで、Gitのコミットはパッチではなくスナップショット
常に完全なスナップショットを持っているためにコミット間の差分の導出は極めて容易であり、
あたかもGitが差分ベースであるかのような使い勝手のコマンド体系を実現することに成功している
その結果>>460のような誤解も多い
2025/05/15(木) 10:04:11.94ID:IIQRq9O2
>>467
それは実装上の話で、ここではパラダイムの話をしてる。
2025/05/15(木) 10:47:00.15ID:HgN+lgjm
>>468
それ信頼できる出典ある?
仮にGitのコミットが(実装はさておきメンタルモデル上は)パッチだとしたら、rebaseやcherry-pickで新しいコミットが作られるのは変だと思わないのかな
2025/05/15(木) 11:20:07.09ID:0AOGTML/
Claude 3.7 with extended thinking 様によると

Gitはスナップショットベースのシステムで、各コミットはファイルシステム全体の完全なスナップショットを保存します(最適化されていますが)。一方、Mercurialは変更セット(changeset)という概念で差分ベースの履歴を管理します。

この根本的な違いがGitの操作モデルに影響しています。rebaseやcherry-pickが新しいコミットを作成するのは、Gitがスナップショットモデルを採用しているからこそ自然です。既存のスナップショットを新しい文脈に適用すると、新しい状態のスナップショットが必要になります。

パラダイムと実装は密接に関連しており、Gitの設計思想はLinus Torvaldsが述べているように内部データモデルから生まれています。このモデルがGitの分散性、ブランチ操作の柔軟性、大規模プロジェクトでの優位性につながっています。​​​​​​​​​​​​​​​​
471デフォルトの名無しさん
垢版 |
2025/05/15(木) 11:24:57.24ID:2L2gZoQV
>>447-448
記述量多いけど観る分には判り易い
2025/05/15(木) 11:31:00.68ID:2L2gZoQV
>>465
>コンパイラから全ソースコードが見えていて好きなだけ時間を使って

Cargo の build 遅いしディスクの容量も喰いまくる(消せるけど)
そこまでやるなら他人(自分のであっても別cratesのとき)のstruct/traitを組み合わせて追加しても良い仕様にして欲しいな
2025/05/15(木) 12:17:35.74ID:hNZNm9rA
>>472
Orphan Ruleが破れるのは致命的
第三者に勝手に実装されてしまう
これは必須ルール
2025/05/15(木) 12:44:18.74ID:IIQRq9O2
Rust の型システムの原型になった Haskell では Orphan Rule のような制限はないから技術的には制限しない選択も可能ではあるはずだけど
通常は避けるべきと考えられているし、警告も出るし、コンパイル時間にもかなり悪影響だし、良いことは少ない。

必須というほどではないかもしれないけど、あまりにも割に合わないとは言える。
475デフォルトの名無しさん
垢版 |
2025/05/15(木) 13:12:18.94ID:bGH4TqSk
Googleが開発した進化的AI「AlphaEvolve」は未知のアルゴリズムや未解決数学問題の新解法を発見可能、すでにGoogle内部ではAI開発やチップ設計の効率化に活用されている
2025年05月15日 11時06分
https://gigazine.net/news/20250515-google-ai-algorithm-alphaevolve/
2025/05/15(木) 13:17:27.73ID:hNZNm9rA
>>474
例えば第三者のクレートを利用した時
そこで標準ライブラリの型に対して標準では実装されていない標準ライブラリのトレイトの実装があっても通ってしまう
これは誤動作につながるからOrphan Ruleは必須かと
標準ライブラリ以外の型に対しても同様で第三者に実装権限を与えるのは禁じる必要がある
2025/05/15(木) 13:55:31.05ID:IIQRq9O2
>>476
それは攻撃やミスに対する脆弱性を封じるという意味で制約が必須と言ってる?
こっちは (技術的な) 実現可能性という意味で必須な制約ではない (があえて制約を無くすことのデメリットが大きい) と言ってるので主旨が異なる。
2025/05/15(木) 14:15:21.28ID:hNZNm9rA
>>477
Orphan Ruleなしでも脆弱性を封じることができるならば技術的な実現可能性があると言えるかもしれない
そうでないならばOrphan Ruleは必須
2025/05/15(木) 14:33:19.68ID:7KgPq9qv
グローバルに適用させようとしたらそりゃ問題が起きるわ
拡張をスコープにいれる場合はモジュール内にuseステートメント書けばいいだけ
2025/05/15(木) 14:47:58.27ID:O0mRpeHb
C#で言う拡張メソッドをやりたいのに、Orphan Ruleが邪魔をする
次のeditionでは廃止してほしいね
2025/05/15(木) 14:53:04.88ID:2JrqWc4h
脆弱性とか全然関係ないよな
2025/05/15(木) 14:54:41.56ID:DscPOsCc
>>479
それは違うよ
それは自分で拡張用トレイトを作って、自作以外を含めた任意の型に対して実装して使う時に、自分で範囲を限定する時の話だね。
そうではなく、普通に必要のためuseしている標準やクレートのトレイトが、勝手に第三者によって実装されてしまうことを防ぐのがOrphanルール
2025/05/15(木) 14:57:48.33ID:DscPOsCc
>>480
Rustでは、自由に拡張メソッド用のトレイトを自作して、既存の型に実装して自由にメソッド拡張できます。
Orphanルールは邪魔しません。
2025/05/15(木) 15:04:23.65ID:DscPOsCc
>>481
もしOrphanルールがないと、トレイトの作成者でも型の作成者でもない第三者によって、勝手に型にトレイトが実装されてしまうため、その実装によっては脆弱性が生じる可能性があります。
2025/05/15(木) 15:35:40.67ID:d3l5/VMs
>>484
トレイトの実装は可視性の指定をバイパスできないし、そもそも可視性はセキュリティのための機構ではない
その気になりゃ本来不可視なメンバにアクセスすることなんて普通に可能だし、
もしクレートの作者に悪意があって、利用者が不用意にバージョン上げる阿呆なら、サプライチェーン攻撃によってマルウェアを仕込むことなど造作もない
2025/05/15(木) 15:59:53.54ID:DscPOsCc
>>485
そんな悪意のある話はしていません。
第三者が公の型に公のトレイトを実装できてしまうと、その第三者にとっては意図通りの必要なことが実現できたとしても、他者にとっては必ずしもそうではないためその差異が穴になりうるという話です。
2025/05/15(木) 16:01:34.05ID:cOWHhYVA
>>480
既存の構造体に新しいメソッドを生やしたいだけならextension traitで可
既存traitに新しいメソッドを生やしたいならextension trait + blanket implで実質同じことが可
拡張メソッド1つじゃなくtraitと実装の最低2つを定義しないといけないがそんなに気になるほどではない

Swiftの拡張メソッドのように既存インターフェースに後から適合させるのはRustでは無理
2025/05/15(木) 16:08:57.33ID:cOWHhYVA
>>486
だからそれはグローバルに適用した場合の話でしょ
そりゃ問題起きる
2025/05/15(木) 16:19:46.85ID:DscPOsCc
>>488
理解できてないのかな?
例えば標準ライブラリのトレイトに話を限ったとしても、自分で使いたいからuseしたり、preludeで自動的にuseされたりするよね。
そのトレイトが標準ライブラリでは実装されてない型に対して、第三者が実装できてしまうことを防ぐのがOrphanルール。
標準ライブラリではない一般クレートに話を拡張しても同じ。
490デフォルトの名無しさん
垢版 |
2025/05/15(木) 16:39:03.48ID:kvgG4b4S
既存の構造体に既存のtraitを
2025/05/15(木) 16:52:22.68ID:clVHgL7i
barクレートとbazクレートがどっちもfooクレートに依存してて
それぞれで個別にimpl FooTrait for FooTypeを定義してたら
barクレートとbazクレートを両方使うときに衝突して困る
2025/05/15(木) 17:01:11.21ID:6KG6JIoe
>>489
それは型定義ともトレイト定義とも異なるクレートでのトレイト実装という現状禁止されている行為が仮に許可された場合、
コンパイルパスに入ってさえいれば暗黙的に実装がインポートされる仕様になる、とあなたが勝手に想定しているからでしょ
もし対応するなら、実装を含むモジュールを明示的にuseさせるような仕様になるだろうし、
そういった面倒を避けるためにorphan ruleがある、と考えることもできる
2025/05/15(木) 18:02:56.74ID:njVhCRvT
例えばu32型にその値を半分にするメソッドhalf()を生やしたいとしたら自作トレイトHalfを用意してu32に実装してやればメソッド拡張できて
そのトレイトHalfをuseすれば第三者もその恩恵に授かってhalf()メソッドを使えるわけだけど

仮にOrphan ruleがない世界だと
u32型には実装されていないstd::ops::Negトレイトも誰でも実装できてしまう
先ほどのhalf()メソッドはuse dareka::Halfした時のみ使えるから自己責任で済んだけど
今回は別目的でuse std::ops::Negしてる人にもu32型にneg()が生えてしまう
本来はu32型の変数xに対して-xはコンパイルエラーとなるけど
今回はneg()が使えて-xがコンパイル通ってしまう
しかも実装の内容によってはその-xの挙動が不明だ
2025/05/15(木) 19:36:05.04ID:IIQRq9O2
ポケモン協会は秘密にしてるけど、たぶんポケモン世界にはイジメ属性みたいなのもあって仲間ポケモンを自殺に追い込んだりしてると思う。
それとか孕ませポケモンがトレーナーをレイプしたりだとか、逆にトレーナーがポケモンと獣姦 (?) したりだとかいう醜聞もいっぱいあるに違いない。
ポケモン協会はそういうのを隠さずに公開すべき。
2025/05/15(木) 19:37:43.21ID:IIQRq9O2
ごめんなさい。
誤爆しました。
496デフォルトの名無しさん
垢版 |
2025/05/15(木) 20:29:13.48ID:QWJDxUqA
俺だってシャワーズとセックスしたいよ
2025/05/15(木) 22:09:10.96ID:p2LOH2jU
それはもはやトランスアニマルじゃねーの
いくら翻訳がグダグダだからってそこまで人間性失うのはいかがなものかと
2025/05/15(木) 22:20:07.26ID:HPgmxOUZ
>>457,466
ほかの言語と同じように外部ライブラリ/crateを除外してある今回の数字が正しそうね
2025/05/15(木) 23:29:18.99ID:7W7zR2tR
>>493
Orphanルールの説明で第三者による実装同士がぶつかりエラーを引き起こすためという話を見かけるけど
ぶつからなくても単独でもそういう支障があるんだよな
2025/05/16(金) 06:25:07.48ID:QL8B1Lzv
悲報!Rust版AV1デコーダーがCより5%遅い問題が解決できず、カネで解決しようとする
https://www.memorysafety.org/blog/rav1d-perf-bounty/
2025/05/16(金) 07:42:42.67ID:GIaLLXqf
>>500
詳細を見るとこれはRustとLLVMの改善に大きく寄与しそうだな
(1) Rustコードの問題
(2) Rustコンパイラの問題
(3) RustコンパイラからLLVMへの問題
(4) LLVMの問題
これらは密接に関係していて(1)を完璧にしていても
(4)の問題から逆連鎖して(1)で対応するためのコード調整をしなければいけないようだ
本件をきっかけに様々な改善が期待できるので世界全体に役立つだろう
2025/05/16(金) 07:44:33.05ID:GIaLLXqf
LLVMを用いている様々な言語にも恩恵ありそうだ

> 驚くべきことに、Clang 18 でビルドされたバージョンは、Clang 17 でビルドされたバージョンよりもパフォーマンスが劣ることがわかりました (~3% 遅い)。
> このリグレッションの原因は不明ですが、Clang全体で一貫性があり、対応するLLVMバックエンドを使用していることがわかりました。
2025/05/16(金) 08:19:21.12ID:ZrWbXhSM
Rust は将来的に LLVM をやめる計画じゃなかったっけ?
うろ覚えなので勘違いかもしれんけど。
2025/05/16(金) 08:21:41.68ID:QL8B1Lzv
>>503
GCC Rustは継続的にやってるみたいだけど、別にLLVMはやめないでしょ
2025/05/16(金) 08:42:23.59ID:QL8B1Lzv
今日公開のRust 1.87.0でio::pipeが追加された
今までなかったことが不思議
2025/05/16(金) 09:10:56.72ID:b2vWvm61
>>500
対象国に対して賞金が安すぎる
しかもRust処理系の方に手を入れた場合はアプリケーションの改善をした人と山分けになる可能性が高いし、
一般的な有効性を証明してRust処理系にマージされないといけないというのはハードルが高すぎる
残念ながら複おじが期待するような結果になる可能性は低いと言わざるを得ない
2025/05/16(金) 09:12:43.25ID:r8NIoUWT
>>505
Stdio::piped()が10年前からある
無名パイプはOS依存かつプロセス間だから汎用化は安定化に時間がかかったのかな
2025/05/16(金) 09:41:55.75ID:7mIpVS9r
>>500,506
フルで$20,000でも米国の1人月かぁ、しかも成功報酬だから最適化を舐め腐ってるけど
Rustに入れ込んでる一定数はひと山当てたい連中だから売名プロモーションとして参加するだろうね
2025/05/16(金) 11:10:05.92ID:wXSLcdK+
リンク先見たら初っ端からsafe rustを諦めているから
何の為のプロジェクトか意味不明になりかけている
2025/05/16(金) 11:35:21.65ID:1BoI6QFj
>>509
unsafeからsafeを創り出す新たな安全パターンを見つけたら、それを使うのは問題ない
その部分だけ徹底的に人の手で安全管理して、それ以外の安全をRustコンパイラに任せることができる
それらのうち特に汎用パターンを集めたものが標準ライブラリという視点もある
2025/05/16(金) 11:41:45.02ID:OoDj1+RH
今になって気が付いたじゃなくて、言語仕様で例外を投げられないから無視してただけでは
> We noticed that the existence of panicking code significantly increased stack usage. Similarly to how panicking/formatting code prevented crucial inlining in bounds checking code until moved out of the function, panicking code also increased stack usage and spills.

>>510
タラレバがでかい
2025/05/16(金) 11:42:09.71ID:ZrWbXhSM
>>509
標準ライブラリの内部でも unsafe はたくさん使われてるぞ。
unsafe をどう「閉じ込める」かが Rust プログラムの構成の肝心な部分だ。
速度チューニングのために閉じ込めきれなかったのなら失敗と言えるが unsafe がただちに悪いわけではない。
2025/05/16(金) 11:48:07.99ID:OoDj1+RH
panic(エラー処理)を関数内に収めるからregisterが足りなくなり易くなるからspillさせるためにスタック多めにして、コードサイズも大きくなるのは最初から分かってたでしょうよ
2025/05/16(金) 12:31:41.93ID:IgvVjYfn
unsafeは禁止なのにpanic!はOKって何考えて設計してんの
2025/05/16(金) 12:37:23.64ID:b58fLBSS
速度にシビアなコードを書く時は関数にpanic呼び出しが残っていたら当然負け
まずはpanicを生じさせないイテレータなどで書き
インデックスアクセスを避けられない時は様々な工夫とヒントをコンパイラに与えて境界チェックを回避
それでも回避できない部分が残れば最後の手段unsafe安全閉じ込め
他の言語なら全体の安全保証を捨てるか遅さを我慢するかの二択
2025/05/16(金) 12:56:20.34ID:O+6qQae6
一番初歩的なゼロ除算はchecked_divがidiomaticだけど、
ttps://stackoverflow.com/questions/66602948/is-there-a-way-to-catch-division-by-zero-errors-without-checking-in-advance

実際に0除算を実行してハードウェア例外を発生させるコードの例(回避できない部分と仮定)として、
> それでも回避できない部分が残れば最後の手段unsafe安全閉じ込め
>>515の言うこれをゼロ除算で具体化するとどうなるの?
2025/05/16(金) 13:18:06.79ID:b58fLBSS
>>516
除数をstd::num::NonZero型にするとpanicコードは入らない
2025/05/16(金) 13:42:02.34ID:QUtZlH+M
>>517
病気かな
2025/05/16(金) 13:49:45.88ID:b58fLBSS
>>518
実際にかつてそれで対応したことがありアセンブリコードも確認している
2025/05/16(金) 13:54:06.57ID:wj8lYFI5
>>519
要求されてるのは>>515「それでも回避できない部分が残れば最後の手段unsafe安全閉じ込め」™の具体例だからサッと出せば良い
2025/05/16(金) 14:18:57.81ID:b58fLBSS
>>520
safeなstd::num::NonZero使用で対応できているためunsafeの必要がない
2025/05/16(金) 15:05:55.72ID:L+lmGGRS
>>521
御託はもういいからお前はsafe縛りでAV1デコーダを書き直してCと同等の速度を達成してこい
2025/05/16(金) 15:14:15.36ID:b58fLBSS
>>522
金と暇を用意してくれたらな
それから最高速を求める時にsafe縛りの必要はない
unsafeを安全に閉じ込められる枠組みが見つかればそれを実行してきたのがRustの歴史
その恩恵で皆がsafe Rustでパフォーマンスを出すことができる
2025/05/16(金) 15:24:17.43ID:9BgWdn33
なんかよくわかんねーけどCより5%遅いらしいな
2025/05/16(金) 15:38:32.38ID:QL8B1Lzv
デコーダーの主要部分はC版の頃からアセンブラで書かれてて、Rustはグルーコードに過ぎないみたい
2025/05/16(金) 15:41:24.82ID:JWOdogbt
えぇ・・・
2025/05/16(金) 16:18:41.85ID:m6piKA++
pub const fn checked_div(self, rhs: Self) -> Option<Self> {
if intrinsics::unlikely(rhs == 0 || ((self == Self::MIN) && (rhs == -1))) {
None
} else {
// SAFETY: div by zero and by INT_MIN have been checked above
Some(unsafe { intrinsics::unchecked_div(self, rhs) })
}
}

NonZero使ったら最適化で分岐が消える場合があるってことだろうけど
チェックタイミングがNonZero化するときに移動しただけだよね
もしくは定数由来だからチェックが不要になったか
2025/05/16(金) 19:03:43.29ID:b58fLBSS
>>527
checkなくコストゼロでpanicもなく安全にu64 / NonZero<u64>の除算やNonZero<u64>→u64の変換などができる
ゼロ保証のない変数からNonZeroを作るには必ずチェックコストがかかるが以降は除数として何度使ってもコストゼロ

元が穴のないCコードならどこかで何らかの方法でゼロにならないことを保証しているはず
それに準拠する形を取ることができればCとRustは同じコストで同じ速さになる
もし元のCコードにゼロ保証する仕組みが全く見当たらないならばそれは穴のあるコードが見つかったことになる
2025/05/16(金) 19:13:36.61ID:bpgu73R/
>>528
病気だな。

要求されてる「それでも回避できない部分が残れば最後の手段unsafe安全閉じ込め」™の具体例を上げやすいように、
「それでも回避できない部分」を簡潔に作り出すのが手間なら、ループ最深部の(0かも知れない)除算を想定した上で「unsafe安全閉じ込め」™をサッと挙げたらどうですか?
と言う話のはずなのに、この受け答え。
2025/05/16(金) 19:16:32.12ID:b58fLBSS
>>529
unsafe使わずにsafe Rustで実現できている
何のためにunsafeを使えと言ってるのか理解できない
2025/05/16(金) 19:17:47.42ID:bpgu73R/
>>528
> それに準拠する形を取ることができればCとRustは同じコストで同じ速さになる

こんな単純化を信じているのが大勢いて、信者の一人>>500記事が現実を突きつけられているのに
>>528はまだ受け入れられない。
2025/05/16(金) 19:19:01.24ID:bpgu73R/
>>530
対象国居住者とタッグ組んで参加してください。
2025/05/16(金) 19:23:03.68ID:bpgu73R/
>>525
> Rustはグルーコードに過ぎないみたい

グルーコードに過ぎないのに、最大限努力した結果で5%も性能差が出ている事実がインパクトある。
2025/05/16(金) 19:29:28.60ID:b58fLBSS
>>531
何を解決してほしいのか具体的に言おう
panicもcheckも必要なく安全にsafe Rustで実現する方法は既に使えた
2025/05/16(金) 19:33:14.79ID:CtDSSAzz
当然ながら元々はボトルネックを特定した上で部分的にアセンブラで書いているのだろうし、
当時のスキルをもってすれば今5%も差が出ているならまずは原因箇所の特定くらいは簡単にできそうなもんだが、
なぜこんな解像度の低い状態で丸投げしているのか謎
オリジナルの開発をやった人がいなくなっちゃったのかもね
もはやRust関係ないけど
2025/05/16(金) 19:35:12.11ID:b58fLBSS
>>531
何を解決してほしいのか具体的に言おう
panicもcheckも必要なく安全にsafe Rustで割り算を実現する方法は既に伝えた
2025/05/16(金) 19:39:18.59ID:zQbADFxC
ここでは全部一人のせいにしているけど
だぶん「unsafe安全閉じ込め」™オジwと複オジは別人で
都合悪なると仮病になる

>>535
懸賞記事内にリンク記事があるよ

>>534,536
たぶん「unsafe安全閉じ込め」™が何のことか具体的に知りたいだけでは
仮病してると複オジと同レベルだぞw
2025/05/16(金) 19:45:26.73ID:b58fLBSS
>>537
「unsafe安全閉じ込め」の例はRust標準ライブラリに無数にあるからそれを知りたいとは思わなかった
興味ある部分についての標準ライブラリのソースを読んでくださいでおしまい
2025/05/16(金) 19:48:17.71ID:zQbADFxC
いつもの人間が判断するだけの事に名前を付けたのね
2025/05/16(金) 19:49:07.71ID:zQbADFxC
そうなると複オジ本人だなw
2025/05/16(金) 20:03:38.49ID:CtDSSAzz
>>537
一通り読んだけど、c2rustのunsafeコードを修正する際に適用することにしている、一般的に高速化に寄与すると考えられる作法を紹介しているだけで、
実行時のパフォーマンスについての詳細な分析結果は特に見つけられなかった
プロジェクトの概要なんかも見てると金貰って開発する上で結構厳しくQCD管理されてるみたいだから、
どうしても自分達で解決できないというよりは単に切羽詰まってるから助けてくれという感じなのかね
2025/05/16(金) 20:14:28.07ID:zQbADFxC
複オジは仮病だろうけど、最近の話題でこんな画像があった

統合失調症のブログが話題に「全てがわかる。すべてのすべて」
https://pbs.twimg.com/media/Gpy43ktaYAYMz9w.jpg
2025/05/16(金) 23:32:05.70ID:V5h5/o2J
>>513
この種の速さ命のプログラミングではpanicコードを完全に排除するためその問題は起きない
2025/05/16(金) 23:35:06.70ID:ZEBLDPGc
テックポエム量産してるのは>>542に近いのでは
論理的には違っていると自覚はあるから「ポエム」と称するけど
異常脳神経が「分かった」シグナルを発して仕方がないのだろう
2025/05/16(金) 23:48:27.11ID:+TOH8huo
このGoスレレスなんて>>542のイチゴの例そのものね

> Goはルーン文字と同じ運命をたどりそうだな
> 紙が普及した時代に原始的な彫刻文字は流行らない
> 時代に合わせて形を変えないと
2025/05/17(土) 02:16:37.18ID:hnIBgbwS
>>545
頭おかしいのはみんな気づいてるからいいとして、せめてコテにしてNGさせてくれよな
延々中身のない仕様も理解していないレスバを目にするのも辛いしな
よりに寄ってこんな過疎スレに来なくていいのに
547デフォルトの名無しさん
垢版 |
2025/05/17(土) 07:06:56.82ID:XtHNXmhB
科学 + 5ch

20種近くも検出された新しい「量子状態」は、量子コンピューター飛躍の鍵になるか [すらいむ★]
2025/05/16(金) 22:52:02.48
http://egg.5ch.net/test/read.cgi/scienceplus/1747403522/
>>これまで理論上の存在と考えられてきた量子状態の検出に、国際研究チームが初めて成功した。量子情報の保存や論理演算の基盤として応用することで、量子コンピューターの未来を変える鍵となるかもしれない。


※犯罪の手口が判明するのか
2025/05/17(土) 07:42:04.23ID:lDt9R68w
>延々中身のない仕様も理解していないレスバ

潰し屋だな
2025/05/17(土) 08:40:26.34ID:qCs3WkDL
全能感があるだけ幸せなのでは?自分は真逆で老化がはじまったんかと思うぐらい
2025/05/17(土) 10:25:49.04ID:+mXvyyg4
糖質というより発達系だろ
間違いを認めたら負けみたいな中華メンタルも持ち合わせてるけどあれは病気じゃなくて人間性の問題
2025/05/17(土) 10:34:31.56ID:9HrlEF5X
キチガイの自白で荒らされてますが
Rust 1.0からちょうど10周年ですよ
おめでとう!
2025/05/17(土) 10:41:03.44ID:qCs3WkDL
Rustのすべてが正しいという発想しかない異常者
2025/05/17(土) 10:49:42.53ID:BnclY/n2
複オジ今日も快調に暴走
2025/05/17(土) 15:50:10.71ID:P2bp1h/d
複ちゃん消したらもうこのスレの存在意義ないけど
2025/05/17(土) 18:34:13.65ID:Vu4+Tz9e
AI吹くちゃん二代目襲名
2025/05/17(土) 19:44:04.18ID:t/yU0oIF
1.87で安定化したVec::extract_ifの機能がdrainに近いと思ったけど最初はdrain_filterの名前で提案されてたのね
自動で全部dropできないからdrain_filterとかdrain_ifだとだめらしい
drainが排出じゃなく吸収のイメージなのはFFが原因だな
2025/05/17(土) 22:10:30.09ID:pKwTZqOi
extract_if()はむしろretain()+捨てる分を取り出し(extract)と考えた方がいい
ただし残すをtrueか取り出すをtrueかで判定関数の真偽が逆に注意
ついでに判定関数の引数が&vec[i]から&mut vec[i]に変わってるため残すものも値書き換え可のおまけ付き
2025/05/17(土) 22:46:26.94ID:t/yU0oIF
返されたイテレータを使い切らないと全部削除されないからretainとも微妙に違う
nextで取った分だけ削除だからpeekableとの取り合わせが悪そう

あと関数名はextract_ifじゃなくextractだけでよかった気がする
extractがないのにextract_ifがあるのは何かバランス悪い
drain_filterから紆余曲折あったみたいだから仕方ないけど
2025/05/17(土) 23:12:09.74ID:pKwTZqOi
>>558
書いた通り、retain()+捨てる分を取り出し(extract)
だから取り出さないと削除されない
イテレータが進んだ分だけretainと一致する

名前の_ifはすぐに類似のpop_ifが想起される
pop_ifでも条件判定の引数が可変参照で同じだからrangeをlastにしたものと見なすことができる
ifの付かないpopは無条件だから
ifの付かないextractも無条件となる
だからextract_ifというメソッド名が正解で一貫している
2025/05/18(日) 00:31:27.80ID:+SIFIDid
すでにドレンフィルタって名称の一般的なものがあるけど…
排水管などのフィルター
2025/05/18(日) 00:55:22.32ID:+SIFIDid
coffee extractionはコーヒー豆の方を取り除いているのか液体(エキス?)を抽出しているのか
562デフォルトの名無しさん
垢版 |
2025/05/18(日) 01:05:08.64ID:GL3oFIgT
extract は語源的には ex (外へ) - tract (引っ張る) だから、「取り出す・抽出する」といった意味合いが強い
2025/05/18(日) 01:06:15.76ID:+SIFIDid
コーヒー豆とコーヒーが混ざった物からコーヒーを抽出するよね
それをコーヒーを捨てているとは言わない

残ってる方は最後まで濾さないとコーヒー豆とコーヒーが混ざった物でしかないので無価値
一方で抽出したほうはコーヒーなので価値がある
この意味が判るかどうか?
564デフォルトの名無しさん
垢版 |
2025/05/18(日) 07:46:36.17ID:AGGexLjT
企業献金、結論先送りへ 自公国法案、提出取りやめ [蚤の市★]
2025/05/17(土) 21:17:14.36
https://asahi.5ch.net/test/read.cgi/newsplus/1747484234/

全国1万1155の企業・団体の政治献金「97%」が自民へ、シンクタンク調査 [おっさん友の会★]
2025/05/14(水) 11:12:39.51
https://asahi.5ch.net/test/read.cgi/newsplus/1747188759/
2025/05/18(日) 09:41:45.81ID:6WAEpSNG
Vecに含まれる構造体を参照しながら、別の構造体に変更を加える処理ってどれがベストでしょうか
566デフォルトの名無しさん
垢版 |
2025/05/18(日) 10:17:55.24ID:rfn3+MVd
これは任意の方苦に向けて電波攻撃可能ということでしょうか?
プログラムの改造で下記が可能になるのでしょうか

「Xperia」が電波法違反、ソニーに行政指導--総務省
2024年12月13日 15時23分
https://japan.cnet.com/article/35227306/
>>スマートフォンにおいて「工事設計認証を受けた工事設計にない空中線を使用しての電波発射が可能な仕様となっている状態にあった事実が認められた」という。
2025/05/18(日) 11:19:10.16ID:HgIqS8Uk
>>565
色々方法があってどれがベストかは状況による

a. 変更内容を作成する処理と変更を適用する処理を分離する
b. split_mut系で更新部分と参照部分のスライスに分割する
c. takeとかreplaceで変更対象の構造体を一旦Vecから取り外す
d. Vec内の構造体を全部RefCellに入れる

可能ならaがベストかな
2025/05/18(日) 11:30:08.35ID:vhS9Z2b5
よくそんな意味不明な質問に答えられるなと思う
自分がアホなのか、予定された質問に予定された答えなのかわからない
本当にわからない
2025/05/18(日) 11:41:01.25ID:6WAEpSNG
>>567
かなり曖昧な質問に答えてくれてありがとう。
他の言語だとリストから参照で構造体を取り出して、他の構造体を変更したり色々できたけどRustだとかなり制限がキツくて躓いた。ChatGPTにも聞いたりだけどイマイチ納得できなくて、実際使ってる皆さんに聞きたくなったんだよね。
2025/05/18(日) 11:44:13.33ID:vhS9Z2b5
ChatGPTに聞いたなら質問を清書してくれただろ?
そっちを貼ればいいだろ?
謎すぎる
2025/05/18(日) 11:45:25.47ID:wGoLP5Sv
意味不明な質問というのには完全に同意
質問と回答が矛盾してるので
さすがにこれは発達オジの自作自演ではないだろう
2025/05/18(日) 11:47:57.87ID:wGoLP5Sv
あ・・・
自分の中では矛盾してなかったみたいww

自作自演発達オジの日本語能力の問題だったか
2025/05/18(日) 11:48:09.03ID:6WAEpSNG
やりたいことは、構造体には関数も実装ししていて、その関数に大元のVecを渡してそれぞれの要素に変更をかけるみたいなやつだけど、ミニマムで質問してみた。一旦教えてもらったcに近い実装でコンパイル通ったけど、モヤモヤしたので聞いてみました。
2025/05/18(日) 11:48:46.66ID:6WAEpSNG
>>570
確かに、、、すまぬ
575デフォルトの名無しさん
垢版 |
2025/05/18(日) 11:52:57.81ID:GL3oFIgT
「別の構造体」というのは「同じVecの別の位置にある要素」という意味?
values[0] を参照しながら values[1] を変更するみたいな
2025/05/18(日) 11:57:42.82ID:zQyjSV37
>>565
一般的にそういう時は困っていることが成立している最小構成例を具体的に出す
何通りにも解釈できる意味不明な曖昧な文章では答えてくれる人も減るだろう

>>568
意味不明な文章だがRustのプログラミング経験があるならば
質問者の脳内の仮定を補完して最も可能性の高い質問ケースとして回答者が応じている状況を観察できるはずだ
2025/05/18(日) 11:58:51.15ID:vhS9Z2b5
書き方が回りくどいね わかりやすく
2025/05/18(日) 12:05:59.38ID:6WAEpSNG
>>575
そうです、言葉足らずでした。。。
579デフォルトの名無しさん
垢版 |
2025/05/18(日) 12:21:21.33ID:GL3oFIgT
>>578
それはRustだと面倒なパターンなので仕方ない
{} でブロックを作って借用のスコープを短くする等でなんとかする
ここはボローチェッカーの気持ちの理解が必要
(なぜダメなのかはエラーメッセージが教えてくれてるから、そこは既に分かってるかもしれないけど)

同じことは構造体の別のフィールドを参照する場合も言える
構造体のフィールドaを可変借用しつつ別のフィールドbを参照するなど
2025/05/18(日) 12:26:55.54ID:vhS9Z2b5
う~ん
 何が言いたいかわからる人にはわかるだろ?
2025/05/18(日) 12:29:43.83ID:NJShdjf5
何がやりたいのか全然わからん。
コードで示してよ。
コンパイル通らなくてもいいから Rust 風擬似コードって感じで。
2025/05/18(日) 12:54:12.76ID:uzz3fg67
複おじちゃんは今日もやらかしてるね
特有の癖が出てるのに自分ではバレてないと思ってるから面白い
2025/05/18(日) 13:00:12.37ID:zQyjSV37
困ったことが起きたらその問題が再現する最低限の最小構成コードを書いてみる
すると本質的な構造が見えてくる
その過程で自己解決することも多いだろう
わからなくてもその最小構成コードを貼って質問すればよい
2025/05/18(日) 13:58:46.67ID:6WAEpSNG
>>579
やはりそうなんですね。ありがとうございます。

>>581
>>583
助言ありがとうございます。
ChatGPTにサンプルコード作ってもらいました。コンパイルは通らないですが、やりたいイメージはこんな感じです。

struct Unit {
id: usize,
hp: i32,
}
impl Unit {
fn act(&mut self, all_units: &mut Vec<Unit>) {
// 自分以外のユニットに攻撃したい
for unit in all_units.iter_mut() {
if unit.id != self.id {
unit.hp -= 10;
}
}
}
}
fn main() {
let mut units = vec![
Unit { id: 0, hp: 100 },
Unit { id: 1, hp: 80 },
Unit { id: 2, hp: 60 },
];
for unit in units.iter_mut() {
unit.act(&mut units); // ❌ コンパイルエラーになるが、やりたいことはこんな感じ
}
}
2025/05/18(日) 14:03:53.58ID:UzOJGd+R
>>584
これも追加

// 自分以外のユニットに攻撃したい

// 自分以外のユニットから奪い取る

if unit.id != self.id {
unit.hp -= 10;
self.hp += 10;
}
2025/05/18(日) 14:16:39.01ID:UG4F7Ocv
自作自演スレ
587デフォルトの名無しさん
垢版 |
2025/05/18(日) 16:37:58.98ID:GL3oFIgT
>>585
こんなのでどうだろう
https://play.rust-lang.org/?version=stable&mode=debug&edition=2024&gist=871e0b5209dab043741c765000be6e5a

他言語からすると面倒に感じるかも
「要素 i への可変参照を持ちつつ、Vec全体への可変参照を持つ」のは借用チェッカーに引っかかるパターン
if unit.id != self.id の判定が必要なように「all_unitsの中にunitがいるかもしれない」という状況をそもそも借用チェッカーは防ぎたいので

なので、 split_at_mut() を使って参照範囲を ([i] への可変参照, 他の要素への可変参照) に分けてみた

他には Cell (内部可変性) を使うパターンもあるけど、このケースでこれを使うのはちょっと微妙な気がする
588デフォルトの名無しさん
垢版 |
2025/05/18(日) 16:40:13.34ID:GL3oFIgT
>「all_unitsの中にunitがいるかもしれない」という状況
訂正:「all_unitsの中に自身がいるかもしれない」という状況
2025/05/18(日) 16:59:42.16ID:tbHjRPms
あんまりアドホックな対応で頑張ってもまた同様の問題でいちいち詰むよ
エンティティなんだから素直に内部可変性を使っておいた方が無難
僅かに遅くはなるだろうが、メモリアクセス効率まで気にするならECSパターンでも覚えた方がいい
2025/05/18(日) 17:43:23.59ID:HgIqS8Uk
スライスを(init, mid, tail): (&[T], &T, &[T])に分割するsplit_midがほしいな
何かで似たような戻り値の型を見た記憶があるけど
2025/05/18(日) 18:24:32.38ID:UkfPMCWK
1つだけ外したい場合はOption+mem::take/replace使うのが自然だと思う
https://play.rust-lang.org/?version=stable&mode=debug&edition=2024&gist=a84a532ace40d2bb6603510ca1307756
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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