1 名前:デフォルトの名無しさん mailto:sage [2021/04/02(金) 21:38:04.11 ID:L7IeSfpL.net] 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://rust-jp.rs/ 前スレ Rust part9 https://mevius.5ch.net/test/read.cgi/tech/1598112455/
214 名前:はちみつ餃子 mailto:sage [2021/04/22(木) 02:53:02.19 ID:3zTCC3Br.net] >>203 ガイドライン的には Deref はスマートポインタだけにしとけってことになってる。 https://rust-lang.github.io/api-guidelines/predictability.html#only-smart-pointers-implement-deref-and-derefmut-c-deref
215 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 05:58:54.39 ID:WQGVMWvQ.net] 例外の最終的な捕捉をOSの仕事、と書いたのは語弊があったスマンカッタ、 正確に言えば言語のランタイムが最終的に捕捉してプロセスを自発的に終了する (スタックのアンワインドは言語依存性が強いのでそうなっている しかしプロセスが自発的にexit()したら誰がそれを処理するのかというとOSやんけ;;; カーネルの中で例外を生じられたら誰が終了を担保するのかについて OS論的に定説が無いのは真 >>208 いじょ
216 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 06:34:32.34 ID:WQGVMWvQ.net] で、別の観点の話をする、 OSがpanic上等というのはそれはそれでも良いが、 とにかくスタックのアンワインド処理は言語依存性が強いので 例外が通過する関数(ゼロコストの奴も含む)の巻き戻しのためには 関数のアドレスとスタックのアンワインド方法の対応表をランタイムが把握せねばならない というわけでカーネル内の例外を認めると、その例外を最終的に捕捉する奴より 上の関数を全部同一言語・同一コンパイラで書かねばならないという縛りが生じる 現実にはそれで問題など生じないかしらんが、とにかくレイヤー分けに縛りが生じる Redoxの一部をC++(等)で書くことは事実上不可能に、
217 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 13:01:11.46 ID:hZdbeIl+.net] >>212 ,213 なんでカーネルの話してるのに言語ランタイムとプラットフォーム依存の話してるんだ? >>213 Linusがカーネル書くのに信用してないだけで C++でもフリースタンディング書けるだろ。 C++のフリースタンディングは最低限の標準ライブラリは持つからrustのcoreクレートと同じ。 C++ならexception、abort,exitがある。 >>213 がホストとベアメタルの区別がついてないだけじゃないか? あと、redoxのpanicはスタックトレース吐いてx86のhltループするだけだから。 そもそもカーネルで標準のexitなんか呼ぶか。
218 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 13:21:02.53 ID:EDkBlaoV.net] Linux界隈といえばちょうど「マージしたパッチが研究目的にわざと脆弱性を含んだものだったことが発覚して激おこで送ってきた奴らの大学出禁にする」みたいな面白いことが起こってる模様
219 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 13:49:41.54 ID:I9diyMZ1.net] どうせお前らはOS書かないんだからどっちでもいいじゃん
220 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 15:39:04.46 ID:VwSZJGdV.net] linuxの騒動の話はさすがにスレチ
221 名前:デフォルトの名無しさん [2021/04/22(木) 21:04:10.86 ID:ndVhN6HU.net] Cコンパイラゼミ消失問題を思い出した https://twitter.com/rui314/status/1384422532363657221 (deleted an unsolicited ad)
222 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 23:08:37.40 ID:y/lG5X/l.net] 研究目的だろうがそうでなかろうがわざと脆弱性を含むパッチを簡単にマージできている、という状況が問題なんであって 腹たつから大学出禁にしたった、とやったところで根本的な問題は何も解決しないんだけどlinuxのメンテナンスしてる連中とか linusを筆頭にとか老害頭ばっかりだから自分がスッとすれはそれでいいんだろうな
223 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 23:21:38.67 ID:5b2Tg2Qr.net] 1) 善意でやってくれてる連中にケチつけんな 2) じゃあお前が根本的な解決とやらをやれ 3) もしくはその根本的な解決方法を彼らに教えてやれ
224 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 23:33:32.83 ID:Bg0clzlT.net] しーぷらぷらあきらめてどろっぷあうとした ちんちんぶらぶらまるはだかなひとたちが らすとすぱぁとをきめるスレ
225 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 23:52:38.76 ID:KHhdvM96.net] rust厨八つ当たりw
226 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 08:31:32.27 ID:yuX3+THA.net] その脆弱性もUAFとかぬるぽデリファレンスとか未初期化領域の使用とか2重開放とか最近の言語じゃ明らかに
227 名前:意図してやらなきゃ起きないようなもんばっかだもんなぁ そりゃC/C++にしがみついてる大先輩方にとっちゃ逆鱗だわな [] [ここ壊れてます]
228 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 08:34:12.76 ID:Lj3XxxY0.net] そんなもんunsafeしまくれば同じだろ。。 そういう問題じゃないことくらいわかるだろうに、本当の馬鹿だな。
229 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 08:36:52.46 ID:+YpcBxgU.net] C++とlinuxの話禁止な
230 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 08:52:11.81 ID:Lj3XxxY0.net] rustでOSかける->linus、panicある限り載せねーよ->rust信者発狂
231 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 09:00:00.40 ID:5QBVXmI/.net] 発狂?むしろ歓迎 個人で使うようなアプリは好きなだけパニくれ 使われるアプリはパニくんなカス、これ常識だろ
232 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 10:42:10.47 ID:Lj3XxxY0.net] 言語実装的にもそうなってないよねって話なんだけど、なんだか通じてなさげ。
233 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 11:59:33.30 ID:bX8BaI1F.net] rustにもgoのマスコットキャラみたいなのいないんですか?
234 名前:あめ mailto:sage [2021/04/23(金) 12:13:46.74 ID:hS4CVJbd.net] かにさん
235 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 12:17:43.73 ID:E6ocica9.net] >>214 >なんでカーネルの話してるのに言語ランタイムとプラットフォーム依存の話してるんだ? カーネル内での例外を許すみたいな立場で話す人が居るから 例外メカニズムが言語ランタイムと不可分な理由は >スタックのアンワインドは言語依存性が強いのでそうなっている (>>212 C言語みたいにそもそも例外メカニズムを持たない言語を使った場合のみ 言語ランタイムと切り離したカーネル設計ができてスキーリ
236 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 12:23:39.46 ID:Xbep6LJc.net] >>219 だから、脆弱性を簡単に盛り込めないように危険な団体を排除しただけだろ。 普通の対応だと思うけど?
237 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 12:31:21.77 ID:+YpcBxgU.net] >>231 > >なんでカーネルの話してるのに言語ランタイムとプラットフォーム依存の話してるんだ? > カーネル内での例外を許すみたいな立場で話す人が居るから いません この話はおわり
238 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 12:56:09.67 ID:1/JMNo8Q.net] 「注意すればC/C++でも問題ない」って意見は日本的だよな 人間はミスしないことが前提になっている Rust Foundationのメンバーに言わせればそういう問題ではない 人間はミスするものだってなるんだろうけど
239 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 13:00:34.48 ID:Lj3XxxY0.net] そのミスの取り除き方のアプローチの違いだっていうことにさえ気づかない馬鹿。
240 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 13:33:15.21 ID:AZKiGQoD.net] c++でミスするような無能はrustでも使ってろと怒鳴り散らす これが正しいアプローチ
241 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 13:43:27.45 ID:M88Kc634.net] >>229-230 なんで蟹なんだろうな。 PythonユーザーのことPythonistaって言うみたいに RustユーザーのことRustaceanって言うけど、 これCrustacean(甲殻類)からCを取り除いたものなんだな。
242 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 14:28:40.04 ID:9+zMAQDa.net] エビにしろよな カニだとRealtekと被るじゃん
243 名前:デフォルトの名無しさん [2021/04/23(金) 14:58:40.99 ID:ntrIv3TW.net] 大半の人は、C/C++の文法がわかる程度でプログラムを書いているのが現状だろう 何がミスなのかそもそもわかっておらず、Rustを勉強している人と話も噛み合わない
244 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 15:01:12.26 ID:Lj3XxxY0.net] c++とrustの部分入れ替えてもなんの違和感もない文章だね
245 名前:デフォルトの名無しさん [2021/04/23(金) 15:03:21.83 ID:ntrIv3TW.net] 君にはそう見えるだろうね
246 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 15:05:01.62 ID:Lj3XxxY0.net] 君にはそう見えないんだろうね
247 名前:デフォルトの名無しさん [2021/04/23(金) 15:05:59.83 ID:ntrIv3TW.net] とりあえず、話が噛み合わないのはわかったでしょ
248 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 15:07:53.22 ID:9+zMAQDa.net] C++ドロップアウターが希望を求めてやって来るスレ
249 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 15:13:29.93 ID:ECpnCXVF.net] スレでグチグチ言うよりプログラム書いた方がよっぽど理解できるよ
250 名前:デフォルトの名無しさん [2021/04/23(金) 15:20:14.54 ID:ntrIv3TW.net] C/C++で穴のあるコードを書いてもしょうがないし、それも難しいんじゃないのかな 逆にC/C++の人らがRustコンパイラをすり抜けるヤバいコードを提示してくれたら、一発で口だけじゃなく出来る人だったと示せるだろうが
251 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 15:28:23.22 ID:mq69qBnk.net] >>155 > Rustに比べたC++の良さは雑に書けるところだって気付いた > やっぱ雑が許されない巨大プロジェクトはRustで、小規模な自分用ツールの類はC++で書いてくことになりそうだ これが何気に的を得てるでしょ コンパイラが安全な方に導いてくれるのはもちろん良いとして、それよりも雑に (あるいは短く親しんだ方法で) 書きたい思惑が優先されるときは C/C++ でやれば良い話で
252 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 15:38:53.83 ID:CjhKTAAP.net] いや、Rustでラクに書けない時点で勉強が不足してる そのことに自分で気付けるような人だけRust使えばいい 「当を得る」か「的を射る」ことが出来るような人になってほしい
253 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 15:56:22.07 ID:mq69qBnk.net] いや、単にコード長が C/C++ の方が短く書ける可能性高いでしょ どんなイディオムを駆使しても
254 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 15:59:55.49 ID:mq69qBnk.net] あと近年では「的を得る」は必ずしも誤用じゃないという見方が主流でしょ
255 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 19:45:46.49 ID:ECpnCXVF.net] Rustの方が雑に書ける局面多いと思うけどなぁ
256 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 20:51:53.23 ID:+YpcBxgU.net] C++ vs Rustスレでも作ってそっちでやってくれマジで 不毛すぎる
257 名前:デフォルトの名無しさん [2021/04/23(金) 21:04:58.31 ID:g6tU54WL.net] >>249 そうだね、記述量の多い言語だと思う
258 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 22:37:03.61 ID:E6ocica9.net] Rustのコンパイラと戦って勝ったコードは シンプルでエレガントで簡潔なことが多い らしい mjk、
259 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 23:34:43.49 ID:KS/Kkucz.net] linusはやっぱすげーな 洞察力が違うわ もちろんその道の神的な存在とはいえ たいして知らない言語の弱点を一瞬にして暴いて 論破できるのは凄い
260 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 01:08:35.83 ID:h5KFlu4v.net] >>251 例えばどんなとき?
261 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 01:20:53.45 ID:vtdgUVMq.net] どんなときもどんなときもRustがRustらしくある〜ために〜
262 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 08:06:24.96 ID:nPKzA798.net] C++ vs Rust https://mevius.5ch.net/test/read.cgi/tech/1619219089/ 立てましたので以降そういうのはこっちでお願いします
263 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 08:33:43.03 ID:AUtfiExa.net] >>258 お前ずっと一人で「他所でやれ」連呼してる奴だろ C++との対立構造はRustにとって無視できないテーマでしょ 正直C++とどう住み分けたら良いのかわかってない奴がほとんどなんだから
264 名前:デフォルトの名無しさん [2021/04/24(土) 08:39:09.80 ID:/opj2hnT.net] C++とRustは対立なんてしてない Rustが怖いC++お爺ちゃんがRustに噛みつているだけでしょ
265 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 08:48:20.99 ID:MAG7Rri7.net] カーネルの件で完全に拗らせとるな
266 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 08:54:35.43 ID:8O98k7om.net] > C++との対立構造はRustにとって無視できないテーマでしょ お前のテーマなんてどうでもいいんだよ よそでやってくれ
267 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 08:59:24.96 ID:MAG7Rri7.net] 一般的なテーマだってこともわからんのか。馬鹿だな。
268 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 09:02:59.11 ID:CqGuC/ho.net] リナス「やっぱCが至高、C++もRustもクソ!」
269 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 09:13:04.98 ID:IM8zU0Pj.net] rustもpanicをコアから外せればいけると思うのだが もろ言語のコアなんだよな 痛いところ突かれた
270 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 10:06:12.73 ID:yJd/gJxx.net] 言語の問題じゃなくてライブラリの問題では
271 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 10:11:32.69 ID:vtdgUVMq.net] へーpanicってライブラリなんだ
272 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 10:29:13.61 ID:nPKzA798.net] >>259 仮にその対立構造を認めるにしても 「雑に書くならC++のほうが楽」なんて、曖昧で基準も何も示されない話に真面目に付き合う奴はいないよ そういう奴らのための隔離スレとして用意したから好き放題書き散らせばいい
273 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 10:42:59.04 ID:2MdujosH.net] コード長の話でしょ? どー考えてもC++の方が短いよ んなとこで張り合ってもしゃーない
274 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 11:44:33.91 ID:8fCyRscb.net] 3割ぐらいは長いな https://benchmarksgame-team.pages.debian.net/benchmarksgame/how-programs-are-measured.html median source code gzip (July 2018) Ruby 568 Python 672 C++ 1044 C 1115 Rust 1319
275 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 12:07:10.57 ID:RPGHdVOi.net] >>258 乙。次からテンプレ入りで >>980 スレ立てよろ ========== 公式 https://www.rust-lang.org/ https://blog.rust-lang.org/ https://github.com/rust-lang/rust Web上の実行環境 https://play.rust-lang.org 日本語の情報 https://rust-jp.rs/ ※Rustを学びたい人はまず最初に公式のThe Bookを読むこと https://doc.rust-lang.org/book/ ※C++との比較は専用スレへ C++ vs Rust https://mevius.5ch.net/test/read.cgi/tech/1619219089/ 前スレ Rust part10 https://mevius.5ch.net/test/read.cgi/tech/1617367084/ ==========
276 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 12:17:31.75 ID:HBFF7y2e.net] Rustしかまじめに勉強したことないけどいい言語だと思うよ
277 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 12:21:15.48 ID:8fCyRscb.net] >>272 C/C++で一度ひどい目にあわないとRustの良さは分からんよ 今はまだ分かった気になってるだけ
278 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 12:39:27.31 ID:aNHhbYgZ.net] Rustはコンパイルでひどい目にあうから問題無い 同じことだ
279 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 12:56:02.52 ID:1Wwd5OE1.net] Rustのコンパイラに怒られまくる奴は三流プログラマ
280 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 12:59:06.14 ID:hc4SaSPr.net] Rustの文字列変数って、 str1 = str2; のように書いた時、copyではなくmoveでしたっけ?
281 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 13:03:33.00 ID:kYV5ExS+.net] String型ならmove、&str型ならcopy 文字列リテラルなら後者
282 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 13:09:43.73 ID:hc4SaSPr.net] >>276 調べてみたら、やっぱり、 let s1 = String::from("hello"); let s2 = s1; とすると、以後、s1は使用できなくなり、使用しようとするとコンパイルエラー になるんだね。こうなるのは珍しいと言えば珍しい言語。 1. Javaだと、参照を入れるだけで同じ実体を指しているため、s2経由で変更してもs1が 指しているものも変更される。 2. JS の 文字列は primitive 型なので「コピー動作」となり、s2とs1は別の実体を 指すことになり、一方を変更しても他方には変更の影響は及ばない。 3. MFCのCStringも意味的にはコピー動作なのでJSと似ているが、高速化のため、 代入後に一度も書き換えなければ、文字列を入れているメモリブロックは複製 されないし、コピーもされない。 4. STL(C++) の std::striingもMFCと意味的には似た動作。 5. BASIC言語でも、文字列はコピー動作。 6. Rubyの場合、Javaと同じで同じ実体を参照しているだけなので、一方を書き換えると 他方も全く同じように書き換わる。コピーするためには、s2 = s1.dup; と書く。 つまり、 a. BASIC、JS、MFC、STL(C++)は似た動作。 b. JavaとRubyも似た動作。 c. Rustは、b の系統に似ているが、s1 が使えなくなるのでちょっと違う。
283 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 13:13:27.35 ID:vtdgUVMq.net] >>278 無駄なことに時間使ってないでthe bookくらい読みなよ
284 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 13:20:12.76 ID:hc4SaSPr.net] >> C# は、「b.」の系統で、JavaとRubyと似た動作だね。
285 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 13:23:38.54 ID:hc4SaSPr.net] >>279 いろんな言語をかじってしまうと、どれがどれだか分からなくなってしまうんだよ。 文字列の s2 = s1 の動作は: a. BASIC、JS、MFC、STL(C++)は似た動作。中身をコピーする。 b. Java、Ruby、C# が似た動作。参照を代入するだけ。コピーしたければ明示する。 c. Rustは、b の系統に似ているが、s1 が使えなくなる。
286 名前:デフォルトの名無しさん [2021/04/24(土) 13:27:17.48 ID:hc4SaSPr.net] >>281 Javaの場合、Stringは参照しか出来ないが、Rustの場合は、「String型」だけでなく、 「Stringへの参照型」も使えるんだっけ (let s3:&String ??) ?
287 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 13:36:44.63 ID:hc4SaSPr.net] >>281 C++11以降は、x = y と書いた時、y が捨ててよいと判断した場合は、 moveで、それ以外の時は copy。 一方、Rustだと、「デフォルト move」なので、基本的には move 動作。 cooy したければ、x = y.clone; と書くのかな。 色々ややこしい。
288 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 13:39:26.22 ID:glcm53ed.net] >>283 > C++11以降は、x = y と書いた時、y が捨ててよいと判断した場合は、moveで、それ以外の時は copy。 そんな親切け??? 左辺値同士だと明示しないとmoveしてくれないだろ 最適化次第ではしてくれるの?
289 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 13:43:36.80 ID:hc4SaSPr.net] >>284 えっと、関数の戻り値が構造体型(or クラス型)の場合、右辺値と解釈されるので、 s2 = func(xxx); 見たいにした場合は自動的に move代入されたと思う。 それ以外だと、たいていは、s2 = std::move(s1); のように書かなければ copy代入になるんじゃないかな。 s2 = func(xxx).s; のようにした場合も move代入になるはず。 自信は無い。
290 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 13:47:10.36 ID:Kvw1J2lw.net] >>285 RVOは全然違うぞ s2の構築にコピーコンストラクタを使わなくなって早くなるというだけ ムーヴコンストラクタはそもそも出てこない
291 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 13:47:25.73 ID:hc4SaSPr.net] >>285 自分の記憶だと、一時オブジェクトも右辺値だから、 s2 = std::string("xxx"); ともし書いたとしたら、右辺は右辺値になるのでmove代入になるはず。 s2 = s3 + s4; みたいにしても、右辺は関数の戻り地と解釈されるので右辺値になるので move代入になるはず。
292 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 15:48:01.23 ID:QvmQEBVA.net] Rustってコードをフォーマットしてくれる機能があるからいいね これこそモダンな言語だと思う
293 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 16:01:24.29 ID:93XQhLV9.net] C++と比べりゃ大抵の言語はモダンだろうよ
294 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 16:18:04.79 ID:rGfKetgv.net] しーぷらぷらあきらめてどろっぷあうとした ちんちんぶらぶらまるはだかなひとたちが rustすぱぁとをきめるスレ
295 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 16:38:27.41 ID:MAG7Rri7.net] lintツールも満足に使えない人が喜んでるのかね
296 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 17:14:02.73 ID:yJd/gJxx.net] 非Syncなデータに複数スレッドからアクセスするコードに警告だしてくれるlintある?
297 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 18:12:05.46 ID:6780eEd1.net] へーそれコードをフォーマットしてくれる機能なんだ
298 名前:デフォルトの名無しさん [2021/04/24(土) 22:25:57.79 ID:EY30SvcB.net] >>293 君は、松永の論文を読んだのかい?
299 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 11:06:21.68 ID:M4WxeD2J.net] 質問です let a = 10; let b = &a; let &c = b; としたときに変数cは数値の10になるのですが cの前にある&は参照外しの効果があるということなのでしょうか?
300 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 12:30:46.33 ID:yYRREqIx.net] >>295 pattern matchとdestructuringでそうなる 3行目でbの型が&Tの場合に`&c`にマッチさせたらcの型はTになる dereferenceの意味で「参照外し」と言ってるなら意味は違うかも
301 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 13:38:30.57 ID:rtrHqrCb.net] >>296 横から失礼するけど、なるほど。 let &c = b; は、C++の int &c = b; とはかなり違った解釈をされてしまうんだね。後者の場合、&は参照型の 記号で、cの型は、intへの参照型になる。Rustで似たことをしたいなら、 let c:&i32 = &b; だったっけ?
302 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 13:41:33.98 ID:C031ZmfT.net] String::fromとString::newの使い分けを教えてください
303 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 15:13:55.60 ID:3Jdhcm8q.net] >>297 cも参照にしたいなら単純に let c = b; でいいはず let &c = b; は let (x, y) = (1, 2); と似たような代入式だからbが参照型(かつ被参照型がCopy可能)じゃないと コンパイルできない >>298 String::newは引数取らないで空文字列を作る String::fromは引数に文字とか文字列を取って同じ内容の文字列を作る リファレンス(↓)読みなさいと言いたいけどRustのリファレンスって traitとか理解しないとなかなか読みこなせないよね _ttps://doc.rust-lang.org/std/string/struct.String.html
304 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 15:19:02.60 ID:yYRREqIx.net] >>297 >let c:&i32 = &b; >>295 の続きならbがすでに&i32なので let c = b; か let c: &i32 = b; C++でもStroustrupに従ってint& c = b;と書いとけば同じ意味にとれなくもない
305 名前:デフォルトの名無しさん [2021/04/25(日) 15:31:18.79 ID:2bakgkUg.net] 意図もわからずなんとなく動くからそのメソッドを使い、借用をつければなんとなく動くから 借用し、変更する予定はないけどmutし、ここはエラーだからとpanic!し、補足するなと言われているのに catch_unwind/recoverして、血の涙で泣きながら渡されたソースをシコシコ直すおまいら・・・
306 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 16:19:28.48 ID:S2tV53BX.net] >>299 >>300 なるほど、Rustでの b は、C++で言えば「参照」ではなく「ポインタ」の「ようなもの」に なっているので、 let a = 10; let b = &a; の状態だと、 let c = b; か let c: &i32 = b; か let c: &i32 = &a; で c を b と同じような「Rustでの参照型」の変数に出来るわけね?
307 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 16:55:56.06 ID:S2tV53BX.net] >>302 C++で書き直すと、 int a = 10; int *b = &a; の状態だと、 int *c = b; か int *c = &a; で c を b と同じような「C++のポインタ型」の変数になる。 ということだね。
308 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 17:24:01.78 ID:Ef2Yns/P.net] >>301 割とこの未来はもう始まってるんだよな。。rust書き逃げは結構ある。。
309 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 17:25:49.32 ID:vrxr0D/D.net] 悪用できない道具など無い
310 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 17:30:22.71 ID:VydP0zWV.net] 構造体があるじゃん a.b.cの更新参照もってて 同時に a.b.dの更新参照とって 両方更新しようしたら aの更新参照が2箇所にあることになるからできないの? 使い物にならんくない?
311 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 17:40:32.44 ID:M4WxeD2J.net] >>296 なるほど match式と同じ様に振る舞うのね
312 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 17:58:15.33 ID:In1fvQYU.net] >>306 更新参照ってのが&mutのことならできる時とできない時がある 同じ関数内で &mut a.b.c と&mut a.b.d を取ることはできるけど &mut a.b をとって &mut a.b.d を返す関数を呼び出した後は a.b.d にアクセスできない これは関数呼び出し時点で a.b が borrow されると判断されるため このあたりを何とかしようとする 議論は昔からあるけど特に進展なし https://github.com/rust-lang/rfcs/issues/1215 実用的にはデータ構造の設計を見直すか、RefCell でくるむのが良いと思う 後者は &a.b をとって RefMut を返す関数にするってことね
313 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 18:57:01.34 ID:1PPsE
] [ここ壊れてます]
314 名前:J27.net mailto: 文字列についてなんかわかりにくいのだけど C++に例えると strはchar a[len] Stringはstruct String { long len; char* str;} &strはchar* str=&a[2] このイメージで問題なし? [] [ここ壊れてます]