Rust Part5

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

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

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

前スレ
https://mevius.5ch.net/test/read.cgi/tech/1507970294/
322デフォルトの名無しさん
垢版 |
2018/04/12(木) 01:30:27.15ID:JdbozTc/
Rustのアンチするのは一向に構わんが、せめて嘘をつくのはやめようね。
2018/04/12(木) 03:23:54.50ID:XYZqcSuW
C FFIとやらを使うためにはRustの知識だけでなくCの知識も必要
Rustだけ学べばいいなんてことはない
2018/04/12(木) 06:41:03.77ID:1NMGlh89
>>323
cの関数呼ぶんだから当然だろ
2018/04/12(木) 09:05:15.80ID:IekpLPdE
>>321
Rustで確保したリソースをCに渡す場合は確かにdropいらないけど、
C側で確保したリソースについては必要では?
Cから何かハンドルが帰ってきて最後にCでcloseするパターン。
2018/04/12(木) 11:33:57.87ID:6MGFsFO1
>>325
Rust側でDropしないためにDropの実装を上書きする必要があるということ?
2018/04/12(木) 12:23:34.05ID:IekpLPdE
>>326
Cの関数内で確保したリソースは
当然Rustデフォルトのdrop実装では解放されないから
自分でdrop実装して解放する必要がある、という話。
328デフォルトの名無しさん
垢版 |
2018/04/12(木) 13:14:59.37ID:JdbozTc/
>>325
>>303は「メモリリーク」って書いてあるからヒープに確保されたメモリの解放に関しては
Dropトレイトを実装する必要性なんか全く無いってことを>>321で説明してる。

>>325の言ってる「リソース」ってのはファイルとかソケットとかのことを言ってるんだよね
そっちはメモリリークとはまた別の話になるので状況によるんじゃないかな…
ただ、OSが提供してるリソース(ファイルやソケット)くらいなら、File, TcpListenerとかには
Windows用とUnix用にそれぞれinto_raw_xxx(), from_raw_xxx(), as_raw_xxx()とかが用意されてるから
それを使えば後のことはFile, TcpListenerのdrop実装に任せてしまって問題ないはず。
C側(ライブラリ)で独自に実装されてるリソース(close等の後処理が必要な実装)の場合は
close部分をRustのDropトレイトの実装として移植する必要はあるだろうね。
(もう一度言うけど、自分は普段はC FFIを使わないから詳しくはないので、間違ってたら指摘して下さい)
2018/04/12(木) 15:11:14.26ID:UiqgOhpn
>>328
メモリリークに限定するとしても
CでmallocしたポインタがRustに渡ってきた場合
Rustが勝手に解放するわけにはいかないから
drop実装してfreeを呼ぶ必要がある。
2018/04/12(木) 17:39:03.84ID:JdbozTc/
>>329
ちょっと言ってる意味がわからない
Cでmallocされたものであっても所有権ごと渡されていれば解放の責任はRustにある
ていうか、Rust側で勝手に解放しちゃいけないと言ってるのに
Dropトレイトの実装でfreeしたらやっぱりRust側で勝手に解放しちゃってるじゃん
言ってること矛盾してない?

CとRustで型のメモリレイアウトが一致してればあとはBox型に任せるだけだよ

Cから渡されてくるポインタの型のメモリレイアウトが公開されていなければ
(つまりvoidポインタだったりオペーク構造体(オペークポインタ)だったなら)話は別だけど。

その場合はRustはハンドルをもらうだけでいかなる操作(メモリの解放(free)も含む)もC FFIでC側に
頼むしかない(メモリレイアウトがわからない限りはRust側ではどうあがいても何も出来ない)ので
Dropトレイト実装してdrop時にC側にメモリの解放処理も頼む必要がある
2018/04/12(木) 18:12:43.26ID:B4Vmqq7H
FFIの場合jemallocかシステムのmallocかの違い問題になることありそう
2018/04/12(木) 21:02:25.76ID:EBEN0Rpp
>その場合はRustはハンドルをもらうだけでいかなる操作(メモリの解放(free)も含む)もC FFIでC側に
>頼むしかない(メモリレイアウトがわからない限りはRust側ではどうあがいても何も出来ない)ので
>Dropトレイト実装してdrop時にC側にメモリの解放処理も頼む必要がある

