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/
Rust Part5
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2018/02/11(日) 20:07:24.54ID:ri7dLd1B245デフォルトの名無しさん
2018/03/31(土) 07:55:27.02ID:9+5jHACw246デフォルトの名無しさん
2018/03/31(土) 09:33:15.73ID:q0ZQKkqb >>245
極論だな
開発効率を無視するなら安全に作ることは可能ってことだろ
開発効率を無視するってのはつまり開発期間が無限大と仮定するってことだぞ
開発期間が無限大でなければ安全に作ることが不可能なら
それは実質、安全に作ることは不可能って事と同義だからな
結局言いたいことは"開発効率・ランタイム速度"と"安全"がトレードオフの関係にあり、
それをいかにして解決するかが本質ってことだろ
で、その"解決"が何を指すのかっていう一番肝心な部分が抜け落ちてるぞ
"トレードオフの均衡点をどこに置くべきかを探る"のが解決なのか
それとも"トレードオフの関係自体を壊そうとする"ことが解決なのか
あるいはその両方か
あと、Googleは開発効率を優先して報奨金を出してるわけじゃないだろ
そもそもリリースした後のものは開発ではなく保守なんだから
あれは完璧に安全なものを作るのは不可能だから苦肉の策として行ってるだけ
てゆーか、ツッコミどころが多すぎるんですけど…
極論だな
開発効率を無視するなら安全に作ることは可能ってことだろ
開発効率を無視するってのはつまり開発期間が無限大と仮定するってことだぞ
開発期間が無限大でなければ安全に作ることが不可能なら
それは実質、安全に作ることは不可能って事と同義だからな
結局言いたいことは"開発効率・ランタイム速度"と"安全"がトレードオフの関係にあり、
それをいかにして解決するかが本質ってことだろ
で、その"解決"が何を指すのかっていう一番肝心な部分が抜け落ちてるぞ
"トレードオフの均衡点をどこに置くべきかを探る"のが解決なのか
それとも"トレードオフの関係自体を壊そうとする"ことが解決なのか
あるいはその両方か
あと、Googleは開発効率を優先して報奨金を出してるわけじゃないだろ
そもそもリリースした後のものは開発ではなく保守なんだから
あれは完璧に安全なものを作るのは不可能だから苦肉の策として行ってるだけ
てゆーか、ツッコミどころが多すぎるんですけど…
247デフォルトの名無しさん
2018/03/31(土) 10:29:59.95ID:E8qTp8R8248デフォルトの名無しさん
2018/03/31(土) 10:36:16.41ID:E8qTp8R8 >>246
バカじゃね?
Rustがその解決になってるかって観点がどこにもない
トレードオフの落としどころとしてRustにはなんの実績もないし、CやC++と周辺ツール合わせた環境に勝る性質もなにもないって言ってんの
ValgrindやCoverityみたいなツールに比べた優位性あるの?
ただ書きにくい言語がひとつ増えただけじゃん
バカじゃね?
Rustがその解決になってるかって観点がどこにもない
トレードオフの落としどころとしてRustにはなんの実績もないし、CやC++と周辺ツール合わせた環境に勝る性質もなにもないって言ってんの
ValgrindやCoverityみたいなツールに比べた優位性あるの?
ただ書きにくい言語がひとつ増えただけじゃん
249デフォルトの名無しさん
2018/03/31(土) 11:03:18.18ID:wLUR9MAo お前が元気で帰ってきてくれてよかったよ
職は見つからなかったんだね
職は見つからなかったんだね
250デフォルトの名無しさん
2018/03/31(土) 11:12:27.60ID:q0ZQKkqb251デフォルトの名無しさん
2018/03/31(土) 11:39:17.36ID:q0ZQKkqb 実績がないって言うのもFirefoxの一部は既にRustで置き換えられてるのに
君がそれを実績として認めないってだけだろ
ブラウザを一から実装しなおして、それが大きなバグを出すこともなく
Chromeと同レベルの実行速度を実現してるってだけでも充分に実績として認められると思うが。
Chromeに比べればシェアは少ないがそれでも世界中で数百万という人間がFirefoxを使ってるんだぞ
君がそれを実績として認めないってだけだろ
ブラウザを一から実装しなおして、それが大きなバグを出すこともなく
Chromeと同レベルの実行速度を実現してるってだけでも充分に実績として認められると思うが。
Chromeに比べればシェアは少ないがそれでも世界中で数百万という人間がFirefoxを使ってるんだぞ
252デフォルトの名無しさん
2018/03/31(土) 11:41:20.61ID:D1vbg0pQ そこは何億人ものって言わなきゃw
253デフォルトの名無しさん
2018/03/31(土) 11:43:55.45ID:q0ZQKkqb254デフォルトの名無しさん
2018/03/31(土) 11:46:03.70ID:0efq0OdT 3億人くらい?
255デフォルトの名無しさん
2018/03/31(土) 13:24:58.66ID:yT2VCMNA Javaなんて30億のデバイスで動いてんだぞ!
256デフォルトの名無しさん
2018/03/31(土) 14:14:44.03ID:ApL2p8x0 >>251
せめてchromeと同じシェア取ってから言って欲しいもんだ
せめてchromeと同じシェア取ってから言って欲しいもんだ
257デフォルトの名無しさん
2018/03/31(土) 14:32:47.34 Write once, run anywhere なんていう開発プラットフォームがあるらしい
Electronって言うんだって
Electronって言うんだって
258デフォルトの名無しさん
2018/03/31(土) 14:34:08.51ID:NaIZlBM+ native modules はい論破。
259デフォルトの名無しさん
2018/03/31(土) 15:26:33.15ID:tztr1ir/ chromeメモリ食いすぎなのでfirefox59に乗り換えたよ
260デフォルトの名無しさん
2018/03/31(土) 15:27:50.28ID:q0ZQKkqb >>256
"せめて"でChromeと同じシェアなのかよ。ハードル高すぎだろ
そんなのどんな言語使ったって数年じゃ無理だわ
もちろんChromeと同じC++を使って作り直しても無理だわ
どうやら君の御眼鏡にかなう言語はこの世のどこにも無さそうだな
"せめて"でChromeと同じシェアなのかよ。ハードル高すぎだろ
そんなのどんな言語使ったって数年じゃ無理だわ
もちろんChromeと同じC++を使って作り直しても無理だわ
どうやら君の御眼鏡にかなう言語はこの世のどこにも無さそうだな
261デフォルトの名無しさん
2018/03/31(土) 16:10:13.77ID:ApL2p8x0 Rustで書き直したら安全で高速なプログラムが簡単に書けるんだろう?
ならchromeのシェアを奪うのなんてすぐじゃないか
本当にRustにそれだけの性能があるなら
ならchromeのシェアを奪うのなんてすぐじゃないか
本当にRustにそれだけの性能があるなら
262デフォルトの名無しさん
2018/03/31(土) 16:22:16.04ID:D1vbg0pQ Chromeは昔のIEと同じくらい危険なブラウザになってきたよな。
やはり危険度はシェアで決まるんじゃないだろか。
そもそもあれだけ複雑で奇怪で大きなソフトウェアにバグが無いわけないし。
いやもちろん、HaskellやJavaやJavascriptのような安全な言語で書かれていれば一切のバグは無いんだろうけどさ。
やはり危険度はシェアで決まるんじゃないだろか。
そもそもあれだけ複雑で奇怪で大きなソフトウェアにバグが無いわけないし。
いやもちろん、HaskellやJavaやJavascriptのような安全な言語で書かれていれば一切のバグは無いんだろうけどさ。
263デフォルトの名無しさん
2018/03/31(土) 16:22:59.14ID:D1vbg0pQ ここRustスレだったかw
じゃあ、Rustのような安全な言語で書かれてればバグは無いんだろうけどさ。
じゃあ、Rustのような安全な言語で書かれてればバグは無いんだろうけどさ。
264デフォルトの名無しさん
2018/03/31(土) 16:25:50.13ID:D1vbg0pQ Chromeの開発者がRustで書き直したいと書き込んでるのは見たことあるけどな。
でも、書き直すったってそもそも発祥がKHTMLだしな。
Googleは出来損ないのブルドーザーみたいなもんだ。
でも、書き直すったってそもそも発祥がKHTMLだしな。
Googleは出来損ないのブルドーザーみたいなもんだ。
265デフォルトの名無しさん
2018/03/31(土) 16:37:28.69ID:ApL2p8x0 HaskellはともかくJSやJavaは安全なのかね?
まあスレチだが
まあスレチだが
266デフォルトの名無しさん
2018/03/31(土) 16:52:02.69ID:q0ZQKkqb >>261
>Rustで書き直したら安全で高速なプログラムが簡単に書けるんだろう?
誰もそんなこと一言も言ってないだろ。勝手に曲解しないでほしいな
C++よりはRustの方が設計が良いってだけ
そう言ったら次は"C++より良いって言うんならC++で書かれてるChromeより
Rustで書かれたFirefoxのシェアが少ないのはおかしい"って言い出すんだろ
既存資産はC++のほうが何十倍もある。資産が少ないってのはそれだけで不利だ
言語設計はダメだが資産の多いC++か、言語設計は良いが資産の少ないRustか、
どちらを選ぶかは人によって意見が変わるところだろう
資産の問題に関しては時間が解決してくれるかもしれない…希望的観測に過ぎないが…
>ならchromeのシェアを奪うのなんてすぐじゃないか
すぐなわけないだろ。
ブラウザを選ぶ基準なんて数え切れないほど色んな要素が絡み合ってるんだよ
その中には"なんとなく、みんなが使ってるから"なんてしょうもない理由も多く存在する
全ての人間が合理的な判断を下すわけじゃないんだ。そんな単純に事が運ぶわけがない
だから、ツッコミどころが多すぎるんだって…
>Rustで書き直したら安全で高速なプログラムが簡単に書けるんだろう?
誰もそんなこと一言も言ってないだろ。勝手に曲解しないでほしいな
C++よりはRustの方が設計が良いってだけ
そう言ったら次は"C++より良いって言うんならC++で書かれてるChromeより
Rustで書かれたFirefoxのシェアが少ないのはおかしい"って言い出すんだろ
既存資産はC++のほうが何十倍もある。資産が少ないってのはそれだけで不利だ
言語設計はダメだが資産の多いC++か、言語設計は良いが資産の少ないRustか、
どちらを選ぶかは人によって意見が変わるところだろう
資産の問題に関しては時間が解決してくれるかもしれない…希望的観測に過ぎないが…
>ならchromeのシェアを奪うのなんてすぐじゃないか
すぐなわけないだろ。
ブラウザを選ぶ基準なんて数え切れないほど色んな要素が絡み合ってるんだよ
その中には"なんとなく、みんなが使ってるから"なんてしょうもない理由も多く存在する
全ての人間が合理的な判断を下すわけじゃないんだ。そんな単純に事が運ぶわけがない
だから、ツッコミどころが多すぎるんだって…
267デフォルトの名無しさん
2018/03/31(土) 16:58:36.90ID:D1vbg0pQ Boostはオナニーし過ぎのグロマンコみたいなもんだが使わざるを得ないって話か。
268デフォルトの名無しさん
2018/03/31(土) 17:01:22.81ID:D1vbg0pQ Javascriptのお勉強をした結果、GCは何の解決にもならないことが分かった。
むしろ危険。
ライブラリがリークについて何も考えていないんだもん。
むしろ危険。
ライブラリがリークについて何も考えていないんだもん。
269デフォルトの名無しさん
2018/03/31(土) 17:02:54.36ID:D1vbg0pQ なんでだろ〜なんでだろ〜と検索した結果、あの有名な企業のブログで解決策を発見。
曰く、ライブラリがリークするようにできてるから、一定時間で再起動とか。
そんなのが多すぎた。
曰く、ライブラリがリークするようにできてるから、一定時間で再起動とか。
そんなのが多すぎた。
270デフォルトの名無しさん
2018/03/31(土) 18:56:11.43ID:ApL2p8x0 ぐだぐだ言い訳してるのを総合すると
「モノは良いけど使い手が少ないせいで流行らない」ってか?
使い手が少ないのはものが悪いってことだろ。残念でした
「モノは良いけど使い手が少ないせいで流行らない」ってか?
使い手が少ないのはものが悪いってことだろ。残念でした
271デフォルトの名無しさん
2018/03/31(土) 18:58:11.61ID:ApL2p8x0 Go言語見てみろ
モノはいろいろと微妙だがCやC++と比べて強烈な利点があるから、リリースがRustと同じか遅いくらいなのに流行ってるだろ
Rustはどうなんですかねえ?
モノはいろいろと微妙だがCやC++と比べて強烈な利点があるから、リリースがRustと同じか遅いくらいなのに流行ってるだろ
Rustはどうなんですかねえ?
272デフォルトの名無しさん
2018/03/31(土) 20:27:06.89ID:PqROMcrp つまりPHPが最良の言語ってわけか
273デフォルトの名無しさん
2018/03/31(土) 20:42:09.87ID:oZoT3jkC わざわざRustスレまできて延々粘着アンチとかかまってほしい爺さんみたいで見苦しいからやめろ
274デフォルトの名無しさん
2018/03/31(土) 20:45:48.24ID:D1vbg0pQ275デフォルトの名無しさん
2018/03/31(土) 21:14:47.08 かま爺
276デフォルトの名無しさん
2018/03/31(土) 21:55:49.66ID:dXOBbz7B いくらモノがクソでも流行ってるって一点で考慮に入れる必要はあるし、
逆にどんなに良いものでも流行ってなければ選外になるのは事実よね
PHPが流行ってるのは時代的に残念な背景があるとはいえ、
Goが流行るのは明確な理由があるんじゃないか?
逆にどんなに良いものでも流行ってなければ選外になるのは事実よね
PHPが流行ってるのは時代的に残念な背景があるとはいえ、
Goが流行るのは明確な理由があるんじゃないか?
277デフォルトの名無しさん
2018/03/31(土) 22:11:12.54ID:7TTU0i1a それについて掘り下げる意義はないと思いますよ
278デフォルトの名無しさん
2018/03/31(土) 22:16:22.26ID:dXOBbz7B まあ確かにないな
せめて日本語で本が出る程度には流行って欲しいが……
今のRustに足りないものってなんだろうな
RubyのRailsみたいに、ある領域のキラーフレームワークみたいなのが欲しいが
Rustがそれを作れる領域って今のところWebAssemblyくらいしかないんだよな
しかもそのWebAssemblyも、GCが入ったらGoとの立ち位置が逆転するし
せめて日本語で本が出る程度には流行って欲しいが……
今のRustに足りないものってなんだろうな
RubyのRailsみたいに、ある領域のキラーフレームワークみたいなのが欲しいが
Rustがそれを作れる領域って今のところWebAssemblyくらいしかないんだよな
しかもそのWebAssemblyも、GCが入ったらGoとの立ち位置が逆転するし
279デフォルトの名無しさん
2018/04/01(日) 07:31:46.82ID:QnuEAtVo それはgoが流行っている理由を語るのと同義ではないですか
280デフォルトの名無しさん
2018/04/01(日) 07:36:32.82ID:nW/fPqLD Goこそブランドの影響だと思うけどなw
Googleって会社も初期メンバーこそキレキレの人間だったのかもしれんが
ブランドイメージが先行しだしたころから
そこにはそこに憧れて集っちゃった凡人がうじゃうじゃだということを忘れてはならない
Googleって会社も初期メンバーこそキレキレの人間だったのかもしれんが
ブランドイメージが先行しだしたころから
そこにはそこに憧れて集っちゃった凡人がうじゃうじゃだということを忘れてはならない
281デフォルトの名無しさん
2018/04/01(日) 08:59:01.17ID:aM38sJCa rustは
ゼロ抽象化みたいな機能ブランドに憧れて集まっちゃった凡人がうじゃうじゃだよね
ゼロ抽象化みたいな機能ブランドに憧れて集まっちゃった凡人がうじゃうじゃだよね
282デフォルトの名無しさん
2018/04/01(日) 09:02:36.32ID:N/JoH072 機能ブランドってなに?中身ないの?
283デフォルトの名無しさん
2018/04/01(日) 09:31:03.82ID:r/SQKbFj ないよ。あったらもっと人集まってるよ
284デフォルトの名無しさん
2018/04/01(日) 09:41:07.81ID:r/SQKbFj RustはCやC++を書くのに疲れた人のための言語という位置付けなのに
Rustを書ける奴は別にCやC++書くのに困らないって
イカれた習得難易度に作ってしまったのがそもそもの失敗
Rustのターゲットは別にRustなんて使わなくてもいいかそもそもRustを使えないかの二択
ドンピシャなターゲットが存在しないから流行りようがない
Rustを書ける奴は別にCやC++書くのに困らないって
イカれた習得難易度に作ってしまったのがそもそもの失敗
Rustのターゲットは別にRustなんて使わなくてもいいかそもそもRustを使えないかの二択
ドンピシャなターゲットが存在しないから流行りようがない
285デフォルトの名無しさん
2018/04/01(日) 09:51:30.48ID:QnuEAtVo rustを書ける人でcやc++で困らないと結論した人が沢山いるということですか?
286デフォルトの名無しさん
2018/04/01(日) 10:13:31.75ID:9alzQdGn >>284
>RustはCやC++を書くのに疲れた人のための言語という位置付け
これは事実だけど、C++より簡単に書けることを目指して作ったわけじゃなくて
ポインタ周りのバグ(特にバッファオーバーフローなどが原因のセキュリティホール)
に悩まされてきた人間のために作られた言語だからな
セキュリティを考えてない奴からすれば無用な長物にしか見えないんだろう
>RustはCやC++を書くのに疲れた人のための言語という位置付け
これは事実だけど、C++より簡単に書けることを目指して作ったわけじゃなくて
ポインタ周りのバグ(特にバッファオーバーフローなどが原因のセキュリティホール)
に悩まされてきた人間のために作られた言語だからな
セキュリティを考えてない奴からすれば無用な長物にしか見えないんだろう
287デフォルトの名無しさん
2018/04/01(日) 10:21:58.94ID:9alzQdGn >>286
訂正:無用な長物→無用の長物
訂正:無用な長物→無用の長物
288デフォルトの名無しさん
2018/04/01(日) 11:14:37.02ID:r/SQKbFj289デフォルトの名無しさん
2018/04/01(日) 11:17:57.70ID:FEh/C/xR290デフォルトの名無しさん
2018/04/01(日) 11:21:05.39ID:r/SQKbFj ああそれはあるかもな
実用というより教育目的な言語としては確かにアリだ
実用というより教育目的な言語としては確かにアリだ
291デフォルトの名無しさん
2018/04/01(日) 11:36:26.93ID:9alzQdGn >>288
>Rustできちんとコード書ける実力あるなら
>CやC++でもセキュリティホール作り込まないプログラミングできるだろって話な
出来ないからC++ではValgrindとかのツール使ってチェックしてるんだろ
じゃあツールを必ず使うようにすればいいじゃんって話にはなるが…
>Rustできちんとコード書ける実力あるなら
>CやC++でもセキュリティホール作り込まないプログラミングできるだろって話な
出来ないからC++ではValgrindとかのツール使ってチェックしてるんだろ
じゃあツールを必ず使うようにすればいいじゃんって話にはなるが…
292デフォルトの名無しさん
2018/04/01(日) 11:39:14.42ID:9alzQdGn そもそもValgrindみたいなメモリリークをチェックする類のツールって
Rustのボローチェッカと比べるとどの程度信用できるのかね?
Rustのボローチェッカと比べるとどの程度信用できるのかね?
293デフォルトの名無しさん
2018/04/01(日) 11:47:08.80ID:jrLYAFkE あまり信用出来ない
スマートポインタを(適切に)使ってればそもそも解放忘れはしないし
配列に確保しっぱなし系のリークは検知してくれない
スマートポインタを(適切に)使ってればそもそも解放忘れはしないし
配列に確保しっぱなし系のリークは検知してくれない
294デフォルトの名無しさん
2018/04/01(日) 11:55:47.66ID:9alzQdGn >>293
>あまり信用できない
>配列に確保しっぱなし系のリークは検知してくれない
そっか、やっぱりRustのボローチェッカには劣るか
>スマートポインタを(適切に)使ってればそもそも解放忘れはしない
「適切に」ってところがポイントだよね
たとえ熟練のC++erがどれだけ注意してコーディングしてたって
「うっかりミス」はいつか絶対に起きるんだし
>あまり信用できない
>配列に確保しっぱなし系のリークは検知してくれない
そっか、やっぱりRustのボローチェッカには劣るか
>スマートポインタを(適切に)使ってればそもそも解放忘れはしない
「適切に」ってところがポイントだよね
たとえ熟練のC++erがどれだけ注意してコーディングしてたって
「うっかりミス」はいつか絶対に起きるんだし
295デフォルトの名無しさん
2018/04/01(日) 12:42:04.82 C++でボローチェッカをエミュレーションできないの?
296デフォルトの名無しさん
2018/04/01(日) 12:44:43.78ID:BOTWSFOl C++ちゃんとかけるならRustも楽勝でしょ。
297デフォルトの名無しさん
2018/04/01(日) 13:57:47.26ID:QnuEAtVo >>288
できないよ、人間だもの
できないよ、人間だもの
298デフォルトの名無しさん
2018/04/01(日) 14:16:47.69ID:1ng3UkJB valgrind使うと実行時間とてつもなく遅くなるし実行時間長いプログラムだと辛い
ASANでも2倍くらい遅くなるので辛いのは同じ
コンパイル時に静的に分かる方が嬉しいし、たまにしか通らないパスもチェックされるのでより安全
ASANでも2倍くらい遅くなるので辛いのは同じ
コンパイル時に静的に分かる方が嬉しいし、たまにしか通らないパスもチェックされるのでより安全
299デフォルトの名無しさん
2018/04/01(日) 19:22:10.86ID:aM38sJCa まあ結局unsafe部分はチェックできないけどね。
その場合でもコンパイル通ったからと主張しだす輩で溢れてる。
その場合でもコンパイル通ったからと主張しだす輩で溢れてる。
300デフォルトの名無しさん
2018/04/01(日) 19:26:04.60ID:QnuEAtVo どこに溢れてるの?
301デフォルトの名無しさん
2018/04/01(日) 19:51:17.12ID:Vaw8NqEv 脳内
302デフォルトの名無しさん
2018/04/01(日) 21:39:06.35ID:N/JoH072 C++20では生ポが非推奨になるらしいけど
unsafeはチェックできないのと同様に意味がないですね
unsafeはチェックできないのと同様に意味がないですね
303デフォルトの名無しさん
2018/04/01(日) 21:53:26.11ID:aM38sJCa 他言語呼んでもメモリリーク起きないとかこのスレでも喚いてた輩がいたわけだが。
drop trait を明示的に書かなっきゃならんとかそいつら全く理解してないだろ。
drop trait を明示的に書かなっきゃならんとかそいつら全く理解してないだろ。
304デフォルトの名無しさん
2018/04/01(日) 21:55:16.18ID:9alzQdGn305デフォルトの名無しさん
2018/04/02(月) 11:44:35.64ID:z3JOGYz+ 生ポインタ使えることがC++の唯一のメリットなのに
それを非推奨にするなら別の言語使ったほうがマシだろ
それを非推奨にするなら別の言語使ったほうがマシだろ
306デフォルトの名無しさん
2018/04/03(火) 12:33:46.66ID:GZlQK3q7 RustがC++に実用面で勝ってることなんかある?
307デフォルトの名無しさん
2018/04/03(火) 13:06:14.98ID:cmHjEB2c 勝っているかどうかは知らんが
cargo/crates.io相当のものがないから
新規アプリをC++で書く気はしなくなってしまった。
もしかして最近は便利になってたりするんだろうか。
cargo/crates.io相当のものがないから
新規アプリをC++で書く気はしなくなってしまった。
もしかして最近は便利になってたりするんだろうか。
308デフォルトの名無しさん
2018/04/03(火) 17:54:07.91ID:lesCWZwY 全称命題にするからすぐ反論される
309デフォルトの名無しさん
2018/04/03(火) 21:15:38.01ID:zqNShNDp ペチパーのわしでも書けるのが勝ってる
310デフォルトの名無しさん
2018/04/03(火) 21:18:30.15ID:BzNmSsTz しかしインスタンスを変に共有しなけりゃ解放タイミングを
いちいち気にしなくていいって発想は面白い。
いちいち気にしなくていいって発想は面白い。
311デフォルトの名無しさん
2018/04/03(火) 23:40:54.16ID:K5huRztI いや、それ当たり前のことだから。
312デフォルトの名無しさん
2018/04/04(水) 00:15:13.34ID:e/ecM7t7313デフォルトの名無しさん
2018/04/07(土) 01:03:26.54ID:T+RwBbo7 参照カウントガベージコレクションにもスマートポインタにも興味ないrust信者すごいね
314デフォルトの名無しさん
2018/04/07(土) 06:53:26.51ID:k/xupSTU GCに興味ないのはともかく
BoxとかRcとかモロにスマートポインタだから興味ないとか以前の問題なんだが?
BoxとかRcとかモロにスマートポインタだから興味ないとか以前の問題なんだが?
315デフォルトの名無しさん
2018/04/07(土) 07:02:17.22ID:sb7KGbUH というかなんで今になって参照カウンタGCなんて超素朴なGC実装を引き合いに出すのかが分からん
Goですらそんなもん使ってねえぞ
Goですらそんなもん使ってねえぞ
316デフォルトの名無しさん
2018/04/07(土) 07:10:17.71ID:sb7KGbUH ……まさかとは思うがC++のshared_ptrのことを指して参照カウントGCと称してないよな?
RustではRcとかArcがそれに該当するから、この文脈でも完全に的はずれになるが
RustではRcとかArcがそれに該当するから、この文脈でも完全に的はずれになるが
317デフォルトの名無しさん
2018/04/10(火) 11:37:36.43ID:pRwunYlM318デフォルトの名無しさん
2018/04/12(木) 01:27:42.33ID:JdbozTc/ 久しぶりに見に来たらアンチが帰ってきてるじゃん。
せっかくだから、おれも反論レスを書き込むことにする。
せっかくだから、おれも反論レスを書き込むことにする。
319デフォルトの名無しさん
2018/04/12(木) 01:28:00.22ID:JdbozTc/320デフォルトの名無しさん
2018/04/12(木) 01:28:37.08ID:JdbozTc/ >>299
unsafeなんてC FFIしようとか考えない限りあまり使うことないよ
tokio-coreとかhyperとかhtml5everとかのソースコード見てきなよ
unsafe使ってる箇所なんて10箇所あるかないかってところだから。
コード全域に気を配らなきゃならないのか、たった10箇所程度に気を付けてれば良いのか、
どちらが楽(安全)なのかは火を見るよりも明らかだよね
unsafeなんてC FFIしようとか考えない限りあまり使うことないよ
tokio-coreとかhyperとかhtml5everとかのソースコード見てきなよ
unsafe使ってる箇所なんて10箇所あるかないかってところだから。
コード全域に気を配らなきゃならないのか、たった10箇所程度に気を付けてれば良いのか、
どちらが楽(安全)なのかは火を見るよりも明らかだよね
321デフォルトの名無しさん
2018/04/12(木) 01:30:08.73ID:JdbozTc/ >>303
これに関しては自分がC FFIのコードを滅多に書かないから「そうだったっけ?」くらいにしか考えなかったけどよく考えたら全然違うよね。
まず、値渡しなら引数・戻り値ともに何の問題もない。そのまま渡せばいい。
ポインタ渡し(Box<T>)だった場合はCの関数の引数が所有権か借用のどちらを欲してるのかを確認して、
所有権を欲しがってるならBox::into_raw(x)で所有権を渡せばいいし、
借用が必要ならx.as_ref() as *const _ もしくはx.as_mut() as *mut _で渡せばいい。
戻り値の方ではC側から所有権が渡されてるはずだからBox::from_raw(px)でBox<T>に戻せばOK。
文字列(String)の場合はCStringに変換してから後はBox<T>と同様にinto_raw, from_raw使えばいいだけ。
Vec<T>とかを渡そうとする場合はx.as_ptr()またはx.as_mut_ptr()と場合によってはmem::forget(x)が必要になるんじゃないかな?
受け取る場合はVec::from_raw_parts(px, len, cap)を使えばいいはず。(前述のとおりC FFIはあまり詳しくはないので間違ってたら指摘して下さい)
unsafeの中に何を書けば良いのかはC側のどんな関数を呼ぶのか次第で変わってくるけど、少なくともDropトレイトに関しては全く必要ない。
Box<T>やVec<T>等にあらかじめ実装されてるDropトレイトに任せればいいだけ。むしろ君はDropトレイト使って一体何する気だったのか…?
これに関しては自分がC FFIのコードを滅多に書かないから「そうだったっけ?」くらいにしか考えなかったけどよく考えたら全然違うよね。
まず、値渡しなら引数・戻り値ともに何の問題もない。そのまま渡せばいい。
ポインタ渡し(Box<T>)だった場合はCの関数の引数が所有権か借用のどちらを欲してるのかを確認して、
所有権を欲しがってるならBox::into_raw(x)で所有権を渡せばいいし、
借用が必要ならx.as_ref() as *const _ もしくはx.as_mut() as *mut _で渡せばいい。
戻り値の方ではC側から所有権が渡されてるはずだからBox::from_raw(px)でBox<T>に戻せばOK。
文字列(String)の場合はCStringに変換してから後はBox<T>と同様にinto_raw, from_raw使えばいいだけ。
Vec<T>とかを渡そうとする場合はx.as_ptr()またはx.as_mut_ptr()と場合によってはmem::forget(x)が必要になるんじゃないかな?
受け取る場合はVec::from_raw_parts(px, len, cap)を使えばいいはず。(前述のとおりC FFIはあまり詳しくはないので間違ってたら指摘して下さい)
unsafeの中に何を書けば良いのかはC側のどんな関数を呼ぶのか次第で変わってくるけど、少なくともDropトレイトに関しては全く必要ない。
Box<T>やVec<T>等にあらかじめ実装されてるDropトレイトに任せればいいだけ。むしろ君はDropトレイト使って一体何する気だったのか…?
322デフォルトの名無しさん
2018/04/12(木) 01:30:27.15ID:JdbozTc/ Rustのアンチするのは一向に構わんが、せめて嘘をつくのはやめようね。
323デフォルトの名無しさん
2018/04/12(木) 03:23:54.50ID:XYZqcSuW C FFIとやらを使うためにはRustの知識だけでなくCの知識も必要
Rustだけ学べばいいなんてことはない
Rustだけ学べばいいなんてことはない
324デフォルトの名無しさん
2018/04/12(木) 06:41:03.77ID:1NMGlh89 >>323
cの関数呼ぶんだから当然だろ
cの関数呼ぶんだから当然だろ
325デフォルトの名無しさん
2018/04/12(木) 09:05:15.80ID:IekpLPdE326デフォルトの名無しさん
2018/04/12(木) 11:33:57.87ID:6MGFsFO1 >>325
Rust側でDropしないためにDropの実装を上書きする必要があるということ?
Rust側でDropしないためにDropの実装を上書きする必要があるということ?
327デフォルトの名無しさん
2018/04/12(木) 12:23:34.05ID:IekpLPdE328デフォルトの名無しさん
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を使わないから詳しくはないので、間違ってたら指摘して下さい)
>>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を使わないから詳しくはないので、間違ってたら指摘して下さい)
329デフォルトの名無しさん
2018/04/12(木) 15:11:14.26ID:UiqgOhpn330デフォルトの名無しさん
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側にメモリの解放処理も頼む必要がある
ちょっと言ってる意味がわからない
Cでmallocされたものであっても所有権ごと渡されていれば解放の責任はRustにある
ていうか、Rust側で勝手に解放しちゃいけないと言ってるのに
Dropトレイトの実装でfreeしたらやっぱりRust側で勝手に解放しちゃってるじゃん
言ってること矛盾してない?
CとRustで型のメモリレイアウトが一致してればあとはBox型に任せるだけだよ
Cから渡されてくるポインタの型のメモリレイアウトが公開されていなければ
(つまりvoidポインタだったりオペーク構造体(オペークポインタ)だったなら)話は別だけど。
その場合はRustはハンドルをもらうだけでいかなる操作(メモリの解放(free)も含む)もC FFIでC側に
頼むしかない(メモリレイアウトがわからない限りはRust側ではどうあがいても何も出来ない)ので
Dropトレイト実装してdrop時にC側にメモリの解放処理も頼む必要がある
331デフォルトの名無しさん
2018/04/12(木) 18:12:43.26ID:B4Vmqq7H FFIの場合jemallocかシステムのmallocかの違い問題になることありそう
332デフォルトの名無しさん
2018/04/12(木) 21:02:25.76ID:EBEN0Rpp >その場合はRustはハンドルをもらうだけでいかなる操作(メモリの解放(free)も含む)もC FFIでC側に
>頼むしかない(メモリレイアウトがわからない限りはRust側ではどうあがいても何も出来ない)ので
>Dropトレイト実装してdrop時にC側にメモリの解放処理も頼む必要がある
だからDropトレイトを意識的に実装せにゃならんと始めから言ってるだろうに。
このタイプは絶対仕事でモメるわ。
>頼むしかない(メモリレイアウトがわからない限りはRust側ではどうあがいても何も出来ない)ので
>Dropトレイト実装してdrop時にC側にメモリの解放処理も頼む必要がある
だからDropトレイトを意識的に実装せにゃならんと始めから言ってるだろうに。
このタイプは絶対仕事でモメるわ。
333デフォルトの名無しさん
2018/04/12(木) 22:43:32.09ID:JdbozTc/ >>322
だったら「Rust側からはメモリレイアウトが分からないようなvoidポインタや
オペーク構造体がC側から渡された場合は」という前提条件をきちんと書け。
条件を何も書かずに「drop trait を明示的に書かなきゃならん」とだけ書かれれば
全ての場合で必要だと言っているようにしか見えない。
あと、>>321で「全く」と書いてしまったことは悪かったと思っている
>>321を書いてる時点は上記のような可能性に気づいていなかった…申し訳ない。
お前みたいに「特定の条件下でしか適用されないこと」に対して条件を書かずに結論だけ書いて
「自分はきちんと伝えた」とか思っちゃってるキチガイとの仕事とかこっちの方から願い下げだから。
だったら「Rust側からはメモリレイアウトが分からないようなvoidポインタや
オペーク構造体がC側から渡された場合は」という前提条件をきちんと書け。
条件を何も書かずに「drop trait を明示的に書かなきゃならん」とだけ書かれれば
全ての場合で必要だと言っているようにしか見えない。
あと、>>321で「全く」と書いてしまったことは悪かったと思っている
>>321を書いてる時点は上記のような可能性に気づいていなかった…申し訳ない。
お前みたいに「特定の条件下でしか適用されないこと」に対して条件を書かずに結論だけ書いて
「自分はきちんと伝えた」とか思っちゃってるキチガイとの仕事とかこっちの方から願い下げだから。
334デフォルトの名無しさん
2018/04/12(木) 22:50:55.21ID:JdbozTc/336デフォルトの名無しさん
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
「勝手に」の部分が曖昧だったので正確に書くと、
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してもらうしかないということか…
じゃあ今まで俺が書いた方法じゃダメなケースもあるじゃん…すまん。
自分の無知を晒す羽目にはなったが、むしろ今知れてよかったわ。
でも、そうなると新たな疑問が…
マジか…mallocとjemallocは混在できないのか…
そうなると、C側でmallocされてれば必ずC側にfreeしてもらうしかないということか…
じゃあ今まで俺が書いた方法じゃダメなケースもあるじゃん…すまん。
自分の無知を晒す羽目にはなったが、むしろ今知れてよかったわ。
でも、そうなると新たな疑問が…
338デフォルトの名無しさん
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してたぞ…(^_^;)
まあ、どのアロケータ使ってるかなんて誰も気にも留めてなかったし大丈夫だろうけど、
今後は気を付けないとな…
間違いの指摘と情報提供のお礼言うの忘れてた。Thanks!
あと、これってRustでのC FFI に限った話じゃないよね?
C同士でさえもアロケータに何を使ってるか次第で同じ問題が発生する。
Cは時々使ってたのに(しかも仕事で)これを知らなかったのはヤバいな…
恐らく今まではたまたま同じアロケータを使ってたから問題が起きてなかっただけか…
戻り値で文字列(char *)が来た時とかこっちで勝手にfreeしてたぞ…(^_^;)
まあ、どのアロケータ使ってるかなんて誰も気にも留めてなかったし大丈夫だろうけど、
今後は気を付けないとな…
340デフォルトの名無しさん
2018/04/13(金) 01:26:39.63ID:V+3RqgGh すべての有用なライブラリがRust製にならない限り
Rustだけを学べばよいという状況は訪れずCやC++の習得も必須
Rustだけを学べばよいという状況は訪れずCやC++の習得も必須
341デフォルトの名無しさん
2018/04/13(金) 02:09:57.24ID:zBD4nIN6 >>339
どういたしまして。
C同士の場合は普通glibcへの動的リンクだし
LD_PRELOADとかでjemallocなんかに差し替えても
プログラム全体で差し替わるから特に問題にはならないかと。
もしメモリアロケータを静的リンクしたライブラリとかを使っていればまずいはず。
ただそういう場合はリソースハンドルっぽいAPIになりがちなので
そのままfreeしようとは思わないかもしれない。
どういたしまして。
C同士の場合は普通glibcへの動的リンクだし
LD_PRELOADとかでjemallocなんかに差し替えても
プログラム全体で差し替わるから特に問題にはならないかと。
もしメモリアロケータを静的リンクしたライブラリとかを使っていればまずいはず。
ただそういう場合はリソースハンドルっぽいAPIになりがちなので
そのままfreeしようとは思わないかもしれない。
342デフォルトの名無しさん
2018/04/13(金) 02:17:49.88ID:I2PL3qG3 >>340
そりゃそうだろ、なにいってんだ
そりゃそうだろ、なにいってんだ
343デフォルトの名無しさん
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
or
RustとC/C++を覚える
学習コスト高すぎRust
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「もうキモくてキモくて…」29歳女性が語る“おぢアタック”の実態。「俺ならイケるかも」年下女性を狙う勘違い中年男性に共通点が★4 [Hitzeschleier★]
- ミス・ユニバース フィンランド代表の「つり目」写真が波紋… 本人釈明も批判やまず 協会謝罪「徹底的に検証」へ [冬月記者★]
- 【おこめ券】鈴木憲和農相 小泉前農相の備蓄米放出を“反省”「備蓄の円滑な運営を図ってまいります」 [Hitzeschleier★]
- 自民・麻生太郎副総裁 石破政権の1年は「どよーん」 高市政権発足で「何となく明るくなった」「世の中のことが決まり動いている」★2 [Hitzeschleier★]
- 1人3千円の食品高騰対策、何に使える? あいまいなまま衆院通過 [蚤の市★]
- ゆたぼん 二重手術を報告「めちゃくちゃ気に入っています」 [muffin★]
- お前らがやってるバイト教えて
- トランプ、G7に代わるcore 5を発表 [805596214]
- 女だけど友達の家行こうと思ったけど車動かないんだけど
- 【悲報】新米、全く売れなくて倉庫が満杯になってしまうwwwwwwwwwwwwwwwwwwww [802034645]
- 【悲報】日本共産党、ツイッター速報にブチギレ法的措置WWWWWWWWWWWWWWWWWWWWWWWWWWWW [935793931]
- 木曜日のんなっしょい❗(・o・🍬)仕放題スレ🏡
