Rust Part6

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2018/07/28(土) 03:04:38.63ID:kAX50nYD
Mozilla発のRust言語のスレ

公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust

Web上の実行環境
https://play.rust-lang.org

前スレ
Rust Part5
http://mevius.5ch.net/test/read.cgi/tech/1518347244/
2019/03/02(土) 15:28:49.59ID:jUIKeWUS
Rustいいらしいですよって話を会社でしたら、
テックリードが「RustでできることはCやC++でもテストとツールで十分やってけるからイラネ」って言ってたけどマ?
2019/03/02(土) 15:50:22.82ID:s27Iehbv
&str で関数に渡すと解放されてしまって使い回すこどができないのですが
使い回す方法ありませんか
2019/03/02(土) 15:52:40.18ID:fWMJYJ6q
コーディングスタイルを徹底的に統制できるならマ
2019/03/02(土) 15:55:37.40ID:rXDVLiGa
>>510
コンピュータでできることは人の手と頭でできるよ
2019/03/02(土) 17:11:13.26ID:ACbQR/xi
>>512
じゃあうちにはたしかに要らんなあ
そんな統制がいるほどの人数でもないし

回答サンクス
2019/03/02(土) 17:40:27.42ID:NCWcHh/2
>>510
そのリードが C++でauto_ptrがdeprecatedになった理由とMove Semanticsと右辺値参照の関係をちゃんと説明できる人なら C++ でいい
2019/03/02(土) 18:53:06.97ID:aD19gS0i
人間が信用できないからこそCよりRustだろ
気を付けてコーディングすればミスはなくなる、ってのは戦前の日本軍的な精神論だ
コンパイラ先生に怒られながら厳しい指導の下にやっとコンパイルしていただくのがRust

この記事とか参考になるかも
https://tomo-wait-for-it-yuki.hatenablog.com/entry/2019/02/05/210746
2019/03/02(土) 19:04:12.47ID:sRR7A1mE
プログラミングは製造業だからな
厳格なチェックは本来あって当然
518デフォルトの名無しさん
垢版 |
2019/03/02(土) 19:10:02.40ID:Zilw84iH
>>511
&str is 何?
2019/03/02(土) 19:13:35.19ID:bakyLAA5
>人間が信用できないからこそCよりRustだろ
>気を付けてコーディングすればミスはなくなる、ってのは戦前の日本軍的な精神論だ
ぴんとこないな。
rustの場合、お役所とおせばテストなど自前でしなくともokっていう
変な信用を生んでるだけだろ。そっちのがよっぽど日本的だと思うがね。
2019/03/02(土) 19:33:57.30ID:aD19gS0i
>>519
今時の言語なので、ユニットテストは標準で整備されてるよね
コンパイラは計算ミスや仕様間違いまではチェックしないので
2019/03/02(土) 20:15:35.93ID:ZTrGEwqS
考え得る全パターンをいつもテストできるならいいんじゃないの
2019/03/02(土) 20:36:46.57ID:fWMJYJ6q
メモリ破壊はユニットテストで検出されないケースも多い
2019/03/02(土) 21:36:12.88ID:TjOpVvei
注意力ってのは慣れると省力できるようになるけど、有限リソースだし個人の習熟度と体力に依存するんで、目に見えない負債になる
新しい言語を理解するコストは償却できるけど、注意深さってのはソースコードを触る限りはコストを発生し続ける
機械がチェックできることは機械にやらせた方が絶対に良い
2019/03/02(土) 22:15:15.48ID:E3UUkV/K
製品にするコードってどうせMISRA C辺りの静的解析噛ますし
今時ならvalgrindもテスト項目に入ってるだろうし
Rustなら全部コンパイラがやってくれる!と言われても、
いやCにも外部ツール入れれば同じことできるし……としか思わんのだよな

