>>108
> それよりも初期化のための関数を作るべき
これが全てだろう?
いくら何でも馬鹿すぎるだろう?判らないの?
Rust part29
110デフォルトの名無しさん
2025/05/05(月) 00:09:40.80ID:jqQPAhm/111デフォルトの名無しさん
2025/05/05(月) 00:10:41.78ID:Eyx6FHs7 Builderはオプションの追加実装が破壊的な変更にならないメリットがあるな
生成関数に全部渡す方式だとパラメータが増えて破壊的になる
新しい生成関数を追加すれば破壊的にはならないけど
オプション追加する度に生成関数増やすのはあほくさい
>>103
もし暇だったら↓のRegexBuilderをFactoryで実装する場合の関数の個数を見積もってくれ
https://docs.rs/regex/latest/regex/struct.RegexBuilder.html
生成関数に全部渡す方式だとパラメータが増えて破壊的になる
新しい生成関数を追加すれば破壊的にはならないけど
オプション追加する度に生成関数増やすのはあほくさい
>>103
もし暇だったら↓のRegexBuilderをFactoryで実装する場合の関数の個数を見積もってくれ
https://docs.rs/regex/latest/regex/struct.RegexBuilder.html
112デフォルトの名無しさん
2025/05/05(月) 00:12:00.84ID:H9yekDq7113デフォルトの名無しさん
2025/05/05(月) 00:15:57.46ID:jqQPAhm/ なんで自分にレスしてんの?
114デフォルトの名無しさん
2025/05/05(月) 00:19:17.48ID:jqQPAhm/115デフォルトの名無しさん
2025/05/05(月) 00:20:28.67ID:jqQPAhm/ Rustしか使ったことがない前提なのかな
さすがに馬鹿の相手をするのは疲れてきた…
さすがに馬鹿の相手をするのは疲れてきた…
116デフォルトの名無しさん
2025/05/05(月) 00:21:44.77ID:jqQPAhm/ おじいちゃんは他の言語は使えないの?しょうもない雑魚レベルの質問しかしないのはなんで?
117デフォルトの名無しさん
2025/05/05(月) 00:29:27.74ID:J617bx8A デフォルト値に対して必要分だけオプション指定したい場合
まともな方法はどのプログラミング言語を使って>>99のどちらかの方式になる
まともではない方法としてはオプションの有無ごとの組み合わせ数の分だけ大量の関数を用意する手もあるけど論外だ
まともな方法はどのプログラミング言語を使って>>99のどちらかの方式になる
まともではない方法としてはオプションの有無ごとの組み合わせ数の分だけ大量の関数を用意する手もあるけど論外だ
118デフォルトの名無しさん
2025/05/05(月) 00:41:54.17ID:jqQPAhm/ 何で間違ってることを繰り返すの?
macroで重複チェック可能なbuilderは書けるとか書いてこないのは意外なんだけど
macroで重複チェック可能なbuilderは書けるとか書いてこないのは意外なんだけど
119デフォルトの名無しさん
2025/05/05(月) 00:53:11.08ID:jqQPAhm/ 実行時チェックの話もchatGPTの方がまともで面白い回答や提案をしてくれる
120デフォルトの名無しさん
2025/05/05(月) 00:56:27.23ID:Eyx6FHs7121デフォルトの名無しさん
2025/05/05(月) 01:00:46.13ID:EffckoF6 一部の必須値の設定を忘れるケースは普通にあるでしょ
122デフォルトの名無しさん
2025/05/05(月) 01:09:30.63ID:v8V26/QO >>121
必須値は様々な対応が取れるため問題は起きない
・オプションにしない
・全体の整合チェックの一貫として必須値の有無の判断を入れる
・ビルド最終メソッドで指定する (ex. std::fs::OpenOptions::open)
必須値は様々な対応が取れるため問題は起きない
・オプションにしない
・全体の整合チェックの一貫として必須値の有無の判断を入れる
・ビルド最終メソッドで指定する (ex. std::fs::OpenOptions::open)
123デフォルトの名無しさん
2025/05/05(月) 01:17:39.76ID:Eyx6FHs7 一番オーソドックスなのが抜けてるな
RegexBuilderの場合はRegexBuilder::new()にパターン文字列を渡してる
RegexBuilderの場合はRegexBuilder::new()にパターン文字列を渡してる
124デフォルトの名無しさん
2025/05/05(月) 01:21:35.04ID:v8V26/QO125デフォルトの名無しさん
2025/05/05(月) 08:29:59.12ID:EffckoF6 名前付き引数であれば必須パラメータも名前付きで渡せるため順番の間違いによるミスが発生しづらく可読性も高い
derive_builderを使う以上は必須パラメータもメソッドで渡すしかなく実行時エラーの可能性が排除できないしチェックのために余計なランタイムコストを払う必要がある
文句はderive_builder作者に言ってきた方がいいぞ
derive_builderを使う以上は必須パラメータもメソッドで渡すしかなく実行時エラーの可能性が排除できないしチェックのために余計なランタイムコストを払う必要がある
文句はderive_builder作者に言ってきた方がいいぞ
126デフォルトの名無しさん
2025/05/05(月) 08:39:51.80ID:jqQPAhm/ 狂信者には何を言っても無駄であり論理的な考えを持ち合わせていない
こちらがいくら論拠を提示してもRustが正しいderive_builderが正しいとそんなミスは起こりえないと繰り返すのみ
正しくないのはお前の頭だろう
こちらがいくら論拠を提示してもRustが正しいderive_builderが正しいとそんなミスは起こりえないと繰り返すのみ
正しくないのはお前の頭だろう
127デフォルトの名無しさん
2025/05/05(月) 08:41:20.98ID:PDh+rYm1 ビルド方式に問題はない
既出のstd::fs::OpenOptions::open()や
regex::RegexBuilder::new()など
Rustはビルド方式でも対応しており問題になっていない
>>125
名前付き引数であろうとなかろうとバリデーションは必要でそれは実行時エラーとなる
そしてResultを返すから実行時エラーで問題ない
既出のstd::fs::OpenOptions::open()や
regex::RegexBuilder::new()など
Rustはビルド方式でも対応しており問題になっていない
>>125
名前付き引数であろうとなかろうとバリデーションは必要でそれは実行時エラーとなる
そしてResultを返すから実行時エラーで問題ない
128デフォルトの名無しさん
2025/05/05(月) 08:42:39.33ID:S3aML2VS129デフォルトの名無しさん
2025/05/05(月) 08:45:40.37ID:jqQPAhm/130デフォルトの名無しさん
2025/05/05(月) 08:49:55.75ID:3AfvJi9A “イリヤ神”がまたやった 動画生成AI「FramePack」が革命的なワケ
2025年05月05日 07時00分更新
https://ascii.jp/elem/000/004/267/4267160/
4月17日に登場した動画生成AIプログラム「FramePack(フレームパック)」が世界的に衝撃を与えています。PCローカル環境で動画AIを動かすには、少なくともビデオメモリー(VRAM)が12GBあるビデオカードを搭載していないと難しいというのが常識でした。ところが、VRAM 6GBでも安定的に動作させられるため、一気に動画AIの裾野を広げそうです。開発したのは、画像生成AI分野で「ControlNet」や、使いやすいツール「Fooocus」などを開発してきたことで知られる、スタンフォード大学に在籍中のIllyasviel(イリヤスフィール、以下イリヤ)さん。既存の方法論にまったく違ったアプローチでブレイクスルーを引き起こす、“イリヤ神”のアプローチに再び注目が集まっています。
中略
AI動画を作ってみたいけれども、スペックが足りないために諦めていたという人が次々に自前の環境で試すようになってきました。既にワンパッケージでインストールできる環境も整えられているため、スタートも簡単です。様々なファイルをダウンロードしてくるため、初期設定は2時間くらいは見ておく必要があるものの、圧倒的にハードルが下がりました。
2025年05月05日 07時00分更新
https://ascii.jp/elem/000/004/267/4267160/
4月17日に登場した動画生成AIプログラム「FramePack(フレームパック)」が世界的に衝撃を与えています。PCローカル環境で動画AIを動かすには、少なくともビデオメモリー(VRAM)が12GBあるビデオカードを搭載していないと難しいというのが常識でした。ところが、VRAM 6GBでも安定的に動作させられるため、一気に動画AIの裾野を広げそうです。開発したのは、画像生成AI分野で「ControlNet」や、使いやすいツール「Fooocus」などを開発してきたことで知られる、スタンフォード大学に在籍中のIllyasviel(イリヤスフィール、以下イリヤ)さん。既存の方法論にまったく違ったアプローチでブレイクスルーを引き起こす、“イリヤ神”のアプローチに再び注目が集まっています。
中略
AI動画を作ってみたいけれども、スペックが足りないために諦めていたという人が次々に自前の環境で試すようになってきました。既にワンパッケージでインストールできる環境も整えられているため、スタートも簡単です。様々なファイルをダウンロードしてくるため、初期設定は2時間くらいは見ておく必要があるものの、圧倒的にハードルが下がりました。
131デフォルトの名無しさん
2025/05/05(月) 08:51:02.82ID:jqQPAhm/132デフォルトの名無しさん
2025/05/05(月) 08:51:16.55ID:RIr+9vrd >>126
Rustが間違っていると主張したいなら問題点と代替策を述べればよい
本当にそれが示せるならRustはIT大手各社も用いているため世界中にインパクトを与えられるぞ
この我々の5chのやりとりすらRust製のPingoraを経由しているほどネットインフラ各所でもRustは使われている
Rustが間違っていると主張したいなら問題点と代替策を述べればよい
本当にそれが示せるならRustはIT大手各社も用いているため世界中にインパクトを与えられるぞ
この我々の5chのやりとりすらRust製のPingoraを経由しているほどネットインフラ各所でもRustは使われている
133デフォルトの名無しさん
2025/05/05(月) 08:52:25.13ID:jqQPAhm/134デフォルトの名無しさん
2025/05/05(月) 08:53:13.86ID:jqQPAhm/ 本当に暇さえあれば関係ない話題で誤魔化そうとするよな
脳がストローマン論法で浸食されているんだろ
脳がストローマン論法で浸食されているんだろ
135デフォルトの名無しさん
2025/05/05(月) 08:53:53.74ID:S3aML2VS それよりもbuilderパターンは初期化時の情報指定漏れをコンパイルエラーにできないのがRustらしくないと思う。
136デフォルトの名無しさん
2025/05/05(月) 08:54:21.19ID:RIr+9vrd137デフォルトの名無しさん
2025/05/05(月) 08:55:05.06ID:Nqd+X/r+ >>127
なるほど、実行時に他のバリデーションするからタイプセーフでなくていいと君は考えるわけね
それはそれで一理あるが、だったら君が使うべき言語は静的型付け言語ではなくRubyなどのゆるふわ言語だな
さようなら
なるほど、実行時に他のバリデーションするからタイプセーフでなくていいと君は考えるわけね
それはそれで一理あるが、だったら君が使うべき言語は静的型付け言語ではなくRubyなどのゆるふわ言語だな
さようなら
138デフォルトの名無しさん
2025/05/05(月) 08:56:18.75ID:jqQPAhm/ ビルダーパターンで疑似カリー化が行えるのが利点なのにタプル化するって
わざわざ手足を縛ることになるけど
わざわざ手足を縛ることになるけど
139デフォルトの名無しさん
2025/05/05(月) 08:56:40.00ID:RIr+9vrd140デフォルトの名無しさん
2025/05/05(月) 08:58:33.63ID:RIr+9vrd141デフォルトの名無しさん
2025/05/05(月) 08:59:24.57ID:Nqd+X/r+ >>139
それは一部必須パラメータが依然として存在することと矛盾しない
それは一部必須パラメータが依然として存在することと矛盾しない
142デフォルトの名無しさん
2025/05/05(月) 09:01:01.47ID:jqQPAhm/143デフォルトの名無しさん
2025/05/05(月) 09:02:05.60ID:RIr+9vrd >>141
必須パラメータの事例はさっき出てただろ
>> std::fs::OpenOptions::open()
>> regex::RegexBuilder::new()
これで対応できている
誰もが使っていて問題となったことはない
必須パラメータの事例はさっき出てただろ
>> std::fs::OpenOptions::open()
>> regex::RegexBuilder::new()
これで対応できている
誰もが使っていて問題となったことはない
144デフォルトの名無しさん
2025/05/05(月) 09:04:25.68ID:RIr+9vrd145デフォルトの名無しさん
2025/05/05(月) 09:07:05.32ID:EffckoF6146デフォルトの名無しさん
2025/05/05(月) 09:07:28.43ID:jqQPAhm/147デフォルトの名無しさん
2025/05/05(月) 09:10:38.57ID:jqQPAhm/ 微妙に論点をずらしたり相手の言ってないことに対して批判したり
本当にずっとストローマン論法続けてるよなあ
複おじいさん
ストローマン論法はやめなされw
本当にずっとストローマン論法続けてるよなあ
複おじいさん
ストローマン論法はやめなされw
148デフォルトの名無しさん
2025/05/05(月) 09:11:10.84ID:RIr+9vrd >>137
Rustは静的型付けだから常にタイプセーフだよ
それらの例は引数の型が合ってなければ当然コンパイルエラーとなる
一方で引数の値が合っているかどうかは構造体の方針だから当然コンパイルエラーにできず実行時エラーとなる
Rustは静的型付けだから常にタイプセーフだよ
それらの例は引数の型が合ってなければ当然コンパイルエラーとなる
一方で引数の値が合っているかどうかは構造体の方針だから当然コンパイルエラーにできず実行時エラーとなる
149デフォルトの名無しさん
2025/05/05(月) 09:13:10.00ID:RIr+9vrd150デフォルトの名無しさん
2025/05/05(月) 09:15:12.07ID:RIr+9vrd151デフォルトの名無しさん
2025/05/05(月) 09:17:40.24ID:jqQPAhm/152デフォルトの名無しさん
2025/05/05(月) 09:24:52.62ID:RIr+9vrd153デフォルトの名無しさん
2025/05/05(月) 09:29:59.66ID:jqQPAhm/ >>152
こちらのID辿ってみたらいい
こちらのID辿ってみたらいい
154デフォルトの名無しさん
2025/05/05(月) 09:37:07.71ID:jqQPAhm/155デフォルトの名無しさん
2025/05/05(月) 10:05:55.48ID:n6fK3gUl > .R(p[0]).G(p[1]).B(p[2]).build()
これ3つとも指定が必要ならメソッドを分けるべきではないと思う
それ以前にRustのプログラミングしたことないのかメソッド大文字は置いとくにしても
この場合ならp[0]はRust的な使用方法ではないな
(r, g, b)もしくはRGB構造体で持つかその参照で持つのが普通
p[i]はなるべく避けてイテレータ時点でポインタを動かして参照で持つか小さいなら値で持つ
構造があるならその構造で持つ
そのためp[i]の形が出てきたらRustでは少し臭うため怪しみ避けられないか考える
これ3つとも指定が必要ならメソッドを分けるべきではないと思う
それ以前にRustのプログラミングしたことないのかメソッド大文字は置いとくにしても
この場合ならp[0]はRust的な使用方法ではないな
(r, g, b)もしくはRGB構造体で持つかその参照で持つのが普通
p[i]はなるべく避けてイテレータ時点でポインタを動かして参照で持つか小さいなら値で持つ
構造があるならその構造で持つ
そのためp[i]の形が出てきたらRustでは少し臭うため怪しみ避けられないか考える
156デフォルトの名無しさん
2025/05/05(月) 10:33:19.28ID:20YqVkB+157デフォルトの名無しさん
2025/05/05(月) 10:58:23.25ID:EffckoF6 >>155
> これ3つとも指定が必要ならメソッドを分けるべきではないと思う
おっ
derive_builderって必須パラメータをランタイムチェックとはいえ個別setterの形で適切に扱えるというのが重要なコンセプトなんだけど、ここにきて全否定か
> これ3つとも指定が必要ならメソッドを分けるべきではないと思う
おっ
derive_builderって必須パラメータをランタイムチェックとはいえ個別setterの形で適切に扱えるというのが重要なコンセプトなんだけど、ここにきて全否定か
158デフォルトの名無しさん
2025/05/05(月) 11:07:31.16ID:20YqVkB+ >>128
>.rgb(p[0], p[1], .p[2]).build()
重複を主張する人の場合
.rgb(p[0], p[1], .p[2]).b(3).g(4).r(5).g(6).b(7).build()
みたいな間違いが起こるんだと思うよ
>.rgb(p[0], p[1], .p[2]).build()
重複を主張する人の場合
.rgb(p[0], p[1], .p[2]).b(3).g(4).r(5).g(6).b(7).build()
みたいな間違いが起こるんだと思うよ
159デフォルトの名無しさん
2025/05/05(月) 11:07:36.46ID:aemkUy0l ボクシングには蹴り技がない
それは重要なコンセプトだと考えていた時期が俺にもありました
それは重要なコンセプトだと考えていた時期が俺にもありました
160デフォルトの名無しさん
2025/05/05(月) 11:10:17.68ID:jqQPAhm/ コンパイラでうまくいかないから規約で縛ると言うことだろ?ビルダーパターンを導入する意義とどんどん崩れていく
RGB各値は指定が必須とは限らない
defaltで各値が0指定されていて同じなら書く必要がないだう
初期化関数では場合によっては記述する必要があるけどそれも必須ではない
疑似カリー化で少しずつパラメーターの違う複数のオブジェクト生成を行う場合にも便利
RGB各値は指定が必須とは限らない
defaltで各値が0指定されていて同じなら書く必要がないだう
初期化関数では場合によっては記述する必要があるけどそれも必須ではない
疑似カリー化で少しずつパラメーターの違う複数のオブジェクト生成を行う場合にも便利
161デフォルトの名無しさん
2025/05/05(月) 11:19:55.94ID:upfK5ln+ f(
red=red,
green=green,
blue=blue,
)
f()
.red(red)
.green(green)
.blue(blue)
どちらの方式でも間違えようがないと思うんだが
ミスが起きると言ってる人はどういうミスを想定してるのだろう
red=red,
green=green,
blue=blue,
)
f()
.red(red)
.green(green)
.blue(blue)
どちらの方式でも間違えようがないと思うんだが
ミスが起きると言ってる人はどういうミスを想定してるのだろう
162デフォルトの名無しさん
2025/05/05(月) 11:28:12.80ID:jqQPAhm/ red=p[0]; //p[0]は実際はblue
green=p[1];
blue=p[0]; // コピペの修正漏れ
green=p[1];
blue=p[0]; // コピペの修正漏れ
163デフォルトの名無しさん
2025/05/05(月) 11:28:24.28ID:EffckoF6164デフォルトの名無しさん
2025/05/05(月) 11:35:07.99ID:jqQPAhm/165デフォルトの名無しさん
2025/05/05(月) 11:41:36.57ID:upfK5ln+166デフォルトの名無しさん
2025/05/05(月) 11:44:04.39ID:EffckoF6167デフォルトの名無しさん
2025/05/05(月) 11:44:39.10ID:upfK5ln+168デフォルトの名無しさん
2025/05/05(月) 11:45:55.35ID:jqQPAhm/ >>167
dataと言うバイト列の中の一部だとしたら?
dataと言うバイト列の中の一部だとしたら?
169デフォルトの名無しさん
2025/05/05(月) 11:47:59.01ID:upfK5ln+170デフォルトの名無しさん
2025/05/05(月) 11:50:23.87ID:upfK5ln+171デフォルトの名無しさん
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];
また真面に回答できないから適当に話をごまかして議論のための議論しようとしてる
受信データなどのバイト列から値を取り出すのは一般的だろう
必ずしも構造体の列構造とは限らない
それと数値指定無くすならコーディング規約でこう書かないとアウトですとするのか?
blue=data[ i + blue_index_offset];
red=data[ i + red_index_offset];
green=data[ i + green_index_offset];
172デフォルトの名無しさん
2025/05/05(月) 12:01:19.27ID:upfK5ln+ >>171
あのさ
Rustでプログラミングしたことないの?
Rust以外でもシリアライズとデシリアライズしたことないの?
まともなプログラミングしたことある人ならRustですぐにserdeにたどりつく
あのさ
Rustでプログラミングしたことないの?
Rust以外でもシリアライズとデシリアライズしたことないの?
まともなプログラミングしたことある人ならRustですぐにserdeにたどりつく
173デフォルトの名無しさん
2025/05/05(月) 12:10:05.78ID:aemkUy0l まともな人が言ったのか人形が言ったのか全然わからない時代だ
人形が言ったにすぎないなら、そんな言葉は存在しないのと同じ
人形が言ったにすぎないなら、そんな言葉は存在しないのと同じ
174デフォルトの名無しさん
2025/05/05(月) 12:14:04.97ID:jqQPAhm/175デフォルトの名無しさん
2025/05/05(月) 12:16:46.89ID:jqQPAhm/ p[ i+0 ],p[ i+1 ],p[i +2 ]を取り出すだけのためにどれだけコーディング量を増やして
ライブラリ依存させていくのか
本当に意味不明
ライブラリ依存させていくのか
本当に意味不明
176デフォルトの名無しさん
2025/05/05(月) 12:33:03.95ID:upfK5ln+ >>175
そんな可読性が悪くてミスしやすいプログラミングは避けるべきだ
構造化と抽象化が不得手でプログラマやエンジニアに向いてないな
serdeは構造体に#[derive(Serialize, Deserialize)]など付加するだけでデシリアライズ関数などは自動生成される
そんな可読性が悪くてミスしやすいプログラミングは避けるべきだ
構造化と抽象化が不得手でプログラマやエンジニアに向いてないな
serdeは構造体に#[derive(Serialize, Deserialize)]など付加するだけでデシリアライズ関数などは自動生成される
177デフォルトの名無しさん
2025/05/05(月) 12:57:25.54ID:jqQPAhm/178デフォルトの名無しさん
2025/05/05(月) 13:06:55.72ID:Q0EqhiJQ p[ i+0/*0=赤*/ ],p[ i+1/*1=緑*/ ],p[i +2/*2=青*/ ]
俺ならこうするよ
コメントを見れば0が赤、1が緑、2が青と見たん瞬間わかる
日本語なので英語より間違えにくい
もし間違った数字が間違ってたらコメントと比べればすぐわかる
俺ならこうするよ
コメントを見れば0が赤、1が緑、2が青と見たん瞬間わかる
日本語なので英語より間違えにくい
もし間違った数字が間違ってたらコメントと比べればすぐわかる
179デフォルトの名無しさん
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 (アルファチャネル付き) もあるし
内部のデータによって channel 数は1や4 (アルファチャネル付き) もあるし
182デフォルトの名無しさん
2025/05/05(月) 16:02:16.97ID:Q0EqhiJQ 仕事はお金を貰ってやることだから丁寧に書いて上司に褒められる必要があるけれど
趣味とか経営者とかなら何を書いてもじゆうなんだよな
趣味とか経営者とかなら何を書いてもじゆうなんだよな
183デフォルトの名無しさん
2025/05/05(月) 16:11:32.03ID:Q0EqhiJQ 簡潔で見にくいコードを書くか
冗長で醜いコードを書くか
2択だな
冗長で醜いコードを書くか
2択だな
184デフォルトの名無しさん
2025/05/05(月) 16:35:32.16ID:0Pl94lQ7 >>181
これはそう
画像に限らず構造化されたバイナリデータを扱うときに一般に言えることだけど、
単純にビット列をそのまま構造体として読み替える間違いは、低水準に踏み込める言語に入門して調子乗ってる初心者がやりがち
これはそう
画像に限らず構造化されたバイナリデータを扱うときに一般に言えることだけど、
単純にビット列をそのまま構造体として読み替える間違いは、低水準に踏み込める言語に入門して調子乗ってる初心者がやりがち
185デフォルトの名無しさん
2025/05/05(月) 16:47:29.64ID:aemkUy0l 上司はunsafeの箇所をチェックすればいいのに
コンパイラが自動で調べてエラーがなかった箇所を、手動で調べ直して逆張りするのが胡散臭い
コンパイラが自動で調べてエラーがなかった箇所を、手動で調べ直して逆張りするのが胡散臭い
186デフォルトの名無しさん
2025/05/05(月) 18:15:43.01ID:fQ8xBj6s Serdeは暗黙のCopyしがち
187デフォルトの名無しさん
2025/05/05(月) 18:29:47.69ID:jqQPAhm/ >>180
80代のおじいさんと仕事をする機会はないかな
80代のおじいさんと仕事をする機会はないかな
188デフォルトの名無しさん
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]を用いていることが間違える本質的な問題という話だよな
>>82
>> .G(p[0]).R(p[1]).B(p[2]).build()
>> のところを容易に
>> .R(p[0]).G(p[1]).B(p[2]).build()と間違え
と彼は言い出すから
それは名前付けせずにp[0]を用いていることが間違える本質的な問題という話だよな
189デフォルトの名無しさん
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]を使っていることが本質的な問題であると確定
>>160
> RGB各値は指定が必須とは限らない
> defaltで各値が0指定されていて同じなら書く必要がない
と彼は言ってるので
彼の好み通りにp[0]を用いるとして
名前付きオプション引数方式
foo(
green = p[0],
blue = p[2],
)
ビルダーメソッド方式
foo()
.green(p[0])
.blue(p2])
どちらの方式でも同じだな
仮にミスが起きるとしたらそれは名前を付けずにp[0]を使っていることが本質的な問題であると確定
190デフォルトの名無しさん
2025/05/05(月) 22:47:31.22ID:fQ8xBj6s 構造体は
foo{green:green,blue:blue}
を
foo{green,blue}
と描ける訳で
ビルダーメソッド方式とやらも
foo().green().blue()
的に描ければ無駄が減るから改良してくれんかのぅ
foo{green:green,blue:blue}
を
foo{green,blue}
と描ける訳で
ビルダーメソッド方式とやらも
foo().green().blue()
的に描ければ無駄が減るから改良してくれんかのぅ
191デフォルトの名無しさん
2025/05/05(月) 23:13:19.16ID:If8Py5os >>189
その大量連投していた彼はRustをほぼ知らないと判明した上に他の言語の経験値も低そうなので彼自身に問題があることを理解できないと思う
その大量連投していた彼はRustをほぼ知らないと判明した上に他の言語の経験値も低そうなので彼自身に問題があることを理解できないと思う
192デフォルトの名無しさん
2025/05/05(月) 23:39:40.43ID:Cn3HeiMA193デフォルトの名無しさん
2025/05/05(月) 23:42:50.66ID:fQ8xBj6s foo().(green).(blue)
でもいいな
でもいいな
194デフォルトの名無しさん
2025/05/05(月) 23:55:27.76ID:hXT/3Bxe RustはJavaよりも構造体リテラルの表記が強力だから
Builder使うよりOptions構造体1つで渡す方が楽かもしれんね
パターンとしてはBuilderよりマイナーだけど
Builder使うよりOptions構造体1つで渡す方が楽かもしれんね
パターンとしてはBuilderよりマイナーだけど
195デフォルトの名無しさん
2025/05/05(月) 23:58:49.46ID:+Xl4Ck1b196デフォルトの名無しさん
2025/05/06(火) 09:36:09.23ID:sXCqetJD >オプション引数やキーワード引数については他言語が内部的にやってることをRustの場合は開発者が自分でやらなきゃいけないことになっててバカらしい
>しかも関数シグニチャに情報をまとめられないから書く方も読む方も煩雑になるだけで開発者的には何もメリットがない
これに尽きる
言語に機能が不足してるから何でもかんでもビルダーパターンにしなきゃいけなくてサードパーティのマクロに依存することになる
アホらし
>しかも関数シグニチャに情報をまとめられないから書く方も読む方も煩雑になるだけで開発者的には何もメリットがない
これに尽きる
言語に機能が不足してるから何でもかんでもビルダーパターンにしなきゃいけなくてサードパーティのマクロに依存することになる
アホらし
197デフォルトの名無しさん
2025/05/06(火) 09:48:17.91ID:j5CJU7Aq >>196
真逆だろ
キーワード付オプション引数をズラズラ並べた長い長い関数シグニチャはデメリットしかない欠陥品
しかも機能拡張したらさらにキーワード付オプション引数が増えて関数シグニチャが変わるアホらしさ
真逆だろ
キーワード付オプション引数をズラズラ並べた長い長い関数シグニチャはデメリットしかない欠陥品
しかも機能拡張したらさらにキーワード付オプション引数が増えて関数シグニチャが変わるアホらしさ
198デフォルトの名無しさん
2025/05/06(火) 09:51:10.91ID:HDXWn70Z 複数IDと口調を使い分けて自分のレスに賛成するキチガイが複おじ
199デフォルトの名無しさん
2025/05/06(火) 09:51:38.50ID:K1Pjz07i Rustのダサい処は認めるべき
200デフォルトの名無しさん
2025/05/06(火) 09:56:28.46ID:HDXWn70Z >>197
ビルダーパターンは30年以上前から知られていたけどあまり有用ではないので使われていない
過去に誰かがざっくりデザインパターンを否定してたけど、その人の言うにはデザインパターンで有用なものは言語自体に取り込まれるはずだと
実際いくつかは新しい言語では取り込まれている
ビルダーパターンは30年以上前から知られていたけどあまり有用ではないので使われていない
過去に誰かがざっくりデザインパターンを否定してたけど、その人の言うにはデザインパターンで有用なものは言語自体に取り込まれるはずだと
実際いくつかは新しい言語では取り込まれている
201デフォルトの名無しさん
2025/05/06(火) 09:56:50.79ID:SvTeM3j9 マクロで解決可能なんだろ? それは「不足している」のか?
まあ標準ライブラリとして入っているべきみたいな論はあるかもしれんけど、マクロでの解決が悪くて言語機能として直接サポートするのが良いとする根拠は出てないな。
言語ユーザがそれぞれのやり方で解決できる自由さと言語の方針を強制する一貫性は両立しないがそれぞれに良さはあるし、 Rust は今のところ自由さをとりつつもデファクトな地位のライブラリはあるという状況だ。
手頃な妥協点と言えるだろ。
まあ標準ライブラリとして入っているべきみたいな論はあるかもしれんけど、マクロでの解決が悪くて言語機能として直接サポートするのが良いとする根拠は出てないな。
言語ユーザがそれぞれのやり方で解決できる自由さと言語の方針を強制する一貫性は両立しないがそれぞれに良さはあるし、 Rust は今のところ自由さをとりつつもデファクトな地位のライブラリはあるという状況だ。
手頃な妥協点と言えるだろ。
202デフォルトの名無しさん
2025/05/06(火) 10:01:33.47ID:HDXWn70Z 些細な内容なら初期化関数を複数作ればよい話で更に多くなればオプション指定する構造体を作ればよい
mutに拘る必要が無ければさらに多くの可能性がある
わざわざ穴の多いビルダーパターンを使う必要はない
mutに拘る必要が無ければさらに多くの可能性がある
わざわざ穴の多いビルダーパターンを使う必要はない
203デフォルトの名無しさん
2025/05/06(火) 10:08:26.28ID:SvTeM3j9 >>200
ポールグレアムはイディオム (デザインパターン) は言語機能として持つかライブラリにまとめるべきと述べていて、考えられる様々なパターン (またはこれから登場する未知のパターン) をライブラリにまとめるには「本物のマクロ」が必要と主張してた。
そして本物のマクロを持つ実用的な言語は Common Lisp くらいしかなかったんだが、 Rust のマクロは彼の言う本物のマクロだ。
マクロで抽象化されてるならその実装がビルダーパターンでもそうでなくてもどうでもいいよ。
ポールグレアムはイディオム (デザインパターン) は言語機能として持つかライブラリにまとめるべきと述べていて、考えられる様々なパターン (またはこれから登場する未知のパターン) をライブラリにまとめるには「本物のマクロ」が必要と主張してた。
そして本物のマクロを持つ実用的な言語は Common Lisp くらいしかなかったんだが、 Rust のマクロは彼の言う本物のマクロだ。
マクロで抽象化されてるならその実装がビルダーパターンでもそうでなくてもどうでもいいよ。
204デフォルトの名無しさん
2025/05/06(火) 10:10:04.33ID:j5CJU7Aq205デフォルトの名無しさん
2025/05/06(火) 10:12:49.15ID:HDXWn70Z >>204
他の言語では大体オーバーロードでオプション指定しているけどそれが馬鹿だとは思わないけどね
他の言語では大体オーバーロードでオプション指定しているけどそれが馬鹿だとは思わないけどね
206デフォルトの名無しさん
2025/05/06(火) 10:15:57.89ID:j5CJU7Aq >>205
それはオプションが増えると組み合わせ爆発が起こる馬鹿な方式
それはオプションが増えると組み合わせ爆発が起こる馬鹿な方式
207デフォルトの名無しさん
2025/05/06(火) 10:17:10.44ID:HDXWn70Z >>206
同じ主張と文章を繰り返すやり方が複おじそっくりですね
オーバーロードの初期化関数で馬鹿らしいと思うのは型が同じで対象が違うものがある時
重複を避けるためにシグネチャの設計をしなくては成らないことは馬鹿らしいと思うよ
例えば基本的に2つだけ引数があって後はオプションがずらずら並ぶならやはりオプション内容を含む構造体渡せばいいと思う
そちらも設計が必要だけど
同じ主張と文章を繰り返すやり方が複おじそっくりですね
オーバーロードの初期化関数で馬鹿らしいと思うのは型が同じで対象が違うものがある時
重複を避けるためにシグネチャの設計をしなくては成らないことは馬鹿らしいと思うよ
例えば基本的に2つだけ引数があって後はオプションがずらずら並ぶならやはりオプション内容を含む構造体渡せばいいと思う
そちらも設計が必要だけど
208デフォルトの名無しさん
2025/05/06(火) 10:18:50.49ID:j5CJU7Aq209デフォルトの名無しさん
2025/05/06(火) 10:19:38.79ID:K1Pjz07i >Rust のマクロは彼の言う本物のマクロ
macro_rules! は偽物のマクロ
proc_macro2 が本物のマクロ
macro_rules! は偽物のマクロ
proc_macro2 が本物のマクロ
210デフォルトの名無しさん
2025/05/06(火) 10:20:41.45ID:HDXWn70Z 普通は書き込み内容が単調にならないように人は文章に揺らぎをいれてくるんだけど
複おじは基本全部同じ
口調を変えても同じなので同一人物なんじゃないかと思って見ていると後で全く同じ書き込みを始めるので同じ人間なんだなと
複おじは基本全部同じ
口調を変えても同じなので同一人物なんじゃないかと思って見ていると後で全く同じ書き込みを始めるので同じ人間なんだなと
211デフォルトの名無しさん
2025/05/06(火) 10:20:45.54ID:j5CJU7Aq212デフォルトの名無しさん
2025/05/06(火) 10:20:58.22ID:AZSw2w0R >>208
何の問題もないと思うが、具体的には?
何の問題もないと思うが、具体的には?
213デフォルトの名無しさん
2025/05/06(火) 10:22:59.33ID:HDXWn70Z 本物のマクロと言う主張は面白い
でライブラリ作成者ではなく一般的なユーザ側が書いてるマクロはどっちなのかと
でライブラリ作成者ではなく一般的なユーザ側が書いてるマクロはどっちなのかと
214デフォルトの名無しさん
2025/05/06(火) 10:23:21.48ID:j5CJU7Aq215デフォルトの名無しさん
2025/05/06(火) 10:24:49.05ID:j5CJU7Aq >>213
衛生的なマクロとは何かを勉強するといいよ
衛生的なマクロとは何かを勉強するといいよ
216デフォルトの名無しさん
2025/05/06(火) 10:24:50.06ID:HDXWn70Z オーバーロード自体は良い仕組みだと思うけど設計が必要だ
最近の言語が取り入れていないのはヒューマンエラー対策という名目
だったらビルダーパターンもヒューマンエラー対策で禁止になるかと言えばそうでもない
最近の言語が取り入れていないのはヒューマンエラー対策という名目
だったらビルダーパターンもヒューマンエラー対策で禁止になるかと言えばそうでもない
217デフォルトの名無しさん
2025/05/06(火) 10:27:37.75ID:j5CJU7Aq218デフォルトの名無しさん
2025/05/06(火) 10:28:08.85ID:HDXWn70Z 徐々に文体におじいさんぽさが出てきたね
219デフォルトの名無しさん
2025/05/06(火) 10:47:02.68ID:46q0jEJS AIを屈服させるレベルの改善ができるなら改善してもいいけどね
どうせAIが勝つという前提なら何も修正しないのが合理的だ
どうせAIが勝つという前提なら何も修正しないのが合理的だ
220デフォルトの名無しさん
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人で分けたりできます。
>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人で分けたりできます。
221デフォルトの名無しさん
2025/05/06(火) 10:52:27.53ID:SvTeM3j9 >>209
本物のマクロというのが何であるか明瞭な定義はされてないのだが、文脈的に「構文木の操作が出来る」というのが要件だと一般的に解されている。
トークン単位の置き換えしか出来ない C のマクロのようなものを除外するための言い回しだ。
構文木を操作できるなら操作できる範囲の違いは本物のマクロかどうかには重要ではない。
(もちろん出来ることが多いほうがより良い本物のマクロとは言えるだろうが、出来ることが多いほうが危険な間違いも引き起こしやすいので現実には適度に制限があったほうが良いこともある。)
macro_rules! も普通は本物のマクロと解される。
本物のマクロというのが何であるか明瞭な定義はされてないのだが、文脈的に「構文木の操作が出来る」というのが要件だと一般的に解されている。
トークン単位の置き換えしか出来ない C のマクロのようなものを除外するための言い回しだ。
構文木を操作できるなら操作できる範囲の違いは本物のマクロかどうかには重要ではない。
(もちろん出来ることが多いほうがより良い本物のマクロとは言えるだろうが、出来ることが多いほうが危険な間違いも引き起こしやすいので現実には適度に制限があったほうが良いこともある。)
macro_rules! も普通は本物のマクロと解される。
222デフォルトの名無しさん
2025/05/06(火) 11:06:32.44ID:46q0jEJS リスパーはmatchを知らない
matchを知らなくても理解できるマクロが本物のマクロ
matchを知らなくても理解できるマクロが本物のマクロ
223デフォルトの名無しさん
2025/05/06(火) 11:11:44.35ID:HDXWn70Z 複数ID使用おじ
別人が複おじと疑われたら自分は複おじじゃねーよと反論する
気持ち悪いから
ところが何故かしない
複おじはそういうのに反論しない仕組みになっている
別人が複おじと疑われたら自分は複おじじゃねーよと反論する
気持ち悪いから
ところが何故かしない
複おじはそういうのに反論しない仕組みになっている
224デフォルトの名無しさん
2025/05/06(火) 11:19:55.25ID:AZSw2w0R225デフォルトの名無しさん
2025/05/06(火) 11:20:28.10ID:HDXWn70Z マクロ自体がただの似たような機能の概念の総称であってその中で本物だ、元祖だと言っても笑われるだけ
キーボードマクロは真のマクロではないとか衛生的ではないと言われてもそうですかと
キーボードマクロは真のマクロではないとか衛生的ではないと言われてもそうですかと
226デフォルトの名無しさん
2025/05/06(火) 11:22:58.43ID:HDXWn70Z ID:j5CJU7Aq の反応待ちのawait状態です
227デフォルトの名無しさん
2025/05/06(火) 11:23:42.97ID:K1Pjz07i228デフォルトの名無しさん
2025/05/06(火) 11:31:04.25ID:SvTeM3j9 >>225
「本物のマクロ」というのは正しさとか起源を主張しているわけではなくそういう名前の分類。
少なくとも C のマクロなどでは様々なイディオムを抽象化するには不十分だというごく当然の話をしてる。
「本物のマクロ」というのは正しさとか起源を主張しているわけではなくそういう名前の分類。
少なくとも C のマクロなどでは様々なイディオムを抽象化するには不十分だというごく当然の話をしてる。
229デフォルトの名無しさん
2025/05/06(火) 11:33:12.59ID:AZSw2w0R なお、名前付き引数での呼び出しを前提とするならばhoge(red) と hoge(green)を名前付き引数の引数名だけで呼び分けるオーバーロードは技術的には実装できない理由は特にない
しかし、多くの言語では名前付き引数の使用はオプションだしこの場合はhoge_red(val)のように機械的に名前変えりゃいいだけだから、実装コストに見合わないという判断をされているのだろう
しかし、多くの言語では名前付き引数の使用はオプションだしこの場合はhoge_red(val)のように機械的に名前変えりゃいいだけだから、実装コストに見合わないという判断をされているのだろう
230デフォルトの名無しさん
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));
こうですか?わかりません
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));
231デフォルトの名無しさん
2025/05/06(火) 11:48:34.17ID:46q0jEJS メリットが不確実なだけでしょ
メリットもコストも確定していてなおかつ見合わないという話ではない
メリットもコストも確定していてなおかつ見合わないという話ではない
232デフォルトの名無しさん
2025/05/06(火) 12:18:40.67ID:0KYdit4+ このスレでずっと自演してる人って糖質とかなんだろうなあ
233デフォルトの名無しさん
2025/05/06(火) 12:28:45.22ID:K1Pjz07i traitで騒いでた自演と同じ人だろう
234デフォルトの名無しさん
2025/05/06(火) 12:40:06.43ID:WV2uqB5+ オーバーロードはそもそもCのAPIにありがちな、後で〇〇2だの〇〇exだのが増えて格好悪くなる問題を解消するためのもの
後で引数名だけ異なるオーバーロードが増えたら名前付き引数を使っていない既存の呼び出しがエラーになるのは、互換性維持という本来の目的からすれば論外
後で引数名だけ異なるオーバーロードが増えたら名前付き引数を使っていない既存の呼び出しがエラーになるのは、互換性維持という本来の目的からすれば論外
235デフォルトの名無しさん
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 }
}
構造体に属性を付けるだけで初期化関数を書かなくて済むのは便利だね
ドキュメント見ると今回は使ってないけど色々と機能が充実してるみたい
話題の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 }
}
236デフォルトの名無しさん
2025/05/06(火) 12:57:12.48ID:aXFsP9SC237デフォルトの名無しさん
2025/05/06(火) 13:06:06.15ID:w/CyTLi+238デフォルトの名無しさん
2025/05/06(火) 13:10:03.39ID:w/CyTLi+ 補足するとファイル名は必須項目だけど
コンパイル時にチェックできるのは型だけだから現実的にチェックできることはほとんどないよね
コンパイル時にチェックできるのは型だけだから現実的にチェックできることはほとんどないよね
239デフォルトの名無しさん
2025/05/06(火) 13:16:05.70ID:sXCqetJD お前らめちゃくちゃ暇人だな
レス多すぎ
レス多すぎ
240デフォルトの名無しさん
2025/05/06(火) 13:18:37.75ID:sXCqetJD241デフォルトの名無しさん
2025/05/06(火) 13:24:33.64ID:w/CyTLi+ ビルダー方式でも他の方式でもなんでもいいけど
初期化のための関数を自分で書くよりも>>235のように構造体への属性マクロ指定だけにするのがいいと思う
面倒がなくコードがすっきりとしてプログラミングミスも起きないから
初期化のための関数を自分で書くよりも>>235のように構造体への属性マクロ指定だけにするのがいいと思う
面倒がなくコードがすっきりとしてプログラミングミスも起きないから
242デフォルトの名無しさん
2025/05/06(火) 13:44:43.14ID:aXFsP9SC243デフォルトの名無しさん
2025/05/06(火) 13:46:48.63ID:ZZS2r6Zz 現時点のderive_builderはFooBuilder::new()に必須項目を渡すパターンには対応してないっぽいな
全部default()でも構わないケースだと使えるけどRegexBuilder::new(pattern)みたいなケースもあるから万能ではない
全部default()でも構わないケースだと使えるけどRegexBuilder::new(pattern)みたいなケースもあるから万能ではない
244デフォルトの名無しさん
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)」の方がたまたま自然に見えるが誤差だろう
どちらでも好きな表記法を選べばよいだけにすぎない
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)」の方がたまたま自然に見えるが誤差だろう
どちらでも好きな表記法を選べばよいだけにすぎない
245デフォルトの名無しさん
2025/05/06(火) 14:21:46.28ID:97zxA3f+246デフォルトの名無しさん
2025/05/06(火) 14:26:52.22ID:97zxA3f+ id変わってしまった
247デフォルトの名無しさん
2025/05/06(火) 14:30:10.65ID:97zxA3f+ 上の強烈な接続もビルダーパターンの一種かな?と思ってしまう
248デフォルトの名無しさん
2025/05/06(火) 15:04:10.81ID:46q0jEJSレスを投稿する
ニュース
- 【速報】嵐、解散を発表!解散前にラストツアーも開催予定 [Ailuropoda melanoleuca★]
- 【速報】嵐、解散を発表!解散前にラストツアーも開催予定 ★2 [Ailuropoda melanoleuca★]
- 嵐、来年春に行うツアーをもって活動終了 [少考さん★]
- 【新型コロナ】今もコロナ後遺症と闘う19歳 移動、食事、排泄、入浴など手を借りなければ… 周囲の無理解、支援受けられぬ例も [ぐれ★]
- イギリス、反移民を掲げる右派ポピュリスト政党が1600議席中677議席の大躍進―英地方議会選 [お断り★]
- 【京都】赤いポルシェが市営バスと正面衝突…バス乗客の女性が負傷 ポルシェを運転の24歳男を逮捕 酒気帯び運転などの容疑 [シャチ★]
- 🏡ビビンバー🖐🏿😲🖐🏿ハウス🏡
- 💩🏡クソ濡れのお🏡💩
- 駐英日本大使、炎上 イギリス人「ギャー、クランペットにバターつけずジャムを塗っているうううう」 石破茂の任命責任 [175344491]
- 【悲報】大阪万博、閉園までまだ2時間以上あるのにガラガラ、帰宅してる客すら少ない🥹 [616817505]
- 【石破速報】神奈川県警、ストーカー事件でまた嘘をついてたのが判明 [931948549]
- 【悲報】AIエンジニア「親の介護のために地方(広島?)に戻ったら、ITの仕事が家電量販店のスマホ販売員しかなかった…終わりだよ… [257926174]