X



Rust part10
■ このスレッドは過去ログ倉庫に格納されています
0145デフォルトの名無しさん
垢版 |
2021/04/18(日) 10:09:10.01ID:732wPalE
そんなに良くないからキミはもっとcを頑張ったほうがいい
cを頑張ってc++にも手を出して頑張って
気が狂いそうになるのを覚えてからもう一度来たらいい
0146デフォルトの名無しさん
垢版 |
2021/04/18(日) 10:34:02.72ID:vWwiRDOG
>>144
lifetime内であれば手動で早期開放できるんですね
お世話になりました
0148デフォルトの名無しさん
垢版 |
2021/04/18(日) 12:57:11.20ID:UN4umXE6
vectorにpushしながらその要素の可変参照を返すようなメソッドってあったりしますか?
0149デフォルトの名無しさん
垢版 |
2021/04/18(日) 13:12:40.26ID:/yrt+WGh
お前らの用途だったらgoで十分だろと思うことが多いわ。
ファッションでやるってのも悪くはないが。
0152デフォルトの名無しさん
垢版 |
2021/04/18(日) 16:52:32.86ID:dOXZMSKq
>>148
そういうメソッドはなさそう

特に理由がなければ分けて書いた方がいいけど、ブロック式を使って

let y = { v.push(x); v.last_mut().unwrap() }; // 変数に入れる場合
f({ v.push(x); v.last_mut().unwrap() }); // 関数に渡す場合

みたいな詰め方はできるかな
いっぱい使うならローカルなマクロ作ってもいい

macro_rules! push_and_mut_ref {
($v:expr, $x:expr) => {{ $v.push($x); $v.last_mut().unwrap() }};
}

let y = push_and_mut_ref!(v, x);

蛇足だけどyが生きてる間はvに触れないからご注意を
0153デフォルトの名無しさん
垢版 |
2021/04/18(日) 17:30:23.89ID:qHYw4Dd3
>>152
>蛇足だけどyが生きてる間はvに触れないからご注意を

蛇足ではない気がする
push時にその要素のmut refを必要とするような書き方は避けたほうがいい
0155デフォルトの名無しさん
垢版 |
2021/04/19(月) 03:50:11.66ID:cH3u5yp0
Rustに比べたC++の良さは雑に書けるところだって気付いた
やっぱ雑が許されない巨大プロジェクトはRustで、小規模な自分用ツールの類はC++で書いてくことになりそうだ
0157デフォルトの名無しさん
垢版 |
2021/04/19(月) 10:48:10.96ID:7a+3hK+O
段階的に直していく方法と最初から設計で硬くしておく方法があると思うが
rustが念頭に置いてるのは明らかに後者。これがいいのか悪いのかは議論の余地がある。
0158デフォルトの名無しさん
垢版 |
2021/04/19(月) 11:19:16.28ID:QqvLWpkW
型が強いからリファクタリングしやすいという意味では段々直していく方法に適しているとも言えると思うが
0159デフォルトの名無しさん
垢版 |
2021/04/19(月) 11:21:50.23ID:7a+3hK+O
>>158
型の強さがある意味で強すぎて、メモリ解放のタイミングまでキッチリあってないと無理なんだが。
ちょっとしたリファクタリングするにもかなり大域的変更になる。
0162デフォルトの名無しさん
垢版 |
2021/04/19(月) 13:06:52.92ID:hAOdtYDs
つーかRust以前はどうしてたんだよって話w
流行りのもんに飛びついてそれ以外見えなくなってる典型
0163デフォルトの名無しさん
垢版 |
2021/04/19(月) 13:26:32.62ID:I7sE/fYQ
どうしてたって脆弱性を秘めたまま出回ってただろ
0166デフォルトの名無しさん
垢版 |
2021/04/19(月) 16:41:05.18ID:OqiIdPZa
まあ、C/C++が危なかろうが、自分のやりたい計算をするだけみたいな用途には向いてるよな
どうみても簡単で早いし・・・・
0167デフォルトの名無しさん
垢版 |
2021/04/19(月) 16:57:54.64ID:QZprAv/b
>>155
C/C++は雑に書けるというより、Rustが想定してないでけで
本当は安全なプログラムも思った通りに書くことが出来る。
RustはRustが想定している範囲内でしか書けないので面倒なことになる。
0168デフォルトの名無しさん
垢版 |
2021/04/19(月) 17:00:14.68ID:QZprAv/b
>>167
職人さんはさまざまな危険な道具を、十分安全に使う。
Rustは、「危険だ危険だ」と言って、危ない道具を使わせず
予め「刃(やいば)を抜かれた」道具の使用を強制する。
0169デフォルトの名無しさん
垢版 |
2021/04/19(月) 17:08:36.65ID:QZprAv/b
AIの機械学習は計算が重いのに言語としては遅いところのPythonのAIは遅くはない。
なぜなら計算部分はC/C++で書かれたライブラリを呼び出して使ってるだけだから。
同様にRustがベンチマークで遅くないのは、実はunsafeモードで書かれたライブラリ
を使ってるせいもある。だからそのベンチマークだけでC/C++と同程度の速さ
であることの証明にはならない。
0171デフォルトの名無しさん
垢版 |
2021/04/19(月) 17:37:07.25ID:QqvLWpkW
unsafeがライブラリに隠蔽されていてかつ性能が出ることはRustのコンセプトが正しかったことの証明になるのでは?
0172デフォルトの名無しさん
垢版 |
2021/04/19(月) 17:58:35.97ID:eG8AP0Ht
今月のWEB+DB PRESSに載ってる簡易的なRDBMSをRustで実装する記事結構いいぞ