個人的にはクラスよりトレイトの方がしっくりくるからそれだけでもRustは意味があると思うが
2019/03/02(土) 22:44:32.15ID:bakyLAA5
>>523
枯れてないコンパイラの癖に合わせる方がよっぽど注意力を削ぐと思う。
コンパイラになんでも機能ぶっこむより524のように構成した方がどのツールが文句言ってるのか
よっぽどわかりやすい。
機械にチェックさせるのはいいがシステムとしてモジュラリティーが高いツールの組み合わせのが
結局使いやすいし、ロバストになる。
2019/03/02(土) 22:52:05.50ID:SlOxf6t0
どうでもいいけど言語の持つ表現力とかは完全に無視なん?
2019/03/02(土) 22:57:46.43ID:fWMJYJ6q
>>526
C++の方がノイズが多いくらいで表現力自体は大差ないわ
もちろん、そのノイズによる可読性や生産性の低下は決して無視できるものではないが
2019/03/02(土) 22:59:57.91ID:BjkGLvi1
>>525
Cだって作成当初よりコンパイラでチェックする範囲広げてるけど
全否定?
2019/03/02(土) 23:01:34.51ID:E3UUkV/K
>>526
CやC++との比較でそこ(表現力)に触れずに
「Rustは安全!C/C++はfree/delete忘れがーアクセス違反がー領域の破壊がー」ばっか言ってる人が多いのが疑問って話な

俺はトレイトに可能性感じてるから期待してるよ
C++のテンプレートとか関数オブジェクトとか書きたくねえし

あとチェッカーとコンパイラ分けるべきか合体させるべきかについては、
どっちにも善し悪しあるからCとRustどっちが優れてるとかはないと思ってる
2019/03/03(日) 00:06:30.62ID:vKpOoBmI
https://hacks.mozilla.org/2019/02/rewriting-a-browser-component-in-rust/
MISRAに適合しててvalgrindでチェックしてもこういうのは無理じゃない?他に例が思いつかないけど
2019/03/03(日) 00:19:36.71ID:cZvjaCEe
Cじゃ確かに無理かもわからんが、C++のstd::vectorならatメソッドで同じことできるぞ

毎回アクセス範囲が適切か確認するから結局オーバーヘッドになってほぼ使われんがな
2019/03/03(日) 00:45:31.79ID:c3K18875
基本はIndex::indexを呼んで必要なとき(オーバーヘッドが気になるとき)にunsafeで囲む
C++は全関数がunsafeで意識せずVec::get_uncheckedを使うようなもの
オーバーヘッドの問題でunsafeで囲んだらRustだってツールじゃムリ五十歩百歩って言われるかもしれないけど、五十歩の方がいい
2019/03/03(日) 00:45:55.40ID:m5mWw6SB
MozillaやRust作者の人達が、valgrindやチェックツールの使い方を知らない
アホ揃いだと思ってるの?
2019/03/03(日) 00:57:04.94ID:cZvjaCEe
>>533
MozillaやRust作者の人達の過激な信者が
valgrindやチェックツールの存在を知らないか軽視してるせいで
Rustの宣伝に対して過剰にC/C++をディスってるアホ揃いだと思ってる

もちろんそうじゃないRust推しもいることは承知の上だ

逆に、「そういうツール使えばC/C++だけで十分Rustなんてイラネ」って意見も
ベクトル違うだけで同じくらいアホだと思ってるがな

だからこそトレイトの使い方だとかモジュールの仕組みだとか
外部ライブラリ(crate)の扱い方の方向での他言語との比較が
あんまり見えないことが問題だと思うんだが

