Rust Part6
■ このスレッドは過去ログ倉庫に格納されています
>>125 後者のが順を追って説明してくれてる…気がする 習熟者から見るとそうでもない? あ、あとタイトル間違えてたね >>132 の比較のつもりだった いやだって、なんでわざわざこの題材っていう リソーススタベーションに対する Rustならではのスマートな解答があるのかと思えば、ナニコレ ならなんでこの題材にしたのか不明 Rustにスマートさなんてないただある種の間違いが少なくなると主張している なにをやるにもつっかかる Rustだけに Rustは並列性がどうとか言ってなかったっけ それで最初の題材でコレもってくるセンスが謎 >>146 ここは書いた本人的にもいまいちだったと思っていたらしく、本家では結構前に削除されてる。 まあチュートリアルならせめてmutexではなくchannelだとは思う。 うーむそうかな 並列処理ではmutexはかなり一般的で本質的だと思うけど ロックを得ないことに安全に並列処理はできないのだし mutexがスコープ抜けた時点で勝手に解放されるのが恰好いい的な? >>151 一般的で本質的ってのはその通りだと思うけど、 チュートリアルで一番最初に導入すべきかというと、そうでもないのでは?って感じかな。 カニチャーハン氏はRustに全然関係してないからね >>152 おまいら(rustacean)の先祖がミジンコ、もとい甲殻類(crustacean)だから rustらしさといえば&と&mutの仕組みがそのままスレッド間でも使えるところとか RAIIとかmoveも良いけどc++にもあるので rustらしく書いたコードって、&と&mutが大量に出てきて、なんか見た目ごちゃついてない? move多用で書きたくなる &やmutはまだいいけどライフタイムとジェネリクスが入り乱れると頭抱える 自分じゃ書けないからライブラリのコード読むときだけど impl traitでちょっと楽になったけど、書きながら試行錯誤しているときに関数にして切り出すのが面倒 ちゃんと設計しろよって言われるかもしれんが、rustの仕様とライブラリ全部きっちり頭に入れるのも非現実的だと思ってる 絶対に必要、ってとこ以外でmoveするとclippyに怒られてくやしい >>150 バグってるからだぞ。 他人の書いたマクロが拷問だよな。 わるい。バグは修正したんだった。削除した理由はこっち。 ttps://github.com/rust-lang/rust/pull/30595 > まあチュートリアルならせめてmutexではなくchannelだとは思う。 これも冒頭二段落に書いてある。 存在型と量化子安定してたのか。 ( ゚∀゚)o彡゚G・A・T!! ( ゚∀゚)o彡゚G・A・T!! ( ゚∀゚)o彡゚G・A・T!! Vecのswap_remove()って賢いやり方だな どこ発祥の文化? C++あたり? 交換を一回しかしない配列の回転の応用だからJon BentleyのProgramming Pearlsだな。 >>168 へー、ピアソンから出てた『珠玉のプログラミング』か 読んでみたい 古典ですな。 今読んでもそんな悪くない本だと思う。 rustfmt-nightlyがビルドできないお(´・ω・`) 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個くらい出る。 どうすれば良いの? >>175 rust関係ないからcodeスレへ。アドオン何使ってるかもちゃんと書けよ。 VSCodeって言っちゃったのがまずかった VSCodeのターミナル(WSLのzsh)で出たエラーだから、MacでもLinuxでも、このエラー起こると思う! 最近Rustインストールした人で、同じエラー出ている人いないかな? GithubのRacerに書かれてある方法で試してみる・・ Rustで使いやすいGUIツールキットってどんなのがあるんだろうな マルチプラットフォームかつネイティブでそこそこのパフォーマンスを得られるのが良い wxWidgetsは有名だけどwxRustは3年放置されている。使えるのかな >>181 gtk-rsは? 前にちょっと触ってみただけだから実用レベルかは知らんが 今でも積極的にコミットされてるから期待はできそう 純Rust製ならPistonが作ってるconrodかな?winitとgliumをベースにしてるっぽい? こっちは使ったことすら無いんで全く分からん 純Rust製に惹かれたが、なかなか時間が作れなくて放置中… 因みにwinitはイベント管理用でgliumはOpenGLのクレートね >>178 GithubのRacerに書いてあるとおりにやったらいけた Rust Nightlyを入れただけではダメで rustup toolchain add nightly cargo +nightly install racer でいけた。Multirustという機能があるからNightlyを使いたければ毎回指定するということを初めて知った RLSだけでいいの?それならRLSでいきたい でもNightlyをデフォルトに設定したらRLSがスタートできなかった >>183 ありがとう。GTK+が無難ですかね。gtk-rsを試してみます 純Rustは確かに惹かれますがこれってネイティブなのだろうか・・・ Intellij Rustの作者が作ってるlibsyntax2がLSPを提供するようになってる https://github.com/matklad/libsyntax2/tree/master/crates/server racerの代わりになる日が来るだろうか? IDE機能の提供はコンパイラでやるのが一番いいんだろうけど >>183 >>191 gtkってマルチプラットフォームと言えるの? Linuxでしかまともに動かないイメージ まあWindowsでは最低限は動くのかもしれんけどmacOSではダメダメでしょう >>193 そうなの? まぁ今回の用途はWindowsとLinux/*BSDで動けばよし たしかGIMPはGTKだったはず マイナー言語のGUIにはGtkバインディングぐらいしかないのが現実 GTKのバインディングがあるならTkのバインディングも・・・と思ったら見あたらない? Tkも一応ネイティブだったはず。機能面はぱっとしないが今回の用途には足りるかも >>195 その手のWeb技術ベースのってアプリケーション側からウィジェットを更新する術に乏しい 印象があるけどそうでもないのかな OS(フレームワーク)ネイティブのGUIコンポーネントって意味だと思う。 というか、こっちの意味での利用のほうがコンピュータ的には一般的だったかと。 Windows向けRustのリンカがlldになるのはいつかな GIMPはMotif・・・。うん。わかってるよ。 >>191 msvcツールチェーンでビルド面倒くさいから頑張れ。 何かやるのに言語からつくっちゃえって、どうなんだろ。 なにかやるわけでもないのに言語だけ作るほうが珍しい気もするぞ。 で、どの言語のこと言ってるの? GUIといえばlibuiはどうだろう? というかRustでGUIって面倒くさそう 面倒臭いと思うよ GUIだと大抵はイベントハンドラ多用する場合が多いから Rustだと多分クロージャを渡すことになって キャプチャする変数の所有権が絡んできて面倒なことになる 可能な限りデータを全て不変にして参照カウンタ使うのが一番楽そう 誰かもっと良い方法知ってたら教えて キャプチャ必要かな。しなけりゃいいんじゃね? RxやReduxみたいなのならRustでもできるような気がするが。 >>209 相互/循環参照があり得るから参照カウンタじゃ無理だよ。 メモリ管理面の煩わしさを考慮するならjavaみたい にイベントハンドラをtraitにしてユーザーデータ自身に 実装させればいいけど、今ではこのアプローチ自体が煩わしいと思う。 あと参照カウンタの場合一度に多すぎる解放処理が発生して UIがもたつく可能性があるね。 トレーシングGCなら必要ないなら遅らせるからこういう事は起きない。 rustでトレーシングGC使う場合rootingはプログラマが行う必要があるから 自前でメモリ管理するのと同じだし、それ以外にGUIのシーングラフ自体にトレーシングGCがいるね。 ffiで既存のgui利用してrustからはデータ渡すだけにするのが簡単だと思う。 ちなみにWEB開発のサーバーサイドでRustって現実味あるの? Goがたまに使われてるから、Rustにもチャンスあるのかなと思ったけど 予算と工数的に競技志向のFPSのバトルサーバならRustも現実的だけどマッチングサーバなら現実的じゃないとかありそうよね 現実になるかどうかは言語じゃなくでプログラマ次第でしょ 俺は現実に使ってるけど それ言い出したらアセンブラでもcでもプログラマ次第だわな。 Rubyでいう v = [1, 2, 3].map(){|e| e.to_f } をrustで書きたくて、以下のように書いたんだけど、 let v = [1, 2, 3].iter().map(|x| *x as f32).collect(); vの型が推論できなくてコンパイルが通らない。助けて! 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をジェネリックにする代わりに型推論できなくするのは良いアイデアだったのか rust的にはturbofish使うもんだけど型注釈をよく見かけるね。 >>224 参考になりました! これどちらも vec<f32> になるんですよね? ヒープ確保じゃなくてスタックの配列への変換は無理ですかね? >>226 ttps://stackoverflow.com/questions/26441916/dynamic-array-allocation-on-stack-in-c Cでも駄目で、C++ならオッケーだったけな。Rustはできなかった。 もしできるようになっても、その関数の下にどれくらいコールスタックが積まれているのか、 この関数の上にどれくらい呼び出しが控えているかを熟慮しないとすぐstack overflow起こすんで、よっぽどクリティカルでなければやらんほうがええんじゃないか >>227 逆やー。 Cではオプション扱い、C++では不可 >>228 追いかけきれてるわけではないけど、 allocaについても言及されているrfc#1909の第一段階が、8/19にマージされてるっぽい。 近い将来にallocaが完全サポートされる感じなんですかねぇ? んーん、なるほど。 Rustには現状、スタックを伸長するalloca相当がないから件の場合、固定配列を求める事は出来ないってことですかね。 cloneていつ付けてる? 不用意にcloneするのを避けたくて最小限にしていたんだけどテスト書くとき辛い derefでcloneされるのはcopyついているやつだけ? テストの時辛いってのは ↓のアトリビュートじゃ解決できないの? #[cfg_attr(test, derive(Clone))] >>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では推論できないってエラーになる。 低コストで探索できるらしいB+木ってなんぞや。ググるといっぱい出てくるがどいつもこいつも抽象的 「で、それがどう活用できるのか?」と言う疑問が解決しない もちろんRustでコーディングする予定 >>235 てけとーにググってきたやつ https://christina04.hatenablog.com/entry/2017/05/17/190000 で、B+ツリーはリーフノード間にリンクがある構造。 リンクがあると何が嬉しいかというと、 データベースで値の範囲で検索する際、先頭が見つかればリンクをたどってレコードが抽出できる。一例として。 B木とそのバリエーションは、ディスクのように一定の大きさを持ったブロック単位で読み書きする 記憶装置上に置くのに適した木構造。 そういう使い方をしないんだったら効率が悪い木構造でしかない。 ありがとう >>236 そのような説明はいっぱい出てくるんですがそれを実用へ落とし込むのに必要なピースがわかりません データベースやファイルシステムを作れる人ならその説明で十分なのだろうと思いますが 自分はそのような経験がないので「ファイルシステム」や「B+木」等のキーワードからその不足分にたどり 着けないでいます >>237 まさしくその用途を考えています ・大容量のボリュームを扱う (数百GB〜TB) ・ファイルをたくさん入れる (万〜) ・ファイルの中身へのアクセスコストが低い ・充填率に優れる ・フラッシュメモリベースのメディアで使用する みたいなファイルシステムを作れないかなーと。個人が扱うファイルシステムだとFAT32あたりがよく使われると思いますが そろそろ最大ボリュームの上限を突破しそうだし、ディレクトリの探索が容易じゃないし(特にLFN使用時) 充填率も良いとは言えないしと、いろいろ課題が多いのでいっそ俺ファイルシステムを作ろうかと B木の実装は、共立出版の「ファイル構造」という本が詳細に分かりやすく説明されていてよかった。 残念ながらもう絶版らしいが。 bit別冊は大部処分したけど似た本はもう無いと判断して捨てなかった一冊 今ファイルシステムの勉強しようと思ったらLinuxや*BSDのソースコードよむぐらいしか無さそう >>239 英語版ならまだあるようだし、pdfでも見れるな。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる