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/
2018/08/20(月) 21:31:16.82ID:1nsldRzy
いやだって、なんでわざわざこの題材っていう
リソーススタベーションに対する
Rustならではのスマートな解答があるのかと思えば、ナニコレ
ならなんでこの題材にしたのか不明
2018/08/20(月) 21:38:09.93ID:rDwzmoqy
Rustにスマートさなんてないただある種の間違いが少なくなると主張している

なにをやるにもつっかかる
Rustだけに
2018/08/20(月) 21:41:58.64ID:1nsldRzy
Rustは並列性がどうとか言ってなかったっけ
それで最初の題材でコレもってくるセンスが謎
149デフォルトの名無しさん
垢版 |
2018/08/20(月) 22:08:57.88ID:JBCtYT+G
何が謎か分からん
2018/08/20(月) 22:23:58.46ID:7YukIB6U
>>146
ここは書いた本人的にもいまいちだったと思っていたらしく、本家では結構前に削除されてる。
まあチュートリアルならせめてmutexではなくchannelだとは思う。
151デフォルトの名無しさん
垢版 |
2018/08/20(月) 22:34:49.09ID:JBCtYT+G
うーむそうかな
並列処理ではmutexはかなり一般的で本質的だと思うけど
ロックを得ないことに安全に並列処理はできないのだし
2018/08/20(月) 22:35:51.84ID:sOQT11b6
結局なんでカニなん?
2018/08/20(月) 22:39:02.32ID:rDwzmoqy
mutexがスコープ抜けた時点で勝手に解放されるのが恰好いい的な?
2018/08/20(月) 22:47:50.39ID:7YukIB6U
>>151
一般的で本質的ってのはその通りだと思うけど、
チュートリアルで一番最初に導入すべきかというと、そうでもないのでは?って感じかな。
2018/08/20(月) 22:49:01.92ID:wDDgfGz+
カニチャーハン氏はRustに全然関係してないからね
156デフォルトの名無しさん
垢版 |
2018/08/20(月) 23:03:39.98ID:GHO1XUgy
Kernicharhan & Ritchie
2018/08/20(月) 23:17:29.99ID:02kdtA3g
>>152
おまいら(rustacean)の先祖がミジンコ、もとい甲殻類(crustacean)だから
2018/08/21(火) 07:16:48.68ID:eRQ3K4Ir
rustらしさといえば&と&mutの仕組みがそのままスレッド間でも使えるところとか
RAIIとかmoveも良いけどc++にもあるので
2018/08/21(火) 13:49:43.65ID:gNkN0CkF
rustらしく書いたコードって、&と&mutが大量に出てきて、なんか見た目ごちゃついてない?
move多用で書きたくなる
2018/08/21(火) 17:52:41.07ID:lClDMlnu
clone多用しないならそれで良い
161デフォルトの名無しさん
垢版 |
2018/08/21(火) 19:13:44.58ID:9N93jiAN
&やmutはまだいいけどライフタイムとジェネリクスが入り乱れると頭抱える
自分じゃ書けないからライブラリのコード読むときだけど
2018/08/21(火) 21:48:12.99ID:b9rnTQC8
impl traitでちょっと楽になったけど、書きながら試行錯誤しているときに関数にして切り出すのが面倒
ちゃんと設計しろよって言われるかもしれんが、rustの仕様とライブラリ全部きっちり頭に入れるのも非現実的だと思ってる
2018/08/22(水) 04:11:36.67ID:iCx1kAM9
絶対に必要、ってとこ以外でmoveするとclippyに怒られてくやしい
2018/08/22(水) 19:18:34.56ID:RyuF5Err
>>150
バグってるからだぞ。

他人の書いたマクロが拷問だよな。
165164
垢版 |
2018/08/22(水) 19:53:16.67ID:RyuF5Err
わるい。バグは修正したんだった。削除した理由はこっち。
ttps://github.com/rust-lang/rust/pull/30595