そういう意味で話題提供すると、cargoって結構disられてるけど
どの変がクソなのかいまいち分からん
キャッシュサーバ持てないって話ならnpmとかbundleとかgo getも大概では?
535デフォルトの名無しさん
垢版 |
2019/03/03(日) 06:22:48.61ID:ChZC+e8W
>>519
ほんそれ
536デフォルトの名無しさん
垢版 |
2019/03/03(日) 07:44:53.56ID:lQ42Eo+G
みんな同じ話題について話してるのか?
好き勝手独り言言ってるようにしかみえない。
2019/03/03(日) 16:01:14.67ID:r7+VYZoa
これがいつもの流れだ
2019/03/03(日) 16:51:19.54ID:ebEU4O2W
そりゃーRust信者とRustアンチしかいねえからな
話が噛み合うわけない
2019/03/03(日) 16:53:34.09ID:4supDM4A
Rustだと(unsafeなし、コンパイラのバグなしなら)プログラムの全実行パスでメモリリークや破壊がないことが保証できると思うけど、
C/C++で同等のチェックができるツールってある?
valgrindは単にvalgrindで実行したパスで問題なかったことが分かるだけって理解なんだけど。
もしあるならそれはそれで使ってみたい。
2019/03/03(日) 17:11:00.51ID:vKpOoBmI
>>539
俺もその認識なんだけどvalgrindナメてたかな
Firefoxのcssのバグはテスト書いて発覚した感じなんだけど
2019/03/03(日) 17:26:47.25ID:oO/57lY2
その手の静的解析ツールはたいてい商用製品だね。一番手頃なのはVSで使えるSALかな。
2019/03/03(日) 17:57:36.24ID:lcRojjEc
顔本のinferがオープンソースで全パス調べてくれるやつだな

企業ならcoverity課金してるだろ
2019/03/03(日) 18:42:44.87ID:DMRKI5H5
inferは知らなかった。ちょっと試してみる。
まぁ商用含めても原理的に検出率100%とはいかないだろうけど、
Rustだって標準ライブラリ内のunsafeバグとかあるからいい勝負なのかな。
544デフォルトの名無しさん
垢版 |
2019/03/03(日) 18:48:10.42ID:Y2LadsyV
全パスチェックしてもRustのコンパイル時のチェックには及ばない
全パスチェック程度で済むものならば、Rustにあんなややこしい概念を持ち込む必要はないんだよ
2019/03/03(日) 18:59:21.85ID:jeWiu9AY
言語として縛りを強制するってとこに旨みがあるよね
静的チェックを過大評価云々は的を外した無意味な議論
2019/03/03(日) 19:51:05.48ID:BbxzBxVK
Rcなりunsafeなりあるわけでなんだかね。
rustを意識してプログラムをすることに意味はあるがrustの実装系を使うことに
そこまで意味はない。
547デフォルトの名無しさん
垢版 |
2019/03/03(日) 22:01:18.12ID:lQ42Eo+G
俺はweb屋さんだけどサーバ書くならrustが最高とおもってる
これって過激な信者?
2019/03/03(日) 22:32:13.67ID:cCLOOBeX
信者だアンチだディスったディスってないでrustを語れよ
2019/03/03(日) 23:36:41.41ID:U4/3Q3+q
coverityとかの静的解析って誤検出が結構ある
で誤検出かどうかの人力解析も超めんどくさい
かつ1度の解析にめっちゃ時間かかる

