X



Rust Part6

■ このスレッドは過去ログ倉庫に格納されています
0463デフォルトの名無しさん
垢版 |
2019/02/11(月) 13:29:57.41ID:/IKdpkbc
rustでググってrustってゲームがトップに来なくなったのはグーグルさんが僕の検索履歴から判定しているだけ
0466デフォルトの名無しさん
垢版 |
2019/02/11(月) 18:46:05.84ID:T+XDi7pv
>>465
http://cglab.ca/~abeinges/blah/too-many-lists/book/first-push.html
かいつまんで言うと、&mutなオブジェクトが一瞬でもinvalidな状態になるから。
mem::replaceを使うと、self.listの値を取り出して代わりに別の値を置く、という処理が一度に行える
https://play.rust-lang.org/?version=stable&;mode=debug&edition=2018&gist=8d12416b3f7bc4aa44bf360df11de1be
0467デフォルトの名無しさん
垢版 |
2019/02/11(月) 21:46:27.46ID:icbaaHgE
>>466
ありがとうございます。
変更可能な"参照"で持ってきたもの(&mut self)から所有権をムーブさせることはできないという解釈で大丈夫ですかね。

置き換えるときはmem::replaceを使うようにします。
0468デフォルトの名無しさん
垢版 |
2019/02/11(月) 23:01:54.99ID:9ECrAI8Q
クソコード教えるんじゃねぇ。Optionの中身をNoneと入れ替えるならOption::take使え
0472デフォルトの名無しさん
垢版 |
2019/02/18(月) 21:15:10.76ID:0Vx/m/dz
インデントのスペース幅は2が良かったなぁ
clang-formatもprettierも2がデフォだし
C#でさえ2を結構見かけるようになってきた
rustに強く影響を与えたであろうocamlもhaskellも2が多い
世界的に2が標準になりつつある気がする
0473デフォルトの名無しさん
垢版 |
2019/02/18(月) 21:29:43.93ID:trvxFZJG
漢なら8
0474デフォルトの名無しさん
垢版 |
2019/02/18(月) 21:30:52.44ID:etvvcICH
Pythonをインデント2で書く奴だけはマジで死ね
あれはガチで読めない
他の言語なら好きにしろ
0476デフォルトの名無しさん
垢版 |
2019/02/18(月) 21:43:29.91ID:G3oZ5oVt
ocamlからリスト引き継いでくれたらよかったのになあ
しかしそうするならもはやocamlそのものでいいってことになりかねないかな
0478デフォルトの名無しさん
垢版 |
2019/02/18(月) 23:22:04.58ID:H1db3n/w
noto sansにindent 3をわかってくれるのはねねっちだけか。
今は源真ゴシック等幅+Source Code Proだけど。
Source Han Codeはちょっと違うんだよ。
0480デフォルトの名無しさん
垢版 |
2019/02/19(火) 02:33:20.94ID:ztl4bw1Y
googleのstyleguideではスペース幅4を推奨してるのにgithubのgoogleのpythonレポジトリはスペース幅2が多いな
pythonはpep8を重視してるイメージがあるけど堂々と無視出来るのは凄い

