Rust part12

■ このスレッドは過去ログ倉庫に格納されています
2021/08/24(火) 22:55:27.78ID:972JwtmU
公式
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/
2021/10/11(月) 20:38:32.88ID:oB6cAYFd
クイズ: この中にウソはいくつウソがある?

「または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なんて理解してる人に会ったことない
2021/10/11(月) 23:58:39.10ID:ATb6fs5R
>>631
その冪剰余関数の引数は全て数値すなわちCopy traitを持つので
関数呼び出しに参照を渡す必要はありません

また、可変参照の数値を渡す必要がある別の関数がもしあったとしても
普通に値を渡して変更値は返り値とする方がわかりやすいでしょう
2021/10/12(火) 02:02:02.32ID:yPuGDG3+
>スマートポインタ議論は無視でOK。
他人のフリして我がフリ直せww
2021/10/12(火) 02:33:26.85ID:1W2DSIiH
>>633
初級者ならばこのスレで言及されている内部実装の話は知らずとも使えるので無視してもよい
それよりもmutableとimmutableの意味となぜ区別が必要かを理解したほうがいい
あと参照の意味も理解していないようだからそこもまず基本だからおさえるべき
それら基本を理解すればVecの中身が書き換わるならばmut指定が必要とわかるはず
Rustは簡素に理解しやすく出来ているのに他言語のポインタ周辺の概念を無駄に持ち出してきて難しく考えて失敗する人たちが一部いる
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
初心者丸出しの質問で、なんでこうなった・・・・・
2021/10/12(火) 10:28:07.94ID:XIKPR8ou
>>647
>Rustは簡素に理解しやすく出来ているのに

それには賛同できない
2021/10/12(火) 10:28:20.90ID:h0zcLGc7
このスレにはアンチRustのC++爺さんと
間違った知識を上から目線でレスするRust初心者が各1名住み着いてるから

質問者は回答内容を自分で精査しないとダメだよ
特に後者はタチが悪いので注意して
2021/10/12(火) 10:37:06.05ID:BYAG38Ke
Rustに近々追加される機能で熱いものなにかありますか?
2021/10/12(火) 10:43:27.65ID:Br1er+Qs
Rustに関する質問はteratailで
2021/10/12(火) 10:55:07.59ID:aJ9lzwpY
現時点でRustなんかどうでもいい
10年後に普及してたら一般プログラマーも使う程度
2021/10/12(火) 11:09:47.63ID:Br1er+Qs
653見る前に654書いちゃったのでちょっと訂正
Rustに関するまじめな質問はteratailでするのがよい

>>653
もうすぐRust2021がくるぞい
熱いのがあるかっていうと微妙かも
2021/10/12(火) 11:23:31.59ID:lRrdrCP9
>>650
mutの必要有無は他言語では一般的じゃないRustのルールに関連してるんだけど
それが少し難しいので回答する側にもそのルールを理解してない人がそれなりにいるということ