これがあるからC/C++でもRust同等とかないわ
2019/03/03(日) 23:53:56.27ID:60sPzVWf
>>547
web屋さんはもともとC++なんて使ってないし使う人が順調に増えていってる印象
問題はweb屋さん以外にどうアピールするか
2019/03/03(日) 23:58:03.76ID:+k8QiguP
どうせ一時の流行で終わるんだから被害は少ないほうがいい
Scalaとかも中途半端に業務系が乗っかってきはじめた矢先に梯子外されて死屍累々の惨状だったし
2019/03/04(月) 01:59:21.29ID:alP8X7u2
>>551
なんか梯子外された事件あったっけ?
Java8の登場でScalaがただの難解なJava8になった話?
2019/03/04(月) 05:28:04.34ID:voD3ILMP
scala十分流行ってるでしょ
554デフォルトの名無しさん
垢版 |
2019/03/04(月) 05:49:29.62ID:DAN4+o0x
えっ
2019/03/04(月) 07:38:18.48ID:yQsTNF7X
Javaは今でもクソ言語なのでScalaとは比べるべくもない
単に日本の人月制度とマッチしなかっただけ
Rustもそうなる
学習コストの高い良い言語より学習コストの低い低単価で人を集められる言語
556デフォルトの名無しさん
垢版 |
2019/03/04(月) 08:34:11.43ID:i9k284UJ
色んな業界があるのに一緒くたにして評価できなくない?
2019/03/04(月) 16:55:17.66ID:PCPHBNAL
>>555
JavaやPHPはともかく、そういう意味でCやC++がコスト低い言語とは思えんが
2019/03/04(月) 22:48:27.10ID:GJN1vwhQ
個人的な経験だけど、Rustのコンパイラを単純に黙らせるようにソース修正していくと物凄く汚くなることが良くある
ので、そもそもの設計を見直すようになったり、かくあるべしって仮設を明確にするクセが身についた気がするよ
2019/03/04(月) 23:49:25.53ID:xIknJLrh
>>557
低学歴のC/C++職人様はつぶしが利かないからスキルの割に高くないイメージ
2019/03/05(火) 05:49:14.36ID:437fdADv
資源の共有状態を見直すってのはrustは置いといてもプログラムをに置いてやっぱ本質だなと思う。
561デフォルトの名無しさん
垢版 |
2019/03/05(火) 23:33:10.77ID:oKijR9sc
ArcとかMutexとかRwRockが気に入ってる
最初めんどくさかったけどよく考えたら当たり前に必要なんだよね
そこを隠蔽しないことでコストのトレードオフをプログラマに意識させるのがよい
2019/03/06(水) 00:07:02.80ID:2JVBykl1
練習で他言語のプログラムを移植してみたらコンパイラに
ガンガン怒られて本人が壊れるような使い方しないからと手抜きしていた部分が
洗い出されてなるほどなあと思った
563デフォルトの名無しさん
垢版 |
2019/03/06(水) 00:31:05.23ID:a/Fk2z1+
>>558
黙らせるだけで終わってしまうわ
2019/03/06(水) 02:33:21.88ID:ZekpWDr2
rustでguiだと何使う?
やっぱgtk?
2019/03/06(水) 06:28:18.81ID:kGbjMq/w
rustに限らず他の言語でもgtkぐらいしかないでしょう
2019/03/06(水) 10:55:39.33ID:YRi0lSUm
んなこたーない
2019/03/06(水) 11:15:19.50ID:VrPN+K4q
orbtk?
redoxのguiだけど、windowsでも動いたよ。
568デフォルトの名無しさん
垢版 |
2019/03/06(水) 12:02:48.23ID:mg6kC0Yg
GTKは糞
2019/03/07(木) 02:41:58.99ID:se1YsRNA
>>561
当たり前じゃねえから
PythonとかPerlとかRubyで書かれたプログラムにはないけどちゃんと動く
それともこれらの言語で書かれたものはプログラムじゃないとか言っちゃう系?
570デフォルトの名無しさん
垢版 |
2019/03/07(木) 07:08:20.11ID:USPSPd7n
>>569
パイソンだって排他制御書くじゃん
2019/03/07(木) 07:18:52.41ID:rioBJ/QG
RwRockが自然に必要ってのは言い過ぎだわな。
必要なところは必要だろうがそれがあまりに多いのは多分設計ミスってる。
572デフォルトの名無しさん
垢版 |
2019/03/07(木) 08:07:15.51ID:USPSPd7n
ですから必要なところは必要と言ってるだけじゃないですか
当たり前にってのは原理的に必要と言ってるだけだよ
2019/03/07(木) 09:00:14.60ID:V2DuVpEL
>>569
Rustの設計思想理解してないのか
単にアホなのか
2019/03/07(木) 09:44:04.96ID:kIvAXfDl
まぁ自分の書いている範囲内しか見えない人は普通にいるだろう。
どの言語だってライブラリや処理系レベルでは排他制御はあるし、
逆にどこにもなかったら単に間違ってる。
2019/03/07(木) 11:44:24.50ID:ujmnvZmf
Perlは知らんがRubyやPythonには
GILっていう排他制御が言語処理系に含まれてることを考えると
非常に味がある
576デフォルトの名無しさん
垢版 |
2019/03/07(木) 11:46:01.46ID:MaxgRiSY
Luaって息してないの?
2019/03/07(木) 11:50:35.55ID:ujmnvZmf
>>576
他の言語が息できない分野でエラ呼吸してるよ
2019/03/07(木) 12:47:59.26ID:rQAOToBL
>>575
GILは複数スレッドの競合によってインタプリタがぶっ壊れるのを防ぐために必要な、インタプリタ自身の内部的な排他制御
アプリケーションコードで行う排他制御の代わりにはならないよ
インタプリタがスレッドセーフでない糞実装であるための苦肉の策で、
Rust含め元々スレッドセーフな「まともな処理系」なら全く必要のないもの
579デフォルトの名無しさん
垢版 |
2019/03/07(木) 12:55:45.82ID:NXRNz+RG
そういや Perl でマルチスレッドのプログラムは作ったことないなあ。fork してマルチプロセスにするのはよくやるが。
2019/03/07(木) 13:06:36.81ID:V2DuVpEL
>>575
GILは欠陥扱いだろ…
2019/03/07(木) 14:00:26.28ID:GuWZeuUG
そうか、今時の人はみんなLock-freeアルゴリズム使いこなすんだな
Mutexなんて見たことないんだ
2019/03/07(木) 16:39:47.28ID:4Ef40pSv
OSかそれに近いコア領域とかトランザクション必要なデータベースでも書かん限り
MutexとかLockとかが必要だとは思わんなー
Web系にもてはやされてるらしいけど君らそもそもそれオーバーキルどころか逆に足枷ならん?って思う
2019/03/07(木) 18:08:18.69ID:pnI3L7PU
そういうあんたは並行処理どうやってんの?
2019/03/07(木) 18:38:08.85ID:G0X+tUuM
>>583
そもそもそんなに並行処理をOSやミドルウェア頼りじゃなくて自分で書くが必要な場面て例えばどこ?
と質問に質問で返してみる
2019/03/07(木) 18:43:18.41ID:G0X+tUuM
念のため言っとくと、別にロックなんて無駄だとか言いたいんじゃなくて
ArcとかMutexとかRwRockが当たり前に必要とかいうマウンティングに反論してるだけな
2019/03/07(木) 18:54:58.71ID:pnI3L7PU
>>584
仮にお前がミドルウェア使うだけの些末プログラマ
だとしてもミドルウェアがマルチスレッドで動いていたり、
複数のミドルウェアを使う場合は
排他処理が必要なケースは普通に出てくるだろ
2019/03/07(木) 19:01:04.74ID:pnI3L7PU
>>585
rustをc++の代替候補として考えるなら使って当然
並行処理でこそrustの有り難みが生きるわけだし
マウンティングに感じるのは単にお前が並行処理に馴染みがないからだろ
2019/03/07(木) 19:49:57.49ID:G0X+tUuM
>>586
それはそんな使い方する方が何かしらおかしい
排他制御ってのは本当に必要なところ以外ではやらないように回避するもんだ

