X



Rust part10

■ このスレッドは過去ログ倉庫に格納されています
0195デフォルトの名無しさん
垢版 |
2021/04/20(火) 10:41:16.90ID:MbK31k7w
なんか無駄なところに手を出しちゃったみたいになってる若い人が発狂してんのかね。
別にrustで学んだことは無駄にはならんよ。
現場でrust強要するのはクソだが。
0199デフォルトの名無しさん
垢版 |
2021/04/21(水) 11:52:12.19ID:/JxRHm/B
C++ニワカのLinusはpanicは認めないと言う話をしてるのにアロケーターだけの問題だ
「それだけでしょ、分かってるやつ居なすぎ」とまとめる
範囲外のインデックスアクセスでもpanicするし、Debugなら整数のオーバーフローでも
panicする(なぜかReleaseだとpanicしない)とんでもないアホの勘違いはJavaを持って
きて検査例外と非検査例外の話をし出す。せっかくResult/OptionがあるのにRustの文化と
なっているpanicを通常は捕捉しないと言うものをKernelに持ち込むなと言う話。
範囲外アクセスで即座に既存のC/Kernelならレジスタを保存してダンプするような
Segment fault例外トラップなどが働くのに、panicでスタック巻き戻し実行が起こるのは
絶対的に受け入れられない言うとる
Cの悪名高きsetjmpや、C++のRTL/動的例外テーブルの議論を見てるようだ
検査例外と非検査例外の話をし出すアホはもう来るな
0201デフォルトの名無しさん
垢版 |
2021/04/21(水) 12:54:12.00ID:KSNXGwT5
別にそこまで褒めることでもないんだけどね。。
ttps://lkml.org/
の他の議論に比べて明らかに議論のレベルが低いわけで。。
0202デフォルトの名無しさん
垢版 |
2021/04/21(水) 13:38:37.86ID:T0Zi2n6U
>>199
なんか何言ってるのか分からない部分が有るな。
0203デフォルトの名無しさん
垢版 |
2021/04/21(水) 17:38:16.65ID:l2lL4TPp
js-sys見てたらJavaScript側の型の継承関係をDerefで表現しててびびった
こういうの普通なん?
0204デフォルトの名無しさん
垢版 |
2021/04/21(水) 17:58:04.79ID:tLndpRqR
>>201
歴史があってどう実装すべきかという指針ができあがっているCと
手探りで指針を作りつつあるRustで議論のレベルが同じにならないのは自然なのでは
0205デフォルトの名無しさん
垢版 |
2021/04/21(水) 18:42:16.83ID:KSNXGwT5
>>204
問題はそういう言語の問題まで行かず、カーネルが備えるべきところってな議論で止まってるって部分だけどね。
歴史という意味ではそもそもカーネルに対する歴史観が不足してる連中しかrustにはいないということになる。
0206デフォルトの名無しさん
垢版 |
2021/04/21(水) 22:06:45.67ID:2oKQsBoE
プロセスがスローし、誰も補足しなかった例外を
最終的に捕捉してそのプロセスを終了させるのはOS(ことによったらカーネル)の仕事である

一方、カーネルが仮に例外をスローしてしまったら誰が最終的な捕捉の任を負うのか
について今今のOS論には目下定説が無い

Linux(リーナス)は「カーネルは何があっても例外をスローすんなハゲ、」という
古典的な立場
のやつ、
0209デフォルトの名無しさん
垢版 |
2021/04/22(木) 00:18:18.68ID:41g4gqqa
>>203
javascriptでメソッドとか探すときにプロトタイプを遡っていく動きがあるけど
それをRustのドット演算子(.)がメソッド使える型になるまで自動で参照解決する仕様で
模倣したんだと思う

演算子の特殊な拡張は正規表現とか構文解析のライブラリでたまに見かけるけど
どちらかと言えばトリッキーな手法
0210デフォルトの名無しさん
垢版 |
2021/04/22(木) 02:40:36.34ID:hZdbeIl+
panic上等のredox!
セキュリティホール開けるよりマシという理由だった。