基本的にコンパイラが教えてくれるので深く理解してなくても使う分にはそこまで問題にはならない
2021/10/12(火) 12:59:59.43ID:dsnSo1To
Rustを知るということは、弱点も知ることにつながる
659デフォルトの名無しさん
垢版 |
2021/10/12(火) 13:01:46.79ID:k+FFNiZ5
vlangもmutがあるが散々否定される、曰く「理論に沿ったコンピューター工学を元にしてない」だとか
「トランスコンパイラでしょ」とか、NoGCが過大広告でLobsterというのは分かるがリークするでしょとか
2021/10/12(火) 13:21:05.00ID:WmCYyvpu
async/awaitの追加で一旦大きな機能追加目標は終わって、以降は処理系の効率化にリソースを割いていく、みたいな話を読んだ気がする
2021/10/12(火) 13:54:32.71ID:fJneTy5r
結局他の言語でのメモリモデルも理解してないとrustはまともに使えんよ。
そこを誤魔化すやつはクソだわ。
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
それは違うな。
むしろ頭を一旦ゼロにする柔軟な人ほど理解が早い。
他言語での様々なモデル(メモリモデルやクラスモデルや…)をベースに難しく考える人ほど混乱して理解が遅い。
2021/10/12(火) 14:59:49.12ID:fJneTy5r
>むしろ頭を一旦ゼロにする柔軟な人ほど理解が早い。
>他言語での様々なモデル(メモリモデルやクラスモデルや…)をベースに難しく考える人ほど混乱して理解が遅い。
これを本気で考えてるならバカとしか言いようがない。
C、もしくはアセンブラをバインディングした時に確実にぶっ壊れるコードになるわ。
2021/10/12(火) 15:34:41.08ID:2YI6ZITw
>>663
それはABIやFFIの話であってRustの話ではない。
Rustで完結するシステムでは一切考慮する必要ない。
他言語ライブラリなど利用の際も、適切な仲介モジュールがあれば、利用側で考慮する必要はない。
各言語との連携部分では、それぞれその言語の知識が不可欠なのは当たり前。
だが、それはRustの話ではなく、Rustにおいてはその知識は必要ない。
2021/10/12(火) 16:09:45.89ID:Br1er+Qs
メモリモデルって並行プログラミングやらないならあんまり関係なくない???
2021/10/12(火) 16:12:51.35ID:BYAG38Ke
アトミック操作のOrderingの話なんかはC++の定義に丸投げしてるから他の言語の知識が必要というのは一応正しい
2021/10/12(火) 16:27:05.41ID:2YI6ZITw
>>666
それは理解するのにC++の知識を一切必要としない。
なぜならC++言語仕様とは独立して定められている。
つまり、その件についてもRustを理解習得するために他の言語の知識は必要ない。
668デフォルトの名無しさん
垢版 |
2021/10/12(火) 18:24:19.63ID:natODgzZ
>>662
「Vecの内部構造がこうなってるからという説明は不要で筋違い」うーん、それこそ趣旨が違うよ。
vec[0] = 2などとして内容長さ同じの場合の理解では、1つの可変参照と、複数の参照を持つ事を
知っているのは必要だが通常では長さや容量が拡張されるpushやinsertは内部構造により説明される。
mutatorであるpushを呼ばない限りはmutは必要なければ、「mutをつけたベクター型」では無くて
配列という質問になるのでは?
2021/10/12(火) 19:12:36.47ID:2YI6ZITw
>>668
公開(pub)されていないstruct Vecの内部構造や非公開のRawVecなどを持ち出してくる人たちがいるから、
「Vecの内部構造がこうなってるからという説明は不要で筋違い」と書いた。
そこは長さや容量を持っている等の概念の理解だけで十分であるし、実際に公表されている情報もそこまで。
670デフォルトの名無しさん
垢版 |
2021/10/12(火) 19:33:58.77ID:natODgzZ
>>667
C++の知識を「あまり」必要としないのは確かだがC20/C22などの仕様を「参考」にしているのは明らか。
というかLLVMから見てClangっぽく見えるように頑張っていると公式が言っている
671デフォルトの名無しさん
垢版 |
2021/10/12(火) 19:37:41.99ID:natODgzZ
>>669
なるほど言いたい事は理解してるが、長さや容量を持っている等の概念の理解ならライブラリソースを
示した方が明らかでしょう。親切だと褒められる事はすれど不要と切って捨てるほどではないのでは?
2021/10/12(火) 21:00:30.83ID:fJneTy5r
>>664
rustが単独で使われるなんてことは絶対にない。
低レイヤーのことがまるでわかってないってことがよくわかったよ。
2021/10/12(火) 22:00:42.97ID:lRrdrCP9
>>662
「multiple readers or single writer」のセーフティルールは
参照だけに適用されるものではなくて参照の所有者を含めて適用されるもの
2021/10/12(火) 22:09:23.38ID:+W0FsG+B
>>672
Rustでプログラムを書くに当たってRustを構成する様々な低レベルのレイヤーのうちどこまで書き手は意識すべきと考えますか?

さすがにCPUを構成するシリコンひとつひとつの振る舞いを意識することは出来ないので、
これより先は気にしなくて良いという境界は存在すると思うのですが、それはどのあたりにあるとお考えでしょうか
2021/10/12(火) 22:18:28.12ID:1W2DSIiH
>>672
no_stdでさらにシステムコール(あるいは相当)はasmでレジスタ渡しで呼び出しに至るまでRust完全単独で既存OS(など)利用もあるしOS作成ならOS側もRust単独
2021/10/12(火) 23:07:50.81ID:XIKPR8ou
>>664
>Rustで完結するシステムでは一切考慮する必要ない。

