[過去ログ] Rust part16 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
634(1): 2022/09/05(月)17:54 ID:vXwuqGKm(1) AAS
>>633
シャドーイングできるからテンポラリの変数名は不要だよ
let x = x as u32;
でいい
635(1): 2022/09/05(月)19:20 ID:g3RfqaIY(1/2) AAS
>>633
行数短くしたいだけなら
fn func(x: u8, y: u8) -> u8 {
let (x, y) = (x as u8, y as u8);
(((x - y) * 170) >> 16) + y) as u8
}
とは書けるけどやってることは全く同じだしこれで期待に応えられてるかは分からん
636: 2022/09/05(月)19:21 ID:g3RfqaIY(2/2) AAS
>>635
2行目間違えた
as i32 に読み替えて
637: 2022/09/05(月)21:29 ID:wI2HBmBd(1/2) AAS
>>633
その例は手動で最適化すると
fn func(_x: u8, y: u8) -> u8 {
y
}
それはともかく
行数を節約したいという間違った価値観を捨てることをおすすめ
638: 2022/09/05(月)21:38 ID:F/g4kaon(1) AAS
x < y の場合考慮してなさそう
639: 2022/09/05(月)21:53 ID:wI2HBmBd(2/2) AAS
ホントだごめん訂正
fn func(x: u8, y: u8) -> u8 {
y - (x < y) as u8
}
640: 2022/09/06(火)00:31 ID:EiVnVIDc(1/2) AAS
結局u8で返すなら
途中でi32使わずとも
工夫するとu8のままだけで算出できちゃったりするわけか
641(1): 2022/09/06(火)00:52 ID:uJFa29+7(1) AAS
逆方向にシフトした場合は?
そんな用途があるのか知らんけど
642: 2022/09/06(火)01:12 ID:EiVnVIDc(2/2) AAS
>>641
それはu8部分の下位8bitが常にゼロとなって
足しても引いても影響ないかな
643: 628 2022/09/06(火)11:02 ID:xGSGq1SQ(1) AAS
スタンダードな書き方みたいなのはないのかな
なら>>634で行こうと思います
あと>>633は右シフトを間違えていました
16ではなく8です
644(1): 2022/09/07(水)08:11 ID:8saglJYc(1) AAS
Rustのバイトオーダーってそのターゲットのネイティブ(x64ならリトルエンディアン)で良いの?
645(1): 2022/09/07(水)08:24 ID:41cUJGIp(1) AAS
もちろん
そして依存しないよう3種類用意されてる
assert_eq!(0x01020304, u32::from_be_bytes([1, 2, 3, 4])); // big endian
assert_eq!(0x04030201, u32::from_le_bytes([1, 2, 3, 4])); // little endian
assert_eq!(XXX, u32::from_ne_bytes([1, 2, 3, 4])); // native endian
646: 2022/09/07(水)23:31 ID:qqHULq33(1) AAS
native endianというのは初めて聞いたのですが、これはどういうものなのですか?
647: 2022/09/07(水)23:54 ID:En8I5Kb5(1) AAS
この場合 >>644も書いているようにコンパイルターゲット環境のエンディアンのこと
特にターゲット指定がなければ自分の使っているPC環境で通常はx64などlittle endianになりますが
そこでleと指定してはダメで環境に応じて適切に対応させるためにneを使います
一方でAPIなどでエンディアンが指定されてる時は指定通りbeかleを使います
648(3): 2022/09/08(木)00:04 ID:nmwPOGZ0(1) AAS
>>645
サンクス。u32とかにはfrom_leとかあるみたいですね。こっちの方が使う機会は多そう
デフォルトのバイトオーダーを変更したり、変数やフィールド単位でバイトオーダーを設定する
みたいな芸当は流石に無理なのかな・・・ググったけどそれっぽい情報は見つけられなかった
649: 2022/09/08(木)00:19 ID:8UoQH6yi(1) AAS
>>648
操作に最適なバイトオーダーは使用CPUで決まるネイティブエンディアン
だから原則としてネイティブエンディアンのみでプログラミングする
例外として外部とのやりとりなどエンディアン指定がある時はその境界で変換
650: はちみつ餃子 ◆8X2XSCHEME 2022/09/08(木)00:23 ID:MG9wnc1h(1) AAS
>>648
内部的に色々な表現を有りということにするならやりたい操作を個別に定義するしかないよ。
でも普通はそんな煩雑なことをしたくないから
内部的には一環した表現を使って必要な変換は入出力のみというのが一般的な構成だし、
言語やライブラリも基本的には一般的な構成に倣っている。
651: 2022/09/08(木)01:11 ID:U6/gufpm(1/2) AAS
>>648
変数やフィールドのメモリ上の表現が特定のエンディアンにしたいのであれば、
#[repr(C)]
struct BeU32([u8; 4]);
みたいな構造体を用意して
impl Be32 {
fn get(&self) -> u32 { u32::from_be_bytes(self.0) }
fn ser (&mut self, v: u32) { self.0 = v.to_be_bytes(); }
}
こういうアクセサを実装すれば良いかと
省1
652: 2022/09/08(木)01:21 ID:5HeI/FQK(1) AAS
mansplainers
653: 2022/09/08(木)15:55 ID:Vswe11EN(1/2) AAS
RustをOpenMPIに対応させるようなプロジェクトってありますか?
654: 2022/09/08(木)16:49 ID:mLv3aAxt(1) AAS
「Rust OpenMPI」でGoogle検索
655: 2022/09/08(木)18:02 ID:U6/gufpm(2/2) AAS
OpenMP なのか Open MPI なのかどっち
656: 2022/09/08(木)20:45 ID:Vswe11EN(2/2) AAS
知りたいのはOpenMPIの方です
ググるとOpenMPIとOpenMPを勘違いしたと思われるRayonを紹介する記事が出てきたり、OpenMPがらみのサイトが出てきたり、なかなか状況が分かりません・・・・
657: 2022/09/08(木)20:53 ID:RwfCQI7B(1) AAS
一番上のrsmpiは違うの
658: 2022/09/08(木)21:56 ID:fa0yFdt8(1) AAS
MPIはHPC以外では使う必要ないです
機械学習でも有用だとは思いますが
そもそもフレームワークが対応していないから
全部自前で作ってるような人以外は必要ないです
659: 2022/09/09(金)01:14 ID:4b4Wyf25(1/4) AAS
Open MPIに限らずMPIはアプリから見たらただのライブラリだからRust側で特別な対応は不要で単にCの関数を呼び出せばよいだけでは
660: 2022/09/09(金)08:12 ID:auDHI5c1(1) AAS
良くありがちな奴だと思うけど
struct ARGB32 {A: u8, R: u8, G: u8, B: u8,}
みたいに書くとスネークケースじゃないと警告が出るけどどう書くのがRust流なの?
これ小文字にしちゃったら少なからず可読性が落ちるよね
661(1): 2022/09/09(金)08:31 ID:WeF8ASv0(1) AAS
#[allow(non_snake_case)]
しかしフィールド名だけ小文字にすれば不要
struct ARGB32 {a: u8, r: u8, g: u8, b: u8,}
そして可読性が落ちると思わない
662: 2022/09/09(金)09:24 ID:4b4Wyf25(2/4) AAS
構造体名もCamelCaseでArgb32とすべきかな
663(1): 2022/09/09(金)12:29 ID:6YdHvwwi(1) AAS
識別子を極端に省略するのは良くないという現代のプログラミングの流儀と業界の略語でコンフリクトしてるよね。
略語を使わずに書くとこうかね?
Color<T>{alpha: T, red: T, green: T, blue: T}
CMYはどうなるとか言い出すやつがいると面倒そうだけど。
上下前次1-新書関写板覧索設栞歴
あと 339 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.028s