X



Rust Part6

■ このスレッドは過去ログ倉庫に格納されています
0146デフォルトの名無しさん
垢版 |
2018/08/20(月) 21:31:16.82ID:1nsldRzy
いやだって、なんでわざわざこの題材っていう
リソーススタベーションに対する
Rustならではのスマートな解答があるのかと思えば、ナニコレ
ならなんでこの題材にしたのか不明
0147デフォルトの名無しさん
垢版 |
2018/08/20(月) 21:38:09.93ID:rDwzmoqy
Rustにスマートさなんてないただある種の間違いが少なくなると主張している

なにをやるにもつっかかる
Rustだけに
0148デフォルトの名無しさん
垢版 |
2018/08/20(月) 21:41:58.64ID:1nsldRzy
Rustは並列性がどうとか言ってなかったっけ
それで最初の題材でコレもってくるセンスが謎
0149デフォルトの名無しさん
垢版 |
2018/08/20(月) 22:08:57.88ID:JBCtYT+G
何が謎か分からん
0150デフォルトの名無しさん
垢版 |
2018/08/20(月) 22:23:58.46ID:7YukIB6U
>>146
ここは書いた本人的にもいまいちだったと思っていたらしく、本家では結構前に削除されてる。
まあチュートリアルならせめてmutexではなくchannelだとは思う。
0151デフォルトの名無しさん
垢版 |
2018/08/20(月) 22:34:49.09ID:JBCtYT+G
うーむそうかな
並列処理ではmutexはかなり一般的で本質的だと思うけど
ロックを得ないことに安全に並列処理はできないのだし
0154デフォルトの名無しさん
垢版 |
2018/08/20(月) 22:47:50.39ID:7YukIB6U
>>151
一般的で本質的ってのはその通りだと思うけど、
チュートリアルで一番最初に導入すべきかというと、そうでもないのでは?って感じかな。
0156デフォルトの名無しさん
垢版 |
2018/08/20(月) 23:03:39.98ID:GHO1XUgy
Kernicharhan & Ritchie
0158デフォルトの名無しさん
垢版 |
2018/08/21(火) 07:16:48.68ID:eRQ3K4Ir
rustらしさといえば&と&mutの仕組みがそのままスレッド間でも使えるところとか
RAIIとかmoveも良いけどc++にもあるので
0159デフォルトの名無しさん
垢版 |
2018/08/21(火) 13:49:43.65ID:gNkN0CkF
rustらしく書いたコードって、&と&mutが大量に出てきて、なんか見た目ごちゃついてない?
move多用で書きたくなる
0161デフォルトの名無しさん
垢版 |
2018/08/21(火) 19:13:44.58ID:9N93jiAN
&やmutはまだいいけどライフタイムとジェネリクスが入り乱れると頭抱える
自分じゃ書けないからライブラリのコード読むときだけど
0162デフォルトの名無しさん
垢版 |
2018/08/21(火) 21:48:12.99ID:b9rnTQC8
impl traitでちょっと楽になったけど、書きながら試行錯誤しているときに関数にして切り出すのが面倒
ちゃんと設計しろよって言われるかもしれんが、rustの仕様とライブラリ全部きっちり頭に入れるのも非現実的だと思ってる
0165164
垢版 |
2018/08/22(水) 19:53:16.67ID:RyuF5Err
わるい。バグは修正したんだった。削除した理由はこっち。
ttps://github.com/rust-lang/rust/pull/30595

> まあチュートリアルならせめてmutexではなくchannelだとは思う。
これも冒頭二段落に書いてある。
0166デフォルトの名無しさん
垢版 |
2018/08/23(木) 01:21:36.71ID:vCVCF+WZ
存在型と量化子安定してたのか。
( ゚∀゚)o彡゚G・A・T!!
( ゚∀゚)o彡゚G・A・T!!
( ゚∀゚)o彡゚G・A・T!!
0168デフォルトの名無しさん
垢版 |
2018/08/23(木) 23:27:32.87ID:EN+b8ws+
交換を一回しかしない配列の回転の応用だからJon BentleyのProgramming Pearlsだな。
0170デフォルトの名無しさん
垢版 |
2018/08/24(金) 12:20:35.42ID:ZVlysGry
>>169
つまらんよ
0175デフォルトの名無しさん
垢版 |
2018/09/01(土) 01:39:37.63ID:qa+GqmPA
VSCodeでRust Tool Missingと出てたからクリックしたらエラーたくさん出た。
ググったらNightlyのコンパイラじゃないとRacer(レイサーってのがRust Toolのこと?)は入れられないと
あったから。とりあえずRust Nightlyを入れた。
その後、また同じように入れようとしてみる。
cargo install racer && cargo install rustfmt && cargo install rustsym Updating registry `https://github.com/rust-lang/crates.io-index`