それって議論の価値ある? だって現実的じゃないじゃん
研究者のための言語だっていうなら、それもありだけど
ここにいる人間は実用を求めてるわけでしょ。多分……
2021/10/12(火) 23:22:14.99ID:ElEzb70r
すまんが何を言っているかさっぱり分からない
自分が書いてるのは9割方Rustで完結したプロジェクトだけど、みんなFFIばっかり書いてるのか?
2021/10/12(火) 23:52:39.59ID:XIKPR8ou
Win32APIとリンクしたり、そういうプログラムは書かないってことね
2021/10/12(火) 23:56:08.22ID:ElEzb70r
Win32API使いたいんなら単にwindows-rsクレート使えば良いだけで
その先のC ABIがどうなってるかとか気にする必要はないと思うが
2021/10/12(火) 23:57:43.15ID:ElEzb70r
ああでもwindows-rs自体は割とunsafe あるから気にしないとダメかな
2021/10/13(水) 00:00:43.80ID:PhFIUWEp
いや、そもそもwindows-rsクレート使おうが
C理解してないと使えないよ
だってwindows-rsの型定義は「今のところ」まともじゃないもん
ポインタは何でもかんでもDWORDだし
2021/10/13(水) 00:05:34.07ID:1HIX7TKw
確かに例が悪かった。windows-rsに関してはunsafe がある以上呼び出し先のCの知識は必須だね
言いたいのは自分でunsafeを書かない限り、Rustだけで完結するってこと
そりゃ分野によってはまだライブラリ不足で完結しにくいのもあるだろうけど、多くの分野で完結すると思うがなぁ
2021/10/13(水) 00:37:10.90ID:bi9uBzGZ
で、そういうメモリをほとんど気にしないソフトはrustで書く必要がないものなんだよね。
ファッションでやってることがバレちゃったね。
2021/10/13(水) 00:38:57.86ID:fXfbCLiK
Rust以外のプログラミング言語を考えれば理解しやすい
C言語を全く知らなくても使えるようにその言語だけで書かれたAPIで何でも利用できる
Rustも同様でC言語を全く知らなくても使えるようにRustだけで書かれたAPIで何でも利用できるようにすることができるし実際にほとんどの分野ではそうなっている
その上でRustの場合は効率面から元のAPI向き出しで例えばCStr使ったりするなどC言語でのAPIのまま提供するモジュールも存在するというだけにすぎなくてそこはあくまでもFFI領域
したがって「他の言語と同様にRustもC言語を全く知らなくても使える」で正解
2021/10/13(水) 01:08:46.05ID:4amWetfo
>>683
rustで書く必要性が薄いってのは結構当てはまるとは思うが、
だからといってメモリ回りの知識がrustで何か書くには絶対必須とはならんだろう
2021/10/13(水) 01:16:25.82ID:fXfbCLiK
>>683
例えばstd::fsやstd::netなどは本来ならCのABIでやりとりするものだが
そんなこといっさい気にする必要なくRustの型で渡してRustの型で返ってくるようにRustの標準ライブラリが作られている
そこにCの知識は全く必要としない
2021/10/13(水) 07:24:31.94ID:WqU30Pep
たくさん書くのは自信がなさの表れ
そんな必死になるような話じゃないだろうに
2021/10/13(水) 09:00:38.12ID:W/9iWpHx
Cを理解してないとRustは使えない、と
ウソをつく人がいるからだろう
2021/10/13(水) 09:25:52.29ID:bi9uBzGZ
そう思い込んでりゃいいんでない?
近くにいなけりゃ放置するよ。近くにいればボコボコにするけど。
690デフォルトの名無しさん
垢版 |
2021/10/13(水) 09:41:01.46ID:+i9fv0nZ
>>674
cpuはシリコンウエハ一枚から切り取ったものからなっている
複数のシリコンの集合体ではない
2021/10/13(水) 10:15:02.35ID:hOkEY9I6
>>688
そういうやつの相手をムキになってやってるうちは自分も同じレベルだって気付けよな
2021/10/13(水) 10:36:12.77ID:gkjY8I9d
>>690
ちなRyzenとか、組み込みマイコンとかは、マルチチップを繋いで一つにパッケージしてるのもあるけどね。
シリコン一つ一つとかポエムっぽいのは秋になったからか?
2021/10/13(水) 14:45:58.97ID:qAYNHtUZ
>>690
シリコン原子一粒一粒の意味
2021/10/14(木) 18:50:15.29ID:1TrBYNn/
コンピュータアーキテクチャの基礎知識(メモリモデル、アクセスオーダ、スレッディング等)やOSのシステムコール、APIの知識の事を "C言語の知識" と呼ぶ人が居るのね。
まあどうでもいいけど。
2021/10/14(木) 19:43:21.65ID:JvADELGn
システムコールにしても最終的にはレジスタに積んでsyscall命令もしくは割り込みするだけだからCでもRustでもasmと共存するだけか
C言語の知識は要らないな
2021/10/14(木) 20:55:23.77ID:1TrBYNn/
まあシステムコールやAPIは C や CPP のヘッダ形式で定義/提供されてるという事を言いたいなら判らんでもないが、
そこまでコアな言語仕様知識は要らないねえ。
2021/10/14(木) 21:55:10.80ID:GbD2vike
rustは書けるけどCが書けない人いる?
そういう人がいないとCがいるかいらないかわからない
自分はCの知識が役に立ったと思う
2021/10/14(木) 22:21:20.24ID:dWpPrl+Q
RustでWebバックエンド書いてる人になら普通にいるんじゃない?
Web系ならこれまでのキャリアで全くCに触れなくてもおかしくないし
2021/10/15(金) 10:55:12.45ID:GXWQCf9x
昔からRust for Rubyistsとかあるしスクリプト系言語から流れて来る人もそれなりにいるかと
700デフォルトの名無しさん
垢版 |
2021/10/15(金) 12:44:17.46ID:P5mUityt
スマートポインタやシェアードポインタ、所有権なんかは、C++0xあたりで導入された考えだから
どの程度の範囲をC言語と言っているのかによる。要らない派が多く「見える」が、知識があって
理解をを妨げるという考えは全否定する。「あって困るものではない」
2021/10/15(金) 14:00:41.51ID:8deGlJY8
>>695
OSプログラムしてるとレジスタ内容をメモリに載せるなんて普通にあることなんだが。
まあrustでOSなんて書かないから関係ないですけどね。
2021/10/15(金) 14:27:53.37ID:lZWoC8Xx
>>701
OSなんて書いたこともないくせに語るなド素人
2021/10/15(金) 15:04:44.50ID:8deGlJY8
>>702
ソースコード読むことすらしてないバカは黙ってて。
2021/10/15(金) 15:15:35.47ID:rb+Oscx7
なんか低レベルな話で盛り上がってるな
2021/10/15(金) 15:16:50.75ID:5/Pqp5xe
そんなことよりシステムコールの呼び出しにCの知識は必要ないっていうコメント対して>>701のレスが噛み合ってないんだが、何を言いたかったのか解説してくれないか
2021/10/15(金) 15:20:05.89ID:8deGlJY8
なるほど、レジスタからメモリ書き込みの同期タイミングなどが必要とかそこまで具体的に言わないと理解できないレベルなのか。
すげー馬鹿しかいないのなら仕方ないな。
2021/10/15(金) 15:33:44.29ID:5/Pqp5xe
システムコールの呼び出しとはまったく関係ないな
2021/10/15(金) 15:40:54.74ID:lZWoC8Xx
OS書いたことも無いのに恥ずかしい奴
2021/10/15(金) 15:45:02.58ID:lZWoC8Xx
>>705
それな

