Rust Part7
■ このスレッドは過去ログ倉庫に格納されています
>>124
一連のレスの中で漏れが一度も「参照渡し」という用語を使っていない件について:
参照型の参照渡しする、という状況は比較的新しい話で、
Javaはあえてかなんだか知らんが古来からある値型の参照渡しに類似の動作に対応していない
つまり呼び出し先で引数として渡された参照型自体を交換したり出力したりできない
JavaScriptやC#は対応している(呼び出し先で参照型自体を交換できいる。C#の例は>>118。refよりoutキーワードを使ったほうが良かったかもしれん…)
>>126
それで十分使いやすいと思われたのならそれで良いが、後発言語が参照型の参照渡しに対応しているという事実、
>>133
C++脳に汚染されていたのでclassとstructの区別がなかったんじゃ すまんまつがえたorz
JavaScriptの参照の渡し方はJavaと同じやった、 なんか今ググると参照渡しの説明に真っ先にJavaScriptが出てくるが
世の中では参照型については参照型が保持するデータを呼び出し先が書き換えられることをもって参照渡しと言っているのかそうか、
しかしそれでは渡された参照型を呼び出し先が交換したり出力したりできず、
そうしたい場合に>>105や>>126(Pairの使用、ただし2個まで)みたいな技巧を要する 書き込むスレをいつまで経っても間違ったまま
そのことにすら無自覚で気付けないやつは
何してもだめ Cのときからある混乱だよな
単にポインタ渡してるだけなのに
ポインタを値渡してるだけなのに
「ポインタ渡し」だとか「参照渡し」だとか言っちゃう
そーいうブログや個人サイトが今もいっぱいある
そもそもこんな状況だから
これについての議論はスタート地点からもうやる気ほぼ出ない >ポインタを値渡してるだけ
フォートランスレにでもしてほしいのけ? >>141
> 単にポインタ渡してるだけなのに
> ポインタを値渡してるだけなのに
> 「ポインタ渡し」だとか「参照渡し」だとか言っちゃう
お前がまず混乱してね? ×単にポインタ渡してるだけなのに
○単にポインタを渡してるだけなのに
失礼、こう書いたほうが良かったねこの場合 ×ポインタを値渡してるだけなのに
○ポインタを値渡ししてるだけなのに
こっちは完全なるタイプミス 佐渡さんと書いて、サドさんと読む人と、サワタリさんと読む人がいるから、紛らわしい! 結局、JITがあるからRustよりJavaの方が速いんじゃないんの? RustとかC/C++は機械語までコンパイルするから速いんじゃなくて無駄なことをしないから速いのでJITとかそういう問題ではない JITコンパイルで性的コンパイル結果より速くなるというのは都市伝説
JITのしくみを考えたらワカル
理論上は分岐の実行時統計をとって最適化することによりローカルループがありえないぐらい爆速になって
JITコンパイラ大勝利!と言うことも考えられないではないが統計をとるオーバーヘッドが生じるし
そこまでやっているJITコンパイラは商用のにはないはず Rust学び始めたけど難しすぎる...
慣れるのにどれくらいかかるだろうか
ちなc/c++経験ほとんどなし
関数型言語は少しだけ分かるっていう程度
手を出すのは無謀? なにを作ろうとしてるのかによるよ
わたしは二ヶ月くらいかかったかな async/await、勉強するのに良いものある? まだstableじゃないからなんとも
tokio::netとかはasync/awaitでサンプル出してたりするけどどうかな >>159
substructural type systemとregionの前提知識がないならコンパイラに怒られるだけ時間の無駄。
先に必要な知識つけてから。
>>161
stable待つよろし。 cくらいはやっとらんとなんでこんな事してるんだって思うだけだろ。
メモリイメージがないならrustなんか使う意味がない。 そんなに大仰なことかなあ?
書いてればそのうち分かるっしょ >>159
C/C++やってからでも遅くない
っていうかC/C++を先にやった方が近道かも知れん 寧ろ関数型プログラミングに慣れ親しんだ人ならimmutableなオブジェクトだけでプログラミングしてしまい、
Rustが何も言わなかったりして… >>160
2ヶ月ですかー
用途としてはとりあえず簡単なCLIツールを考えています
>>168
c++はともかくcはちゃんとやっておいたほうがいいですかね
「低レイヤを知りたい人のためのCコンパイラ作成入門」を読んだのでメモリイメージ的なことは最低限は分かるかも
rubyとかpythonとかからrust始めた人もいるみたいだし気合入れて頑張ってみますか なんでこんなめんどくさいことやってんだ
というのを理解するにはC/C++の知識があると早い 苦しめられたほうがラクなんよね
一見苦しい縛りの結果、整理された構造という一粒の宝石を残してくれる お邪魔します
エディタを紹介してもらえませんか?
The Rust Programming Language を読みながら自習しています
第12章 Refactoring to Improve Modularity and Error Handling の最後の節
Splitting Code into a Library Crate まできたのですが
( https://doc.rust-lang.org/book/ch12-03-improving-error-handling-and-modularity.html#splitting-code-into-a-library-crate )
Listing 12-14 のように src/main.rs を変更すると
エディタが minigrep なんて知らんと文句を言いはじめました
これでは Config や run を補完で出してくれません
mod lib;
use lib as minigrep
を入れれば補完してくれますが、cargo build が通りません
この状況に対応しているエディタを紹介してくださると大変助かります -use lib as minigrep
+use lib::Config; ごめんなんか勘違いしてた
vscodeで普通に通るよ トレイト境界をトレイト拘束に置換する拡張機能を書いた RustのArcとかBoxとか複数組み合わせてちゃんと動くってイメージが湧かないんだけどそんなもん? バグを見たことがあるからちゃんと動くというイメージが沸かないのか? https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=8c44bed658726ada0deff031799664b7
1. std::env::current_exe()で実行ファイルのフルパスを得る
2. file_name()でファイル名だけにする
3. to_str()で&strにする
4. 途中でErrやNoneが返ってきた場合はデフォルトの値"foo"を使う
ということをやりたいのですが、エラーでビルドできません。
どのように書けばいいでしょうか? std::env::current_exe() は PathBuf の"値"を返す
PathBuf::file_name() は PathBuf の中身の部分的な参照を返す
PathBuf::file_name() で生成される &OsStr を参照から値に変換するか、
std::env::current_exe() で生成されるPathBufを変数に束縛して所有権取らせてから、改めて参照を取得するかしないとダメ >>188
ありがとうございます、所有権を意識してto_ownedを使ったらいけました。 >>27の元ネタだが
We need a safer systems programming language
ttps://msrc-blog.microsoft.com/2019/07/18/we-need-a-safer-systems-programming-language/
Why Rust for safe systems programming
ttps://msrc-blog.microsoft.com/2019/07/22/why-rust-for-safe-systems-programming/
あたりを読むとあっちの会社はホント合理的だなと痛感する。C/C++を用いた安全な大規模システムの開発はムリゲーとし
同業他社の方針やツールを認め導入してしまう。日本の大手システム屋にこういう事を出来るところってあるんだろうか 合理的ね。。
「戦うプログラマー」読む限りはそうは思えんが。
都合のいいとこだけ切り取ってるな。
むしろ無理やり言語使わせるとかもろSIerのやり口だろ。ばかすぎる。 闘うプログラマーと言えば当時からC++は魔境過ぎてヤベェみたいな記載があって笑った記憶ある。 無理矢理使わせてるということは今後出てくるMSプロダクトは全部Rust製になるのか? >>193
C++で作るようなものを全部Rustにする
ってなったらすごいことになるな JavaScript → TypeScript(型チェック) とか C++ → Rust(借用チェック) みたいな
用途・特性が似通った言語でより安全な方を使わせるってのは、単なるリスクマネジメントであって
SIerのナンデモJava事案とは違うと思う ポストC/C++の座にRustを据えるかどうかはともかくC/C+お払い箱は確定事項じゃね
つーかMSRCの記事の何処にも無理矢理使わせているなんて書いていないぞ? Rust学び始めたけど噂通りむずい...
やりたいのはcli/tuiとかwebなので習得が無理そうだったら大人しくGoを使うことにする...(´・ω・`) >>199
CでOS書いた事あんの?
C意外でOS書いたことあんの?
それとも想像だけ? >>200
OS書かなくても自家製メモリ管理作ってみれば想像できるだろ。 ちゃんとしたmallocを作ること自体が難しいのであってCかRustかは難しさへは影響しない GCはクソ!だからRust最高!
とイキがってた奴がボローチェッカにボコボコにされてGCの良さを体感するまでが通過儀礼
どっかにドリルないですかね。>187みたいな問題がサラッと解けるようになりたい GCがクソだと思ったからRust使うという意識なかったな >>187 みたいな感じのはリファレンス読んで関数やメソッドが参照返すのか値返すのか調べるだけ Rustはボローチェッカーのご機嫌取りが必要だが
GCある言語で性能が欲しいとか言い出すとGCのご機嫌取りが始まる 所有権という概念をつかむのに苦労はしたけど、結果的にはプログラミングを簡単にしてくれていると思う ライブラリの開発者以外に所有権意識させたのは良いと思う GCが糞っていうより
糞実装のGCが多過ぎて
大抵の人はGCで糞な思いをするから
GCが糞だと言う誤解というか評判になってるだけ
実際糞だが ガベッジだって言う人もいるけど
俺は宝物って呼んでる クロージャの中で?が使えない…
パトラッシュ、僕はもう疲れたよ(´・ω・`) 同じ処理するにしてもRustだと複雑で冗長になるんだよな
もしかして糞言語なんじゃね? >>218
できるよ
Resultを返すクロージャなら メモリ壊して苦労するか
パフォーマンスで苦労するか
コーディングで苦労するか
お好きな物をどうぞ Bookを6章まで読んだ俺が >>187 を書いたらこうなった
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=dc60559b7af47298d305be80b340ee98
&strじゃなくてStringだけど 俺はこう
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=aa72b77d2eebc44833b647e46b13e020
Stringは必然と思う そういや、String(のclone)を一生懸命に避けてほんとに意味があるのか
コードを無駄に複雑化させただけなんじゃないかと悩む事が多い >>225 だとOsStringですけど、Stringにするにはどうすれば・・・? こうかな
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=91e57950a6bf6c922ff4f3d0b7531a0b なるほど
Derefが必要ない場合は直接書いちゃえばいけるのか
ありがとうございます なんでもかんでもメソッドチェーンにしないで適当なところで束縛した方がRustのコードは読みやすくなる それはあるな。シャドーイングできるから変数名に悩まないし、
単に長くなったところで再束縛すればいい。 ■ このスレッドは過去ログ倉庫に格納されています