公式
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のasyncについて知りたければ「async-book」は必読
https://rust-lang.github.io/async-book/
※C++との比較は専用スレへ
C++ vs Rust
https://mevius.5ch.net/test/read.cgi/tech/1619219089/
前スレ
Rust part11
https://mevius.5ch.net/test/read.cgi/tech/1623857052/
探検
Rust part12
■ このスレッドは過去ログ倉庫に格納されています
2021/08/24(火) 22:55:27.78ID:972JwtmU
631デフォルトの名無しさん
2021/10/11(月) 00:12:55.43ID:EeZezr6D632デフォルトの名無しさん
2021/10/11(月) 00:34:40.68ID:JbC5nNmw633デフォルトの名無しさん
2021/10/11(月) 06:54:36.68ID:95tWd+L1 mutをつけたベクター型について教えてください
これはまず、入っているのは参照なんですか?
また、参照が変わらない(?)のに、参照先を変更するにはmutがなぜ必要になってくるのですか?
(所有権概念のせいなのでしょうか?それともスマートポインタの仕組み上、参照するアドレスが変わるのでしょうか?)
これはまず、入っているのは参照なんですか?
また、参照が変わらない(?)のに、参照先を変更するにはmutがなぜ必要になってくるのですか?
(所有権概念のせいなのでしょうか?それともスマートポインタの仕組み上、参照するアドレスが変わるのでしょうか?)
634デフォルトの名無しさん
2021/10/11(月) 08:28:39.20ID:LNZ+tGdJ >>633
let mut x = vec![1,2,3];
xに入ってるのはVec<i32>、これはスマートポインタ(pointer, capacity, length)。
「参照」というのはRustでは&Vec<i32>のようにアンパサンドがついてる型のこと
なのでxに入ってるのは参照ではない
例えばx.push(10)するのにxがmutじゃなきゃいけないのは
直接的にはpushのシグニチャが&mut selfを要求してるからだけど
考え方としては「multiple readers or single writer」ルールをコンパイル時に強制するため
連続したバッファを確保できなければアドレスが変わる可能性も有るし
ゼロキャパシティなら具体的なアドレスを持ってない
let mut x = vec![1,2,3];
xに入ってるのはVec<i32>、これはスマートポインタ(pointer, capacity, length)。
「参照」というのはRustでは&Vec<i32>のようにアンパサンドがついてる型のこと
なのでxに入ってるのは参照ではない
例えばx.push(10)するのにxがmutじゃなきゃいけないのは
直接的にはpushのシグニチャが&mut selfを要求してるからだけど
考え方としては「multiple readers or single writer」ルールをコンパイル時に強制するため
連続したバッファを確保できなければアドレスが変わる可能性も有るし
ゼロキャパシティなら具体的なアドレスを持ってない
635デフォルトの名無しさん
2021/10/11(月) 13:32:30.30ID:15cV1HfU Cortex-M対応がClangよりRustの方が進んでいて草
636デフォルトの名無しさん
2021/10/11(月) 14:07:37.59ID:lgurMcJY core::ptr::unique::Uniqueもalloc::raw_vecもただのdoc(hidden)なのに
Vecがスマートポインタってデタラメ広めてる奴らどこが出処だよ。
以下の関係で、
Vec has-a RawVec
RawVec has-a Unique
- Vecがrustの作法を強制するためのnewtypeパターン←composition
- RawVecが動的配列の低レベルapi←composition
- Uniqueがユニークポインタ←smart pointer
これだけだろ。
rustのコレクションはデータ構造上直接実装することになる型以外
Box含めて基本newtypeパターン(composition)だぞ。
>>633
GCのある言語しか触ったことない限りその発想にはならんから
まずアロケータの仕組みからやりな。
Vecがスマートポインタってデタラメ広めてる奴らどこが出処だよ。
以下の関係で、
Vec has-a RawVec
RawVec has-a Unique
- Vecがrustの作法を強制するためのnewtypeパターン←composition
- RawVecが動的配列の低レベルapi←composition
- Uniqueがユニークポインタ←smart pointer
これだけだろ。
rustのコレクションはデータ構造上直接実装することになる型以外
Box含めて基本newtypeパターン(composition)だぞ。
>>633
GCのある言語しか触ったことない限りその発想にはならんから
まずアロケータの仕組みからやりな。
637デフォルトの名無しさん
2021/10/11(月) 14:34:19.59ID:Ei1usHzb ホラふきが あらわれた!
638デフォルトの名無しさん
2021/10/11(月) 14:44:50.63ID:CP46ljNK また他人のフリして間違いを指摘するレスが来るから乞うご期待www
639デフォルトの名無しさん
2021/10/11(月) 15:28:05.06ID:YVW/m0g2 compositionだからスマートポインタでないという理屈だと Rc も Arc も非公開な内部型の composition だからスマートポインタでなくなってしまう
640デフォルトの名無しさん
2021/10/11(月) 15:42:18.11ID:LNZ+tGdJ >>636
C++のことは一旦忘れて、Rustにおけるスマートポインタの意味を学ぶことをすすめる
https://doc.rust-lang.org/book/ch15-00-smart-pointers.html
C++のことは一旦忘れて、Rustにおけるスマートポインタの意味を学ぶことをすすめる
https://doc.rust-lang.org/book/ch15-00-smart-pointers.html
641デフォルトの名無しさん
2021/10/11(月) 18:57:50.60ID:0Mn4AOx6 >>640
The concept of smart pointers isn’t unique to Rust: smart pointers originated in C++ and exist in other languages as well.
とあるけど?
The concept of smart pointers isn’t unique to Rust: smart pointers originated in C++ and exist in other languages as well.
とあるけど?
642デフォルトの名無しさん
2021/10/11(月) 19:29:34.65ID:YVW/m0g2 We’ve already encountered a few smart pointers in this book, such as String and Vec<T> in Chapter 8, although we didn’t call them smart pointers at the time. Both these types count as smart pointers because they own some memory and allow you to manipulate it. They also have metadata (such as their capacity) and extra capabilities or guarantees (such as with String ensuring its data will always be valid UTF-8).
というわけで Rust の定義では Vec<T> はスマートポインタ
というわけで Rust の定義では Vec<T> はスマートポインタ
643デフォルトの名無しさん
2021/10/11(月) 20:38:32.88ID:oB6cAYFd クイズ: この中にウソはいくつウソがある?
「またはtypescriptのtype Tree = Leaf | Nodeはサポートされません」
「rustはどちらかと言えばほとんどをトレイトで表現しますが、技術的にはこれらは、Tagged unionと呼ばれ 昔はSum typeともバリアント型とも呼ばれていました。」
「rustは可変参照を基本的に好まないスタイルだから、ああなるのは仕方ないな」
「Vecがスマートポインタってデタラメ広めてる奴らどこが出処だよ。 」
「またはtypescriptのtype Tree = Leaf | Nodeはサポートされません」
「rustはどちらかと言えばほとんどをトレイトで表現しますが、技術的にはこれらは、Tagged unionと呼ばれ 昔はSum typeともバリアント型とも呼ばれていました。」
「rustは可変参照を基本的に好まないスタイルだから、ああなるのは仕方ないな」
「Vecがスマートポインタってデタラメ広めてる奴らどこが出処だよ。 」
644デフォルトの名無しさん
2021/10/11(月) 23:52:58.48ID:FfJkoMsS >>633
pub struct Vec<略> {
buf: RawVec<T, A>,
len: usize,
}
pub struct RawVec<略> {
ptr: Unique<T>,
cap: usize,
alloc: A,
}
pub struct Unique<T: ?Sized> {
pointer: *const T,
_marker: PhantomData<T>,
}
push|insertの際にlen|capとアロケート先が変化するという事、上のは難しい事をわざと言ってる
スマートポインタ議論は無視でOK。しかしPhantomDataなんて理解してる人に会ったことない
pub struct Vec<略> {
buf: RawVec<T, A>,
len: usize,
}
pub struct RawVec<略> {
ptr: Unique<T>,
cap: usize,
alloc: A,
}
pub struct Unique<T: ?Sized> {
pointer: *const T,
_marker: PhantomData<T>,
}
push|insertの際にlen|capとアロケート先が変化するという事、上のは難しい事をわざと言ってる
スマートポインタ議論は無視でOK。しかしPhantomDataなんて理解してる人に会ったことない
645デフォルトの名無しさん
2021/10/11(月) 23:58:39.10ID:ATb6fs5R >>631
その冪剰余関数の引数は全て数値すなわちCopy traitを持つので
関数呼び出しに参照を渡す必要はありません
また、可変参照の数値を渡す必要がある別の関数がもしあったとしても
普通に値を渡して変更値は返り値とする方がわかりやすいでしょう
その冪剰余関数の引数は全て数値すなわちCopy traitを持つので
関数呼び出しに参照を渡す必要はありません
また、可変参照の数値を渡す必要がある別の関数がもしあったとしても
普通に値を渡して変更値は返り値とする方がわかりやすいでしょう
646デフォルトの名無しさん
2021/10/12(火) 02:02:02.32ID:yPuGDG3+ >スマートポインタ議論は無視でOK。
他人のフリして我がフリ直せww
他人のフリして我がフリ直せww
647デフォルトの名無しさん
2021/10/12(火) 02:33:26.85ID:1W2DSIiH >>633
初級者ならばこのスレで言及されている内部実装の話は知らずとも使えるので無視してもよい
それよりもmutableとimmutableの意味となぜ区別が必要かを理解したほうがいい
あと参照の意味も理解していないようだからそこもまず基本だからおさえるべき
それら基本を理解すればVecの中身が書き換わるならばmut指定が必要とわかるはず
Rustは簡素に理解しやすく出来ているのに他言語のポインタ周辺の概念を無駄に持ち出してきて難しく考えて失敗する人たちが一部いる
初級者ならばこのスレで言及されている内部実装の話は知らずとも使えるので無視してもよい
それよりもmutableとimmutableの意味となぜ区別が必要かを理解したほうがいい
あと参照の意味も理解していないようだからそこもまず基本だからおさえるべき
それら基本を理解すればVecの中身が書き換わるならばmut指定が必要とわかるはず
Rustは簡素に理解しやすく出来ているのに他言語のポインタ周辺の概念を無駄に持ち出してきて難しく考えて失敗する人たちが一部いる
648デフォルトの名無しさん
2021/10/12(火) 07:19:09.45ID:SacTrMIO これが基本を理解してないと指摘されたやつのレスw
649デフォルトの名無しさん
2021/10/12(火) 08:17:13.13ID:FR/wdn5M Rusterは他人を同一人物と思い込む素性の悪い病人しか居ないな
650633
2021/10/12(火) 08:42:15.75ID:5WgWwJH0 初心者丸出しの質問で、なんでこうなった・・・・・
651デフォルトの名無しさん
2021/10/12(火) 10:28:07.94ID:XIKPR8ou652デフォルトの名無しさん
2021/10/12(火) 10:28:20.90ID:h0zcLGc7 このスレにはアンチRustのC++爺さんと
間違った知識を上から目線でレスするRust初心者が各1名住み着いてるから
質問者は回答内容を自分で精査しないとダメだよ
特に後者はタチが悪いので注意して
間違った知識を上から目線でレスするRust初心者が各1名住み着いてるから
質問者は回答内容を自分で精査しないとダメだよ
特に後者はタチが悪いので注意して
653デフォルトの名無しさん
2021/10/12(火) 10:37:06.05ID:BYAG38Ke Rustに近々追加される機能で熱いものなにかありますか?
654デフォルトの名無しさん
2021/10/12(火) 10:43:27.65ID:Br1er+Qs Rustに関する質問はteratailで
655デフォルトの名無しさん
2021/10/12(火) 10:55:07.59ID:aJ9lzwpY 現時点でRustなんかどうでもいい
10年後に普及してたら一般プログラマーも使う程度
10年後に普及してたら一般プログラマーも使う程度
656デフォルトの名無しさん
2021/10/12(火) 11:09:47.63ID:Br1er+Qs657デフォルトの名無しさん
2021/10/12(火) 11:23:31.59ID:lRrdrCP9 >>650
mutの必要有無は他言語では一般的じゃないRustのルールに関連してるんだけど
それが少し難しいので回答する側にもそのルールを理解してない人がそれなりにいるということ
基本的にコンパイラが教えてくれるので深く理解してなくても使う分にはそこまで問題にはならない
mutの必要有無は他言語では一般的じゃないRustのルールに関連してるんだけど
それが少し難しいので回答する側にもそのルールを理解してない人がそれなりにいるということ
基本的にコンパイラが教えてくれるので深く理解してなくても使う分にはそこまで問題にはならない
658デフォルトの名無しさん
2021/10/12(火) 12:59:59.43ID:dsnSo1To Rustを知るということは、弱点も知ることにつながる
659デフォルトの名無しさん
2021/10/12(火) 13:01:46.79ID:k+FFNiZ5 vlangもmutがあるが散々否定される、曰く「理論に沿ったコンピューター工学を元にしてない」だとか
「トランスコンパイラでしょ」とか、NoGCが過大広告でLobsterというのは分かるがリークするでしょとか
「トランスコンパイラでしょ」とか、NoGCが過大広告でLobsterというのは分かるがリークするでしょとか
660デフォルトの名無しさん
2021/10/12(火) 13:21:05.00ID:WmCYyvpu async/awaitの追加で一旦大きな機能追加目標は終わって、以降は処理系の効率化にリソースを割いていく、みたいな話を読んだ気がする
661デフォルトの名無しさん
2021/10/12(火) 13:54:32.71ID:fJneTy5r 結局他の言語でのメモリモデルも理解してないとrustはまともに使えんよ。
そこを誤魔化すやつはクソだわ。
そこを誤魔化すやつはクソだわ。
662デフォルトの名無しさん
2021/10/12(火) 14:51:47.32ID:2YI6ZITw >>633
Rustは書き換え競合を避けるために、書き換え可能な可変参照(for writer)と、書き換えられない参照(for reader)の区別をして、
書き換えられない参照は同時に複数を持てる(multiple readers)けど、可変参照は同時に一つだけしか許さない(single writer)とすることで、競合を避けている。
Rustではmutかどうかもその観点からなので、変数が別のVecになるだけでなく、同じVecのまま配列内容や長さの変化しても、内容長さ同じだが領域拡大で場所移動でも、書き換わりとしてmutが必要。
だから、Vecのメソッドでmutを要求してるのはそれらの結果論にすぎないし、Vecの内部構造がこうなってるからという説明は不要で筋違い。
>>661
それは違うな。
むしろ頭を一旦ゼロにする柔軟な人ほど理解が早い。
他言語での様々なモデル(メモリモデルやクラスモデルや…)をベースに難しく考える人ほど混乱して理解が遅い。
Rustは書き換え競合を避けるために、書き換え可能な可変参照(for writer)と、書き換えられない参照(for reader)の区別をして、
書き換えられない参照は同時に複数を持てる(multiple readers)けど、可変参照は同時に一つだけしか許さない(single writer)とすることで、競合を避けている。
Rustではmutかどうかもその観点からなので、変数が別のVecになるだけでなく、同じVecのまま配列内容や長さの変化しても、内容長さ同じだが領域拡大で場所移動でも、書き換わりとしてmutが必要。
だから、Vecのメソッドでmutを要求してるのはそれらの結果論にすぎないし、Vecの内部構造がこうなってるからという説明は不要で筋違い。
>>661
それは違うな。
むしろ頭を一旦ゼロにする柔軟な人ほど理解が早い。
他言語での様々なモデル(メモリモデルやクラスモデルや…)をベースに難しく考える人ほど混乱して理解が遅い。
663デフォルトの名無しさん
2021/10/12(火) 14:59:49.12ID:fJneTy5r >むしろ頭を一旦ゼロにする柔軟な人ほど理解が早い。
>他言語での様々なモデル(メモリモデルやクラスモデルや…)をベースに難しく考える人ほど混乱して理解が遅い。
これを本気で考えてるならバカとしか言いようがない。
C、もしくはアセンブラをバインディングした時に確実にぶっ壊れるコードになるわ。
>他言語での様々なモデル(メモリモデルやクラスモデルや…)をベースに難しく考える人ほど混乱して理解が遅い。
これを本気で考えてるならバカとしか言いようがない。
C、もしくはアセンブラをバインディングした時に確実にぶっ壊れるコードになるわ。
664デフォルトの名無しさん
2021/10/12(火) 15:34:41.08ID:2YI6ZITw >>663
それはABIやFFIの話であってRustの話ではない。
Rustで完結するシステムでは一切考慮する必要ない。
他言語ライブラリなど利用の際も、適切な仲介モジュールがあれば、利用側で考慮する必要はない。
各言語との連携部分では、それぞれその言語の知識が不可欠なのは当たり前。
だが、それはRustの話ではなく、Rustにおいてはその知識は必要ない。
それはABIやFFIの話であってRustの話ではない。
Rustで完結するシステムでは一切考慮する必要ない。
他言語ライブラリなど利用の際も、適切な仲介モジュールがあれば、利用側で考慮する必要はない。
各言語との連携部分では、それぞれその言語の知識が不可欠なのは当たり前。
だが、それはRustの話ではなく、Rustにおいてはその知識は必要ない。
665デフォルトの名無しさん
2021/10/12(火) 16:09:45.89ID:Br1er+Qs メモリモデルって並行プログラミングやらないならあんまり関係なくない???
666デフォルトの名無しさん
2021/10/12(火) 16:12:51.35ID:BYAG38Ke アトミック操作のOrderingの話なんかはC++の定義に丸投げしてるから他の言語の知識が必要というのは一応正しい
667デフォルトの名無しさん
2021/10/12(火) 16:27:05.41ID:2YI6ZITw668デフォルトの名無しさん
2021/10/12(火) 18:24:19.63ID:natODgzZ >>662
「Vecの内部構造がこうなってるからという説明は不要で筋違い」うーん、それこそ趣旨が違うよ。
vec[0] = 2などとして内容長さ同じの場合の理解では、1つの可変参照と、複数の参照を持つ事を
知っているのは必要だが通常では長さや容量が拡張されるpushやinsertは内部構造により説明される。
mutatorであるpushを呼ばない限りはmutは必要なければ、「mutをつけたベクター型」では無くて
配列という質問になるのでは?
「Vecの内部構造がこうなってるからという説明は不要で筋違い」うーん、それこそ趣旨が違うよ。
vec[0] = 2などとして内容長さ同じの場合の理解では、1つの可変参照と、複数の参照を持つ事を
知っているのは必要だが通常では長さや容量が拡張されるpushやinsertは内部構造により説明される。
mutatorであるpushを呼ばない限りはmutは必要なければ、「mutをつけたベクター型」では無くて
配列という質問になるのでは?
669デフォルトの名無しさん
2021/10/12(火) 19:12:36.47ID:2YI6ZITw >>668
公開(pub)されていないstruct Vecの内部構造や非公開のRawVecなどを持ち出してくる人たちがいるから、
「Vecの内部構造がこうなってるからという説明は不要で筋違い」と書いた。
そこは長さや容量を持っている等の概念の理解だけで十分であるし、実際に公表されている情報もそこまで。
公開(pub)されていないstruct Vecの内部構造や非公開のRawVecなどを持ち出してくる人たちがいるから、
「Vecの内部構造がこうなってるからという説明は不要で筋違い」と書いた。
そこは長さや容量を持っている等の概念の理解だけで十分であるし、実際に公表されている情報もそこまで。
670デフォルトの名無しさん
2021/10/12(火) 19:33:58.77ID:natODgzZ >>667
C++の知識を「あまり」必要としないのは確かだがC20/C22などの仕様を「参考」にしているのは明らか。
というかLLVMから見てClangっぽく見えるように頑張っていると公式が言っている
C++の知識を「あまり」必要としないのは確かだがC20/C22などの仕様を「参考」にしているのは明らか。
というかLLVMから見てClangっぽく見えるように頑張っていると公式が言っている
671デフォルトの名無しさん
2021/10/12(火) 19:37:41.99ID:natODgzZ672デフォルトの名無しさん
2021/10/12(火) 21:00:30.83ID:fJneTy5r673デフォルトの名無しさん
2021/10/12(火) 22:00:42.97ID:lRrdrCP9674デフォルトの名無しさん
2021/10/12(火) 22:09:23.38ID:+W0FsG+B >>672
Rustでプログラムを書くに当たってRustを構成する様々な低レベルのレイヤーのうちどこまで書き手は意識すべきと考えますか?
さすがにCPUを構成するシリコンひとつひとつの振る舞いを意識することは出来ないので、
これより先は気にしなくて良いという境界は存在すると思うのですが、それはどのあたりにあるとお考えでしょうか
Rustでプログラムを書くに当たってRustを構成する様々な低レベルのレイヤーのうちどこまで書き手は意識すべきと考えますか?
さすがにCPUを構成するシリコンひとつひとつの振る舞いを意識することは出来ないので、
これより先は気にしなくて良いという境界は存在すると思うのですが、それはどのあたりにあるとお考えでしょうか
675デフォルトの名無しさん
2021/10/12(火) 22:18:28.12ID:1W2DSIiH >>672
no_stdでさらにシステムコール(あるいは相当)はasmでレジスタ渡しで呼び出しに至るまでRust完全単独で既存OS(など)利用もあるしOS作成ならOS側もRust単独
no_stdでさらにシステムコール(あるいは相当)はasmでレジスタ渡しで呼び出しに至るまでRust完全単独で既存OS(など)利用もあるしOS作成ならOS側もRust単独
676デフォルトの名無しさん
2021/10/12(火) 23:07:50.81ID:XIKPR8ou >>664
>Rustで完結するシステムでは一切考慮する必要ない。
それって議論の価値ある? だって現実的じゃないじゃん
研究者のための言語だっていうなら、それもありだけど
ここにいる人間は実用を求めてるわけでしょ。多分……
>Rustで完結するシステムでは一切考慮する必要ない。
それって議論の価値ある? だって現実的じゃないじゃん
研究者のための言語だっていうなら、それもありだけど
ここにいる人間は実用を求めてるわけでしょ。多分……
677デフォルトの名無しさん
2021/10/12(火) 23:22:14.99ID:ElEzb70r すまんが何を言っているかさっぱり分からない
自分が書いてるのは9割方Rustで完結したプロジェクトだけど、みんなFFIばっかり書いてるのか?
自分が書いてるのは9割方Rustで完結したプロジェクトだけど、みんなFFIばっかり書いてるのか?
678デフォルトの名無しさん
2021/10/12(火) 23:52:39.59ID:XIKPR8ou Win32APIとリンクしたり、そういうプログラムは書かないってことね
679デフォルトの名無しさん
2021/10/12(火) 23:56:08.22ID:ElEzb70r Win32API使いたいんなら単にwindows-rsクレート使えば良いだけで
その先のC ABIがどうなってるかとか気にする必要はないと思うが
その先のC ABIがどうなってるかとか気にする必要はないと思うが
680デフォルトの名無しさん
2021/10/12(火) 23:57:43.15ID:ElEzb70r ああでもwindows-rs自体は割とunsafe あるから気にしないとダメかな
681デフォルトの名無しさん
2021/10/13(水) 00:00:43.80ID:PhFIUWEp いや、そもそもwindows-rsクレート使おうが
C理解してないと使えないよ
だってwindows-rsの型定義は「今のところ」まともじゃないもん
ポインタは何でもかんでもDWORDだし
C理解してないと使えないよ
だってwindows-rsの型定義は「今のところ」まともじゃないもん
ポインタは何でもかんでもDWORDだし
682デフォルトの名無しさん
2021/10/13(水) 00:05:34.07ID:1HIX7TKw 確かに例が悪かった。windows-rsに関してはunsafe がある以上呼び出し先のCの知識は必須だね
言いたいのは自分でunsafeを書かない限り、Rustだけで完結するってこと
そりゃ分野によってはまだライブラリ不足で完結しにくいのもあるだろうけど、多くの分野で完結すると思うがなぁ
言いたいのは自分でunsafeを書かない限り、Rustだけで完結するってこと
そりゃ分野によってはまだライブラリ不足で完結しにくいのもあるだろうけど、多くの分野で完結すると思うがなぁ
683デフォルトの名無しさん
2021/10/13(水) 00:37:10.90ID:bi9uBzGZ で、そういうメモリをほとんど気にしないソフトはrustで書く必要がないものなんだよね。
ファッションでやってることがバレちゃったね。
ファッションでやってることがバレちゃったね。
684デフォルトの名無しさん
2021/10/13(水) 00:38:57.86ID:fXfbCLiK Rust以外のプログラミング言語を考えれば理解しやすい
C言語を全く知らなくても使えるようにその言語だけで書かれたAPIで何でも利用できる
Rustも同様でC言語を全く知らなくても使えるようにRustだけで書かれたAPIで何でも利用できるようにすることができるし実際にほとんどの分野ではそうなっている
その上でRustの場合は効率面から元のAPI向き出しで例えばCStr使ったりするなどC言語でのAPIのまま提供するモジュールも存在するというだけにすぎなくてそこはあくまでもFFI領域
したがって「他の言語と同様にRustもC言語を全く知らなくても使える」で正解
C言語を全く知らなくても使えるようにその言語だけで書かれたAPIで何でも利用できる
Rustも同様でC言語を全く知らなくても使えるようにRustだけで書かれたAPIで何でも利用できるようにすることができるし実際にほとんどの分野ではそうなっている
その上でRustの場合は効率面から元のAPI向き出しで例えばCStr使ったりするなどC言語でのAPIのまま提供するモジュールも存在するというだけにすぎなくてそこはあくまでもFFI領域
したがって「他の言語と同様にRustもC言語を全く知らなくても使える」で正解
685デフォルトの名無しさん
2021/10/13(水) 01:08:46.05ID:4amWetfo686デフォルトの名無しさん
2021/10/13(水) 01:16:25.82ID:fXfbCLiK >>683
例えばstd::fsやstd::netなどは本来ならCのABIでやりとりするものだが
そんなこといっさい気にする必要なくRustの型で渡してRustの型で返ってくるようにRustの標準ライブラリが作られている
そこにCの知識は全く必要としない
例えばstd::fsやstd::netなどは本来ならCのABIでやりとりするものだが
そんなこといっさい気にする必要なくRustの型で渡してRustの型で返ってくるようにRustの標準ライブラリが作られている
そこにCの知識は全く必要としない
687デフォルトの名無しさん
2021/10/13(水) 07:24:31.94ID:WqU30Pep たくさん書くのは自信がなさの表れ
そんな必死になるような話じゃないだろうに
そんな必死になるような話じゃないだろうに
688デフォルトの名無しさん
2021/10/13(水) 09:00:38.12ID:W/9iWpHx Cを理解してないとRustは使えない、と
ウソをつく人がいるからだろう
ウソをつく人がいるからだろう
689デフォルトの名無しさん
2021/10/13(水) 09:25:52.29ID:bi9uBzGZ そう思い込んでりゃいいんでない?
近くにいなけりゃ放置するよ。近くにいればボコボコにするけど。
近くにいなけりゃ放置するよ。近くにいればボコボコにするけど。
690デフォルトの名無しさん
2021/10/13(水) 09:41:01.46ID:+i9fv0nZ691デフォルトの名無しさん
2021/10/13(水) 10:15:02.35ID:hOkEY9I6 >>688
そういうやつの相手をムキになってやってるうちは自分も同じレベルだって気付けよな
そういうやつの相手をムキになってやってるうちは自分も同じレベルだって気付けよな
692デフォルトの名無しさん
2021/10/13(水) 10:36:12.77ID:gkjY8I9d693デフォルトの名無しさん
2021/10/13(水) 14:45:58.97ID:qAYNHtUZ >>690
シリコン原子一粒一粒の意味
シリコン原子一粒一粒の意味
694デフォルトの名無しさん
2021/10/14(木) 18:50:15.29ID:1TrBYNn/ コンピュータアーキテクチャの基礎知識(メモリモデル、アクセスオーダ、スレッディング等)やOSのシステムコール、APIの知識の事を "C言語の知識" と呼ぶ人が居るのね。
まあどうでもいいけど。
まあどうでもいいけど。
695デフォルトの名無しさん
2021/10/14(木) 19:43:21.65ID:JvADELGn システムコールにしても最終的にはレジスタに積んでsyscall命令もしくは割り込みするだけだからCでもRustでもasmと共存するだけか
C言語の知識は要らないな
C言語の知識は要らないな
696デフォルトの名無しさん
2021/10/14(木) 20:55:23.77ID:1TrBYNn/ まあシステムコールやAPIは C や CPP のヘッダ形式で定義/提供されてるという事を言いたいなら判らんでもないが、
そこまでコアな言語仕様知識は要らないねえ。
そこまでコアな言語仕様知識は要らないねえ。
697デフォルトの名無しさん
2021/10/14(木) 21:55:10.80ID:GbD2vike rustは書けるけどCが書けない人いる?
そういう人がいないとCがいるかいらないかわからない
自分はCの知識が役に立ったと思う
そういう人がいないとCがいるかいらないかわからない
自分はCの知識が役に立ったと思う
698デフォルトの名無しさん
2021/10/14(木) 22:21:20.24ID:dWpPrl+Q RustでWebバックエンド書いてる人になら普通にいるんじゃない?
Web系ならこれまでのキャリアで全くCに触れなくてもおかしくないし
Web系ならこれまでのキャリアで全くCに触れなくてもおかしくないし
699デフォルトの名無しさん
2021/10/15(金) 10:55:12.45ID:GXWQCf9x 昔からRust for Rubyistsとかあるしスクリプト系言語から流れて来る人もそれなりにいるかと
700デフォルトの名無しさん
2021/10/15(金) 12:44:17.46ID:P5mUityt スマートポインタやシェアードポインタ、所有権なんかは、C++0xあたりで導入された考えだから
どの程度の範囲をC言語と言っているのかによる。要らない派が多く「見える」が、知識があって
理解をを妨げるという考えは全否定する。「あって困るものではない」
どの程度の範囲をC言語と言っているのかによる。要らない派が多く「見える」が、知識があって
理解をを妨げるという考えは全否定する。「あって困るものではない」
701デフォルトの名無しさん
2021/10/15(金) 14:00:41.51ID:8deGlJY8702デフォルトの名無しさん
2021/10/15(金) 14:27:53.37ID:lZWoC8Xx >>701
OSなんて書いたこともないくせに語るなド素人
OSなんて書いたこともないくせに語るなド素人
703デフォルトの名無しさん
2021/10/15(金) 15:04:44.50ID:8deGlJY8 >>702
ソースコード読むことすらしてないバカは黙ってて。
ソースコード読むことすらしてないバカは黙ってて。
704デフォルトの名無しさん
2021/10/15(金) 15:15:35.47ID:rb+Oscx7 なんか低レベルな話で盛り上がってるな
705デフォルトの名無しさん
2021/10/15(金) 15:16:50.75ID:5/Pqp5xe そんなことよりシステムコールの呼び出しにCの知識は必要ないっていうコメント対して>>701のレスが噛み合ってないんだが、何を言いたかったのか解説してくれないか
706デフォルトの名無しさん
2021/10/15(金) 15:20:05.89ID:8deGlJY8 なるほど、レジスタからメモリ書き込みの同期タイミングなどが必要とかそこまで具体的に言わないと理解できないレベルなのか。
すげー馬鹿しかいないのなら仕方ないな。
すげー馬鹿しかいないのなら仕方ないな。
707デフォルトの名無しさん
2021/10/15(金) 15:33:44.29ID:5/Pqp5xe システムコールの呼び出しとはまったく関係ないな
708デフォルトの名無しさん
2021/10/15(金) 15:40:54.74ID:lZWoC8Xx OS書いたことも無いのに恥ずかしい奴
709デフォルトの名無しさん
2021/10/15(金) 15:45:02.58ID:lZWoC8Xx710デフォルトの名無しさん
2021/10/15(金) 16:38:42.56ID:XGfxQXO+ >>701
Rustはインラインasmできるので好きなレジスタと好きな変数(メモリ)の行き来演算できるしRustだけでOSも書ける
Rustはインラインasmできるので好きなレジスタと好きな変数(メモリ)の行き来演算できるしRustだけでOSも書ける
711デフォルトの名無しさん
2021/10/15(金) 17:41:49.92ID:W8XYkXKH >>710
どうせunsafeなんだろ
どうせunsafeなんだろ
712デフォルトの名無しさん
2021/10/15(金) 18:11:50.56ID:rb+Oscx7 寒色は人権すらないからな
713デフォルトの名無しさん
2021/10/15(金) 18:54:33.37ID:0qD/Pqit714デフォルトの名無しさん
2021/10/15(金) 18:55:28.40ID:IFdb5cTy Rust? 人気らしいね、でもオイラやらないよ
Cは嫌いだし、その後釜狙いの言語はどうせ肌に合わないさ
大半の人には必要ない言語だよね、だからオイラGoをやるよ
Cは嫌いだし、その後釜狙いの言語はどうせ肌に合わないさ
大半の人には必要ない言語だよね、だからオイラGoをやるよ
715デフォルトの名無しさん
2021/10/15(金) 18:58:20.72ID:WKIFTMdH GoのほうがよっぽどCの後釜感あるがな
GCのあるCという感じ
GCのあるCという感じ
716デフォルトの名無しさん
2021/10/15(金) 19:22:21.57ID:PoOS8yLC717デフォルトの名無しさん
2021/10/15(金) 19:27:43.08ID:vEXHgFWD rustの強みである静的メモリ安全性っていうのが活かせてないやんって意味で言ったんやけど
cやc++と同じ状況ならむしろrustよりcやc++使うよね?
cやc++と同じ状況ならむしろrustよりcやc++使うよね?
718デフォルトの名無しさん
2021/10/15(金) 19:36:00.75ID:sYZbhEbz 量の概念がないやつが定期的に現れるな
コード全域がunaafeなのと局所的なのは全然違うでしょ
コード全域がunaafeなのと局所的なのは全然違うでしょ
719デフォルトの名無しさん
2021/10/15(金) 19:46:42.29ID:PoOS8yLC720デフォルトの名無しさん
2021/10/15(金) 19:48:51.64ID:eqKsqNtm それならC++も同じでは?
721デフォルトの名無しさん
2021/10/15(金) 19:49:28.65ID:OmwX7nxr >>719
unsafeなのにメモリ安全性どうやって保証してるの?
unsafeなのにメモリ安全性どうやって保証してるの?
722デフォルトの名無しさん
2021/10/15(金) 19:52:54.07ID:eqKsqNtm C++の場合は、vector自身がメモリーの所有権を持ってるので安全性が保障されるんだけど。
723デフォルトの名無しさん
2021/10/15(金) 20:08:04.69ID:PoOS8yLC >>721
え?何を言ってるの?
Vecに限らずRustの各型を含めた標準ライブラリの内部はもちろんunsafeだらけだけど
論理的に安全な操作のみ、かつ、内部に閉じ込められていて外部に影響を及ぼさないもののみ
だからそれら型を含めた標準ライブラリを我々は安全に使うことができる
そしてそららを用いた我々のプログラムはコンパイラが通ればメモリ安全性を保証される
え?何を言ってるの?
Vecに限らずRustの各型を含めた標準ライブラリの内部はもちろんunsafeだらけだけど
論理的に安全な操作のみ、かつ、内部に閉じ込められていて外部に影響を及ぼさないもののみ
だからそれら型を含めた標準ライブラリを我々は安全に使うことができる
そしてそららを用いた我々のプログラムはコンパイラが通ればメモリ安全性を保証される
724デフォルトの名無しさん
2021/10/15(金) 20:14:36.90ID:eqKsqNtm >>723
じゃあC++と変わりませんね。
じゃあC++と変わりませんね。
725デフォルトの名無しさん
2021/10/15(金) 20:15:19.52ID:I/84Z1Ml >>723
だからアスペか?
論理的に安全な操作のみ、かつ、内部に閉じ込められていて外部に影響を及ぼさないってことをどうやって保証してるのか聞いてんだけど?
国会の答弁みたいな返答やめろよ
というか外部にメモリ及ぼさないはメモリ安全性が保たれるの必要条件じゃないんだけど
だからアスペか?
論理的に安全な操作のみ、かつ、内部に閉じ込められていて外部に影響を及ぼさないってことをどうやって保証してるのか聞いてんだけど?
国会の答弁みたいな返答やめろよ
というか外部にメモリ及ぼさないはメモリ安全性が保たれるの必要条件じゃないんだけど
726デフォルトの名無しさん
2021/10/15(金) 20:15:56.65ID:I/84Z1Ml 外部にメモリ及ぼさないじゃなくて外部に影響及ぼさないだった
727デフォルトの名無しさん
2021/10/15(金) 20:21:27.95ID:PoOS8yLC728デフォルトの名無しさん
2021/10/15(金) 20:33:33.14ID:WHarWmnu729デフォルトの名無しさん
2021/10/15(金) 20:36:47.57ID:jQ7TSjOD Cしか知らない人ってプログラミング言語の仕様とコンピュータのアーキテクチャが区別できないってマ?
型理論も知らないってマ?
型理論も知らないってマ?
730デフォルトの名無しさん
2021/10/15(金) 20:40:52.58ID:PoOS8yLC■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 台湾有事での集団的自衛権行使に賛成48%、「反対」が44.2% ★2 [♪♪♪★]
- 【淡路島】88歳男が好意を理由に60歳女性宅へ侵入か 「下の毛がほしい」不適切メモを残す ストーカー容疑で再逮捕 洲本市 [nita★]
- 中国「国連安保理の許可なしに日本攻撃可能」 Xで旧敵国条項に言及… ★13 [BFU★]
- なぜ女性トイレには行列ができる? 全国1092カ所を調べた61歳の疑問、国を動かす [♪♪♪★]
- 【NHK】受信料の未払い督促を10倍に強化… 支払い拒否が続くと民事手続きも 「カーナビも受信料いただきます」方針 [冬月記者★]
- 『ドラゴンボール』人気キャラ投票、現在の順位発表 意外な人物がTOP10入り [ひかり★]
- 他サポ 2025-260
- 2025 SUPER FORMULA Lap18
- 【DAZN】フォーミュラGP【F1 2 3 SF P】Lap1807
- 京都競馬4回5日目エリザベス女王杯★3
- 福島競馬3回5日目
- とらせん IP
- 日本人の73%「中国が嫌い」日本の右傾化止まらない [165981677]
- 日本人の48%覚悟完了… [819729701]
- 【実況】博衣こよりのえちえちゼルダの伝説 ムジュラの仮面🧪 ★4
- 3時までに着いたレス×100m走る
- 高市早苗「外交交渉でマウント取れる服、無理をしてでも買わなくてはいかんかもなぁ。」ネトウヨ向けにアピールwwwwwwwwwww [834922174]
- 【雑談】暇人集会所part31くらい