> OSプログラムしてるとレジスタ内容をメモリに載せるなんて普通にあることなんだが。

何でいきなり一人だけ見当ハズレなこと言い出したのかだけでも説明してほしいわ
2021/10/15(金) 16:38:42.56ID:XGfxQXO+
>>701
Rustはインラインasmできるので好きなレジスタと好きな変数(メモリ)の行き来演算できるしRustだけでOSも書ける
711デフォルトの名無しさん
垢版 |
2021/10/15(金) 17:41:49.92ID:W8XYkXKH
>>710
どうせunsafeなんだろ
2021/10/15(金) 18:11:50.56ID:rb+Oscx7
寒色は人権すらないからな
2021/10/15(金) 18:54:33.37ID:0qD/Pqit
>>711
そりゃアセンブリですから
safeにするには不変条件を満たすように自分でやらなきゃいけない
2021/10/15(金) 18:55:28.40ID:IFdb5cTy
Rust? 人気らしいね、でもオイラやらないよ
Cは嫌いだし、その後釜狙いの言語はどうせ肌に合わないさ
大半の人には必要ない言語だよね、だからオイラGoをやるよ
2021/10/15(金) 18:58:20.72ID:WKIFTMdH
GoのほうがよっぽどCの後釜感あるがな
GCのあるCという感じ
2021/10/15(金) 19:22:21.57ID:PoOS8yLC
>>711
unsafeを誤解しているようだけど
CやC++と同じ状況すなわちその部分のメモリ安全性は自己管理となるだけ
だから論理的に安全な操作でそれがローカルに閉じ込められて他に影響を及ぼさないならば使われうる
例えば標準ライブラリのVecもその内部実装の一部でunsafeが使われているが我々はVecを安全に使うことができる