ダメだった!エラーが5個くらい出る。
どうすれば良いの?
0178デフォルトの名無しさん
垢版 |
2018/09/02(日) 05:13:21.00ID:wH0i7ysW
VSCodeって言っちゃったのがまずかった
VSCodeのターミナル(WSLのzsh)で出たエラーだから、MacでもLinuxでも、このエラー起こると思う!
最近Rustインストールした人で、同じエラー出ている人いないかな?
GithubのRacerに書かれてある方法で試してみる・・
0179デフォルトの名無しさん
垢版 |
2018/09/02(日) 08:10:44.09ID:KdakvMsf
エラーを書かずに同じエラーとわ
0181デフォルトの名無しさん
垢版 |
2018/09/03(月) 23:57:51.98ID:HH7kYsUG
Rustで使いやすいGUIツールキットってどんなのがあるんだろうな
マルチプラットフォームかつネイティブでそこそこのパフォーマンスを得られるのが良い
wxWidgetsは有名だけどwxRustは3年放置されている。使えるのかな
0182デフォルトの名無しさん
垢版 |
2018/09/04(火) 00:37:25.68ID:JHljRMUU
良い塩梅に発酵したときが食べ頃
0183デフォルトの名無しさん
垢版 |
2018/09/04(火) 02:01:24.43ID:ph6Gu5BU
>>181
gtk-rsは?
前にちょっと触ってみただけだから実用レベルかは知らんが
今でも積極的にコミットされてるから期待はできそう

純Rust製ならPistonが作ってるconrodかな?winitとgliumをベースにしてるっぽい?
こっちは使ったことすら無いんで全く分からん
純Rust製に惹かれたが、なかなか時間が作れなくて放置中…
因みにwinitはイベント管理用でgliumはOpenGLのクレートね
0185デフォルトの名無しさん
垢版 |
2018/09/04(火) 09:10:47.26ID:hvcJ5TzR
>>178
GithubのRacerに書いてあるとおりにやったらいけた
Rust Nightlyを入れただけではダメで
rustup toolchain add nightly
cargo +nightly install racer
でいけた。Multirustという機能があるからNightlyを使いたければ毎回指定するということを初めて知った
0186デフォルトの名無しさん
垢版 |
2018/09/04(火) 10:31:00.23ID:gEGTZvcA
>>184
+1
0187デフォルトの名無しさん
垢版 |
2018/09/04(火) 21:01:57.03ID:T2pQ9bem
>>184
ワロタ
0189デフォルトの名無しさん
垢版 |
2018/09/05(水) 03:15:12.05ID:Ozj2BDZl
RLSだけでいいの?それならRLSでいきたい
でもNightlyをデフォルトに設定したらRLSがスタートできなかった
0191181
垢版 |
2018/09/05(水) 07:39:35.54ID:6RBOwdE6
>>183
ありがとう。GTK+が無難ですかね。gtk-rsを試してみます