だからDropトレイトを意識的に実装せにゃならんと始めから言ってるだろうに。
このタイプは絶対仕事でモメるわ。
333デフォルトの名無しさん
垢版 |
2018/04/12(木) 22:43:32.09ID:JdbozTc/
>>322
だったら「Rust側からはメモリレイアウトが分からないようなvoidポインタや
オペーク構造体がC側から渡された場合は」という前提条件をきちんと書け。
条件を何も書かずに「drop trait を明示的に書かなきゃならん」とだけ書かれれば
全ての場合で必要だと言っているようにしか見えない。

あと、>>321で「全く」と書いてしまったことは悪かったと思っている
>>321を書いてる時点は上記のような可能性に気づいていなかった…申し訳ない。

お前みたいに「特定の条件下でしか適用されないこと」に対して条件を書かずに結論だけ書いて
「自分はきちんと伝えた」とか思っちゃってるキチガイとの仕事とかこっちの方から願い下げだから。
334デフォルトの名無しさん
垢版 |
2018/04/12(木) 22:50:55.21ID:JdbozTc/
>>331
そこは自分も同じことを思った。
mallocとjemallocの実装の中身とか見たことないけど、混在してても問題ないのかな?
335デフォルトの名無しさん
垢版 |
2018/04/12(木) 22:54:07.42ID:JdbozTc/
>>333 訂正
>>322>>332
2018/04/12(木) 23:08:05.77ID:9OO0KoJN
>>330
「勝手に」の部分が曖昧だったので正確に書くと、
Rustはメモリ解放すべきタイミングは知っている
(すなわちCから受け取ったポインタのlifetimeが切れたとき)
Rustはメモリ解放の方法は知らない
(なぜならCのmallocがシステムのmallocなのかjemallocなのか別の何かなのか知るすべがないから)
なので方法について教えるためにdropを実装する。
(このdropでCのfreeを呼べば、mallocと同じメモリアロケータが保証される)

ちなみにメモリアロケータ間の互換性はないので、
例えばlibcでmallocしてjemallocでfreeすると多分SEGVする。
コード例は以下でもどうぞ。
https://stackoverflow.com/questions/31486519/how-do-i-free-a-char-allocated-via-ffi-in-rust
337デフォルトの名無しさん
垢版 |
2018/04/12(木) 23:35:57.15ID:JdbozTc/
>>336
マジか…mallocとjemallocは混在できないのか…
そうなると、C側でmallocされてれば必ずC側にfreeしてもらうしかないということか…
じゃあ今まで俺が書いた方法じゃダメなケースもあるじゃん…すまん。
自分の無知を晒す羽目にはなったが、むしろ今知れてよかったわ。
でも、そうなると新たな疑問が…
2018/04/13(金) 00:47:00.07ID:AYGoZS+y
jemallocじゃなくてシステムのアロケーター使うオプションだかfeatureだか使えば良いかな
339337
垢版 |
2018/04/13(金) 01:19:50.99ID:rxyiIXLh
>>336
間違いの指摘と情報提供のお礼言うの忘れてた。Thanks!

あと、これってRustでのC FFI に限った話じゃないよね?
C同士でさえもアロケータに何を使ってるか次第で同じ問題が発生する。
Cは時々使ってたのに(しかも仕事で)これを知らなかったのはヤバいな…
恐らく今まではたまたま同じアロケータを使ってたから問題が起きてなかっただけか…
戻り値で文字列(char *)が来た時とかこっちで勝手にfreeしてたぞ…(^_^;)
まあ、どのアロケータ使ってるかなんて誰も気にも留めてなかったし大丈夫だろうけど、
今後は気を付けないとな…
340デフォルトの名無しさん
垢版 |
2018/04/13(金) 01:26:39.63ID:V+3RqgGh
すべての有用なライブラリがRust製にならない限り
Rustだけを学べばよいという状況は訪れずCやC++の習得も必須
2018/04/13(金) 02:09:57.24ID:zBD4nIN6
>>339
どういたしまして。