>>715
つまりGoはCやC++の代替になれない
717デフォルトの名無しさん
垢版 |
2021/10/15(金) 19:27:43.08ID:vEXHgFWD
rustの強みである静的メモリ安全性っていうのが活かせてないやんって意味で言ったんやけど
cやc++と同じ状況ならむしろrustよりcやc++使うよね?
2021/10/15(金) 19:36:00.75ID:sYZbhEbz
量の概念がないやつが定期的に現れるな
コード全域がunaafeなのと局所的なのは全然違うでしょ
2021/10/15(金) 19:46:42.29ID:PoOS8yLC
>>717
例えばVecは実装内部でunsafeを用いているが
Vecはメモリ安全性を保証する
そしてVecを用いたプログラムもRustコンパイラが通ればメモリ安全性が保証される
720デフォルトの名無しさん
垢版 |
2021/10/15(金) 19:48:51.64ID:eqKsqNtm
それならC++も同じでは?
721デフォルトの名無しさん
垢版 |
2021/10/15(金) 19:49:28.65ID:OmwX7nxr
>>719
unsafeなのにメモリ安全性どうやって保証してるの?
722デフォルトの名無しさん
垢版 |
2021/10/15(金) 19:52:54.07ID:eqKsqNtm
C++の場合は、vector自身がメモリーの所有権を持ってるので安全性が保障されるんだけど。
2021/10/15(金) 20:08:04.69ID:PoOS8yLC
>>721
え?何を言ってるの?
Vecに限らずRustの各型を含めた標準ライブラリの内部はもちろんunsafeだらけだけど
論理的に安全な操作のみ、かつ、内部に閉じ込められていて外部に影響を及ぼさないもののみ
だからそれら型を含めた標準ライブラリを我々は安全に使うことができる
そしてそららを用いた我々のプログラムはコンパイラが通ればメモリ安全性を保証される
724デフォルトの名無しさん
垢版 |
2021/10/15(金) 20:14:36.90ID:eqKsqNtm
>>723
じゃあC++と変わりませんね。
725デフォルトの名無しさん
垢版 |
2021/10/15(金) 20:15:19.52ID:I/84Z1Ml
>>723
だからアスペか?
論理的に安全な操作のみ、かつ、内部に閉じ込められていて外部に影響を及ぼさないってことをどうやって保証してるのか聞いてんだけど?
国会の答弁みたいな返答やめろよ
というか外部にメモリ及ぼさないはメモリ安全性が保たれるの必要条件じゃないんだけど
726デフォルトの名無しさん
垢版 |
2021/10/15(金) 20:15:56.65ID:I/84Z1Ml
外部にメモリ及ぼさないじゃなくて外部に影響及ぼさないだった
2021/10/15(金) 20:21:27.95ID:PoOS8yLC
>>724
C++はコンパイルが通ってもメモリ安全性は保証されません
Rustはコンパイラが通ればメモリ安全性が保証されます
全く異なります

