公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust
Web上の実行環境
https://play.rust-lang.org
日本語の情報
https://rust-jp.rs/
※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 part15
https://mevius.5ch.net/test/read.cgi/tech/1652347700/
Rust part16
■ このスレッドは過去ログ倉庫に格納されています
2022/06/27(月) 08:17:03.45ID:gDlfKP6u
689デフォルトの名無しさん
2022/09/10(土) 15:54:53.07ID:BhJh8aSd >>687
[T; N] は N <= 27 までしかDefault実装されてなかったからこのコードじゃダメだった
こっちならOK
let mut bitmap: [ARGB32; LEN] = std::array::from_fn(|_i| Default::default());
[T; N] は N <= 27 までしかDefault実装されてなかったからこのコードじゃダメだった
こっちならOK
let mut bitmap: [ARGB32; LEN] = std::array::from_fn(|_i| Default::default());
690デフォルトの名無しさん
2022/09/10(土) 16:11:30.59ID:sOVkY8n5 最後の手段のtransmuteは安易に使うものじゃないと思う
691デフォルトの名無しさん
2022/09/10(土) 16:39:14.44ID:qBfKxAEz692デフォルトの名無しさん
2022/09/10(土) 18:12:40.24ID:n3Y/KVD/ >>686
最初に定義した変数bitmapはmoveしてるだけだからmutは余計でいいと思うけど?
最初に定義した変数bitmapはmoveしてるだけだからmutは余計でいいと思うけど?
693デフォルトの名無しさん
2022/09/10(土) 19:24:52.82ID:qBfKxAEz >>692
自分の理解があっているか不安なんですが、mutを付けずにletで宣言すると書き換わらない値として
書き込めないメモリ領域(例えば.textセクション)に配置されたりしないのか?というのが心配な点です
言語仕様上mutを付けない宣言でも必ず読み書き可能な領域に配置されるというのであればそれでかまわないと思いますが
とりあえず手元のx64向けのコンパイラではmutを付けずともスタックフレームに配置されるようですが
組み込み向けなど他のコンパイラでも同様の動作を前提として問題ないのか判りません
古いバージョンのBookにはスタックやヒープの解説があったようですが
ttp://web.mit.edu/rust-lang_v1.25/arch/amd64_ubuntu1404/share/doc/rust/html/book/first-edition/the-stack-and-the-heap.html#:~:text=Memory%20management&text=The%20stack%20is%20very%20fast,explicitly%20allocated%20by%20your%20program
最新版にこのページはないような・・・しかも
>Rust ‘stack allocates’ by default, which means that basic values ‘go on the stack’.
だとRAMを節約したいからROMに配置する実装もあり得ると読めなくもない
自分の理解があっているか不安なんですが、mutを付けずにletで宣言すると書き換わらない値として
書き込めないメモリ領域(例えば.textセクション)に配置されたりしないのか?というのが心配な点です
言語仕様上mutを付けない宣言でも必ず読み書き可能な領域に配置されるというのであればそれでかまわないと思いますが
とりあえず手元のx64向けのコンパイラではmutを付けずともスタックフレームに配置されるようですが
組み込み向けなど他のコンパイラでも同様の動作を前提として問題ないのか判りません
古いバージョンのBookにはスタックやヒープの解説があったようですが
ttp://web.mit.edu/rust-lang_v1.25/arch/amd64_ubuntu1404/share/doc/rust/html/book/first-edition/the-stack-and-the-heap.html#:~:text=Memory%20management&text=The%20stack%20is%20very%20fast,explicitly%20allocated%20by%20your%20program
最新版にこのページはないような・・・しかも
>Rust ‘stack allocates’ by default, which means that basic values ‘go on the stack’.
だとRAMを節約したいからROMに配置する実装もあり得ると読めなくもない
694デフォルトの名無しさん
2022/09/10(土) 20:06:33.59ID:xD3pa07u let bitmap:[u32; LEN] = [0; LEN];
let mut bitmap:[ARGB32; LEN] = unsafe {core::intrinsics::transmute::<_, [ARGB32; LEN]>(bitmap)};
これでいいってことじゃない?
一個目のbitmapは実際書き込んでないからmut不要
二個目のbitmapは変数名同じだけど一個目とは別の変数で、こっちは次の行で書いてるからmut必要
let mut bitmap:[ARGB32; LEN] = unsafe {core::intrinsics::transmute::<_, [ARGB32; LEN]>(bitmap)};
これでいいってことじゃない?
一個目のbitmapは実際書き込んでないからmut不要
二個目のbitmapは変数名同じだけど一個目とは別の変数で、こっちは次の行で書いてるからmut必要
695デフォルトの名無しさん
2022/09/10(土) 20:13:43.96ID:xD3pa07u あぁ言いたいことは分かった
確かにtransmuteしてるからバックエンドの挙動によっては変なことになりうるかもね
ただそれは別にmutをつけても保証はされない気がする
確かにtransmuteしてるからバックエンドの挙動によっては変なことになりうるかもね
ただそれは別にmutをつけても保証はされない気がする
696デフォルトの名無しさん
2022/09/10(土) 20:24:18.78ID:BhJh8aSd >>691
repr(packed)を指定した構造体のフィールドへのアクセスは未定義動作を引き起こす可能性があるからrepr(packed)は基本的には使わない方が良いよ
https://doc.rust-lang.org/nomicon/other-reprs.html#reprpacked
確かにrepr(C)やrepr(Rust)はパディングされる可能性があるけど、フィールドのアラインメントを適切にするために必要なものなので
パディングが問題になるならフィールドのメンバーの順序やサイズを見直すか、フィールドの値を読むのに std::ptr::read_unaligned を使う必要があるよ
https://doc.rust-lang.org/std/ptr/fn.read_unaligned.html
read_unalignedのドキュメントにも書いてあるけど、アライメントが不適切なフィールドへの参照を作るのすら未定義動作になるという落とし穴もあったり、
repr(packed)な構造体の取り扱いにはいろいろと注意が必要になるので、本当に必要なとき以外は使わない方が良いよ
あと、repr(packed)はrepr(packed, Rust)と同じ意味になるので、構造体のフィールドがメモリ上でどのような配置になるかの保証はないよ
フィールドの定義順とメモリ上での順序を同じにしたいのであれば repr(C) または repr(C, packed) と指定する必要があるよ
いずれにせよ今回は全てのフィールドがu8だからrepr(C)でパディングが挿入されることはなく
無駄にメモリを消費することもないよ
どうしてもパディング挿入が心配なら mem::size_ofやmem::align_ofを使って構造体のサイズとアライメントに関するアサーションを加えるのが良いと思う
repr(packed)を指定した構造体のフィールドへのアクセスは未定義動作を引き起こす可能性があるからrepr(packed)は基本的には使わない方が良いよ
https://doc.rust-lang.org/nomicon/other-reprs.html#reprpacked
確かにrepr(C)やrepr(Rust)はパディングされる可能性があるけど、フィールドのアラインメントを適切にするために必要なものなので
パディングが問題になるならフィールドのメンバーの順序やサイズを見直すか、フィールドの値を読むのに std::ptr::read_unaligned を使う必要があるよ
https://doc.rust-lang.org/std/ptr/fn.read_unaligned.html
read_unalignedのドキュメントにも書いてあるけど、アライメントが不適切なフィールドへの参照を作るのすら未定義動作になるという落とし穴もあったり、
repr(packed)な構造体の取り扱いにはいろいろと注意が必要になるので、本当に必要なとき以外は使わない方が良いよ
あと、repr(packed)はrepr(packed, Rust)と同じ意味になるので、構造体のフィールドがメモリ上でどのような配置になるかの保証はないよ
フィールドの定義順とメモリ上での順序を同じにしたいのであれば repr(C) または repr(C, packed) と指定する必要があるよ
いずれにせよ今回は全てのフィールドがu8だからrepr(C)でパディングが挿入されることはなく
無駄にメモリを消費することもないよ
どうしてもパディング挿入が心配なら mem::size_ofやmem::align_ofを使って構造体のサイズとアライメントに関するアサーションを加えるのが良いと思う
697デフォルトの名無しさん
2022/09/10(土) 20:36:28.31ID:BhJh8aSd >>693
let a = ...;
let mut a = a;
みたいに書いた場合、一個目のaと二個目のaは別の変数扱いでそれぞれ個別に領域が割り当てられるよ
二個目のaに格納されるのはaの値で、ポインタじゃないから一個目のaが書き込み不可な領域に格納されていたとしても
二個目のaのために割り当てられた読み書き可能な領域に一個目のaの値がコピーされるような動作になるはず
最適化によって一個目のaと二個目のaが同じ領域を使い回すようになるかもしれないけど、二個目のa定義後はその領域に対する書き込みは可能なことが保証されてるはず
transmuteを呼び出した場合も同じで、
transmute(a) という呼び出しをした場合transmuteに渡されるのはaの値なので、二個目のaの定義後は問題なくaに書き込めるはず
ただし、transmuteに&aを渡して&mutに変換するみたいなことをすると未定義動作になるから注意は必要
https://doc.rust-lang.org/reference/behavior-considered-undefined.html
> Mutating immutable data. All data inside a const item is immutable. Moreover, all data reached through a shared reference or data owned by an immutable binding is immutable, unless that data is contained within an UnsafeCell<U>.
let a = ...;
let mut a = a;
みたいに書いた場合、一個目のaと二個目のaは別の変数扱いでそれぞれ個別に領域が割り当てられるよ
二個目のaに格納されるのはaの値で、ポインタじゃないから一個目のaが書き込み不可な領域に格納されていたとしても
二個目のaのために割り当てられた読み書き可能な領域に一個目のaの値がコピーされるような動作になるはず
最適化によって一個目のaと二個目のaが同じ領域を使い回すようになるかもしれないけど、二個目のa定義後はその領域に対する書き込みは可能なことが保証されてるはず
transmuteを呼び出した場合も同じで、
transmute(a) という呼び出しをした場合transmuteに渡されるのはaの値なので、二個目のaの定義後は問題なくaに書き込めるはず
ただし、transmuteに&aを渡して&mutに変換するみたいなことをすると未定義動作になるから注意は必要
https://doc.rust-lang.org/reference/behavior-considered-undefined.html
> Mutating immutable data. All data inside a const item is immutable. Moreover, all data reached through a shared reference or data owned by an immutable binding is immutable, unless that data is contained within an UnsafeCell<U>.
698デフォルトの名無しさん
2022/09/11(日) 12:51:18.94ID:6axTKkj4 >>693
>mutを付けずにletで宣言すると書き換わらない値として
>書き込めないメモリ領域(例えば.textセクション)に配置されたりしないのか?というのが心配な点です
しねーよ。
組み込みだろーがそれは変わらない。
letついて束縛変数といわれようが変数は変数。
>mutを付けずにletで宣言すると書き換わらない値として
>書き込めないメモリ領域(例えば.textセクション)に配置されたりしないのか?というのが心配な点です
しねーよ。
組み込みだろーがそれは変わらない。
letついて束縛変数といわれようが変数は変数。
699デフォルトの名無しさん
2022/09/11(日) 13:08:43.20ID:3JeGkSLy 今はしないけどそうなるような最適化は禁止されてないのでは
700デフォルトの名無しさん
2022/09/11(日) 13:49:03.04ID:7UmicIsS コンパイル時に値が確定してないとtextセクションに書けないでしょ
701デフォルトの名無しさん
2022/09/11(日) 13:55:35.90ID:VMVpvyTB そっちは定数でconstだしそうなる
letはあくまでもimmutableな変数であり定数ではない
letはあくまでもimmutableな変数であり定数ではない
702デフォルトの名無しさん
2022/09/11(日) 13:57:25.52ID:kEOVMHNm コンパイル時に確定するような式なら最適化でありえるんじゃないの?
703デフォルトの名無しさん
2022/09/11(日) 14:07:54.90ID:VMVpvyTB どのように最適化されようが
constではなくlet x = ...ならば
let mut x = x; とムーブして書き換え可能
これは言語のレベルで保証される
そしてそのように使うならば最適化も無駄なことせずにtext segmentでなくdata segmentに置くだろう
constではなくlet x = ...ならば
let mut x = x; とムーブして書き換え可能
これは言語のレベルで保証される
そしてそのように使うならば最適化も無駄なことせずにtext segmentでなくdata segmentに置くだろう
704デフォルトの名無しさん
2022/09/11(日) 14:40:44.81ID:ujBIW69o CloneとCopyについて
let mut bitmap:[u32; LEN] = [0; LEN];
let mut bitmap:[ARGB32; LEN] = unsafe {core::intrinsics::transmute::<[u32; LEN], [ARGB32; LEN]>(bitmap)};
と
#[derive(Clone, Copy, Default)]
&
let mut bitmap:[ARGB32; 16] = [ARGB32::default(); LEN];
で読み書きを
bitmap[0].red = 0x80;
let x = bitmap[0].red;
bitmap[0].green = x;
としてみたけど出力された読み書き部分のコードは同じでした。もっとでかい構造体じゃないとムーブかコピーかの区別は出来ないのかな
>>696
マジか。Rustでもパディングの問題がつきまとうのか。でも
>Accessing unaligned fields directly with e.g. packed.unaligned is safe however.
って事は.redとかでアクセスする場合はコンパイラが良きに計らってくれるのでアクセス境界の問題は起きないって事かな?
画像データのバイトやビットの並びなんてすでに決まっていてプログラムはそれに合わせるしかないのが普通でしょうし
勝手にパディングされても困ります
実は並行してCでも書いているんだけど構造体のパディングの制御は処理系依存らしくて移植性を優先すると
データは整数の配列で持って論理演算とシフトで分解、構築するコードになってしまってます
let mut bitmap:[u32; LEN] = [0; LEN];
let mut bitmap:[ARGB32; LEN] = unsafe {core::intrinsics::transmute::<[u32; LEN], [ARGB32; LEN]>(bitmap)};
と
#[derive(Clone, Copy, Default)]
&
let mut bitmap:[ARGB32; 16] = [ARGB32::default(); LEN];
で読み書きを
bitmap[0].red = 0x80;
let x = bitmap[0].red;
bitmap[0].green = x;
としてみたけど出力された読み書き部分のコードは同じでした。もっとでかい構造体じゃないとムーブかコピーかの区別は出来ないのかな
>>696
マジか。Rustでもパディングの問題がつきまとうのか。でも
>Accessing unaligned fields directly with e.g. packed.unaligned is safe however.
って事は.redとかでアクセスする場合はコンパイラが良きに計らってくれるのでアクセス境界の問題は起きないって事かな?
画像データのバイトやビットの並びなんてすでに決まっていてプログラムはそれに合わせるしかないのが普通でしょうし
勝手にパディングされても困ります
実は並行してCでも書いているんだけど構造体のパディングの制御は処理系依存らしくて移植性を優先すると
データは整数の配列で持って論理演算とシフトで分解、構築するコードになってしまってます
705デフォルトの名無しさん
2022/09/11(日) 14:49:25.24ID:FOB38Q8d そのような実装はしたくないわけですか
706デフォルトの名無しさん
2022/09/11(日) 15:13:19.03ID:/O1tQPyF どの言語でも同じ
Rustでも&mutでtransmuteしてもendian依存は避けられないな
let mut x = 0x01020304_u32;
let a = unsafe { std::mem::transmute::<&mut u32, &mut [u8; 4]>(&mut x) };
a[1] = 7;
assert_eq!(x, 0x01020704);
とlittle endianでは7の位置はこうなる
Rustでも&mutでtransmuteしてもendian依存は避けられないな
let mut x = 0x01020304_u32;
let a = unsafe { std::mem::transmute::<&mut u32, &mut [u8; 4]>(&mut x) };
a[1] = 7;
assert_eq!(x, 0x01020704);
とlittle endianでは7の位置はこうなる
707デフォルトの名無しさん
2022/09/11(日) 18:54:24.82ID:gEyGQ7vE このスレでよく出てくる μt ってなんなん?
音的に mut をそう書いてる異常者がいるだけかと思ってるんだけど、なにか別の意味を持った概念や機能だったりするの?
音的に mut をそう書いてる異常者がいるだけかと思ってるんだけど、なにか別の意味を持った概念や機能だったりするの?
708デフォルトの名無しさん
2022/09/11(日) 20:25:15.55ID:FOB38Q8d 自分も思ったけどブラウザによっては & mut がそうなるみたい
709デフォルトの名無しさん
2022/09/11(日) 20:27:57.44ID:QYXgEc7E >>708
そうなんだ。
そうなんだ。
710デフォルトの名無しさん
2022/09/11(日) 20:45:42.63ID:hnVgjqVb711デフォルトの名無しさん
2022/09/11(日) 21:25:51.88ID:zZ32ojSE HTMLの文字参照で& muがμ
712デフォルトの名無しさん
2022/09/11(日) 21:45:56.06ID:ujBIW69o 例えば
pixel.alpha = in[0].alpha;
pixel.red = in[0].red / 2;
pixel.green = in[0].green / 2;
pixel.blue = in[0].blue / 2;
out[0] = pixel;
と
red = 0xFF & (in[0] >> 16);
green = 0xFF & (in[0] >> 8);
blue = 0xFF & in[0];
red /= 2;
green /= 2;
blue /= 2;
pixel = 0xFF000000 & in[0];
pixel |= red << 16;
pixel |= green << 8;
pixel |= blue;
out[0] = pixel;
ではだいぶ見やすさが違うような
pixel.alpha = in[0].alpha;
pixel.red = in[0].red / 2;
pixel.green = in[0].green / 2;
pixel.blue = in[0].blue / 2;
out[0] = pixel;
と
red = 0xFF & (in[0] >> 16);
green = 0xFF & (in[0] >> 8);
blue = 0xFF & in[0];
red /= 2;
green /= 2;
blue /= 2;
pixel = 0xFF000000 & in[0];
pixel |= red << 16;
pixel |= green << 8;
pixel |= blue;
out[0] = pixel;
ではだいぶ見やすさが違うような
713デフォルトの名無しさん
2022/09/11(日) 21:47:41.04ID:3JeGkSLy >>704
パディングというかメモリアクセス時のアラインメントについてはCPUの仕様だから言語関係ないよ
x86がunalignedなアクセスについてゆるゆるだから忘れられがちだけど雑に書いたプログラムをarmで動かしたりするとクラッシュする
今回はu8へのアクセスだからさすがにパディング入れられることはないと思うけどね
パディングというかメモリアクセス時のアラインメントについてはCPUの仕様だから言語関係ないよ
x86がunalignedなアクセスについてゆるゆるだから忘れられがちだけど雑に書いたプログラムをarmで動かしたりするとクラッシュする
今回はu8へのアクセスだからさすがにパディング入れられることはないと思うけどね
714デフォルトの名無しさん
2022/09/11(日) 21:50:14.96ID:3JeGkSLy >>712
シフト処理など隠蔽してくれるアクセサメソッド用意したらだいたい同じような読みやすさになるのでは
シフト処理など隠蔽してくれるアクセサメソッド用意したらだいたい同じような読みやすさになるのでは
715デフォルトの名無しさん
2022/09/11(日) 23:45:21.14ID:ujBIW69o716デフォルトの名無しさん
2022/09/11(日) 23:59:30.49ID:/O1tQPyF717デフォルトの名無しさん
2022/09/12(月) 00:37:31.19ID:5hhAOS+Q &mut テスト
718デフォルトの名無しさん
2022/09/12(月) 01:00:12.66ID:JkhjRZ+U719デフォルトの名無しさん
2022/09/12(月) 01:13:39.26ID:D0TZxDhn HTML等の文字参照を処理する場合でも
μt (= & m u ; t )が μt となるのは正しいけど
&mut (= & m u t )が μt となるの間違いだからこれはバグと思われる
μt (= & m u ; t )が μt となるのは正しいけど
&mut (= & m u t )が μt となるの間違いだからこれはバグと思われる
720デフォルトの名無しさん
2022/09/12(月) 02:30:39.40ID:JkhjRZ+U あ、たしかにバグっぽい・・・
721デフォルトの名無しさん
2022/09/12(月) 06:45:23.29ID:hsi1XO0i 文字列参照に & mut なんてないからテキトーに解釈してるんでしょ
良し悪しは別にして html を扱うブラウザではそれほど珍しくはない
個人的には余計な事すんなとは思う
良し悪しは別にして html を扱うブラウザではそれほど珍しくはない
個人的には余計な事すんなとは思う
722デフォルトの名無しさん
2022/09/12(月) 07:14:45.53ID:tyJETXG8 これはmateのバグです
& x y z ; とセミコロンで終わる場合のみその部分を文字参照として解釈するのが正しいです
& x y z ; とセミコロンで終わる場合のみその部分を文字参照として解釈するのが正しいです
723デフォルトの名無しさん
2022/09/12(月) 07:33:21.32ID:o/NFQNbK &mut と書けば良いかな
テスト → &mut
テスト → &mut
724デフォルトの名無しさん
2022/09/12(月) 07:34:32.06ID:o/NFQNbK & amp ; amp; を空白なしで書き込んだら & に変換されてしまった
実体参照複数回展開しているのかな
&
実体参照複数回展開しているのかな
&
725デフォルトの名無しさん
2022/09/12(月) 08:15:16.27ID:NGx/fsjU ライブラリとかのコンポーネントの一部を作っているときに入出力だけ不定値として扱う方法ってありませんかね
ガワ作って入出力を完全に外部に出さないとコードがみんな消えてしまうのは不便です
最適化レベルによる変化とか全然確認出来ないし
ガワ作って入出力を完全に外部に出さないとコードがみんな消えてしまうのは不便です
最適化レベルによる変化とか全然確認出来ないし
726デフォルトの名無しさん
2022/09/12(月) 08:36:58.55ID:tyJETXG8 ちょっと意味がわからない
こうなるはずだから困ることはないと思うけど
・最適化によってRustが定めている意味が変わることはない
・pub宣言しているものは中で呼ばれていなくても単体コンパイルで消えることはない
・pub宣言されていないものは中で呼ばれていなければ今後も誰からも呼ばれないためwarningが出て消える
こうなるはずだから困ることはないと思うけど
・最適化によってRustが定めている意味が変わることはない
・pub宣言しているものは中で呼ばれていなくても単体コンパイルで消えることはない
・pub宣言されていないものは中で呼ばれていなければ今後も誰からも呼ばれないためwarningが出て消える
727デフォルトの名無しさん
2022/09/12(月) 10:25:58.86ID:o/NFQNbK genericな関数だと呼び出し元がないとコード生成されないとか?
728デフォルトの名無しさん
2022/09/12(月) 12:04:36.56ID:tyJETXG8 その場合でも実際に使う型々でtestを書くだろうからcargo testで確認できるでしょ
729デフォルトの名無しさん
2022/09/12(月) 12:46:09.29ID:SjJDv8F6730デフォルトの名無しさん
2022/09/12(月) 14:30:52.03ID:o/NFQNbK731デフォルトの名無しさん
2022/09/12(月) 19:11:31.91ID:2zIjStdY >>730
変更してみた。staticlibだとpub付けても消える。rlibなら消えないようだ
とりあえずrlibにしておいてある程度形になってきたら変更すればいいか
コード自体はどっちでも大差ないだろうし
変更してみた。staticlibだとpub付けても消える。rlibなら消えないようだ
とりあえずrlibにしておいてある程度形になってきたら変更すればいいか
コード自体はどっちでも大差ないだろうし
732デフォルトの名無しさん
2022/09/18(日) 01:08:32.32ID:g4sMxKuf [u32; LEN]と[ARGB32; LEN] の件、アラインメントが違うからtransmuteの時点でUBだけど
733デフォルトの名無しさん
2022/09/19(月) 02:33:25.46ID:HMAR4dxa Tauriで動画プレーヤー的なのを作るサンプルってどっかにある?
ただ再生するデータは既存のmp4ファイルなどではなくRustプログラムから渡したい
あと再生、停止、コマ送り、シークなどの基本的な機能は実装したい
ただ再生するデータは既存のmp4ファイルなどではなくRustプログラムから渡したい
あと再生、停止、コマ送り、シークなどの基本的な機能は実装したい
734デフォルトの名無しさん
2022/09/19(月) 07:48:35.44ID:BbpMxDy4 TauriってWebアプリのサーバーサイドがRustで一体型プログラムになっているだけだろ?
そして既存のWeb技術を活かせるのがTauriの利点だろ?
そうならば例えばhls.jsなど既存の好みの動画配信再生フレームワークを使えばいいだけじゃないか?
Webサーバーサイドやったことあるならばフロントエンドからファイルに見えているものは本物のファイルである必要はなくサーバーサイドが算出していれば十分だろ?
そして既存のWeb技術を活かせるのがTauriの利点だろ?
そうならば例えばhls.jsなど既存の好みの動画配信再生フレームワークを使えばいいだけじゃないか?
Webサーバーサイドやったことあるならばフロントエンドからファイルに見えているものは本物のファイルである必要はなくサーバーサイドが算出していれば十分だろ?
735デフォルトの名無しさん
2022/09/19(月) 12:27:41.81ID:HMAR4dxa >>734
>HLS
ちょっと調べてみたけどHLSでいわゆるRAWデータを再生出来るという情報は見つけられていない
特にビデオが未圧縮データを扱えそうにない。オーディオは未圧縮FLACでいけるかもしれないけど
再生したいのがWebブラウザが対応していないデータなのでどうしようか考え中
ビデオはBMPのぱらぱら漫画でオーディオはHLSで未圧縮FLACとか?なんか無駄に実装量が増えるけど
>HLS
ちょっと調べてみたけどHLSでいわゆるRAWデータを再生出来るという情報は見つけられていない
特にビデオが未圧縮データを扱えそうにない。オーディオは未圧縮FLACでいけるかもしれないけど
再生したいのがWebブラウザが対応していないデータなのでどうしようか考え中
ビデオはBMPのぱらぱら漫画でオーディオはHLSで未圧縮FLACとか?なんか無駄に実装量が増えるけど
736デフォルトの名無しさん
2022/09/19(月) 13:11:44.57ID:PTk7Q+2G その手のやつでオーバーヘッド減らすならOS毎にネイティブ実装するしかなくない?
737デフォルトの名無しさん
2022/09/19(月) 18:38:49.00ID:EybjBREq なんとかtauri使うにしてもJSやらWASMやらで動画レンダリングするようなもの作らないとだめそう
738デフォルトの名無しさん
2022/09/19(月) 18:45:15.20ID:npVSxydm 実装を追加させない方法ってありますか?
別個に渡されたふたつの型が同じであるという制約を付けたいという目的で
以下のようなトレイト Same を定義した場合、実装を追加できてしまうと破綻してしまうので、
なんらかの方法で制限できるだろうかという疑問です。
pub trait Same<T> {}
impl<T> Same<T> for T {}
// 使用例
pub fn foo<T, U>(x: T, y: U)
where
T: Same<U>,
{
}
ちなみに目的を上述しましたけども実際には目的というよりは題材です。
つまり具体的な用途は考えておらず、質問はあくまでも「実装させない方法があるかどうか」です。
別個に渡されたふたつの型が同じであるという制約を付けたいという目的で
以下のようなトレイト Same を定義した場合、実装を追加できてしまうと破綻してしまうので、
なんらかの方法で制限できるだろうかという疑問です。
pub trait Same<T> {}
impl<T> Same<T> for T {}
// 使用例
pub fn foo<T, U>(x: T, y: U)
where
T: Same<U>,
{
}
ちなみに目的を上述しましたけども実際には目的というよりは題材です。
つまり具体的な用途は考えておらず、質問はあくまでも「実装させない方法があるかどうか」です。
739デフォルトの名無しさん
2022/09/19(月) 19:32:04.41ID:sJf7ZiDr trait Sealed {}
pub trait Same<T>: Sealed {}
pub trait Same<T>: Sealed {}
740デフォルトの名無しさん
2022/09/19(月) 21:19:03.69ID:EybjBREq741デフォルトの名無しさん
2022/09/19(月) 21:29:04.18ID:Elo9mBmF ふたつの型が同じという制約を付けたいなら
TとUじゃなくTとTにすればいいじゃんか
TとUじゃなくTとTにすればいいじゃんか
742デフォルトの名無しさん
2022/09/19(月) 21:34:13.52ID:jWPeXdq1 >>738
達成したいことが特にないらしいからなんとも言えないけど enum を使っても近いことはできるんじゃないかな。
enum Same{SameA(型A),SameB(型B)}
みたいにしてやれば、Same 経由で扱う限り実装は増やせないぞ。
達成したいことが特にないらしいからなんとも言えないけど enum を使っても近いことはできるんじゃないかな。
enum Same{SameA(型A),SameB(型B)}
みたいにしてやれば、Same 経由で扱う限り実装は増やせないぞ。
743デフォルトの名無しさん
2022/09/19(月) 22:48:26.11ID:npVSxydm >>739-740
実装を追加させないテクニックのひとつとして有用ですし紹介はありがたいです。
しかしそれだと Sealed を実装した型だけにしか使えず、 >>738 で示したような汎用的に型を比較するトレイトには使えないですよね。
この Same のように機能するトレイトに実装を追加させないというのは前提と考えて欲しいです。
>>741
そういうレスが付くことを避けたいから最後の文をつけたつもりなんですが……。
Rust の初心者として様々な言語機能を理解したいという立場で疑問に思った部分を抜き出し、
説明のために前提条件を設定したのであって、前提条件の部分自体は解決したい課題ではないです。
いわゆるXY問題というものの存在は承知しておりますので
解決したい大元の問題を示さないというのがモヤモヤするだろうなというのはわかります。
わかりますが、大元の問題というものはありません。
この範囲で完結するパズルだと思ってください。
実装を追加させないテクニックのひとつとして有用ですし紹介はありがたいです。
しかしそれだと Sealed を実装した型だけにしか使えず、 >>738 で示したような汎用的に型を比較するトレイトには使えないですよね。
この Same のように機能するトレイトに実装を追加させないというのは前提と考えて欲しいです。
>>741
そういうレスが付くことを避けたいから最後の文をつけたつもりなんですが……。
Rust の初心者として様々な言語機能を理解したいという立場で疑問に思った部分を抜き出し、
説明のために前提条件を設定したのであって、前提条件の部分自体は解決したい課題ではないです。
いわゆるXY問題というものの存在は承知しておりますので
解決したい大元の問題を示さないというのがモヤモヤするだろうなというのはわかります。
わかりますが、大元の問題というものはありません。
この範囲で完結するパズルだと思ってください。
744デフォルトの名無しさん
2022/09/20(火) 00:14:22.92ID:nBuFqijL 2つの矛盾してる要求を同時に実現は無理だわな
745デフォルトの名無しさん
2022/09/20(火) 00:42:08.53ID:FykVNAq+ impl Foo for Tが存在する時点で他の型にFoo実装しようとするとconflictしなかったっけ
746デフォルトの名無しさん
2022/09/20(火) 00:43:28.04ID:FykVNAq+ fundamentalな型に一通り実装しておけば良さそう
747デフォルトの名無しさん
2022/09/20(火) 00:48:25.82ID:FykVNAq+748デフォルトの名無しさん
2022/09/20(火) 00:50:06.23ID:FykVNAq+ fundamental云々はcoherent ruleの話でconflictとは関係なかったわ
749738
2022/09/20(火) 01:17:29.77ID:w2qVrruo なるほど、 C++ と違って特殊化にならないからより狭い範囲の実装は追加できないんですね。
&T とか &mut T とかも先に実装しておけば追加の余地をなくせると。
&T とか &mut T とか以外にどういうのがありえますかね?
&T とか &mut T とかも先に実装しておけば追加の余地をなくせると。
&T とか &mut T とか以外にどういうのがありえますかね?
750デフォルトの名無しさん
2022/09/20(火) 01:40:45.09ID:lHbnVGdk751738
2022/09/20(火) 01:53:09.66ID:w2qVrruo752デフォルトの名無しさん
2022/09/20(火) 18:26:27.74ID:p9SiwD2d 「Linux」、バージョン6.1でRustを導入へ--トーバルス氏が明言
https://japan.zdnet.com/article/35193491/
https://japan.zdnet.com/article/35193491/
753デフォルトの名無しさん
2022/09/20(火) 20:25:26.21ID:ckEqOjly754デフォルトの名無しさん
2022/09/20(火) 20:46:56.46ID:Di+jgu/u 今のところデバドラだけという話だけど
基幹部分の新実装をRustで作りましたという
人が絶対現れるからそのときどうなるだろ
基幹部分の新実装をRustで作りましたという
人が絶対現れるからそのときどうなるだろ
755デフォルトの名無しさん
2022/09/20(火) 20:51:48.09ID:rUHkgvjw 誰もvoldemort typeの名を呼ぼうとしない
756デフォルトの名無しさん
2022/09/22(木) 02:33:16.78ID:OUmiFnaH MS AzureのCTOが「新しいプロジェクトでC/C++使うのはやめて
非GC言語が必要な状況ではRustを使うべき時だ」ってツイートしてるけど
Visual StudioでもRustが最初からパッケージングされてるようになるのかな
非GC言語が必要な状況ではRustを使うべき時だ」ってツイートしてるけど
Visual StudioでもRustが最初からパッケージングされてるようになるのかな
757デフォルトの名無しさん
2022/09/22(木) 09:05:24.01ID:e5bGjsaE https://www.publickey1.jp/blog/22/cloudflarenginxrusthttppingoracdncpu31.html
Cloudflare、NGINXに代えて自社開発のRust製HTTPプロキシ「Pingora」をグローバルCDNに採用。性能向上しつつCPUとメモリ消費を3分の1に
Cloudflare、NGINXに代えて自社開発のRust製HTTPプロキシ「Pingora」をグローバルCDNに採用。性能向上しつつCPUとメモリ消費を3分の1に
758デフォルトの名無しさん
2022/09/22(木) 13:36:58.59ID:V4zanZlp759デフォルトの名無しさん
2022/09/22(木) 19:38:28.16ID:VGEMfVQX760デフォルトの名無しさん
2022/09/23(金) 05:18:56.24ID:I8UIrhRk Iteratorに対するIntoIteratorのように
Futureに対するIntoFutureということか
しかも.awaitに対して自動適用だからもっと効果が大きいか
非同期を返すビルダーに対してFutureを返させるためのビルド完了指示メソッド呼び出しが不要となる
Futureに対するIntoFutureということか
しかも.awaitに対して自動適用だからもっと効果が大きいか
非同期を返すビルダーに対してFutureを返させるためのビルド完了指示メソッド呼び出しが不要となる
761デフォルトの名無しさん
2022/09/23(金) 08:24:08.00ID:G8O+P73a Rust analyzerが優秀過ぎてMSが入る余地なさそう
PythonがMS Storeから落とせるみたいにインストールが楽になるとかならありそう
VSに導入されたらそれはそれで面白いんだけど.Net言語との連携が強化されないと旨味がないな
PythonがMS Storeから落とせるみたいにインストールが楽になるとかならありそう
VSに導入されたらそれはそれで面白いんだけど.Net言語との連携が強化されないと旨味がないな
762デフォルトの名無しさん
2022/09/23(金) 08:29:43.60ID:exFn1ITS Rustからから.Net?
意味ないやろ...
意味ないやろ...
763デフォルトの名無しさん
2022/09/23(金) 10:08:58.99ID:QyFSmn0+ 既存ライブラリがそのまま呼べるならお試しで部分的に新言語導入してみようとなる可能性もあるので意味はある
764デフォルトの名無しさん
2022/09/23(金) 10:43:28.96ID:bBi47OZ4 Rust/Cliとか余計なもの作られそう
765デフォルトの名無しさん
2022/09/23(金) 12:31:56.94ID:aakQSAhx >>758
VSCodeの方が対応は早いかもだが、VSに追加する気がないことは無いんじゃないかな
VSCodeの方が対応は早いかもだが、VSに追加する気がないことは無いんじゃないかな
766デフォルトの名無しさん
2022/09/23(金) 17:48:32.43ID:z6wpDrU6767デフォルトの名無しさん
2022/09/23(金) 18:02:01.54ID:bhLcJIv7 rust_analyzerの話題ついでに教えて欲しいのですが、保存なしで構文チェック等してくれるようにならないものなのですか?
編集を破棄して保存前の状態にしたい時があるので、できれば自動で保存したくないのです
Vim系プラグイン等を入れていれば無限に戻せるのかもしれないものの、Vimが使えない身としては困ってしまいます
編集を破棄して保存前の状態にしたい時があるので、できれば自動で保存したくないのです
Vim系プラグイン等を入れていれば無限に戻せるのかもしれないものの、Vimが使えない身としては困ってしまいます
768デフォルトの名無しさん
2022/09/23(金) 18:02:58.63ID:exFn1ITS769デフォルトの名無しさん
2022/09/23(金) 18:04:41.93ID:nucVVsrt >>767
まあ普通はGitを使うからね
まあ普通はGitを使うからね
770デフォルトの名無しさん
2022/09/23(金) 18:05:33.15ID:5/jqA4bf C#も.Netも全く興味ないので知らないが
PythonでもJavaScriptでも何でもRustで作ったライブラリなどを簡単に呼び出すことができる仕組みがそれぞれ整えられている
既存のものの置き換えは無意味だが新たに作られるものはRustで書くことが増えている
PythonでもJavaScriptでも何でもRustで作ったライブラリなどを簡単に呼び出すことができる仕組みがそれぞれ整えられている
既存のものの置き換えは無意味だが新たに作られるものはRustで書くことが増えている
771デフォルトの名無しさん
2022/09/23(金) 21:26:00.89ID:Oi43IjEf repr(C)でCのフリしたRustじゃなくて、俺はありのままのRustが動いている世界線が見たいよ
772デフォルトの名無しさん
2022/09/23(金) 21:26:44.38ID:bhLcJIv7 >>769
でも、破棄ならコミット後の状態にも戻せるぜ?
でも、破棄ならコミット後の状態にも戻せるぜ?
773デフォルトの名無しさん
2022/09/23(金) 21:42:44.57ID:KYVSlV2v >>771
ABI安定化するまではFFIでextern "C"は避けられないよ
ABI安定化するまではFFIでextern "C"は避けられないよ
774デフォルトの名無しさん
2022/09/23(金) 21:53:19.36ID:wlVyCNVq >>773
そんなことすべきでない
自由にRust コンパイラによる最適化の余地を与える現在の方針がベスト
外部に公開しなきゃいけない時に外部に公開する部分だけを#[repr(C)]や#[wasm_bindgen]など指定すればよい
そんなことすべきでない
自由にRust コンパイラによる最適化の余地を与える現在の方針がベスト
外部に公開しなきゃいけない時に外部に公開する部分だけを#[repr(C)]や#[wasm_bindgen]など指定すればよい
775デフォルトの名無しさん
2022/09/23(金) 23:40:33.31ID:EyovOcQI 双方でマーシャル/アンマーシャルが必要になって無駄だよね
776デフォルトの名無しさん
2022/09/23(金) 23:55:09.24ID:9eaiNZZz なるほど
777デフォルトの名無しさん
2022/09/23(金) 23:58:10.15ID:SxK8BSHj 対C/C++はそこまで必要ならそこもRustで書いちゃうから何ら問題はない
他の言語ではそれぞれもっと大きなオーバヘッドを持っているので誤差に収まり問題にならない
他の言語ではそれぞれもっと大きなオーバヘッドを持っているので誤差に収まり問題にならない
778デフォルトの名無しさん
2022/09/24(土) 00:06:07.91ID:j2XeJCoN やっぱエアプの複オジはわかってないなぁ
779デフォルトの名無しさん
2022/09/24(土) 00:11:50.36ID:DaB/WDgt780デフォルトの名無しさん
2022/09/24(土) 00:14:18.76ID:DaB/WDgt もしかして repr(Rust) のこと言ってる?
781デフォルトの名無しさん
2022/09/24(土) 03:05:40.90ID:ugWjDAH5 Rustだけで閉じていればpubであっても自由に最適化されるからpubかどうかは関係ないでしょう
結局Rustの外に公開する部分だけの話に限られるからそこだけ相手毎に応じる現行の方式のままで構わないでしょう
結局Rustの外に公開する部分だけの話に限られるからそこだけ相手毎に応じる現行の方式のままで構わないでしょう
782デフォルトの名無しさん
2022/09/24(土) 08:50:49.84ID:pfcr5AFZ C++やRustはABI決まってないのにC言語は何故ほぼ決まってるの?
783デフォルトの名無しさん
2022/09/24(土) 09:11:44.18ID:DaB/WDgt >>781
dylibの場合pubは大いに関係あるよ
dylibの場合pubは大いに関係あるよ
784デフォルトの名無しさん
2022/09/24(土) 09:15:16.80ID:WR9fIR0K ぶっちゃけあらゆるOSがC言語で書かれているあたりCの呪縛から逃れられないよ
785デフォルトの名無しさん
2022/09/24(土) 09:26:53.29ID:rPP8Qygy >>782
名前をプログラマが決められるからだよ
名前をプログラマが決められるからだよ
786デフォルトの名無しさん
2022/09/24(土) 09:44:37.12ID:BCuennz9 >>782
むしろCは決まってるの?
決まってるわけじゃなくて単純だし歴史も長いから結果的にほぼ変わらない&その現状に合わせて変わらない変更をしてるだけみたいなことをgccかなんかの中の人の記事で読んだ気がするんだけどデマなんかな
むしろCは決まってるの?
決まってるわけじゃなくて単純だし歴史も長いから結果的にほぼ変わらない&その現状に合わせて変わらない変更をしてるだけみたいなことをgccかなんかの中の人の記事で読んだ気がするんだけどデマなんかな
787はちみつ餃子 ◆8X2XSCHEME
2022/09/24(土) 10:38:04.73ID:2HWwrIyG 近年になって作られた高速リンカ mold の作者の話でも、
文書化されていない暗黙の仕様に何度もぶつかったみたいなことだったはず。
C 以外の言語 (処理系) もツールチェインは共通のものを使っている場合は結構あるし
どれがどの挙動に依存しているかようわからんので安易に整理するわけにもいかず、
結局のところは C コンパイラとは長年に渡って協調してきたから細かい問題点が
解決されているというだけで、そんなにカッチリした仕様が確立しているわけではないと思う。
文書化されていない暗黙の仕様に何度もぶつかったみたいなことだったはず。
C 以外の言語 (処理系) もツールチェインは共通のものを使っている場合は結構あるし
どれがどの挙動に依存しているかようわからんので安易に整理するわけにもいかず、
結局のところは C コンパイラとは長年に渡って協調してきたから細かい問題点が
解決されているというだけで、そんなにカッチリした仕様が確立しているわけではないと思う。
788デフォルトの名無しさん
2022/09/24(土) 11:00:33.46ID:DaB/WDgt CはCPUベンダーが呼び出し規約を文書化してるよ
moldの話はELFやリンクに関連する話では
確かにABIのうちではあるけど言語ごとに異なる仕様になるようなものではないと思う
moldの話はELFやリンクに関連する話では
確かにABIのうちではあるけど言語ごとに異なる仕様になるようなものではないと思う
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- ネット殺到「高市総理の責任」「完全に高市リスク」「負けるな」中国が水産物輸入停止→流石に総理批判の声も「どう責任取る?」 ★7 [樽悶★]
- 「二枚舌は許されない」中国外務省 高市総理の発言を批判… [BFU★]
- ネット殺到「高市総理の責任」「完全に高市リスク」「負けるな」中国が水産物輸入停止→流石に総理批判の声も「どう責任取る?」 ★8 [樽悶★]
- 【速報】公然わいせつの疑いで逮捕・送検・略式起訴のAぇ! group 草間リチャード敬太メンバー 脱退を発表 「心の病の療養」に専念 [Ailuropoda melanoleuca★]
- 中国国際航空が日本便を減便へ、春節休みも SNSでは投稿相次ぐ [七波羅探題★]
- 小野田紀美 経済安保相「悪いことをする外国人、日本にいない状況つくる」 [Hitzeschleier★]
- 【悲報】高市有事、中国から追加の報復措置が来る模様 [834922174]
- 恐ろしい😈のちゅちょちゅちょ・ちぇびるのお🏡
- PRESIDENTオンライン「習近平は明らかに焦り始めている…高市首相が中国をぎゃふんと言わせるための4つの切り返し」 [399259198]
- 【悲報】立憲岡田「間違った答弁をした高市総理に問題がある」→愛国者ブチギレ炎上 [834922174]
- 【高市悲報】中国→日本の貨物便、死ぬほど運賃が上昇してる模様。。今後大幅値上げラッシュ来るぞ [467637843]
- 【高市悲報】日本政府、またウソがバレる。中国「撮影してたのは日本メディア」 [834922174]