> まあチュートリアルならせめてmutexではなくchannelだとは思う。
これも冒頭二段落に書いてある。
2018/08/23(木) 01:21:36.71ID:vCVCF+WZ
存在型と量化子安定してたのか。
( ゚∀゚)o彡゚G・A・T!!
( ゚∀゚)o彡゚G・A・T!!
( ゚∀゚)o彡゚G・A・T!!
2018/08/23(木) 12:07:00.98ID:zWfNRiLe
Vecのswap_remove()って賢いやり方だな
どこ発祥の文化? C++あたり?
2018/08/23(木) 23:27:32.87ID:EN+b8ws+
交換を一回しかしない配列の回転の応用だからJon BentleyのProgramming Pearlsだな。
2018/08/24(金) 00:58:26.59ID:OIfpv6Qg
>>168
へー、ピアソンから出てた『珠玉のプログラミング』か
読んでみたい
170デフォルトの名無しさん
垢版 |
2018/08/24(金) 12:20:35.42ID:ZVlysGry
>>169
つまらんよ
2018/08/25(土) 11:49:09.72ID:UzOZyqtt
古典ですな。
今読んでもそんな悪くない本だと思う。
2018/08/26(日) 17:59:52.65ID:BVSpPirf
rustfmt-nightlyがビルドできないお(´・ω・`)
2018/08/26(日) 23:46:50.01ID:8nEJLfEg
古めのnightlyじゃないと無理
2018/08/27(月) 17:35:35.62ID:ddJdp269
PR出ててもうマージされてた(`・ω・´)
175デフォルトの名無しさん
垢版 |
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個くらい出る。
どうすれば良いの?
2018/09/01(土) 11:07:28.41ID:ZPWIV19B
>>175
IntelliJを入れる
2018/09/01(土) 22:51:12.01ID:6Yw3sf7c
>>175
rust関係ないからcodeスレへ。アドオン何使ってるかもちゃんと書けよ。
2018/09/02(日) 05:13:21.00ID:wH0i7ysW
VSCodeって言っちゃったのがまずかった
VSCodeのターミナル(WSLのzsh)で出たエラーだから、MacでもLinuxでも、このエラー起こると思う!
最近Rustインストールした人で、同じエラー出ている人いないかな?
GithubのRacerに書かれてある方法で試してみる・・
179デフォルトの名無しさん
垢版 |
2018/09/02(日) 08:10:44.09ID:KdakvMsf
エラーを書かずに同じエラーとわ
180デフォルトの名無しさん
垢版 |
2018/09/03(月) 05:33:11.38ID:17orVuxK
これはすごい

https://github.com/EbTech/rust-algorithms
2018/09/03(月) 23:57:51.98ID:HH7kYsUG
Rustで使いやすいGUIツールキットってどんなのがあるんだろうな
マルチプラットフォームかつネイティブでそこそこのパフォーマンスを得られるのが良い
wxWidgetsは有名だけどwxRustは3年放置されている。使えるのかな
182デフォルトの名無しさん
垢版 |
2018/09/04(火) 00:37:25.68ID:JHljRMUU
良い塩梅に発酵したときが食べ頃
2018/09/04(火) 02:01:24.43ID:ph6Gu5BU
>>181
gtk-rsは?
前にちょっと触ってみただけだから実用レベルかは知らんが
今でも積極的にコミットされてるから期待はできそう

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

純Rustは確かに惹かれますがこれってネイティブなのだろうか・・・
2018/09/05(水) 07:46:50.58ID:dKL5q8IE
Intellij Rustの作者が作ってるlibsyntax2がLSPを提供するようになってる
https://github.com/matklad/libsyntax2/tree/master/crates/server