>>587
Rustの旨味がそこにあるのは否定しないが、
それが全プログラマが当たり前のように使いこなせるべきっていうのは
ただのマウンティングだろうに
2019/03/07(木) 20:59:20.87ID:pnI3L7PU
>>588
排他が必要だからするにきまってんじゃん
そういうところに思考が及ばないやつはjsだけ使ってりゃいいと思うよ
2019/03/07(木) 21:02:19.38ID:V2DuVpEL
プログラマーがリソースの共有状態を意識すれば
無駄な排他制御しなくても大丈夫だという主張かねえ
2019/03/07(木) 21:17:09.18ID:0XBNAuOg
RwRockってRwLockの間違い?
そういう言葉遊びのライブラリでもあるの?
2019/03/07(木) 22:06:32.44ID:rioBJ/QG
RwLockが少ない設計で組めたぜ!って自慢するならともかく
RwLockめっちゃ使ってますなんてアピールする奴は普通にバカだろ。
2019/03/07(木) 22:11:49.22ID:kIvAXfDl
単に日本語の問題では?
多分解釈が二通りある。
マルチスレッドプログラムにとって排他制御は当たり前に必要
プログラマにとって排他制御は当たり前に必要

個人的には文脈から前者と理解したけど、後者だと思うなら言い過ぎだというのは分かる。
2019/03/07(木) 22:15:22.37ID:0XBNAuOg
lockをrockと間違ってもしれっとしてるやつもかなりのバカだよね
ソフトウェアの超頻出単語じゃん
595デフォルトの名無しさん
垢版 |
2019/03/07(木) 22:34:05.54ID:USPSPd7n
だからプログラマにとって当然の能力という意味で言ってないって
めっちゃ使ってるとも言ってないって
隠蔽しないから必要性とコストを意識できていいねって言ってるやんけ

