公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust
公式ドキュメント
https://www.rust-lang.org/learn
Web上の実行環境
https://play.rust-lang.org
※Rustを学びたい人はまず最初に公式のThe Bookを読むこと
https://doc.rust-lang.org/book/
※Rustを学ぶ際に犯しがちな12の過ち
https://dystroy.org/blog/how-not-to-learn-rust
※Rustのasyncについて知りたければ「async-book」は必読
https://rust-lang.github.io/async-book/
※次スレは原則>>980が立てること
前スレ
Rust part19
https://mevius.5ch.net/test/read.cgi/tech/1673926892/
ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.net/test/read.cgi/tech/1514107621/
Rust part20
■ このスレッドは過去ログ倉庫に格納されています
2023/03/03(金) 00:45:28.73ID:vTVY069B
641デフォルトの名無しさん
2023/06/12(月) 21:39:50.33ID:MIVgoZU9 意味のない議論がほんと好きだねー
642デフォルトの名無しさん
2023/06/12(月) 21:44:05.58ID:G7kVZgOF コードが一切出てこないのが本当不思議
643デフォルトの名無しさん
2023/06/12(月) 21:45:00.87ID:dpH2J6Rw644デフォルトの名無しさん
2023/06/13(火) 11:32:39.43ID:dzy+ZzAL >>639
>そのRustがやや不利でやや遅いと思っている具体的なケースのコードを出してごらん
ややどころか、大幅に遅くなるケースもあるぞ。
俺はこれ以上指摘しない。自分で分かるかどうかが技術力の試金石だ。
>そのRustがやや不利でやや遅いと思っている具体的なケースのコードを出してごらん
ややどころか、大幅に遅くなるケースもあるぞ。
俺はこれ以上指摘しない。自分で分かるかどうかが技術力の試金石だ。
645デフォルトの名無しさん
2023/06/13(火) 11:35:33.48ID:dzy+ZzAL また、
「Rustは、どんな場合でも、効率を下げずに少数の関数の中に unsafe 箇所を閉じ込められる」
というのも嘘。
「Rustは、どんな場合でも、効率を下げずに少数の関数の中に unsafe 箇所を閉じ込められる」
というのも嘘。
646デフォルトの名無しさん
2023/06/13(火) 11:43:16.69ID:+SMK6i6B ならお前はこれ以上指摘すんなよ未来に渡って
647デフォルトの名無しさん
2023/06/13(火) 11:53:41.84ID:+a/cV++y >>644
デタラメ屋さんまた来たのか
デタラメ屋さんまた来たのか
648デフォルトの名無しさん
2023/06/13(火) 14:38:11.20ID:oknE//uE649デフォルトの名無しさん
2023/06/13(火) 18:50:01.53ID:t3PG4UqW >>648
ぷw
ぷw
650デフォルトの名無しさん
2023/06/13(火) 23:11:29.90ID:/Z2+rRnG >>648
だいぶ頭良いプログラマーはこんなとこ来ねーからw
だいぶ頭良いプログラマーはこんなとこ来ねーからw
651デフォルトの名無しさん
2023/06/14(水) 17:49:14.80ID:yJueN6KQ 可変長のバイナリデータを扱う場合の型ってやっぱvec<u8>あたり?
独自の型を定義する以外に他によさそうな型って何かあるかな
独自の型を定義する以外に他によさそうな型って何かあるかな
652デフォルトの名無しさん
2023/06/14(水) 20:22:43.85ID:kb1QmHED >>651
Trait std::io::Readのrequired methodが
fn read(&mut self, buf: &mut [u8]) -> Result<usize>;
であるように&[u8]でアクセスできれば何でもよい
そのうち可変で最もお手軽なのはVec<u8>
Trait std::io::Readのprovided methodの一つ
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize> { ... }
もVec<u8>の可変参照を渡す仕様
Trait std::io::Readのrequired methodが
fn read(&mut self, buf: &mut [u8]) -> Result<usize>;
であるように&[u8]でアクセスできれば何でもよい
そのうち可変で最もお手軽なのはVec<u8>
Trait std::io::Readのprovided methodの一つ
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize> { ... }
もVec<u8>の可変参照を渡す仕様
653デフォルトの名無しさん
2023/06/14(水) 20:28:50.68ID:MiDa+oME よくわからないんだけど
ライフタイムの例でよく出てくる関数の引数a,bを同じライフタイムの指定にするってやつは
どちらが選ばれるか分からないから使わないほうも長い方の寿命に合わせて残しておきますと言う解釈でいいの?
ライフタイムの例でよく出てくる関数の引数a,bを同じライフタイムの指定にするってやつは
どちらが選ばれるか分からないから使わないほうも長い方の寿命に合わせて残しておきますと言う解釈でいいの?
654デフォルトの名無しさん
2023/06/14(水) 20:57:15.56ID:VhTmt6N9 >>653
その例となってる関数のコードくらいは書けよ
その例となってる関数のコードくらいは書けよ
655デフォルトの名無しさん
2023/06/14(水) 23:11:40.84ID:kb1QmHED たぶんこういう例のことかな
fn longest<'a>(s1: &'a str, s2: &'a str) -> &'a str {
if s1.len() >= s2.len() { s1 } else { s2 }
}
ここである呼び出しの時に
s1が'staticでs2が'x (!= 'static)だったとすると
'aとして寿命が短い'xの方が採用される
ただしこれはcovarianceである&Tの場合の話
invarianceである&mut Tの場合は逆になるので注意
fn longest<'a>(s1: &'a str, s2: &'a str) -> &'a str {
if s1.len() >= s2.len() { s1 } else { s2 }
}
ここである呼び出しの時に
s1が'staticでs2が'x (!= 'static)だったとすると
'aとして寿命が短い'xの方が採用される
ただしこれはcovarianceである&Tの場合の話
invarianceである&mut Tの場合は逆になるので注意
656デフォルトの名無しさん
2023/06/14(水) 23:20:37.20ID:yJueN6KQ657デフォルトの名無しさん
2023/06/14(水) 23:43:12.09ID:kb1QmHED 構造体とか要unsafeとか何をしたいのかわからないが
上限を決めてもよい用途ならば
ヒープを使わずともArrayVec<u8, CAPACITY>がスタック上のみで動く
上限を決めてもよい用途ならば
ヒープを使わずともArrayVec<u8, CAPACITY>がスタック上のみで動く
658デフォルトの名無しさん
2023/06/14(水) 23:49:13.19ID:yJueN6KQ データの一部だけ可変長とかブロック構造の個数が
可変(ブロックの中身は固定)とかね
可変(ブロックの中身は固定)とかね
659デフォルトの名無しさん
2023/06/14(水) 23:54:41.98ID:MiDa+oME staticは消滅しないから実質参考にならんので無視して短い方をaとする
これは対象が2つだからであって
static 1
その他 2
ならその他2の長い方になると言う考えでいいのかな?
これは対象が2つだからであって
static 1
その他 2
ならその他2の長い方になると言う考えでいいのかな?
660デフォルトの名無しさん
2023/06/14(水) 23:58:17.85ID:CT9YbjmP もう何言ってんだよ
661デフォルトの名無しさん
2023/06/14(水) 23:59:42.49ID:hllwji0O >>655
ライフタイムに関しては&も&mutもcovariantなので違いはありません
ライフタイムに関しては&も&mutもcovariantなので違いはありません
662デフォルトの名無しさん
2023/06/15(木) 00:08:38.46ID:wST3qwRf Tに対して&Tはcovariant
Tに対して&mut Tはinvariant
Tに対して&mut Tはinvariant
663デフォルトの名無しさん
2023/06/15(木) 08:25:03.26ID:9aol5+Qr >>547
OptionとOnceCellの違い
&Tを得ることをgetと呼ぶようになった
【Option】fn as_ref(&self) -> Option<&T>
【OnceCell】fn get(&self) -> Option<&T>
&mut Tを得ることをget_mutと呼ぶようになった
【Option】fn as_mut(&mut self) -> Option<&mut T>
【OnceCell】fn get_mut(&mut self) -> Option<&mut T>
空にしてTを得ることをtakeと呼ぶのは同じ
【Option】fn take(&mut self) -> Option<T>
【OnceCell】fn take(&mut self) -> Option<T>
空(default)を作成することをnewと呼ぶこともできるようになった
【Option】fn default() -> Option<T>
【OnceCell】fn default() -> OnceCell<T> または fn new() -> OnceCell<T>
OptionとOnceCellの違い
&Tを得ることをgetと呼ぶようになった
【Option】fn as_ref(&self) -> Option<&T>
【OnceCell】fn get(&self) -> Option<&T>
&mut Tを得ることをget_mutと呼ぶようになった
【Option】fn as_mut(&mut self) -> Option<&mut T>
【OnceCell】fn get_mut(&mut self) -> Option<&mut T>
空にしてTを得ることをtakeと呼ぶのは同じ
【Option】fn take(&mut self) -> Option<T>
【OnceCell】fn take(&mut self) -> Option<T>
空(default)を作成することをnewと呼ぶこともできるようになった
【Option】fn default() -> Option<T>
【OnceCell】fn default() -> OnceCell<T> または fn new() -> OnceCell<T>
664デフォルトの名無しさん
2023/06/15(木) 11:48:36.10ID:7LFutjAG トヨタの車載OSってRUSTなんだ
665デフォルトの名無しさん
2023/06/15(木) 18:17:26.02ID:wrhp+okP ライフタイムもtraitも難しすぎてマジでわからん
666デフォルトの名無しさん
2023/06/15(木) 18:21:52.25ID:WlvOik+R ライフタイムの質問してたものだけど
コードを書いてて完全に誤解していたことに気が付いた
コンパイル時に範囲をチェックするために引数のライフタイムを最小限に揃える仕組みなんだな
多分一般向けには流行らないわな
コードを書いてて完全に誤解していたことに気が付いた
コンパイル時に範囲をチェックするために引数のライフタイムを最小限に揃える仕組みなんだな
多分一般向けには流行らないわな
667デフォルトの名無しさん
2023/06/15(木) 18:38:09.80ID:Ah9v0OFJ ライフタイムって該当のメモリがいつまで確保されているかって話であって難しいところはなくね?
所望のタイミングまで開放してほしくないがどのようにするのが望ましいか?って話ならまだわかるが
所望のタイミングまで開放してほしくないがどのようにするのが望ましいか?って話ならまだわかるが
668デフォルトの名無しさん
2023/06/15(木) 18:40:44.72ID:QZKQzk+I 自明なときに省略できるせいで理解しづらくなってる気はする
669デフォルトの名無しさん
2023/06/15(木) 18:44:18.80ID:WlvOik+R 日本語がおかしかった
関数では引数に依存する戻り値の寿命がわからない
それで基本的に指定した複数の引数のライフタイムの一番短い奴に合わせて解釈する
そのライフタイムを元にコンパイル時にチェックしてダングリングを防いでる
一番寿命が短い奴に合わせてチェックしたら他はそれより長いのでダングリングが起こらないだろうと
こういうふうに言う人間があまりいないのが現状
関数では引数に依存する戻り値の寿命がわからない
それで基本的に指定した複数の引数のライフタイムの一番短い奴に合わせて解釈する
そのライフタイムを元にコンパイル時にチェックしてダングリングを防いでる
一番寿命が短い奴に合わせてチェックしたら他はそれより長いのでダングリングが起こらないだろうと
こういうふうに言う人間があまりいないのが現状
670デフォルトの名無しさん
2023/06/15(木) 18:47:34.83ID:WlvOik+R 普通にコードを書いた時点でスコープや借用の関係で寿命は決まってる
それが範囲外になるかどうかボローチェックしてるんだけどそいつのためにライフタイムを明示してる
ライフタイムを明示してもコード上の寿命は伸び縮みしないけどエラーを見てコードを書いた人は修正ができる
それが範囲外になるかどうかボローチェックしてるんだけどそいつのためにライフタイムを明示してる
ライフタイムを明示してもコード上の寿命は伸び縮みしないけどエラーを見てコードを書いた人は修正ができる
671デフォルトの名無しさん
2023/06/15(木) 18:52:46.39ID:WlvOik+R と言う解釈なんだけど今のところ
普通に違ってるかもしれない
普通に違ってるかもしれない
672デフォルトの名無しさん
2023/06/15(木) 18:57:24.57ID:uU1WiW+l OnceCellってようやく俺たちの欲しいものが来てくれたか
RefCellもCellも複雑なデータ構造作ると面倒だったからな
RefCellもCellも複雑なデータ構造作ると面倒だったからな
673デフォルトの名無しさん
2023/06/15(木) 20:40:26.65ID:bvsZhoj8 Cellの 種類が増えるってのは悪い兆候だね
674デフォルトの名無しさん
2023/06/15(木) 20:43:39.64ID:vyb4HXQ7 Cellを使ったら負け
他の言語からの移植だと、なぜか増えてしまう
他の言語からの移植だと、なぜか増えてしまう
675デフォルトの名無しさん
2023/06/15(木) 21:23:13.49ID:jjsgM8WL >>669
結構何を言ってるか分からないが引数のライフタイムを省略した場合は全部同じライフタイムを持つことになるよ
結構何を言ってるか分からないが引数のライフタイムを省略した場合は全部同じライフタイムを持つことになるよ
676デフォルトの名無しさん
2023/06/15(木) 21:54:27.47ID:o+xWcDso >>669
main()→sub()→...と呼ばれている時に
'mainと'subをそれぞれの関数で持っている分の寿命とすると
寿命の長さは'static>'main>'subだが
「'sub以上の集合」⊃「'main以上の集合」⊃「'static以上の集合」なので
実は'staticの方がサブタイプ(下位)
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str において
寿命'aはジェネリックなパラメータなので
longest('main, 'static)と呼び出されれば'aは上位の'mainとなり
longest('main, 'sub)と呼び出されれば'aは上位の'subとなる
一方で
fn foo<'a, 'b>(x: &'a str, y: &'b str) -> &'b str という関数だと
foo('main, 'static)と呼び出されれば'bはそのまま'staticとなり
foo('main, 'sub)と呼び出されれば'bはそのまま'subとなる
この場合はもちろん引数の短い方の寿命になるわけではない
fn bar<'a, 'b>(x: &'a str, y: &'b str) -> Bar<'a, 'b> という関数は
返り型が構造体(か何か)のBarでその内部に寿命'aのものと寿命'bのものを持つ
このように様々なケースがある
main()→sub()→...と呼ばれている時に
'mainと'subをそれぞれの関数で持っている分の寿命とすると
寿命の長さは'static>'main>'subだが
「'sub以上の集合」⊃「'main以上の集合」⊃「'static以上の集合」なので
実は'staticの方がサブタイプ(下位)
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str において
寿命'aはジェネリックなパラメータなので
longest('main, 'static)と呼び出されれば'aは上位の'mainとなり
longest('main, 'sub)と呼び出されれば'aは上位の'subとなる
一方で
fn foo<'a, 'b>(x: &'a str, y: &'b str) -> &'b str という関数だと
foo('main, 'static)と呼び出されれば'bはそのまま'staticとなり
foo('main, 'sub)と呼び出されれば'bはそのまま'subとなる
この場合はもちろん引数の短い方の寿命になるわけではない
fn bar<'a, 'b>(x: &'a str, y: &'b str) -> Bar<'a, 'b> という関数は
返り型が構造体(か何か)のBarでその内部に寿命'aのものと寿命'bのものを持つ
このように様々なケースがある
677デフォルトの名無しさん
2023/06/15(木) 22:01:26.73ID:o+xWcDso >>672
OnceCellは前からあって広く使われていて今回stdに採り入れられた
once_cell::unsync::OnceCell が std::cell::OnceCell となった
staticで使われてきたSyncなOnceCellの方は別名となり
once_cell::sync::OnceCell が std::sync::OnceLock となった
OnceCellは前からあって広く使われていて今回stdに採り入れられた
once_cell::unsync::OnceCell が std::cell::OnceCell となった
staticで使われてきたSyncなOnceCellの方は別名となり
once_cell::sync::OnceCell が std::sync::OnceLock となった
678デフォルトの名無しさん
2023/06/15(木) 22:08:16.03ID:yL2pOlPY >>669
データフロー解析を知らないのだろうか?
データフロー解析を知らないのだろうか?
679デフォルトの名無しさん
2023/06/15(木) 22:11:21.57ID:R+Rv2ggs680デフォルトの名無しさん
2023/06/15(木) 22:12:42.39ID:o+xWcDso681デフォルトの名無しさん
2023/06/15(木) 22:15:38.46ID:EOr7Ahlr >>676
上位下位にサブタイプにsubて嫌がらせか!
上位下位にサブタイプにsubて嫌がらせか!
682デフォルトの名無しさん
2023/06/15(木) 22:39:43.11ID:WlvOik+R683デフォルトの名無しさん
2023/06/15(木) 23:12:41.78ID:ZgEGySwy >>682
こんがらがってないならまずは他人に理解できる日本語とコード例を書いてくれよ
間違いを指摘するとか以前に何を言いたいのかわからないんだって
俺だけじゃなくて何人も君が何を言いたいのか分からないって書いてるでしょ?
こんがらがってないならまずは他人に理解できる日本語とコード例を書いてくれよ
間違いを指摘するとか以前に何を言いたいのかわからないんだって
俺だけじゃなくて何人も君が何を言いたいのか分からないって書いてるでしょ?
684デフォルトの名無しさん
2023/06/15(木) 23:29:09.39ID:iPvlEIxp685デフォルトの名無しさん
2023/06/15(木) 23:59:14.48ID:sGVU6kWB >>682
ライフタイムの「仮引数」としては省略されると全部同じ扱いで合ってるよ。
https://doc.rust-lang.org/reference/lifetime-elision.html
一方で呼び出す側が認識しているライフタイムの「実引数」は違っていてもいい。
>>655の例で言えば、呼び出す側が x: &'b str と y: &'c str を渡して戻り値を z: &'d str に束縛するなら、'a は 'b: 'a, 'c: 'a, 'a: 'd を満たす最小のライフタイムに推論される。
そのような 'a があれば、&'b str <: &'a str etc. の部分型付け関係に基づいて、引数はすべて一度 &'a str にアップキャストされると思っていればいい。はず。
適切な 'a が無ければライフタイムに関するコンパイルエラーになる。
https://doc.rust-lang.org/reference/subtyping.html
https://rust-lang.github.io/rfcs/2094-nll.html
ライフタイムの「仮引数」としては省略されると全部同じ扱いで合ってるよ。
https://doc.rust-lang.org/reference/lifetime-elision.html
一方で呼び出す側が認識しているライフタイムの「実引数」は違っていてもいい。
>>655の例で言えば、呼び出す側が x: &'b str と y: &'c str を渡して戻り値を z: &'d str に束縛するなら、'a は 'b: 'a, 'c: 'a, 'a: 'd を満たす最小のライフタイムに推論される。
そのような 'a があれば、&'b str <: &'a str etc. の部分型付け関係に基づいて、引数はすべて一度 &'a str にアップキャストされると思っていればいい。はず。
適切な 'a が無ければライフタイムに関するコンパイルエラーになる。
https://doc.rust-lang.org/reference/subtyping.html
https://rust-lang.github.io/rfcs/2094-nll.html
686デフォルトの名無しさん
2023/06/16(金) 00:20:26.24ID:Ej8ifuNd Rustのコードが'まみれになるのはそういう理由だよね
687デフォルトの名無しさん
2023/06/16(金) 00:24:30.59ID:0npxuivH >>685
> パラメーター内の省略された各ライフタイムは、別個のライフタイム パラメーターになります。
> パラメーター内の省略された各ライフタイムは、別個のライフタイム パラメーターになります。
688デフォルトの名無しさん
2023/06/16(金) 00:30:18.44ID:rJ7TTESK >>685
いや、全部別になる
参照引き数が2つあれば'aと'b別になる
ソース
https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html
The first rule is that the compiler assigns a lifetime parameter to each parameter that’s a reference.
In other words,
a function with one parameter gets one lifetime parameter: fn foo<'a>(x: &'a i32);
a function with two parameters gets two separate lifetime parameters: fn foo<'a, 'b>(x: &'a i32, y: &'b i32);
and so on.
(snip)
Let’s look at another example, this time using the longest function that had no lifetime parameters
when we started working with it in Listing 10-20:
fn longest(x: &str, y: &str) -> &str {
Let’s apply the first rule: each parameter gets its own lifetime.
This time we have two parameters instead of one, so we have two lifetimes:
fn longest<'a, 'b>(x: &'a str, y: &'b str) -> &str {
このようにコンパイラは解釈する
そして戻り値が一意に決まらないのでコンパイルエラーとなる
そのためコンパイラは改善提案の一つとして全部同じにする提案コードを出す
fn longest<'a,>(x: &'a str, y: &'a str) -> &'a str {
全部同じ扱いと思い込んでいる人はこの提案をコンパイラが解釈したと逆に思ってしまったのではないか
いや、全部別になる
参照引き数が2つあれば'aと'b別になる
ソース
https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html
The first rule is that the compiler assigns a lifetime parameter to each parameter that’s a reference.
In other words,
a function with one parameter gets one lifetime parameter: fn foo<'a>(x: &'a i32);
a function with two parameters gets two separate lifetime parameters: fn foo<'a, 'b>(x: &'a i32, y: &'b i32);
and so on.
(snip)
Let’s look at another example, this time using the longest function that had no lifetime parameters
when we started working with it in Listing 10-20:
fn longest(x: &str, y: &str) -> &str {
Let’s apply the first rule: each parameter gets its own lifetime.
This time we have two parameters instead of one, so we have two lifetimes:
fn longest<'a, 'b>(x: &'a str, y: &'b str) -> &str {
このようにコンパイラは解釈する
そして戻り値が一意に決まらないのでコンパイルエラーとなる
そのためコンパイラは改善提案の一つとして全部同じにする提案コードを出す
fn longest<'a,>(x: &'a str, y: &'a str) -> &'a str {
全部同じ扱いと思い込んでいる人はこの提案をコンパイラが解釈したと逆に思ってしまったのではないか
690デフォルトの名無しさん
2023/06/16(金) 05:23:01.54ID:VMczRTMU 厳格な言語て嫌いでな
Verilogはなんの問題もなかったのに
VHDLはとうとう挫折した
てか予約後長いし,マクロがないのが許せなかったんだが
その意味でJavaも結局書く気にもならなんだわ
Verilogはなんの問題もなかったのに
VHDLはとうとう挫折した
てか予約後長いし,マクロがないのが許せなかったんだが
その意味でJavaも結局書く気にもならなんだわ
691デフォルトの名無しさん
2023/06/16(金) 14:09:49.37ID:J436PiNE692デフォルトの名無しさん
2023/06/16(金) 14:58:22.19ID:KrMgX33B 水ノ都さんこんにちは
693デフォルトの名無しさん
2023/06/16(金) 17:51:24.52ID:fkGXFirN 組み込み向けの解説記事でよさそうなのってない?
The Embedded Rust Bookは有名だけどSTM32ありきで書かれているしリンカとか肝心な部分の説明もないように見える
日本の人が書いているっぽいEmbedded Rust Techniquesの方がマシだがこれでも最低限か・・・
The Embedded Rust Bookは有名だけどSTM32ありきで書かれているしリンカとか肝心な部分の説明もないように見える
日本の人が書いているっぽいEmbedded Rust Techniquesの方がマシだがこれでも最低限か・・・
694デフォルトの名無しさん
2023/06/16(金) 18:25:34.38ID:b/MZViq+ >>693
The Book以外のドキュメントなら https://docs.rust-embedded.org/ からいろいろ探せるよ
あるいはEmbedded Rust Techniquesの人が書いてる「基礎から学ぶ組み込みRust」って本とか
The Book以外のドキュメントなら https://docs.rust-embedded.org/ からいろいろ探せるよ
あるいはEmbedded Rust Techniquesの人が書いてる「基礎から学ぶ組み込みRust」って本とか
695デフォルトの名無しさん
2023/06/16(金) 18:39:22.38ID:dwgGWWV8 Rust好きがまあまあ見てそうなこのスレでもこのレベルなんだから一般に広まるのは無理ゲーだと思うわ
696デフォルトの名無しさん
2023/06/16(金) 19:23:08.87ID:PpmLuWiO 問題点を具体的に言えずに曖昧に批判してるつもりの人がいるね
697デフォルトの名無しさん
2023/06/16(金) 19:40:36.76ID:dwgGWWV8 自分でスレを読めばいい
お前の足りない脳を誰かがフォローしてボローチェックまでしてくれるなんて思うなよ
お前の足りない脳を誰かがフォローしてボローチェックまでしてくれるなんて思うなよ
698デフォルトの名無しさん
2023/06/16(金) 19:42:26.19ID:QEmhRLek 言語の良し悪し以上にライブラリの分量が効いてくるんだわ。
そんでその大量にあるライブラリが利用しやすければなお良い。
やりたいことにマッチするライブラリがあるなら
自分で書かなくてよい部分が多くなるわけだし、
書く部分が少なければ少々の面倒くささなんてどうでもよくなる。
C や C++ の歴史の長さ故の物量に対抗するのは難しいけど
Rust は利用しやすさではかなり上回ってると思うので時間の問題だろ。
そんでその大量にあるライブラリが利用しやすければなお良い。
やりたいことにマッチするライブラリがあるなら
自分で書かなくてよい部分が多くなるわけだし、
書く部分が少なければ少々の面倒くささなんてどうでもよくなる。
C や C++ の歴史の長さ故の物量に対抗するのは難しいけど
Rust は利用しやすさではかなり上回ってると思うので時間の問題だろ。
699デフォルトの名無しさん
2023/06/16(金) 23:38:46.36ID:KXgq6I38 >>695
単に5chがオワコンなだけだぞ
単に5chがオワコンなだけだぞ
700デフォルトの名無しさん
2023/06/17(土) 20:33:46.40ID:pjy0GOzk >>683
ときにアセンブラで書必要に迫られる組込でRustあ日の目をみることなんてない
ときにアセンブラで書必要に迫られる組込でRustあ日の目をみることなんてない
701デフォルトの名無しさん
2023/06/17(土) 21:26:17.31ID:iUJ74AnJ >>694
その人は本を出していたのか。今度都内へ行ったときに見てみるか
その人は本を出していたのか。今度都内へ行ったときに見てみるか
702デフォルトの名無しさん
2023/06/17(土) 23:07:17.38ID:H9lc23A5 今日たまたま本屋で見かけた
売れるんかこれと思ったけど買う人がいる
売れるんかこれと思ったけど買う人がいる
703デフォルトの名無しさん
2023/06/18(日) 01:17:21.64ID:PsNivFBp Rustでlinuxに機能を追加するならどんな機能が欲しい?みんな自由に言ってみて。
704デフォルトの名無しさん
2023/06/18(日) 09:07:15.46ID:JHhjqwBk >>695
ほんそれ
ほんそれ
705デフォルトの名無しさん
2023/06/18(日) 09:08:49.10ID:JHhjqwBk >>698
crates.io はゴミだらけのイメージ(もちろんゴミじゃないのもあるがSN比が絶望的に悪い)
crates.io はゴミだらけのイメージ(もちろんゴミじゃないのもあるがSN比が絶望的に悪い)
706デフォルトの名無しさん
2023/06/18(日) 09:13:33.05ID:JHhjqwBk >>703
これと言って無いし今のlinuxで満足(不満もあるけどそれがRustで解決するとも思わない)
カーネルもシェルもAPIもRust化しないと意味無くね?
どうせ unsafe! unsafe!! unsafe!!!
これと言って無いし今のlinuxで満足(不満もあるけどそれがRustで解決するとも思わない)
カーネルもシェルもAPIもRust化しないと意味無くね?
どうせ unsafe! unsafe!! unsafe!!!
707デフォルトの名無しさん
2023/06/18(日) 09:15:13.52ID:QTU736PH >>705
まぁそれは何を比較するかじゃない?
ディストリビューション配布のCライブラリだと厳選されてるから当然クォリティ高いけど
GitHub上から探すとC系の方がS/N悪い(そもそもビルドできないとか)と感じるし
まぁそれは何を比較するかじゃない?
ディストリビューション配布のCライブラリだと厳選されてるから当然クォリティ高いけど
GitHub上から探すとC系の方がS/N悪い(そもそもビルドできないとか)と感じるし
708デフォルトの名無しさん
2023/06/18(日) 10:10:46.67ID:dnSpWVpE rustは他の言語からの移植性が著しく悪い
移植と言うより最初から作ってるのと変わらない
移植と言うより最初から作ってるのと変わらない
709デフォルトの名無しさん
2023/06/18(日) 10:29:41.24ID:dnSpWVpE c → rustの移植が楽ならほおっておいても全部rustになる
その視点が欠けてる
ライナスがLinuxやGit作ったときのようにその他の勢力がおバカさんで実質アシストしてる時と同じような状況
Cust作るためのおぜん立てをしてるようにも見える
その視点が欠けてる
ライナスがLinuxやGit作ったときのようにその他の勢力がおバカさんで実質アシストしてる時と同じような状況
Cust作るためのおぜん立てをしてるようにも見える
710デフォルトの名無しさん
2023/06/18(日) 10:37:34.85ID:dnSpWVpE 後世から見たらライナスはlinuxとgitとcustを作った偉人ですと言うことになるんだろう
711デフォルトの名無しさん
2023/06/18(日) 12:12:13.93ID:kd/h5bzN 仮にkernelや主要コマンドが全部rustに移植されたらその部分は安全にはなるわな
しかし現状そこまで行くかはわからん
なんせffiで別言語で書かれたライブラリ呼び出す時は全部unsafeやからな
つまり主要なlibも全部rustで書き変えないとunsafeからは逃れられないけどものすごい作業量になりそう
いけるのかな?
しかし現状そこまで行くかはわからん
なんせffiで別言語で書かれたライブラリ呼び出す時は全部unsafeやからな
つまり主要なlibも全部rustで書き変えないとunsafeからは逃れられないけどものすごい作業量になりそう
いけるのかな?
712デフォルトの名無しさん
2023/06/18(日) 13:00:20.06ID:TBj+uqoQ713デフォルトの名無しさん
2023/06/18(日) 13:12:59.30ID:aPOK9VRV714デフォルトの名無しさん
2023/06/18(日) 13:26:34.81ID:PsNivFBp >>712
個人的にRustはあれだけの実行速度、安全性の割にはかなり文法がシンプルで好きだけどね。
個人的にRustはあれだけの実行速度、安全性の割にはかなり文法がシンプルで好きだけどね。
715デフォルトの名無しさん
2023/06/18(日) 14:02:54.81ID:TBj+uqoQ >>714
蓼食う虫も好き好きだね。
蓼食う虫も好き好きだね。
716デフォルトの名無しさん
2023/06/18(日) 16:08:38.91ID:aKqZwOD/717デフォルトの名無しさん
2023/06/18(日) 23:54:05.72ID:V79KPNHt >>703
その発想からしてRustのパラダイムから逸脱しており反Rust
その発想からしてRustのパラダイムから逸脱しており反Rust
718デフォルトの名無しさん
2023/06/20(火) 17:00:50.46ID:Dvlv0UV+ >711
>なんせffiで別言語で書かれたライブラリ呼び出す時は全部unsafeやからな
これ知るとRust安全神話なんて嘘八百八町なんよね
金儲けのために保守気取ってましたーに通じる
>なんせffiで別言語で書かれたライブラリ呼び出す時は全部unsafeやからな
これ知るとRust安全神話なんて嘘八百八町なんよね
金儲けのために保守気取ってましたーに通じる
719デフォルトの名無しさん
2023/06/20(火) 19:31:43.67ID:WU95hkUv720デフォルトの名無しさん
2023/06/20(火) 19:54:19.85ID:kXFGlrCh unsafe=危険=意味なしみたいな人はRustを使うことが目的だと思っているんだろうね
安全なソフトウェアやシステムを開発することが目的ならそういう発想にはならないはずだ
安全なソフトウェアやシステムを開発することが目的ならそういう発想にはならないはずだ
721デフォルトの名無しさん
2023/06/20(火) 20:03:45.82ID:2T4Y6uqL 純粋なRustのライブラリはまだ完成度が微妙なんだよな。PythonとかC,C++と比べると。勿論、他言語のバインディングのライブラリは結構豊富なんだけど、それだとRustを使う意義がないからな。
722デフォルトの名無しさん
2023/06/20(火) 20:20:14.97ID:IIzrqfbq >>718
部分的にでもマシになるなら意味あるやん。
論理的な破綻がないように定理証明器をベースにした言語とかもあるけど、
そのために既存のライブラリが使えないようだとそれこそ使い物にならんだろ。
結局はバランスおじさん「結局はバランス」
部分的にでもマシになるなら意味あるやん。
論理的な破綻がないように定理証明器をベースにした言語とかもあるけど、
そのために既存のライブラリが使えないようだとそれこそ使い物にならんだろ。
結局はバランスおじさん「結局はバランス」
723デフォルトの名無しさん
2023/06/20(火) 20:41:02.57ID:7CvaHT3W >>718
それはunsafeとは何かを理解できていなくて初心者なのかも知れないけどかなりヤバイよ
ffiなんて例を出す必要はなくメモリ空間へのアクセスは最終的に生ポインタとなって当然unsafeになる
例えばslice[index]やslice.iter()の内部は当然unsafeな生ポインタを使って実装されている
ではunsafeで実装されているslice[index]やslice.iter()は危険か?となるがもちろん完全に安全だ
なぜならunsafeを内部に閉じ込めて安全なインタフェースを提供しているからである
これがRustの基本原理
ffiについても同様で例えばファイルのオープンや読み書きは通常OSへのシステムコールとなり通常ffiとなるため当然unsafe
しかしRustの標準ライブラリではそのunsafeを内部に閉じ込めて安全なインターフェイスとして提供している
このようにメモリアクセスもOS呼び出しもそれ自体は当然unsafeだがそれはモジュールの内部に閉じ込められている
そしてそれらを利用する側のプログラマーは安全なインターフェースのみを用いてsafeにプログラミングすることができる
そしてsafeな部分なコンパイラにより様々な安全性が自動的に保証されるという至上の恩恵をもたらすのがRust
それはunsafeとは何かを理解できていなくて初心者なのかも知れないけどかなりヤバイよ
ffiなんて例を出す必要はなくメモリ空間へのアクセスは最終的に生ポインタとなって当然unsafeになる
例えばslice[index]やslice.iter()の内部は当然unsafeな生ポインタを使って実装されている
ではunsafeで実装されているslice[index]やslice.iter()は危険か?となるがもちろん完全に安全だ
なぜならunsafeを内部に閉じ込めて安全なインタフェースを提供しているからである
これがRustの基本原理
ffiについても同様で例えばファイルのオープンや読み書きは通常OSへのシステムコールとなり通常ffiとなるため当然unsafe
しかしRustの標準ライブラリではそのunsafeを内部に閉じ込めて安全なインターフェイスとして提供している
このようにメモリアクセスもOS呼び出しもそれ自体は当然unsafeだがそれはモジュールの内部に閉じ込められている
そしてそれらを利用する側のプログラマーは安全なインターフェースのみを用いてsafeにプログラミングすることができる
そしてsafeな部分なコンパイラにより様々な安全性が自動的に保証されるという至上の恩恵をもたらすのがRust
724デフォルトの名無しさん
2023/06/20(火) 20:48:07.86ID:FDgZeyem 話の流れとは直接関係無いが、豆知識:
バグと言うものは、64BIT 整数を 32BIT 整数で受けたり、符号付きを符合なし
で受けたり(その逆でも)するだけでも起きるし、メモリ関連バグだけでは無い。
バグと言うものは、64BIT 整数を 32BIT 整数で受けたり、符号付きを符合なし
で受けたり(その逆でも)するだけでも起きるし、メモリ関連バグだけでは無い。
725デフォルトの名無しさん
2023/06/20(火) 20:50:12.42ID:FDgZeyem 例えば、OSの一度に行なえるファイル読み書きが10MBに制限
されている場合に、それを知らずにバイト数に20MBを指定して
しまったら、バグとなる。
テストでは10MBを超えるファイルを扱っていなかったら気付かない。
されている場合に、それを知らずにバイト数に20MBを指定して
しまったら、バグとなる。
テストでは10MBを超えるファイルを扱っていなかったら気付かない。
726デフォルトの名無しさん
2023/06/20(火) 21:06:06.55ID:wgbzrV/N727デフォルトの名無しさん
2023/06/20(火) 21:17:59.27ID:7CvaHT3W728デフォルトの名無しさん
2023/06/21(水) 20:47:56.17ID:DnSmyfOL Rustで最初に出したバグはデッドロックだったな
コンパイルエラーにしてくれるもんだと油断していた
コンパイルエラーにしてくれるもんだと油断していた
729デフォルトの名無しさん
2023/06/21(水) 21:05:00.78ID:W7d/0xn7 静的解析でデッドロックを検出するのは不可能
もちろんRustでも無理
もちろんRustでも無理
730デフォルトの名無しさん
2023/06/26(月) 18:26:13.57ID:H3+gGIMJ すいません、くだらない質問かもしれませんけど割り込ませて下さい
Haskellとかだと二項演算子(+)はNum classに属する型なら適用できます
自分が作った型でもその型において(+)をどう実装するか定義すれば(+)が利用できるようになります
例えば5元体の計算を行うF5 型を定義してそこで足し算とかをするには
data F5 = F5 Int deriving (Eq,Show) -- 型F5を作成
instance Num F5 where -- F5がNum classに属する宣言
(F5 x ) + ( F5 y) = F5 $ mod (x+y) 5
...略...
のようなものを作れば例えば
print $ ( F5 3 )^4
でF5 1を得る事ができます
同じような事はRustでできますか?
自分でこのような5元体の計算を行うための型を自作しそれの計算を二項演算子(+),(*)を用いた表記を可能にする方法とかありますか?
Haskellとかだと二項演算子(+)はNum classに属する型なら適用できます
自分が作った型でもその型において(+)をどう実装するか定義すれば(+)が利用できるようになります
例えば5元体の計算を行うF5 型を定義してそこで足し算とかをするには
data F5 = F5 Int deriving (Eq,Show) -- 型F5を作成
instance Num F5 where -- F5がNum classに属する宣言
(F5 x ) + ( F5 y) = F5 $ mod (x+y) 5
...略...
のようなものを作れば例えば
print $ ( F5 3 )^4
でF5 1を得る事ができます
同じような事はRustでできますか?
自分でこのような5元体の計算を行うための型を自作しそれの計算を二項演算子(+),(*)を用いた表記を可能にする方法とかありますか?
731デフォルトの名無しさん
2023/06/26(月) 18:32:46.35ID:DZPgqn/v >>730
std::ops::Add を実装すれば + が使えるし
std::ops::Mul を実装すれば * が使えるよ。
https://doc.rust-lang.org/std/ops/trait.Add.html
https://doc.rust-lang.org/std/ops/trait.Mul.html
std::ops::Add を実装すれば + が使えるし
std::ops::Mul を実装すれば * が使えるよ。
https://doc.rust-lang.org/std/ops/trait.Add.html
https://doc.rust-lang.org/std/ops/trait.Mul.html
732デフォルトの名無しさん
2023/06/26(月) 19:00:39.37ID:PhkZx7XR733デフォルトの名無しさん
2023/07/04(火) 01:09:18.95ID:2CEMaM2m 神クラス的なArcMutexのstructをごっそり差し替えし始めたらrust analyzerが糞遅くなって書くのが辛い
コード戻したくなる
助けて
コード戻したくなる
助けて
734デフォルトの名無しさん
2023/07/08(土) 03:39:28.67ID:kPVzZee0 キーボードの何かのキーが入力されてるか調べるけど
何もない場合は止まらずにそのまま次の処理を続けるはどうすればいいの?
何もない場合は止まらずにそのまま次の処理を続けるはどうすればいいの?
735デフォルトの名無しさん
2023/07/08(土) 04:25:29.10ID:hz58RfSC >>734
C言語の時と同じ
ノンブロッキング指定するだけでなく
cooked modeではなくraw modeをICANONに指定
これでバッファリングされることなくブロックされることなく読み出せる
libc叩かなくてもtermioなど好みのクレートを使う
C言語の時と同じ
ノンブロッキング指定するだけでなく
cooked modeではなくraw modeをICANONに指定
これでバッファリングされることなくブロックされることなく読み出せる
libc叩かなくてもtermioなど好みのクレートを使う
736デフォルトの名無しさん
2023/07/08(土) 07:46:14.85ID:kPVzZee0 なるほど
737デフォルトの名無しさん
2023/07/08(土) 08:39:38.42ID:kPVzZee0 窓だからGetAsyncKeyState呼び出すのが楽っぽい
738デフォルトの名無しさん
2023/07/13(木) 13:31:51.91ID:B+tQlcfl Rust言語で開発したWindowsカーネル、Canaryチャネルで展開開始
https://news.yahoo.co.jp/articles/de16ce55a291d59f7364096690fd601c5ee2ece2
https://news.yahoo.co.jp/articles/de16ce55a291d59f7364096690fd601c5ee2ece2
739デフォルトの名無しさん
2023/07/14(金) 11:16:58.08ID:tzjfWmow 値をコピーせずに参照を切り替えてFibonacci数列を計算したい
https://ideone.com/lnMyvH
はいけるんだけど
https://ideone.com/VerTGV
は
error[E0658]: destructuring assignments are unstable
と怒られます
どなたか対処法わかりますか?
https://ideone.com/lnMyvH
はいけるんだけど
https://ideone.com/VerTGV
は
error[E0658]: destructuring assignments are unstable
と怒られます
どなたか対処法わかりますか?
740デフォルトの名無しさん
2023/07/14(金) 11:27:16.72ID:Jafjy1es■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 戦略的互恵関係望むなら答弁撤回せよと中国 [どどん★]
- 中国が次々圧力も→高市政権の内情「日本は切る対抗カードなく、我慢しかない状況」と取材結果 [バイト歴50年★]
- 立憲・野田代表が主張 台湾有事答弁で「質問者批判は筋違い」「答弁がおかしい」「高市総理迎合のネット世論は危険」★3 [♪♪♪★]
- 【速報】 植田日銀総裁 「円安進行が物価高を起こしている」 ★3 [お断り★]
- 「ふざけんな!」 国会議員給与、『月5万円増』報道にネット騒然 「国民が物価高で困っているのに」「定数削減とか言いながら…」 [♪♪♪★]
- 【速報】 植田日銀総裁 「円安進行が物価高を起こしている」 ★2 [お断り★]
- 【速報】高市早苗「答弁撤回はしない」経済制裁へ [931948549]
- 【悲報】高市答弁、誤解だった [834922174]
- 架空を滑空ビューーーン👊😅👊三三☁😶‍🌫🏡
- 戦略的互恵関係望むなら答弁撤回せよと中国。高市、もう後がなくなる [805596214]
- お前らって「ハッ」て息を呑まれたような経験どのくらいある?
- 【鈴木早苗】お米券おひとり様3000円に閣議決定 [993451824]