racerの代わりになる日が来るだろうか?
IDE機能の提供はコンパイラでやるのが一番いいんだろうけど
2018/09/05(水) 07:48:44.63ID:dKL5q8IE
>>183
>>191
gtkってマルチプラットフォームと言えるの?
Linuxでしかまともに動かないイメージ
まあWindowsでは最低限は動くのかもしれんけどmacOSではダメダメでしょう
194181
垢版 |
2018/09/05(水) 08:06:31.33ID:6RBOwdE6
>>193
そうなの?
まぁ今回の用途はWindowsとLinux/*BSDで動けばよし
たしかGIMPはGTKだったはず
195デフォルトの名無しさん
垢版 |
2018/09/05(水) 08:14:42.53ID:bMCIX8s0
え、エレクトロン
2018/09/05(水) 09:01:55.04ID:H9u1sp8h
そもそもgimpを作るためにgtk作ったわけで…
197デフォルトの名無しさん
垢版 |
2018/09/05(水) 11:38:43.13ID:/V9AsOwQ
GTKは糞
2018/09/05(水) 16:19:07.91ID:dKL5q8IE
マイナー言語のGUIにはGtkバインディングぐらいしかないのが現実
199181
垢版 |
2018/09/05(水) 18:50:23.45ID:6RBOwdE6
GTKのバインディングがあるならTkのバインディングも・・・と思ったら見あたらない?
Tkも一応ネイティブだったはず。機能面はぱっとしないが今回の用途には足りるかも

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

>>191
msvcツールチェーンでビルド面倒くさいから頑張れ。
2018/09/08(土) 20:22:07.67ID:2/RJPWQT
何かやるのに言語からつくっちゃえって、どうなんだろ。
2018/09/08(土) 21:39:35.66ID:r9+/L/Cg
なにかやるわけでもないのに言語だけ作るほうが珍しい気もするぞ。
で、どの言語のこと言ってるの?
2018/09/08(土) 21:50:01.66ID:obhERXW7
>>205
Rust
2018/09/08(土) 22:35:38.88ID:6Sgjlvo2
Cの事じゃないのか。
2018/09/09(日) 17:19:35.86ID:J1tV93ug
GUIといえばlibuiはどうだろう?

というかRustでGUIって面倒くさそう
2018/09/09(日) 18:05:38.77ID:4xLE2iMW
面倒臭いと思うよ

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

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

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

rustでトレーシングGC使う場合rootingはプログラマが行う必要があるから
自前でメモリ管理するのと同じだし、それ以外にGUIのシーングラフ自体にトレーシングGCがいるね。
ffiで既存のgui利用してrustからはデータ渡すだけにするのが簡単だと思う。
2018/09/10(月) 14:20:14.67ID:WMxfZQty
yewとrelmが気になる
2018/09/10(月) 19:39:57.20ID:3ZIEHwy7
ちなみにWEB開発のサーバーサイドでRustって現実味あるの?
Goがたまに使われてるから、Rustにもチャンスあるのかなと思ったけど
215デフォルトの名無しさん
垢版 |
2018/09/10(月) 20:02:06.79ID:WGo2tHWR
君が作ればチャンスは無限大
2018/09/10(月) 20:44:31.47ID:/rk0ECVs
Goは手軽さと性能のバランスが丁度いいから
2018/09/10(月) 21:33:40.66ID:nnRzz3th
現実味の程度による
2018/09/10(月) 21:58:39.88ID:ghTi64DR
予算と工数的に競技志向のFPSのバトルサーバならRustも現実的だけどマッチングサーバなら現実的じゃないとかありそうよね
219デフォルトの名無しさん
垢版 |
2018/09/10(月) 22:17:46.90ID:Jc2GxaH/
現実になるかどうかは言語じゃなくでプログラマ次第でしょ
俺は現実に使ってるけど
2018/09/10(月) 23:11:54.52ID:Vv+pRNC5
それ言い出したらアセンブラでもcでもプログラマ次第だわな。
2018/09/10(月) 23:16:12.14ID:ieMEhN8t
言語の決定権が
2018/09/11(火) 00:22:51.64ID:6iElNWnR
適材適所で言語を選べるか?って事でしょ
223デフォルトの名無しさん
垢版 |
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の型が推論できなくてコンパイルが通らない。助けて!
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をジェネリックにする代わりに型推論できなくするのは良いアイデアだったのか
2018/09/11(火) 22:15:57.71ID:3LhuO07g
rust的にはturbofish使うもんだけど型注釈をよく見かけるね。
2018/09/11(火) 22:25:10.48ID:gyUsDA80
>>224
参考になりました!
これどちらも vec<f32> になるんですよね?
ヒープ確保じゃなくてスタックの配列への変換は無理ですかね?
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起こすんで、よっぽどクリティカルでなければやらんほうがええんじゃないか
2018/09/12(水) 00:27:32.15ID:NOD5QCpZ
>>227
逆やー。
Cではオプション扱い、C++では不可
2018/09/12(水) 01:54:03.48ID:+PSin/UV
>>228
追いかけきれてるわけではないけど、
allocaについても言及されているrfc#1909の第一段階が、8/19にマージされてるっぽい。

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

#[cfg_attr(test, derive(Clone))]
233デフォルトの名無しさん
垢版 |
2018/09/12(水) 20:56:43.30ID:VZx7VRPz
omg
それでいきますわ!ありがとう!
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では推論できないってエラーになる。
2018/09/13(木) 18:02:19.58ID:k7xTaVQM
低コストで探索できるらしいB+木ってなんぞや。ググるといっぱい出てくるがどいつもこいつも抽象的
「で、それがどう活用できるのか?」と言う疑問が解決しない
もちろんRustでコーディングする予定
2018/09/13(木) 20:57:57.27ID:uqZEQXfr
>>235
てけとーにググってきたやつ
https://christina04.hatenablog.com/entry/2017/05/17/190000

で、B+ツリーはリーフノード間にリンクがある構造。

リンクがあると何が嬉しいかというと、
データベースで値の範囲で検索する際、先頭が見つかればリンクをたどってレコードが抽出できる。一例として。
2018/09/13(木) 21:29:20.76ID:IjhCAeem
B木とそのバリエーションは、ディスクのように一定の大きさを持ったブロック単位で読み書きする
記憶装置上に置くのに適した木構造。
そういう使い方をしないんだったら効率が悪い木構造でしかない。
238235
垢版 |
2018/09/13(木) 22:11:03.43ID:bNNEFAck
ありがとう

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

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

今ファイルシステムの勉強しようと思ったらLinuxや*BSDのソースコードよむぐらいしか無さそう
2018/09/14(金) 00:34:41.33ID:6kvA3LxK
>>239
英語版ならまだあるようだし、pdfでも見れるな。
2018/09/14(金) 11:13:17.17ID:hSQdDwhc
1.29.0来たね
2018/09/14(金) 17:04:14.02ID:zZtMiOUI
来たー
244235
垢版 |
2018/09/14(金) 22:55:36.33ID:L0IQQp+4
ありがとう

>>239-241
尼のマケプレの値段ヤバイですね。原書?のPDFは入手できたので見てみます

>今ファイルシステムの勉強しようと思ったらLinuxや*BSDのソースコードよむぐらいしか無さそう
うへぇ。ファイルシステムドライバの仕様がどうなっているのかを理解した上で、ジャーナリングや
スナップショットなどの付加機能を分離しつつ読む必要がありそう
オープンソースといえどもこの辺の情報はお世辞にも豊富ではないのもつらいところです
2018/09/14(金) 23:38:15.74ID:SIPw8V9s
まあ読むならext3ぐらいからじゃないかな?
losetupやbrdで小規模なデバイス上にmkfsしてhexdump使って媒体構造見るとか
system tapやblktraceで処理やアクセス箇所見るとか
crashでカレントプロセス覗くとか
printk仕込んで処理フロー確認するとか

昔勉強したけど他に何やったかもう覚えてないや
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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