rustもrustfmt.tomlでtab_spaces = 2を設定してる人が結構いるわ
https://github.com/search?l=TOML&;q=tab_spaces&type=Code
3にしてる人さえいる
0481デフォルトの名無しさん
垢版 |
2019/02/19(火) 09:43:14.31ID:+VeRQQni
ちんこことゴッドエイムあきらを探しに来ました。
0482デフォルトの名無しさん
垢版 |
2019/02/19(火) 12:32:05.79ID:1Fqwt8so
なんでtab2だとみにくいんだ?
0483デフォルトの名無しさん
垢版 |
2019/02/19(火) 13:27:47.37ID:D8b3v+Fo
インデントで制御構造を表現する言語だと、深いネストから戻るときにどのレベルに戻ったのか識別できなくなる
0484デフォルトの名無しさん
垢版 |
2019/02/19(火) 20:11:35.55ID:8ne5Wfny
タブ2で見ずらくなるようなネストの深さと関数の長さになるのが悪いと
言いたいところだがgoogleのオフィシャルコードは結構ど汚くて上の条件を無視してる。
個人的には3が視認性の上では一番良いと思ってはいるが、流石に2,4と互いに素な数だと
プログラム的になんか嫌なこと起きそうで自分では使ってないな。
0486デフォルトの名無しさん
垢版 |
2019/02/19(火) 23:16:38.92ID:8Y/JNp+N
>タブ2で見ずらくなるようなネストの深さと関数の長さになるのが悪いと
2派と4派の対立は4が深すぎるか、2が浅すぎるかなのに「2で見ずらくなる深さ」って想定おかしくね?
3派は間とって3だよ。こっちは普及してないのが問題。
0487デフォルトの名無しさん
垢版 |
2019/02/19(火) 23:29:48.61ID:5Qp7yTUV
Scalaみたくスタイルガイド作っちゃえばいいのに
そうすれば「スタイルは公式に従うように」の一言で済む
0489デフォルトの名無しさん
垢版 |
2019/02/19(火) 23:44:16.88ID:/QLumg1k
回りの多数派にあわせるだけの話
こういうのにこだわるやつは大抵バカ
可読性w
0490デフォルトの名無しさん
垢版 |
2019/02/20(水) 00:10:42.00ID:PUv5Mo1S
なんてここでタブ・スペース論争してんだ
どうせ一人でしか書かねえくせによ〜
0493デフォルトの名無しさん
垢版 |
2019/02/20(水) 15:04:45.66ID:NsAPC4E4
エディタファシストなのでエディタを開発したことないやつは駆除されるべきなのではと考え始めて来た。やばい
0494デフォルトの名無しさん
垢版 |
2019/02/20(水) 15:58:40.55ID:agArr1lp
昔々学生の頃に学校のワークステーション使ってXlibでドット編集してXPMファイルで出力するなんてものを作った覚えがある。
あらから29年。時の経つのは早いものぢゃ。
0495デフォルトの名無しさん
垢版 |
2019/02/20(水) 19:43:00.89ID:v7iPz90J
29年前にRust使えたんだ
すごいな
0496デフォルトの名無しさん
垢版 |
2019/02/20(水) 19:44:18.14ID:sr7oPl81
読み込んで表示するより出力の方がはるかに簡単だしな
0497 ◆QZaw55cn4c
垢版 |
2019/02/20(水) 19:52:10.09ID:P8vN2pc3
>>494
xlib ダイレクト記述、とは猛者ですね…
私も最近になって xlib をバシバシ触ろうと思っていますが、いい参考書はありませんか?
0498デフォルトの名無しさん
垢版 |
2019/02/21(木) 11:19:20.33ID:TingKcVp
XlibってCの悪いところを煮詰めたような設計だったな
Rustとの相性は最悪だろう
0500デフォルトの名無しさん
垢版 |
2019/02/22(金) 15:32:44.85ID:bcwEHSMY
うん。新しいXlibの本は知らないなあ。
探す気も起きないから知らないだけかも知れないが。
0501デフォルトの名無しさん
垢版 |
2019/02/22(金) 15:35:39.38ID:bcwEHSMY
>>498
なんというか、オブジェクトを作って操作するような感じなので今時の言語用のオブジェクト指向に合わせたラッパーは作れると思うが、需要はほとんどないような気がする。
0503デフォルトの名無しさん
垢版 |
2019/02/22(金) 17:04:13.83ID:PtH+29Wq
GTKはクソ
0505デフォルトの名無しさん
垢版 |
2019/02/23(土) 22:01:15.49ID:0ZfqWIIS
>>465です
スタックにpopを実装しました
pop自体はうまく動いているようですが…
popした時の対象の物がどのタイミングで破棄されているのかを調べようと思いstd::ops::Dropを実装しようとしましたがうまくいきません。
https://play.rust-lang.org/?version=stable&;mode=debug&edition=2018&gist=f1a2a2a35c3dc424f3814557afa5974c
何がいけないのでしょう
0506デフォルトの名無しさん
垢版 |
2019/02/24(日) 15:19:37.98ID:Vg8zIes/
haskellでの、文字列[Char]を切り貼りみたいな事をするには、
Vec<char>を操作するので合っているのかな?
0509デフォルトの名無しさん
垢版 |
2019/03/02(土) 01:38:04.42ID:TjOpVvei
>>505 Dropを実装した型の値がdropされるとき、フィールドは全てvalidじゃないといけない。
そのままメモリ解放するだけ=Drop未実装ならいいんだけど、drop中にinvalidなフィールドにアクセスできちゃうのがダメだというのが問題
解決案は、ここでもOption::takeかmem::replaceでNoneにすげ替える