>>203
アンチパターンだから通常のコードでは使うな。
トレイトメソッド呼べないからクソって所まではすでに
githubのissuesやrust internalsで合意が有る。
js-sysはffi(バインダ)だから仕方ない。
0212デフォルトの名無しさん
垢版 |
2021/04/22(木) 05:58:54.39ID:WQGVMWvQ
例外の最終的な捕捉をOSの仕事、と書いたのは語弊があったスマンカッタ、
正確に言えば言語のランタイムが最終的に捕捉してプロセスを自発的に終了する
(スタックのアンワインドは言語依存性が強いのでそうなっている

しかしプロセスが自発的にexit()したら誰がそれを処理するのかというとOSやんけ;;;
カーネルの中で例外を生じられたら誰が終了を担保するのかについて
OS論的に定説が無いのは真

>>208
いじょ
0213デフォルトの名無しさん
垢版 |
2021/04/22(木) 06:34:32.34ID:WQGVMWvQ
で、別の観点の話をする、

OSがpanic上等というのはそれはそれでも良いが、
とにかくスタックのアンワインド処理は言語依存性が強いので
例外が通過する関数(ゼロコストの奴も含む)の巻き戻しのためには
関数のアドレスとスタックのアンワインド方法の対応表をランタイムが把握せねばならない
というわけでカーネル内の例外を認めると、その例外を最終的に捕捉する奴より
上の関数を全部同一言語・同一コンパイラで書かねばならないという縛りが生じる
現実にはそれで問題など生じないかしらんが、とにかくレイヤー分けに縛りが生じる
Redoxの一部をC++(等)で書くことは事実上不可能に、
0214デフォルトの名無しさん
垢版 |
2021/04/22(木) 13:01:11.46ID:hZdbeIl+
>>212,213
なんでカーネルの話してるのに言語ランタイムとプラットフォーム依存の話してるんだ?

>>213
Linusがカーネル書くのに信用してないだけで
C++でもフリースタンディング書けるだろ。
C++のフリースタンディングは最低限の標準ライブラリは持つからrustのcoreクレートと同じ。
C++ならexception、abort,exitがある。
>>213がホストとベアメタルの区別がついてないだけじゃないか?
あと、redoxのpanicはスタックトレース吐いてx86のhltループするだけだから。

そもそもカーネルで標準のexitなんか呼ぶか。
0215デフォルトの名無しさん
垢版 |
2021/04/22(木) 13:21:02.53ID:EDkBlaoV
Linux界隈といえばちょうど「マージしたパッチが研究目的にわざと脆弱性を含んだものだったことが発覚して激おこで送ってきた奴らの大学出禁にする」みたいな面白いことが起こってる模様
0219デフォルトの名無しさん
垢版 |
2021/04/22(木) 23:08:37.40ID:y/lG5X/l
研究目的だろうがそうでなかろうがわざと脆弱性を含むパッチを簡単にマージできている、という状況が問題なんであって
腹たつから大学出禁にしたった、とやったところで根本的な問題は何も解決しないんだけどlinuxのメンテナンスしてる連中とか
linusを筆頭にとか老害頭ばっかりだから自分がスッとすれはそれでいいんだろうな
0220デフォルトの名無しさん
垢版 |
2021/04/22(木) 23:21:38.67ID:5b2Tg2Qr
1) 善意でやってくれてる連中にケチつけんな
2) じゃあお前が根本的な解決とやらをやれ
3) もしくはその根本的な解決方法を彼らに教えてやれ
0221デフォルトの名無しさん
垢版 |
2021/04/22(木) 23:33:32.83ID:Bg0clzlT
しーぷらぷらあきらめてどろっぷあうとした
ちんちんぶらぶらまるはだかなひとたちが
らすとすぱぁとをきめるスレ
0223デフォルトの名無しさん
垢版 |
2021/04/23(金) 08:31:32.27ID:yuX3+THA
その脆弱性もUAFとかぬるぽデリファレンスとか未初期化領域の使用とか2重開放とか最近の言語じゃ明らかに意図してやらなきゃ起きないようなもんばっかだもんなぁ
そりゃC/C++にしがみついてる大先輩方にとっちゃ逆鱗だわな
0224デフォルトの名無しさん
垢版 |
2021/04/23(金) 08:34:12.76ID:Lj3XxxY0
そんなもんunsafeしまくれば同じだろ。。
そういう問題じゃないことくらいわかるだろうに、本当の馬鹿だな。
0227デフォルトの名無しさん
垢版 |
2021/04/23(金) 09:00:00.40ID:5QBVXmI/
発狂?むしろ歓迎
個人で使うようなアプリは好きなだけパニくれ
使われるアプリはパニくんなカス、これ常識だろ
0228デフォルトの名無しさん
垢版 |
2021/04/23(金) 10:42:10.47ID:Lj3XxxY0
言語実装的にもそうなってないよねって話なんだけど、なんだか通じてなさげ。
0231デフォルトの名無しさん
垢版 |
2021/04/23(金) 12:17:43.73ID:E6ocica9
>>214
>なんでカーネルの話してるのに言語ランタイムとプラットフォーム依存の話してるんだ?
カーネル内での例外を許すみたいな立場で話す人が居るから