RDBMSの仕組みを学ぶことが主眼でRustの解説は最低限なんだけど
Rustでよく使うパターンが
0175デフォルトの名無しさん
垢版 |
2021/04/19(月) 18:15:13.40ID:zaOVVmA+
>>173
リトマス試験紙なんよ
C++で苦労した奴は文句は言わない。Rustが何をしてくれようとしてるのか分かるから。
C++ニワカは文句を言う。Rustが何をしてくれようとしてるのか分からないから。
0177デフォルトの名無しさん
垢版 |
2021/04/19(月) 19:29:57.41ID:OqiIdPZa
大半の人は、C/C++で苦労も何もしてないだろう
何が危ないのかも理解しないまま、危険なコードや穴の空きやすいコードを書いてるだけだ
0180デフォルトの名無しさん
垢版 |
2021/04/19(月) 20:10:50.91ID:hAOdtYDs
>>178-179
この人たち未だにC++でnewとかdelete多用してるかそれを通過儀礼のように捉えてる人たちだよね
こえ〜
よくある職場の老害像そのものじゃん
0182デフォルトの名無しさん
垢版 |
2021/04/19(月) 20:13:49.42ID:cPEAzkUm
さすがに日常ではないかな……
構造体の初期化にmemset使うようなC言語上がりのやつはどうだか知らんけど
0183デフォルトの名無しさん
垢版 |
2021/04/19(月) 20:16:58.02ID:swd16GZO
毎日のようにRustスレで繰り返し同じ事をグチグチ言ってる自称C++使い達はよっぽど暇なんだなぁって思う
0184デフォルトの名無しさん
垢版 |
2021/04/19(月) 20:21:28.79ID:7a+3hK+O
c/c++でそんだけ壊れるならrustでもunsafe使ってぶっ壊れまくるだろ。。
エアプ丸出しすぎるわ
0185デフォルトの名無しさん
垢版 |
2021/04/19(月) 20:21:54.23ID:iY2hw6vD
引数チェックのないライブラリ等で引数を誤ったりすると
パッと見正しく見えるのでかなり面倒なことになる
0191デフォルトの名無しさん
垢版 |
2021/04/20(火) 01:04:41.62ID:h4Yrn7zO
>>190
逆にそんなマイナーな言語なのに書籍が出たりtwitterでRustとWasmが
対になって出たりしてたのか。
Rustを試してる人は書籍や雑誌記事を書いて食っていくかか、難しくて新しい言語
を知ることで自分の社会的評価(?)を上げようとしているのか。
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
とりあえず、話が噛み合わないのはわかったでしょ
■ このスレッドは過去ログ倉庫に格納されています

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