C同士の場合は普通glibcへの動的リンクだし
LD_PRELOADとかでjemallocなんかに差し替えても
プログラム全体で差し替わるから特に問題にはならないかと。
もしメモリアロケータを静的リンクしたライブラリとかを使っていればまずいはず。
ただそういう場合はリソースハンドルっぽいAPIになりがちなので
そのままfreeしようとは思わないかもしれない。
2018/04/13(金) 02:17:49.88ID:I2PL3qG3
>>340
そりゃそうだろ、なにいってんだ
2018/04/13(金) 02:33:17.17ID:nqEsOLBj
やくに立たねー結局cか。rustって趣味だな。
344デフォルトの名無しさん
垢版 |
2018/04/13(金) 04:00:10.77ID:V+3RqgGh
C/C++だけ覚える
or
RustとC/C++を覚える

学習コスト高すぎRust
2018/04/13(金) 10:22:17.48ID:w0WUHq34
>>343
趣味でモジラの栄養やるとかどんなドマゾだよ
2018/04/13(金) 10:26:05.50ID:w0WUHq34
今の会話見るだけでもRustがいかに欠陥言語かわかるのに
それでもRust使うって言うんだからなあ
全部C/C++で書く方が遥かに効率いいしバグも出んわ
2018/04/13(金) 11:29:35.51ID:EHHg9a+/
C覚えるの必須当たり前ってんなら構文もっとC系に寄せれば良かったのに。
2018/04/13(金) 12:06:18.44ID:ybbP8EF+
今までの流れからその結論は極端すぎるだろ
もう少し工夫しろ
2018/04/13(金) 12:27:54.41ID:zH6rmEat
いつのまにか、FFI使うことが前提になってる流れって、rustをdisりたい勢の必死さがうかがえて、ある意味、面白い。
2018/04/13(金) 12:52:00.31ID:Lj3R2dXy
>>339
CのfreeはNULLなら何もしないと保証されてるけど
解放済みアドレスへのfreeはセグフォ発生するぞ
2018/04/13(金) 13:00:11.55ID:w0WUHq34
Cの資産に寄生しないとろくなもん作れないのに
そのCとの連携部分が腐ってるってことじゃん

使いもんにならねえって評価は妥当だと思うが?
それともPure Rustでまともなもん作れるつもりか?
2018/04/13(金) 17:38:51.06ID:l4JsQkL9
まずまともなもんを先に定義してくれ
2018/04/13(金) 18:09:45.57ID:Z44eD8et
バグらない
動く
実用的
上記3点の実績がある
2018/04/13(金) 18:37:13.42ID:rxyiIXLh
実用的・実積も曖昧だな
どの程度を実用的で実積があると呼ぶのか具体例を提示してくれ

突き詰めていくと「バグらない」も程度によりけりだしな
Excelだってバグるときゃバグるし…
2018/04/13(金) 18:48:56.96ID:lEd4ahw7
本スレは相変わらず過疎だしまじ終わったなこの言語
2018/04/13(金) 19:00:16.55ID:vyE43Z1D
話に入れないからって「………結局駄目!」ってダサすぎない?
2018/04/13(金) 19:21:19.79ID:EHHg9a+/
jsのファミコンエミュレータをrustで実装し直したらパフォーマンス負けたらしいwww
2018/04/13(金) 19:27:43.59ID:a8AOaj4F
>>357
JSに負けるとか草しか生えんなwwwwwww
2018/04/13(金) 19:31:48.55ID:a8AOaj4F
>>354
Linuxくらいバグらないならいいよ
360デフォルトの名無しさん
垢版 |
2018/04/13(金) 20:22:47.30ID:rxyiIXLh
>>357
噂に尾ひれがつく瞬間を目の当たりにして草
多分これ↓のことだろ
http://blog.bokuweb.me/entry/2018/02/08/101522
誰かC x wasmで書き直してみろよ。きっと似たような結果になるから