純Rustは確かに惹かれますがこれってネイティブなのだろうか・・・
0193デフォルトの名無しさん
垢版 |
2018/09/05(水) 07:48:44.63ID:dKL5q8IE
>>183
>>191
gtkってマルチプラットフォームと言えるの?
Linuxでしかまともに動かないイメージ
まあWindowsでは最低限は動くのかもしれんけどmacOSではダメダメでしょう
0194181
垢版 |
2018/09/05(水) 08:06:31.33ID:6RBOwdE6
>>193
そうなの?
まぁ今回の用途はWindowsとLinux/*BSDで動けばよし
たしかGIMPはGTKだったはず
0195デフォルトの名無しさん
垢版 |
2018/09/05(水) 08:14:42.53ID:bMCIX8s0
え、エレクトロン
0197デフォルトの名無しさん
垢版 |
2018/09/05(水) 11:38:43.13ID:/V9AsOwQ
GTKは糞
0199181
垢版 |
2018/09/05(水) 18:50:23.45ID:6RBOwdE6
GTKのバインディングがあるならTkのバインディングも・・・と思ったら見あたらない?
Tkも一応ネイティブだったはず。機能面はぱっとしないが今回の用途には足りるかも

>>195
その手のWeb技術ベースのってアプリケーション側からウィジェットを更新する術に乏しい
印象があるけどそうでもないのかな
0200デフォルトの名無しさん
垢版 |
2018/09/05(水) 20:07:45.33ID:L3ODpJW1
ウィジェットってこの文脈だとどいう意味?
0201デフォルトの名無しさん
垢版 |
2018/09/05(水) 21:04:58.50ID:NRWr9JTz
OS(フレームワーク)ネイティブのGUIコンポーネントって意味だと思う。
というか、こっちの意味での利用のほうがコンピュータ的には一般的だったかと。
0203デフォルトの名無しさん
垢版 |
2018/09/06(木) 00:48:46.68ID:az09claK
GIMPはMotif・・・。うん。わかってるよ。

>>191
msvcツールチェーンでビルド面倒くさいから頑張れ。
0205デフォルトの名無しさん
垢版 |
2018/09/08(土) 21:39:35.66ID:r9+/L/Cg
なにかやるわけでもないのに言語だけ作るほうが珍しい気もするぞ。
で、どの言語のこと言ってるの?
0209デフォルトの名無しさん
垢版 |
2018/09/09(日) 18:05:38.77ID:4xLE2iMW
面倒臭いと思うよ

GUIだと大抵はイベントハンドラ多用する場合が多いから
Rustだと多分クロージャを渡すことになって
キャプチャする変数の所有権が絡んできて面倒なことになる

可能な限りデータを全て不変にして参照カウンタ使うのが一番楽そう
誰かもっと良い方法知ってたら教えて
0210デフォルトの名無しさん
垢版 |
2018/09/09(日) 18:56:16.25ID:UvF45WNM
キャプチャ必要かな。しなけりゃいいんじゃね?
RxやReduxみたいなのならRustでもできるような気がするが。
0212デフォルトの名無しさん
垢版 |
2018/09/09(日) 23:57:56.69ID:SgQ7ecDz
>>209
相互/循環参照があり得るから参照カウンタじゃ無理だよ。
メモリ管理面の煩わしさを考慮するならjavaみたい
にイベントハンドラをtraitにしてユーザーデータ自身に
実装させればいいけど、今ではこのアプローチ自体が煩わしいと思う。

あと参照カウンタの場合一度に多すぎる解放処理が発生して
UIがもたつく可能性があるね。
トレーシングGCなら必要ないなら遅らせるからこういう事は起きない。

rustでトレーシングGC使う場合rootingはプログラマが行う必要があるから
自前でメモリ管理するのと同じだし、それ以外にGUIのシーングラフ自体にトレーシングGCがいるね。
ffiで既存のgui利用してrustからはデータ渡すだけにするのが簡単だと思う。
0214デフォルトの名無しさん
垢版 |
2018/09/10(月) 19:39:57.20ID:3ZIEHwy7
ちなみにWEB開発のサーバーサイドでRustって現実味あるの?
Goがたまに使われてるから、Rustにもチャンスあるのかなと思ったけど
0215デフォルトの名無しさん
垢版 |
2018/09/10(月) 20:02:06.79ID:WGo2tHWR
君が作ればチャンスは無限大
0218デフォルトの名無しさん
垢版 |
2018/09/10(月) 21:58:39.88ID:ghTi64DR
予算と工数的に競技志向のFPSのバトルサーバならRustも現実的だけどマッチングサーバなら現実的じゃないとかありそうよね
0219デフォルトの名無しさん
垢版 |
2018/09/10(月) 22:17:46.90ID:Jc2GxaH/
現実になるかどうかは言語じゃなくでプログラマ次第でしょ
俺は現実に使ってるけど
0223デフォルトの名無しさん
垢版 |
2018/09/11(火) 00:59:46.27ID:S/u0i0hH
Rubyでいう

v = [1, 2, 3].map(){|e| e.to_f }

をrustで書きたくて、以下のように書いたんだけど、

let v = [1, 2, 3].iter().map(|x| *x as f32).collect();

vの型が推論できなくてコンパイルが通らない。助けて!
0224デフォルトの名無しさん
垢版 |
2018/09/11(火) 08:51:05.30ID:EMXKp1xw
let v = [1, 2, 3].iter().map(|x| *x as f32).collect::<Vec<_>>();
とか
let v:Vec<_> = [1, 2, 3].iter().map(|x| *x as f32).collect();

collectをジェネリックにする代わりに型推論できなくするのは良いアイデアだったのか
0226デフォルトの名無しさん
垢版 |
2018/09/11(火) 22:25:10.48ID:gyUsDA80
>>224
参考になりました!
これどちらも vec<f32> になるんですよね?
ヒープ確保じゃなくてスタックの配列への変換は無理ですかね?
0227デフォルトの名無しさん
垢版 |
2018/09/11(火) 23:40:31.29ID:gUgwDOju
>>226
ttps://stackoverflow.com/questions/26441916/dynamic-array-allocation-on-stack-in-c
Cでも駄目で、C++ならオッケーだったけな。Rustはできなかった。

もしできるようになっても、その関数の下にどれくらいコールスタックが積まれているのか、
この関数の上にどれくらい呼び出しが控えているかを熟慮しないとすぐstack overflow起こすんで、よっぽどクリティカルでなければやらんほうがええんじゃないか
0229デフォルトの名無しさん
垢版 |
2018/09/12(水) 01:54:03.48ID:+PSin/UV
>>228
追いかけきれてるわけではないけど、
allocaについても言及されているrfc#1909の第一段階が、8/19にマージされてるっぽい。

近い将来にallocaが完全サポートされる感じなんですかねぇ?
0230226
垢版 |
2018/09/12(水) 03:38:36.44ID:SKJk4QVS
んーん、なるほど。
Rustには現状、スタックを伸長するalloca相当がないから件の場合、固定配列を求める事は出来ないってことですかね。
0231デフォルトの名無しさん
垢版 |
2018/09/12(水) 19:11:41.82ID:VZx7VRPz
cloneていつ付けてる?
不用意にcloneするのを避けたくて最小限にしていたんだけどテスト書くとき辛い
derefでcloneされるのはcopyついているやつだけ?
0232デフォルトの名無しさん
垢版 |
2018/09/12(水) 20:48:13.21ID:SMBzO3VC
テストの時辛いってのは
↓のアトリビュートじゃ解決できないの?

#[cfg_attr(test, derive(Clone))]
0233デフォルトの名無しさん
垢版 |
2018/09/12(水) 20:56:43.30ID:VZx7VRPz
omg
それでいきますわ!ありがとう!
0234デフォルトの名無しさん
垢版 |
2018/09/12(水) 22:49:53.02ID:b/qs2bwP
>>224
> 型推論できなくする
できるよ。
rust by exampleを例にすると
ttps://play.rust-lang.org/?gist=3cbef33631cbed2a2f0dce6439da4942&version=stable&mode=debug&edition=2015

上記の`i32::from_str`や`<i32 as std::str::FromStr>::from_str`のi32を見て推論してる。
ただのstd::str::FromStrでは推論できないってエラーになる。
0235デフォルトの名無しさん
垢版 |
2018/09/13(木) 18:02:19.58ID:k7xTaVQM
低コストで探索できるらしいB+木ってなんぞや。ググるといっぱい出てくるがどいつもこいつも抽象的
「で、それがどう活用できるのか?」と言う疑問が解決しない
もちろんRustでコーディングする予定
0237デフォルトの名無しさん
垢版 |
2018/09/13(木) 21:29:20.76ID:IjhCAeem
B木とそのバリエーションは、ディスクのように一定の大きさを持ったブロック単位で読み書きする
記憶装置上に置くのに適した木構造。
そういう使い方をしないんだったら効率が悪い木構造でしかない。
0238235
垢版 |
2018/09/13(木) 22:11:03.43ID:bNNEFAck
ありがとう

>>236
そのような説明はいっぱい出てくるんですがそれを実用へ落とし込むのに必要なピースがわかりません
データベースやファイルシステムを作れる人ならその説明で十分なのだろうと思いますが
自分はそのような経験がないので「ファイルシステム」や「B+木」等のキーワードからその不足分にたどり
着けないでいます

>>237
まさしくその用途を考えています
・大容量のボリュームを扱う (数百GB〜TB)
・ファイルをたくさん入れる (万〜)
・ファイルの中身へのアクセスコストが低い
・充填率に優れる
・フラッシュメモリベースのメディアで使用する
みたいなファイルシステムを作れないかなーと。個人が扱うファイルシステムだとFAT32あたりがよく使われると思いますが
そろそろ最大ボリュームの上限を突破しそうだし、ディレクトリの探索が容易じゃないし(特にLFN使用時)
充填率も良いとは言えないしと、いろいろ課題が多いのでいっそ俺ファイルシステムを作ろうかと
0239デフォルトの名無しさん
垢版 |
2018/09/13(木) 22:24:39.91ID:IjhCAeem
B木の実装は、共立出版の「ファイル構造」という本が詳細に分かりやすく説明されていてよかった。
残念ながらもう絶版らしいが。
0240デフォルトの名無しさん
垢版 |
2018/09/13(木) 23:23:13.30ID:pq1/pryD
bit別冊は大部処分したけど似た本はもう無いと判断して捨てなかった一冊

今ファイルシステムの勉強しようと思ったらLinuxや*BSDのソースコードよむぐらいしか無さそう
■ このスレッドは過去ログ倉庫に格納されています

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