例外メカニズムが言語ランタイムと不可分な理由は
>スタックのアンワインドは言語依存性が強いのでそうなっている (>>212

C言語みたいにそもそも例外メカニズムを持たない言語を使った場合のみ
言語ランタイムと切り離したカーネル設計ができてスキーリ
0232デフォルトの名無しさん
垢版 |
2021/04/23(金) 12:23:39.46ID:Xbep6LJc
>>219
だから、脆弱性を簡単に盛り込めないように危険な団体を排除しただけだろ。
普通の対応だと思うけど?
0233デフォルトの名無しさん
垢版 |
2021/04/23(金) 12:31:21.77ID:+YpcBxgU
>>231
> >なんでカーネルの話してるのに言語ランタイムとプラットフォーム依存の話してるんだ?
> カーネル内での例外を許すみたいな立場で話す人が居るから

いません
この話はおわり
0234デフォルトの名無しさん
垢版 |
2021/04/23(金) 12:56:09.67ID:1/JMNo8Q
「注意すればC/C++でも問題ない」って意見は日本的だよな
人間はミスしないことが前提になっている
Rust Foundationのメンバーに言わせればそういう問題ではない
人間はミスするものだってなるんだろうけど
0235デフォルトの名無しさん
垢版 |
2021/04/23(金) 13:00:34.48ID:Lj3XxxY0
そのミスの取り除き方のアプローチの違いだっていうことにさえ気づかない馬鹿。
0236デフォルトの名無しさん
垢版 |
2021/04/23(金) 13:33:15.21ID:AZKiGQoD
c++でミスするような無能はrustでも使ってろと怒鳴り散らす
これが正しいアプローチ
0237デフォルトの名無しさん
垢版 |
2021/04/23(金) 13:43:27.45ID:M88Kc634
>>229-230
なんで蟹なんだろうな。
PythonユーザーのことPythonistaって言うみたいに
RustユーザーのことRustaceanって言うけど、
これCrustacean(甲殻類)からCを取り除いたものなんだな。
0239デフォルトの名無しさん
垢版 |
2021/04/23(金) 14:58:40.99ID:ntrIv3TW
大半の人は、C/C++の文法がわかる程度でプログラムを書いているのが現状だろう
何がミスなのかそもそもわかっておらず、Rustを勉強している人と話も噛み合わない
0241デフォルトの名無しさん
垢版 |
2021/04/23(金) 15:03:21.83ID:ntrIv3TW
君にはそう見えるだろうね
0243デフォルトの名無しさん
垢版 |
2021/04/23(金) 15:05:59.83ID:ntrIv3TW
とりあえず、話が噛み合わないのはわかったでしょ
0246デフォルトの名無しさん
垢版 |
2021/04/23(金) 15:20:14.54ID:ntrIv3TW
C/C++で穴のあるコードを書いてもしょうがないし、それも難しいんじゃないのかな
逆にC/C++の人らがRustコンパイラをすり抜けるヤバいコードを提示してくれたら、一発で口だけじゃなく出来る人だったと示せるだろうが
0247デフォルトの名無しさん
垢版 |
2021/04/23(金) 15:28:23.22ID:mq69qBnk
>>155
> Rustに比べたC++の良さは雑に書けるところだって気付いた
> やっぱ雑が許されない巨大プロジェクトはRustで、小規模な自分用ツールの類はC++で書いてくことになりそうだ


これが何気に的を得てるでしょ
コンパイラが安全な方に導いてくれるのはもちろん良いとして、それよりも雑に (あるいは短く親しんだ方法で) 書きたい思惑が優先されるときは C/C++ でやれば良い話で
0248デフォルトの名無しさん
垢版 |
2021/04/23(金) 15:38:53.83ID:CjhKTAAP
いや、Rustでラクに書けない時点で勉強が不足してる
そのことに自分で気付けるような人だけRust使えばいい

「当を得る」か「的を射る」ことが出来るような人になってほしい
0249デフォルトの名無しさん
垢版 |
2021/04/23(金) 15:56:22.07ID:mq69qBnk
いや、単にコード長が C/C++ の方が短く書ける可能性高いでしょ
どんなイディオムを駆使しても
0253デフォルトの名無しさん
垢版 |
2021/04/23(金) 21:04:58.31ID:g6tU54WL
>>249
そうだね、記述量の多い言語だと思う
0254デフォルトの名無しさん
垢版 |
2021/04/23(金) 22:37:03.61ID:E6ocica9
Rustのコンパイラと戦って勝ったコードは
シンプルでエレガントで簡潔なことが多い
らしい
mjk、
0255デフォルトの名無しさん
垢版 |
2021/04/23(金) 23:34:43.49ID:KS/Kkucz
linusはやっぱすげーな
洞察力が違うわ
もちろんその道の神的な存在とはいえ
たいして知らない言語の弱点を一瞬にして暴いて
論破できるのは凄い
0259デフォルトの名無しさん
垢版 |
2021/04/24(土) 08:33:43.03ID:AUtfiExa
>>258
お前ずっと一人で「他所でやれ」連呼してる奴だろ
C++との対立構造はRustにとって無視できないテーマでしょ
正直C++とどう住み分けたら良いのかわかってない奴がほとんどなんだから
0260デフォルトの名無しさん
垢版 |
2021/04/24(土) 08:39:09.80ID:/opj2hnT
C++とRustは対立なんてしてない
Rustが怖いC++お爺ちゃんがRustに噛みつているだけでしょ
0262デフォルトの名無しさん
垢版 |
2021/04/24(土) 08:54:35.43ID:8O98k7om
> C++との対立構造はRustにとって無視できないテーマでしょ

お前のテーマなんてどうでもいいんだよ
よそでやってくれ
0265デフォルトの名無しさん
垢版 |
2021/04/24(土) 09:13:04.98ID:IM8zU0Pj
rustもpanicをコアから外せればいけると思うのだが
もろ言語のコアなんだよな
痛いところ突かれた
0268デフォルトの名無しさん
垢版 |
2021/04/24(土) 10:29:13.61ID:nPKzA798
>>259
仮にその対立構造を認めるにしても
「雑に書くならC++のほうが楽」なんて、曖昧で基準も何も示されない話に真面目に付き合う奴はいないよ
そういう奴らのための隔離スレとして用意したから好き放題書き散らせばいい
0269デフォルトの名無しさん
垢版 |
2021/04/24(土) 10:42:59.04ID:2MdujosH
コード長の話でしょ?
どー考えてもC++の方が短いよ
んなとこで張り合ってもしゃーない
0271デフォルトの名無しさん
垢版 |
2021/04/24(土) 12:07:10.57ID:RPGHdVOi
>>258
乙。次からテンプレ入りで

>>980
スレ立てよろ

==========
公式
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/

※C++との比較は専用スレへ
C++ vs Rust
https://mevius.5ch.net/test/read.cgi/tech/1619219089/

前スレ
Rust part10
https://mevius.5ch.net/test/read.cgi/tech/1617367084/
==========
0273デフォルトの名無しさん
垢版 |
2021/04/24(土) 12:21:15.48ID:8fCyRscb
>>272
C/C++で一度ひどい目にあわないとRustの良さは分からんよ
今はまだ分かった気になってるだけ
0276デフォルトの名無しさん
垢版 |
2021/04/24(土) 12:59:06.14ID:hc4SaSPr
Rustの文字列変数って、
str1 = str2;
のように書いた時、copyではなくmoveでしたっけ?
0278デフォルトの名無しさん
垢版 |
2021/04/24(土) 13:09:43.73ID:hc4SaSPr
>>276
調べてみたら、やっぱり、
let s1 = String::from("hello");
let s2 = s1;
とすると、以後、s1は使用できなくなり、使用しようとするとコンパイルエラー
になるんだね。こうなるのは珍しいと言えば珍しい言語。
1. Javaだと、参照を入れるだけで同じ実体を指しているため、s2経由で変更してもs1が
 指しているものも変更される。
2. JS の 文字列は primitive 型なので「コピー動作」となり、s2とs1は別の実体を
 指すことになり、一方を変更しても他方には変更の影響は及ばない。
3. MFCのCStringも意味的にはコピー動作なのでJSと似ているが、高速化のため、
 代入後に一度も書き換えなければ、文字列を入れているメモリブロックは複製
 されないし、コピーもされない。
4. STL(C++) の std::striingもMFCと意味的には似た動作。
5. BASIC言語でも、文字列はコピー動作。
6. Rubyの場合、Javaと同じで同じ実体を参照しているだけなので、一方を書き換えると
 他方も全く同じように書き換わる。コピーするためには、s2 = s1.dup; と書く。

つまり、
a. BASIC、JS、MFC、STL(C++)は似た動作。
b. JavaとRubyも似た動作。
c. Rustは、b の系統に似ているが、s1 が使えなくなるのでちょっと違う。
0281デフォルトの名無しさん
垢版 |
2021/04/24(土) 13:23:38.54ID:hc4SaSPr
>>279
いろんな言語をかじってしまうと、どれがどれだか分からなくなってしまうんだよ。
文字列の s2 = s1 の動作は:
a. BASIC、JS、MFC、STL(C++)は似た動作。中身をコピーする。
b. Java、Ruby、C# が似た動作。参照を代入するだけ。コピーしたければ明示する。
c. Rustは、b の系統に似ているが、s1 が使えなくなる。
0282デフォルトの名無しさん
垢版 |
2021/04/24(土) 13:27:17.48ID:hc4SaSPr
>>281
Javaの場合、Stringは参照しか出来ないが、Rustの場合は、「String型」だけでなく、
「Stringへの参照型」も使えるんだっけ (let s3:&String ??) ?
0283デフォルトの名無しさん
垢版 |
2021/04/24(土) 13:36:44.63ID:hc4SaSPr
>>281
C++11以降は、x = y と書いた時、y が捨ててよいと判断した場合は、
moveで、それ以外の時は copy。
一方、Rustだと、「デフォルト move」なので、基本的には move 動作。
cooy したければ、x = y.clone; と書くのかな。
色々ややこしい。
0284デフォルトの名無しさん
垢版 |
2021/04/24(土) 13:39:26.22ID:glcm53ed
>>283
> C++11以降は、x = y と書いた時、y が捨ててよいと判断した場合は、moveで、それ以外の時は copy。

そんな親切け???
左辺値同士だと明示しないとmoveしてくれないだろ
最適化次第ではしてくれるの?
0285デフォルトの名無しさん
垢版 |
2021/04/24(土) 13:43:36.80ID:hc4SaSPr
>>284
えっと、関数の戻り値が構造体型(or クラス型)の場合、右辺値と解釈されるので、
s2 = func(xxx);
見たいにした場合は自動的に move代入されたと思う。
それ以外だと、たいていは、s2 = std::move(s1); のように書かなければ
copy代入になるんじゃないかな。
s2 = func(xxx).s;
のようにした場合も move代入になるはず。
自信は無い。
0286デフォルトの名無しさん
垢版 |
2021/04/24(土) 13:47:10.36ID:Kvw1J2lw
>>285
RVOは全然違うぞ
s2の構築にコピーコンストラクタを使わなくなって早くなるというだけ
ムーヴコンストラクタはそもそも出てこない
0287デフォルトの名無しさん
垢版 |
2021/04/24(土) 13:47:25.73ID:hc4SaSPr
>>285
自分の記憶だと、一時オブジェクトも右辺値だから、
s2 = std::string("xxx");
ともし書いたとしたら、右辺は右辺値になるのでmove代入になるはず。
s2 = s3 + s4;
みたいにしても、右辺は関数の戻り地と解釈されるので右辺値になるので
move代入になるはず。
0288デフォルトの名無しさん
垢版 |
2021/04/24(土) 15:48:01.23ID:QvmQEBVA
Rustってコードをフォーマットしてくれる機能があるからいいね
これこそモダンな言語だと思う
0290デフォルトの名無しさん
垢版 |
2021/04/24(土) 16:18:04.79ID:rGfKetgv
しーぷらぷらあきらめてどろっぷあうとした
ちんちんぶらぶらまるはだかなひとたちが
rustすぱぁとをきめるスレ
■ このスレッドは過去ログ倉庫に格納されています

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