>>359
ついにLinuxと同レベルじゃないと認めないとか言い始めたぞ…
2018/04/13(金) 20:58:47.99ID:Ek+y1xD6
>>357,358
ブラウザ JS版 Wasm版
Chrome 63 4.36ms 5.68ms
Firefox 58 5.76ms 3.98ms
Safari 11 9.98ms 4.21ms

う〜ん草しか生えんね 草草草の草ァ!だね
2018/04/13(金) 21:29:03.20ID:a8AOaj4F
>>361
wasmじゃなくてRustと比べてから言えよ
2018/04/13(金) 21:40:19.55ID:Ek+y1xD6
>>362
草しか生えんわwww
2018/04/13(金) 22:58:07.23ID:LXloKsM4
まあメモリの管理モデルが違う言語同士でやりとりすれば
色々苦労するのは当たり前なんだよね。
それなのに「rustは勝手に解放してくれる」とか言い張っちゃう信者が有害な訳だよ。
rustが悪いというよりか、こういう馬鹿が多いところが問題。
2018/04/13(金) 23:04:17.07ID:bso+BPDq
Haskellは副作用が無いとか参照透過性があるって言った時に
C FFIを持ち出して反論するのと同様の不毛さを感じる
2018/04/14(土) 07:00:49.94ID:xdB8fLqn
不毛?現実によくあることなのにね。。
言語の一番下ではアセンブラが動いてるんだから、そことどう調和もしくは隠蔽させるかってのは
コンピュータ言語にとって本質でしょうが。
2018/04/14(土) 07:18:52.94ID:S65yHOqM
は?何で一番下が機械語じゃなくてアセンブラなの馬鹿なの?
2018/04/14(土) 09:16:33.44ID:/jFvD9M/
コンピュータ言語w
2018/04/14(土) 11:34:49.77ID:+NzeE6vg
アセンブラと機械語は1:1で訳せるから…
2018/04/14(土) 11:47:39.37ID:oZ68B8i3
アセンブリやろ
2018/04/14(土) 13:58:04.39ID:dXnZwWyG
結局Rustはサーバ向けでもコマンドツール向けでもGUI向けでも組み込み向けでもない

って事実はほんと覆らんよ
2018/04/14(土) 14:12:11.55ID:9z5cq9ls
話に入れないからって「………結局駄目!」ってダサすぎない?
2018/04/14(土) 14:55:11.55ID:42ccGSN6
jsのファミコンエミュレータをrustで実装し直したらパフォーマンス負けたらしいwww
2018/04/14(土) 15:21:13.70ID:TDyE7icd
>>372
悔しかったら反論してみたらぁ?
2018/04/14(土) 15:23:55.88ID:xdB8fLqn
>>372
メモリ管理みたいな重要なことについてデララメ振りまいて、
「理解しない奴がrust批判してる」とか言い出してる方が恥ずいわ。
2018/04/14(土) 15:34:36.03ID:TDyE7icd
上の流れ素直に読んでも、
メモリ管理も全部C側で完結させるのが一番いいって結論にしかならんぞ?

Rustのいいところなんぞ皆無だ
2018/04/14(土) 15:44:33.95ID:TDyE7icd
というかコンパイラにメモリ管理任せるのが無理だろ。FFIのためにいちいちDrop定義するとか非効率でしかない