誤字はすまんかったけど
2019/03/07(木) 22:44:55.70ID:rioBJ/QG
まあ俺が採用だったらここまであからさまな地雷は避けるわ。
597デフォルトの名無しさん
垢版 |
2019/03/07(木) 22:59:19.47ID:USPSPd7n
なぜ自分が採用に関与できない雑魚だと表明してしまうのか理解できないけど、そうしたほうがお互い幸せになれるだろうね
2019/03/07(木) 23:52:54.26ID:4aDKvx3Q
>>596
お前は派遣だろ目を覚ませ( ‘д‘⊂彡☆))Д´) パーン
2019/03/08(金) 07:01:44.63ID:ySJgt2xb
こういう奴らに並列実装なんてさせるから地獄を見ることになるんだよな。。
2019/03/08(金) 09:05:39.84ID:B6Ayhhcz
Rustなら地獄を見そうなコードは
コンパイラが怒るからよかったじゃん
2019/03/08(金) 09:22:23.55ID:FgM3Elcd
Mutexとかもはや古典技術でしょ
Rust使う領域では理解してて当然と言っていいよ
これがマウントだとしたらキレイなマウント
2019/03/08(金) 11:37:10.05ID:41t9AOm1
>>601
そういうことばっか言ってるからいつまでも二流言語と違うんか?
2019/03/08(金) 12:02:47.61ID:qCBno44f
フリーランチの時代はとっくに終わってるのに気づいてないんだ…
プログラミング界の横田庄一だな
604デフォルトの名無しさん
垢版 |
2019/03/08(金) 12:28:00.15ID:pv8HlopZ
横田庄一と聞いてすぐに誰の事かわかる人は横田庄一
605デフォルトの名無しさん
垢版 |
2019/03/08(金) 12:29:45.82ID:pv8HlopZ
いやちょっと待て、横井だよな?
2019/03/08(金) 13:03:58.27ID:qCBno44f
>>605
すまん横井だw
よっこいしょういち
2019/03/08(金) 13:17:39.94ID:41t9AOm1
Rockといい横田といい、この程度のことも注意できない奴だから
こんな口うるさい姑みたいなやりたいこともやりにくい言語をもてはやすんだと納得
2019/03/08(金) 13:28:47.21ID:qCBno44f
横井さんも刺身食えなかったらしいからな
排他処理に拒否反応示すのも無理はない
Rustはやめときな
2019/03/08(金) 18:14:30.11ID:NkXqhcRH
Rustは刺身だった
2019/03/08(金) 18:25:28.43ID:qCBno44f
サビだけにな
■ このスレッドは過去ログ倉庫に格納されています