>>725
論理的にそれらを満たす操作かどうかです
Rustコンパイラが通ればメモリ安全性を保証するかどうかも論理的に基づいて保証されます
728デフォルトの名無しさん
垢版 |
2021/10/15(金) 20:33:33.14ID:WHarWmnu
>>727
メモリ安全性を保証することを諦めればコンパイル通るのは当然だよね?
こんな基本的なこともわからないんですか?
2021/10/15(金) 20:36:47.57ID:jQ7TSjOD
Cしか知らない人ってプログラミング言語の仕様とコンピュータのアーキテクチャが区別できないってマ?
型理論も知らないってマ?
2021/10/15(金) 20:40:52.58ID:PoOS8yLC
>>728
その通りでC++はコンパイルが通ってもメモリ安全性が保証されない言語
一方でRustはコンパイルが通ればメモリ安全性が保証される言語
731デフォルトの名無しさん
垢版 |
2021/10/15(金) 20:50:24.31ID:LC/Ahxji
>>730
>unsafeを誤解しているようだけど
>CやC++と同じ状況すなわちその部分の>メモリ安全性は自己管理となるだけ
って自分で言ってるよね?自分の過去の発言と言ってること矛盾してない?
rustのunsafeはメモリ安全性を保証することを諦めてるって言いたかったようだけど今は言ってること無茶苦茶じゃない?
2021/10/15(金) 20:51:16.86ID:U2SV1SiG
>>722
これが一般的なC++erの認識だとしたら恐ろしいな
2021/10/15(金) 20:58:34.88ID:NxDOUPls
unsafeなコードが周りを滅茶滅茶にしない保証は無いよ
2021/10/15(金) 21:01:02.97ID:NxDOUPls
unsafeを使った場合の安全性の保証を機械的にやりたければ↓みたいなので契約プログラミングする手はあるね
https://crates.io/crates/contracts
2021/10/15(金) 21:10:23.11ID:PoOS8yLC
>>731
もちろんRustの標準ライブラリの実装内部には多数の細かい小さなunsafeがあってその部分はコンパイラによるメモリ安全性保証の範囲外
それそれの内部ローカルのunsafe使用が論理的にメモリ安全であるか否かの保証はコンパイラではなく人間が行ないunsafeはそのためにある
その上でRustコンパイラはプログラム全体のメモリ安全性を保証する
736デフォルトの名無しさん
垢版 |
2021/10/15(金) 21:17:10.00ID:Ue2FksZS
>>735
人間がどうやって行うの?
2021/10/15(金) 21:31:51.20ID:XGfxQXO+
話は簡単だ
C/C++はプログラム全てがRustのunsafe状態
つまりC/C++はプログラム全てを人間がメモリ安全であると保証しなければならないが人間なので複雑化するとミスも生じる
GAFAM各社はメモリ安全に関するバグが全く減らずセキュリティ脆弱性の多くがこの問題に起因することに気付いた
そこでコンパイラがメモリ安全であると保証するRustを採用して少しずつC/C++から移行させていってる段階
738デフォルトの名無しさん
垢版 |
2021/10/15(金) 21:34:04.93ID:OlLYCHFC
unsafe blockはマーが全力で頑張ります!ゾーンだからな
アルゴリズムにおいてあるアルゴリズムが正当であると判定するアルゴリズムは存在しないんだからラストコンパライでも完全なセーフティは保証は出来ないけどな
ただ完全ではないものの他の注意すべき所をランコンに任せてunsafe部にヒューマンリソース限定出来るのはc++を遥かに優れた点よね(´・ω・`)
2021/10/15(金) 21:39:33.56ID:NxDOUPls
布教しようとしなくたっていいんだよ
めんどくせえから
740デフォルトの名無しさん
垢版 |
2021/10/15(金) 21:42:55.26ID:eqKsqNtm
>>737
GAFAがその体たらくとは信じがたいけど、resource管理は所有権ベースでほぼ解決するし、逆に所有権以外で解決することは出来ないと思う。
741デフォルトの名無しさん
垢版 |
2021/10/15(金) 21:45:54.09ID:kEafjbCd
>>738
チューリングマシンの停止性問題のこと言ってるんだろうけど違うよ
あるアルゴリズムじゃなくて任意のね
「あるプログラムが正当であると判定するプログラムは存在しない」じゃなくて「任意のプログラムを正当であると判定するプログラムは存在しない」が正しい
これが5chクオリティか
2021/10/15(金) 21:58:02.76ID:rb+Oscx7
Rustコンパイラによるメモリ安全性の保証は信頼してても、unsafe使ってる標準ライブラリを信頼しない話おもしろいね。
実際に問題なく動いてるんだから仕様を信頼すればいいのに。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況