メモリ管理はGCに任せるか完全手動にするかの二択なのに、無理矢理そこにヘンテコリンなソリューションもどき持ち込んで混乱引き起こしてるだけじゃん
2018/04/14(土) 15:50:41.81ID:TDyE7icd
Rustの提案するエセソリューションは機械語のレベルと相性が悪い
CやC++のほうがまだまともなアプローチしてる
2018/04/14(土) 15:53:50.88ID:LmbQudMt
>>377
うおっ!
ここにきてまさかのRAIIを否定し始めるとか予想外すぎたわ!
お前C++のスマポってなにか知ってる?
2018/04/14(土) 15:55:07.64ID:TDyE7icd
>>379
ほとんどのコンパイラで採用されてない仕様書上にしかない機能なんざ知らんよ
2018/04/14(土) 15:58:27.76ID:TDyE7icd
実際混乱引き起こしてるまともじゃない方法なのは上の流れで自明だろ
2018/04/14(土) 16:02:24.43ID:LmbQudMt
>>380
よろしい。そんな君にはJavaがおすすめだ。そっちで元気にやりたまえ。
2018/04/14(土) 16:05:01.76ID:75zALjkM
以前も言われてたけど「ひまわり学級の子が普通の授業に出て暴れてる」って表現が実に的確で草
2018/04/14(土) 16:07:01.72ID:TDyE7icd
間違ったものを間違った奴が流行らせようとしてるんだからそれには「違う」って言っとかないとダメだろ
話にならんと放置したらいずれ手遅れになるほど蔓延する
そうならないうちに叩いておくべきなんだよ
2018/04/14(土) 16:10:39.48ID:w273LxVR
混乱引き起こしてるのは違いないけどさ
「俺の頭の中で混乱を引き起こしてる」って正確に書こうよ
2018/04/14(土) 16:11:44.32ID:TDyE7icd
>>385
上のFFI絡みの流れは俺じゃないけど?
2018/04/14(土) 16:15:30.43ID:w273LxVR
完全手動でメモリ管理するのは混乱起きないからいいよね〜
2018/04/14(土) 16:21:52.10ID:TDyE7icd
>>387
コンパイラに丸投げするよりは良いな
混乱しないって意味だとGCが一番だが
2018/04/14(土) 16:27:01.78ID:nFvlFlcl
>>375
上のやり取りは俺じゃないけど?
散々間違いがあったら指摘してくれって書いてたのがデタラメを振りまいた?
間違いの指摘に礼を言って終えるところに、鳴りを潜めていたアンチがウキウキで「混乱を引き起こしたRust!!!」と喚き立てた
このスレでも何回もやってる流れじゃんクソダセー
2018/04/14(土) 16:38:44.62ID:TDyE7icd
はいはい内ゲバですね
ほんとくだらん言語
2018/04/14(土) 16:43:14.18ID:nFvlFlcl
>>390
内にいるつもりなんだお前
2018/04/14(土) 16:44:00.69ID:nFvlFlcl
インタプリタへの丸投げ>完全手動でメモリ管理>コンパイラへの丸投げ
実行開始までの混乱しない順だなどう考えても
2018/04/14(土) 16:47:43.87ID:TDyE7icd
>>391
外から内ゲバ眺めてやっぱこの言語くだらねって思ってるだけ
C++の(後方互換維持のための苦しい構文追加以外)なにが悪いんだか
2018/04/14(土) 17:00:21.56ID:LmbQudMt
>>393
スマポが何かを知らないヤツがC++を語り始めたぞ…
2018/04/14(土) 17:00:54.52ID:nFvlFlcl
>>378
ていうかこれ知りたい
Rustの何が(例:MIR)どう機械語との相性が悪く
それに対してC/C++のまともなアプローチの具体例を教えて
2018/04/14(土) 17:03:21.15ID:LmbQudMt
>>395
代弁してやろう。
「自力で頑張る」

以上
2018/04/14(土) 17:17:27.65ID:TDyE7icd
>>395
結局解放処理は自分で書くんだろ?
メモリ上の確保のされ方はコンパイラにはわからないんだから

結局中途半端にしか自動化できないから無意味で、それなら自分で管理した方が結果的に良いって話
2018/04/14(土) 17:24:46.46ID:Syz4zWn3
解放の仕方を実装したら、後はコードのどの場所で何回確保しても自動で解放される事が分かってないっぽいね
2018/04/14(土) 17:31:29.95ID:LmbQudMt
>>398
だってRAIIもスマポも知らないんだもん。しょうがないじゃん
2018/04/14(土) 17:34:05.03ID:nFvlFlcl
>>397
C FFIとかの一部分で解放処理を書くんだよ
お前が言ってる通り「手動」だしお前の好きな「手動」でよかったな
中途半端にとは言っても機能するし「無意味」と言い切るには典型すぎる誤謬