けど、まずはLearning Rust With Entirely Too Many Linked Listsを写経してみた方が良いよ
今のListの定義だと無駄なメモリを食うし、パターンマッチとstructは相性があんま良くないし、これから先も似たような穴にハマると思われる
0510デフォルトの名無しさん
垢版 |
2019/03/02(土) 15:28:49.59ID:jUIKeWUS
Rustいいらしいですよって話を会社でしたら、
テックリードが「RustでできることはCやC++でもテストとツールで十分やってけるからイラネ」って言ってたけどマ?
0511デフォルトの名無しさん
垢版 |
2019/03/02(土) 15:50:22.82ID:s27Iehbv
&str で関数に渡すと解放されてしまって使い回すこどができないのですが
使い回す方法ありませんか
0514デフォルトの名無しさん
垢版 |
2019/03/02(土) 17:11:13.26ID:ACbQR/xi
>>512
じゃあうちにはたしかに要らんなあ
そんな統制がいるほどの人数でもないし

回答サンクス
0515デフォルトの名無しさん
垢版 |
2019/03/02(土) 17:40:27.42ID:NCWcHh/2
>>510
そのリードが C++でauto_ptrがdeprecatedになった理由とMove Semanticsと右辺値参照の関係をちゃんと説明できる人なら C++ でいい
0518デフォルトの名無しさん
垢版 |
2019/03/02(土) 19:10:02.40ID:Zilw84iH
>>511
&str is 何?
0519デフォルトの名無しさん
垢版 |
2019/03/02(土) 19:13:35.19ID:bakyLAA5
>人間が信用できないからこそCよりRustだろ
>気を付けてコーディングすればミスはなくなる、ってのは戦前の日本軍的な精神論だ
ぴんとこないな。
rustの場合、お役所とおせばテストなど自前でしなくともokっていう
変な信用を生んでるだけだろ。そっちのがよっぽど日本的だと思うがね。
0520デフォルトの名無しさん
垢版 |
2019/03/02(土) 19:33:57.30ID:aD19gS0i
>>519
今時の言語なので、ユニットテストは標準で整備されてるよね
コンパイラは計算ミスや仕様間違いまではチェックしないので
0523デフォルトの名無しさん
垢版 |
2019/03/02(土) 21:36:12.88ID:TjOpVvei
注意力ってのは慣れると省力できるようになるけど、有限リソースだし個人の習熟度と体力に依存するんで、目に見えない負債になる
新しい言語を理解するコストは償却できるけど、注意深さってのはソースコードを触る限りはコストを発生し続ける
機械がチェックできることは機械にやらせた方が絶対に良い
0524デフォルトの名無しさん
垢版 |
2019/03/02(土) 22:15:15.48ID:E3UUkV/K
製品にするコードってどうせMISRA C辺りの静的解析噛ますし
今時ならvalgrindもテスト項目に入ってるだろうし
Rustなら全部コンパイラがやってくれる!と言われても、
いやCにも外部ツール入れれば同じことできるし……としか思わんのだよな

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

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

あとチェッカーとコンパイラ分けるべきか合体させるべきかについては、
どっちにも善し悪しあるからCとRustどっちが優れてるとかはないと思ってる
0531デフォルトの名無しさん
垢版 |
2019/03/03(日) 00:19:36.71ID:cZvjaCEe
Cじゃ確かに無理かもわからんが、C++のstd::vectorならatメソッドで同じことできるぞ

毎回アクセス範囲が適切か確認するから結局オーバーヘッドになってほぼ使われんがな
0532デフォルトの名無しさん
垢版 |
2019/03/03(日) 00:45:31.79ID:c3K18875
基本はIndex::indexを呼んで必要なとき(オーバーヘッドが気になるとき)にunsafeで囲む
C++は全関数がunsafeで意識せずVec::get_uncheckedを使うようなもの
オーバーヘッドの問題でunsafeで囲んだらRustだってツールじゃムリ五十歩百歩って言われるかもしれないけど、五十歩の方がいい
0533デフォルトの名無しさん
垢版 |
2019/03/03(日) 00:45:55.40ID:m5mWw6SB
MozillaやRust作者の人達が、valgrindやチェックツールの使い方を知らない
アホ揃いだと思ってるの?
0534デフォルトの名無しさん
垢版 |
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も大概では?
0535デフォルトの名無しさん
垢版 |
2019/03/03(日) 06:22:48.61ID:ChZC+e8W
>>519
ほんそれ
0536デフォルトの名無しさん
垢版 |
2019/03/03(日) 07:44:53.56ID:lQ42Eo+G
みんな同じ話題について話してるのか?
好き勝手独り言言ってるようにしかみえない。
0539デフォルトの名無しさん
垢版 |
2019/03/03(日) 16:53:34.09ID:4supDM4A
Rustだと(unsafeなし、コンパイラのバグなしなら)プログラムの全実行パスでメモリリークや破壊がないことが保証できると思うけど、
C/C++で同等のチェックができるツールってある?
valgrindは単にvalgrindで実行したパスで問題なかったことが分かるだけって理解なんだけど。
もしあるならそれはそれで使ってみたい。
0540デフォルトの名無しさん
垢版 |
2019/03/03(日) 17:11:00.51ID:vKpOoBmI
>>539
俺もその認識なんだけどvalgrindナメてたかな
Firefoxのcssのバグはテスト書いて発覚した感じなんだけど
0541デフォルトの名無しさん
垢版 |
2019/03/03(日) 17:26:47.25ID:oO/57lY2
その手の静的解析ツールはたいてい商用製品だね。一番手頃なのはVSで使えるSALかな。
0542デフォルトの名無しさん
垢版 |
2019/03/03(日) 17:57:36.24ID:lcRojjEc
顔本のinferがオープンソースで全パス調べてくれるやつだな

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

これがあるからC/C++でもRust同等とかないわ
0550デフォルトの名無しさん
垢版 |
2019/03/03(日) 23:53:56.27ID:60sPzVWf
>>547
web屋さんはもともとC++なんて使ってないし使う人が順調に増えていってる印象
問題はweb屋さん以外にどうアピールするか
0551デフォルトの名無しさん
垢版 |
2019/03/03(日) 23:58:03.76ID:+k8QiguP
どうせ一時の流行で終わるんだから被害は少ないほうがいい
Scalaとかも中途半端に業務系が乗っかってきはじめた矢先に梯子外されて死屍累々の惨状だったし
0554デフォルトの名無しさん
垢版 |
2019/03/04(月) 05:49:29.62ID:DAN4+o0x
えっ
0555デフォルトの名無しさん
垢版 |
2019/03/04(月) 07:38:18.48ID:yQsTNF7X
Javaは今でもクソ言語なのでScalaとは比べるべくもない
単に日本の人月制度とマッチしなかっただけ
Rustもそうなる
学習コストの高い良い言語より学習コストの低い低単価で人を集められる言語
0556デフォルトの名無しさん
垢版 |
2019/03/04(月) 08:34:11.43ID:i9k284UJ
色んな業界があるのに一緒くたにして評価できなくない?
0558デフォルトの名無しさん
垢版 |
2019/03/04(月) 22:48:27.10ID:GJN1vwhQ
個人的な経験だけど、Rustのコンパイラを単純に黙らせるようにソース修正していくと物凄く汚くなることが良くある
ので、そもそもの設計を見直すようになったり、かくあるべしって仮設を明確にするクセが身についた気がするよ
0560デフォルトの名無しさん
垢版 |
2019/03/05(火) 05:49:14.36ID:437fdADv
資源の共有状態を見直すってのはrustは置いといてもプログラムをに置いてやっぱ本質だなと思う。
0561デフォルトの名無しさん
垢版 |
2019/03/05(火) 23:33:10.77ID:oKijR9sc
ArcとかMutexとかRwRockが気に入ってる
最初めんどくさかったけどよく考えたら当たり前に必要なんだよね
そこを隠蔽しないことでコストのトレードオフをプログラマに意識させるのがよい
■ このスレッドは過去ログ倉庫に格納されています

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