>>395にまともに答えてくれる?どう相性が悪いの?どんなアプローチ?
2018/04/14(土) 17:50:25.61ID:TDyE7icd
>>400
今の説明でわからんなら一生わからんよ
2018/04/14(土) 17:56:25.03ID:LmbQudMt
>>401
あっ! 逃げたww
2018/04/14(土) 18:04:42.44ID:nFvlFlcl
Q. Rustの何がどう機械語との相性が悪く、それに対してC/C++のまともなアプローチの具体例を教えて
A. 結局中途半端にしか自動化できないから無意味で、それなら自分で管理した方が結果的に良い

Rustアンチ君との最後のやり取りがこれなのか…?悲しい
2018/04/14(土) 23:45:32.28ID:lczq2IdA
いい加減ワッチョイスレに移動しようぜ
405デフォルトの名無しさん
垢版 |
2018/04/14(土) 23:54:45.22ID:LmbQudMt
>>404
実際問題ワッチョイは過疎る
2018/04/15(日) 03:16:54.39ID:8wseEBgk
>>404
YOUがワッチョイのほうで話題ageれば
2018/04/15(日) 09:21:32.45ID:eccSQZbu
ここはネタスレだからこれでいいよ

まともな話題ないし
2018/04/15(日) 10:16:53.40ID:pCFT19cL
ワッチョイは運営が管理を放棄するための口実
409デフォルトの名無しさん
垢版 |
2018/04/15(日) 10:33:02.44ID:E1b18XLI
ワッチョイあった方が良い派です
2018/04/15(日) 11:32:28.09ID:fK7P6CAL
いちおう指摘しておくと以下にわっちょい付きのスレはある。
https://mevius.5ch.net/test/read.cgi/tech/1514107621/l50
2018/04/15(日) 14:26:16.16ID:WuS7UUJE
そう思うんなら勝手にそっちでやってくれ
いちいちこっちに宣伝しないでよろしい
2018/04/15(日) 14:57:22.17ID:eccSQZbu
せめてスレ立てたやつくらいはあっち書き込んでくれよ。
ワッチョイスレ(本スレ)には俺しかいない。
2018/04/15(日) 15:05:21.27ID:6SePuRaV
人が集まってる(勝ち残った)方が本スレ
2018/04/15(日) 16:17:50.87ID:vLrea5+q
アンチスレの方が人多いっていい加減認めようぜ
415デフォルトの名無しさん
垢版 |
2018/04/15(日) 20:40:55.33ID:oxsxYGoa
>>414
いちおうアンチスレも存在するんだぜ
http://mevius.5ch.net/test/read.cgi/tech/1509028624/
2018/04/15(日) 21:13:20.51ID:0BluVJwA
>>384
大元に言わないで、ここでグダってる時点で説得力無いけどな。
2018/04/16(月) 09:16:50.73ID:fU1aO3Gb
英語で説明する気力がないんだろ
2018/04/21(土) 15:59:38.16ID:GAOK2TS0
それもあるが日本語の記事でrustマンセーしてるやつは大抵バカっていうのもある。
2018/04/21(土) 18:22:00.01ID:u/5OPPGG
会話になってないし
時間おいたところで>>395に答えなくてもいいことにはならないからね
2018/04/22(日) 12:28:50.40ID:fDht+F2y
もう答えた
>>397
421デフォルトの名無しさん
垢版 |
2018/04/22(日) 15:34:45.59ID:4jEar62+
自分から「機械語のレベルと相性が悪い(>>378)」と言ってるのに
「具体的にはどういうこと?(>>395)」と聞かれて、
その返答(>>397)に機械語のことが一切出てこないのは流石に草
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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