- 1 名前:デフォルトの名無しさん [2024/02/23(金) 17:37:52.13 ID:CheDQupm.net]
- 公式
https://www.rust-lang.org/ https://blog.rust-lang.org/ https://github.com/rust-lang/rust 公式ドキュメント https://www.rust-lang.org/learn Web上の実行環境 https://play.rust-lang.org ※Rustを学びたい人はまず最初に公式のThe Bookを読むこと https://doc.rust-lang.org/book/ ※Rustを学ぶ際に犯しがちな12の過ち https://dystroy.org/blog/how-not-to-learn-rust ※Rustのasyncについて知りたければ「async-book」は必読 https://rust-lang.github.io/async-book/ ※次スレは原則>>980が立てること 前スレ Rust part22 https://mevius.5ch.net/test/read.cgi/tech/1705760500/ ワッチョイスレ プログラミング言語 Rust 4【ワッチョイ】 https://mevius.2ch.net/test/read.cgi/tech/1514107621/
- 537 名前:デフォルトの名無しさん mailto:sage [2024/04/03(水) 21:45:24.20 ID:ClJR5oeK.net]
- GCやJITは銀の弾丸と思われていろんな後発言語に取り込まれたけど、所有権は最初から組み込むには高度すぎるがエコシステム成熟前に組み込まないといけないという制約が大きいんだろうな。
- 538 名前:デフォルトの名無しさん mailto:sage [2024/04/03(水) 22:40:40.78 ID:7LWlVk3J.net]
- 後発言語???
- 539 名前:デフォルトの名無しさん mailto:sage [2024/04/04(木) 03:50:23.61 ID:6dtGhNgR.net]
- >>537
所有権は最終的にはプログラム間の境界の問題になるから、c++のスマートポインタのようにアダプタで管理範囲を調整することで改善可能。 適切なアダプタを用意しても境界のプロトコルをどうやって徹底するかという問題は残るから、Rustみたいに言語レベルで強制できると頑強になる。 ただ、Rustみたいにガチガチにすると設計の柔軟性を失うから、実装も早すぎる最適化になりがち。Rustの絶壁の学習曲線と相まって、開発初期のRust導入はプロジェクトを破綻させる要因となりうる。Rustが適しているのは、ある程度枯れた設計の実装を置き換えるようなプロジェクトかと。
- 540 名前:デフォルトの名無しさん mailto:sage [2024/04/04(木) 04:13:47.93 ID:KZy/sIny.net]
- Rustはむしろリファクタリングにも向いていてなかなか良い言語だぜ
とりあえず動くように雑に書いて動かしてみて 次に機能追加充実させる上で整理しながらモジュール化や共通事項のtrait化など このようなリファクタリング過程で 他の言語だとメモリ安全性だけでなく書き換え競合やヌル値エラー値取り扱いミスなどエンバグすることも多いが Rustではコンパイル通せばそれらの心配がなくリファクタリングできる
- 541 名前:デフォルトの名無しさん mailto:sage [2024/04/04(木) 08:02:04.20 ID:KuogGH/c.net]
- そもそもGC無しの言語ってニッチじゃない?
当面は、Rustで充足されて安泰な気がする。
- 542 名前:デフォルトの名無しさん [2024/04/04(木) 08:06:01.77 ID:wZ/e8tnl.net]
- うむり、実用言語では現時点で安全性とスピードを高い次元で両立できてるのはRustだけかもね。
関数型言語にも良いのあるけど、普及しなさそうだしね…。 (OCamlとか次世代HaskellらしいIdrisとか) それにCとアセンブラしかない分野(C++不可なくらい低スペックな組み込み)でC++以降のモダンな言語が使えるのは大きい。
- 543 名前:デフォルトの名無しさん mailto:sage [2024/04/04(木) 08:41:03.15 ID:VIrJEXhK.net]
- 学問的には合理的な型システムとか検証器とかの研究は大きく進んでるけど
メモリの動作モデルをそこそこちゃんと仕様にしてるのは C/C++ しかないんだよね。 LLVM が C/C++ を前提にしてるところもあるし、 Rust もそれに合わせる形になってるところもある。 C/C++ 的な分野をよりよくやる言語と考えると Rust はとても良い。
- 544 名前:デフォルトの名無しさん [2024/04/04(木) 12:25:37.65 ID:Gnl54rZ8.net]
- すまんが↓これが動く理由を教えて欲しいんだけどさあ
https://paiza.io/projects/uhC43ajorg-qaLG7mXbw7w 一見すると5行目で所有権が失われて、6行目で使ってるように見えるんだけど・・・・ これって5行目が借用に推定されてるの? それともリテラルを引数にした場合だと5行目で「1」が他のスタックにコピーされて、所有権が失われる問題なんか起きないのかな? へるぷみい
- 545 名前:デフォルトの名無しさん [2024/04/04(木) 12:36:31.67 ID:xh1kANkn.net]
- マクロだからセーフ
- 546 名前:デフォルトの名無しさん mailto:sage [2024/04/04(木) 12:40:39.97 ID:yz59nStO.net]
- >>544
値とその所有権が複製されて関数fに渡される分とそのまま残る分の2つになる
- 547 名前:デフォルトの名無しさん mailto:sage [2024/04/04(木) 12:49:08.15 ID:w8P1RFve.net]
- 値が複製されて、複製された値の所有権が関数fに渡るだな。
所有権の複製とかいうクソワードは避けてくれ。
- 548 名前:デフォルトの名無しさん mailto:sage [2024/04/04(木) 14:09:00.66 ID:VIrJEXhK.net]
- >>544
i32 は Copy トレイトが実装されてる。 普通なら所有権の移動になる文脈で暗黙に clone されると思ったら良い。
- 549 名前:デフォルトの名無しさん [2024/04/04(木) 14:21:30.05 ID:Gnl54rZ8.net]
- そう言うことなのか、ありがとう!
理由が分からなかったから不気味だったぜ
- 550 名前:デフォルトの名無しさん mailto:sage [2024/04/04(木) 15:21:14.87 ID:AF0jRQyM.net]
- >>547
>値が複製されて、複製された値の所有権が関数fに渡るだな。 複製された値の所有権は最初から関数fのスコープの中で発生するものなので 「関数f」に渡るという表現には少し違和感を感じる
- 551 名前:デフォルトの名無しさん [2024/04/04(木) 15:34:13.46 ID:1vyOHDUL.net]
- 「違和感を感じる」という表現に違和感を感じる
- 552 名前:デフォルトの名無しさん mailto:sage [2024/04/04(木) 18:59:50.97 ID:mbQWc9lN.net]
- >>551
滑ってるぞ
- 553 名前:デフォルトの名無しさん [2024/04/04(木) 19:04:00.82 ID:mNkWQBjH.net]
- 感じてるから違和「感」だからね
要は頭痛が痛いと同じ
- 554 名前:デフォルトの名無しさん [2024/04/04(木) 19:08:09.03 ID:v0TcrcAn.net]
- 違和感がある。これでどうだ
- 555 名前:デフォルトの名無しさん mailto:sage [2024/04/04(木) 19:17:51.63 ID:v7LceGlx.net]
- >>553
感じるを感じるメタ表現だろ。 ポインタのポインタみたいなもんだ。
- 556 名前:デフォルトの名無しさん mailto:sage [2024/04/04(木) 20:07:49.07 ID:xDxHg+AD.net]
- >>542
embedded 対応アーキ少なくね?
- 557 名前:デフォルトの名無しさん mailto:sage [2024/04/04(木) 23:05:07.77 ID:94OMF7T7.net]
- >>553
「違和感を感じる」は「頭痛が痛い」とは違って重言ではないよ https://togetter.com/li/2067771 https://www.nhk.or.jp/bunken/research/kotoba/20240101_4.html
- 558 名前:デフォルトの名無しさん mailto:sage [2024/04/04(木) 23:18:56.70 ID:94OMF7T7.net]
- >>557
重言ではあるけど間違った日本語ではない といったほうがよかったね
- 559 名前:デフォルトの名無しさん [2024/04/05(金) 00:09:35.95 ID:Lw8p7kTG.net]
- >>556
少ないね。 でも、そもそも今までCとアセンブラ以外はほぼ無い状態だったから、出てきただけマシ。 それに、少ないといってもシェアが広いアーキなので滑り出しは順調と言えるのかと。
- 560 名前:デフォルトの名無しさん mailto:sage [2024/04/05(金) 00:21:09.11 ID:dub3Z8tI.net]
- 後発言語?
- 561 名前:デフォルトの名無しさん [2024/04/05(金) 00:50:16.55 ID:Lw8p7kTG.net]
- 少し前まで次世代言語と言われてた程度には後発。
鯖向け言語で終わると思ってたら、マジでC/アセンブラの牙城を崩し始めるとは思わんかった。 むしろ崩し始めることすら無理だと思ってた。
- 562 名前:デフォルトの名無しさん mailto:sage [2024/04/05(金) 05:07:52.53 ID:CPVE6BHF.net]
- >>559
状況も追い風なのかもね。 二の足踏んでたけど、armと生きていく決心をしてrust覚えるか。 先にrust身に付けてから、非対応アーキでC++導入したらメリットあるかな?
- 563 名前:デフォルトの名無しさん [2024/04/05(金) 08:11:28.72 ID:Lw8p7kTG.net]
- Rust知ってれば安全性の高いシステム組めますと言うアピールになるし、C++にもその安全性のための知見は役立つ。
複数言語使えますってだけでもアピールになるしね。 Rustは多分仕事自体はまだ多くない。 これからアピールして増やしていく感じなので、両方使えてた方がいい。
- 564 名前:デフォルトの名無しさん mailto:sage [2024/04/06(土) 22:48:03.64 ID:4i1Gvjc8.net]
- rustというものがありながらなぜ大部分のコードはC言語なのかを知るために現場に行くのもアリ
- 565 名前:デフォルトの名無しさん mailto:sage [2024/04/06(土) 23:06:32.76 ID:7kpWL/Du.net]
- Rustが実用的になったのは2020年
それ以降の新規案件はRustになっている
- 566 名前:デフォルトの名無しさん [2024/04/07(日) 01:26:10.29 ID:Hmt7T+4v.net]
- Rustへの移行は始まったばかりだからまだまだCが残っているのは当たり前
- 567 名前:デフォルトの名無しさん mailto:sage [2024/04/07(日) 10:55:29.15 ID:QD1FKAnH.net]
- 絶壁の学習曲線。
貧弱なライブラリと人材。 早すぎる最適化。 しばらくは既存コード置き換えが中心だし、今後もプロジェクト初期のプロトタイピングで使われることは無いだろう。
- 568 名前:デフォルトの名無しさん [2024/04/07(日) 14:17:46.28 ID:vzw88H1n.net]
- P系言語の糞思考に染まっていない初心者こそ
最初にRustを学ぶべき
- 569 名前:デフォルトの名無しさん mailto:sage [2024/04/07(日) 18:04:59.36 ID:Sj2oLPpI.net]
- >>567
移植なんて無駄な作業はどの言語間でも行われることが少なく
- 570 名前:デフォルトの名無しさん mailto:sage [2024/04/07(日) 18:05:33.79 ID:nD4MmBKu.net]
- 初手Rustは冗談抜きで2024以降だと選択肢に入るんじゃないか
- 571 名前:デフォルトの名無しさん mailto:sage [2024/04/07(日) 18:09:00.76 ID:Sj2oLPpI.net]
- >>567
移植なんて無駄な作業はどの言語間でも行われることが少なく 通常はシステム更新で全体もしくは一部が作り直される時に別の言語が使われる Rustでも同様でほとんどがそれら含む新たな案件
- 572 名前:デフォルトの名無しさん mailto:sage [2024/04/07(日) 18:16:09.73 ID:TV6Dkj8m.net]
- >>567
早すぎる最適化という意味不明なデタラメ書いているのは君一人だけ そしてRustを叩きたいためにウソを散りばめる
- 573 名前:デフォルトの名無しさん [2024/04/08(月) 02:24:45.08 ID:BHlkyWwA.net]
- >>567
貧弱なライブラリとかエアプかよ そしてRustを叩きたいためにウソを散りばめる
- 574 名前:デフォルトの名無しさん mailto:sage [2024/04/08(月) 03:09:59.48 ID:BqmMXmQi.net]
- 単なる感想を必死にウソ扱いして何がしたいんだコイツw
- 575 名前:デフォルトの名無しさん [2024/04/08(月) 11:48:22.86 ID:hzcejt90.net]
- ライブラリはPythonと比べると流石に貧弱
特に数値計算とか物理・機械学習系 簡単な数値計算の時点でnumpy•scipyのようなデファクトがなく、雑魚が乱立している もっと高度な計算系ではもっと雑魚が乱立しているか、そもそもない
- 576 名前:デフォルトの名無しさん mailto:sage [2024/04/08(月) 12:32:47.46 ID:64QjhTLf.net]
- >>575
キチガイアンチ すべての分野でライブラリが充実している言語は存在しない ある分野で一番充実している言語を棍棒にしたら他のすべての言語が負けるのは当たり前 そういう無意味なことをして叩いて楽しいか?
- 577 名前:デフォルトの名無しさん [2024/04/08(月) 13:16:14.61 ID:JoalanBl.net]
- >>576
貧弱なことを指摘するのは叩きではない 俺はただ、「貧弱なライブラリとかエアプかよ」とか言っているエアプに現実を指摘しただけだ
- 578 名前:デフォルトの名無しさん mailto:sage [2024/04/08(月) 14:02:16.22 ID:7wfBslr8.net]
- >>576
そこは「Rustなら〇〇分野のライブラリがどの他言語より充実している」と反論するところだろ。
- 579 名前:デフォルトの名無しさん mailto:sage [2024/04/08(月) 14:10:54.87 ID:7wfBslr8.net]
- >>570
絶壁の学習曲線だから無理だろ。 moveを意識しないshared xor mutableの無い、Rc中心のEasyRustとかが無いと、fnひとつ呼び出せないんじゃない?
- 580 名前:デフォルトの名無しさん mailto:sage [2024/04/08(月) 14:43:36.67 ID:IC0NBj1d.net]
- Crypto分野はRustが他言語よりも充実してるかもね
- 581 名前:デフォルトの名無しさん [2024/04/08(月) 15:06:06.34 ID:rjHvzTUw.net]
- ライブラリの多さってイコールでユーザの多さなんだよ
更にいうとその言語開発者の意欲の表れでもある ライブラリが少ないという事はユーザが少ない 更に少ないユーザの中でも意欲の有る人間は少数って証明なんだよね
- 582 名前:デフォルトの名無しさん [2024/04/08(月) 15:43:54.88 ID:JoalanBl.net]
- いやまあ数はあるんよ数は
意欲のある人はいるっぽいんだけど、デファクトとるようなライブラリってやっぱりそれなりの人数でちゃんと資金とって作られてるんだよな 資金取るのは個人の意欲だけじゃなくて、お金のある人を納得させる理屈が必要で、少し前までのRustは少なくとも数値計算の分野でそれが出来る言語ではなかったと思う
- 583 名前:デフォルトの名無しさん [2024/04/08(月) 16:39:42.51 ID:9qnuy4NE.net]
- てかrustユーザーってnvidiaのcudaサポートの酷さにガチギレするような奴ばっかでしょ。
そんなんで数値計算ライブラリが入るわけがない。
- 584 名前:デフォルトの名無しさん mailto:sage [2024/04/08(月) 17:11:27.78 ID:7wfBslr8.net]
- 初心者向けのSimplified Rustと、
c/c++ライブラリバインドを強化したAdaptor Rustあたりは欲しいなぁ。 Safe Rustじゃ難しそうだし。
- 585 名前:デフォルトの名無しさん [2024/04/08(月) 17:54:43.90 ID:JoalanBl.net]
- ゼロからプログラム書くならSafe rustが一番簡単だよ
こいつに従っているだけで割と見通しが良くてバグりにくいコードが書ける まあGoto 多用しているようなFortran おじいちゃんとは相性が悪いかもしれんが
- 586 名前:デフォルトの名無しさん mailto:sage [2024/04/08(月) 19:05:28.67 ID:ifgKIXku.net]
- C++を完全に理解した者のための言語それがRust
故に誰も
- 587 名前:デフォルトの名無しさん mailto:sage [2024/04/08(月) 20:39:36.28 ID:cqL1RV99.net]
- C++を使ったことないけど
Rustで困ったことないな Rust理解で必要なことはポインタとスタックとヒープとRAIIくらいかな 所有権は単なるヒープ解放責任だから大したことではない 所有権を他へ譲渡しないとRAIIによって自動解放されるというだけの話 非常にシンプル
- 588 名前:デフォルトの名無しさん mailto:sage [2024/04/08(月) 21:02:11.65 ID:YkdU7kgc.net]
- 所有権を複製するとか間違った事を言い続けてる人が良く言うわw
- 589 名前:デフォルトの名無しさん [2024/04/09(火) 00:09:53.71 ID:pItuq1gX.net]
- >>588
それは俺じゃないぞ
- 590 名前:デフォルトの名無しさん mailto:sage [2024/04/09(火) 02:45:12.09 ID:hsAXyuRl.net]
- >>589
誰だよお前。
- 591 名前:デフォルトの名無しさん mailto:sage [2024/04/09(火) 09:16:17.69 ID:OXfvzIgi.net]
- 今のところ>>458が一番面白い
- 592 名前:デフォルトの名無しさん mailto:sage [2024/04/09(火) 10:16:36.65 ID:Po0ZJOeT.net]
- 昭和ギャグ?
ちょっと意味がわかりません
- 593 名前:デフォルトの名無しさん mailto:sage [2024/04/09(火) 11:01:29.74 ID:cj+QXWpg.net]
- 今どきイジりを面白いとか、イジメ肯定派かよ。
- 594 名前:デフォルトの名無しさん mailto:sage [2024/04/09(火) 13:18:19.32 ID:9AcR/8+u.net]
- 進化論肯定派じゃないの
人を淘汰することを志している
- 595 名前:デフォルトの名無しさん mailto:sage [2024/04/09(火) 17:18:23.86 ID:+rnauHt3.net]
- カチョー「???」じゃなくて
カチョー「で?」なら共感できたかも
- 596 名前:デフォルトの名無しさん mailto:sage [2024/04/10(水) 01:14:02.81 ID:/k7xUJZy.net]
- rustだいぶ分かってきたつもりだけど
ライフタイムとジェネリクスとクロージャが一斉に襲いかかってくると無理 好きな言語だけど世の中にはプログラミング言語に強い興味を示す奴が稀なので厳しいなぁと感じる
- 597 名前:デフォルトの名無しさん mailto:sage [2024/04/10(水) 08:03:56.89 ID:ltqciZ07.net]
- >>592
進捗報告相手が課長というのが昭和かもな そんな会社で働きたくない
- 598 名前:デフォルトの名無しさん mailto:sage [2024/04/10(水) 11:01:40.54 ID:5Js//1cu.net]
- >>596
moonbit くらいならどうかな?
- 599 名前:デフォルトの名無しさん mailto:sage [2024/04/10(水) 11:35:35.51 ID:AS+TZoYk.net]
- >>596
それぞれ理解していれば組み合わさって困ることはないんじゃないかな Rust特有のライフタイム注釈は構造体なら「参照を持ってるよ」の印で関数なら「この引数の参照は返り値の参照に対応するよ」の印であとは有効期間を満たすだけなど
- 600 名前:デフォルトの名無しさん [2024/04/10(水) 16:55:22.63 ID:yZA7mDLP.net]
- Rustってfunctionをfnって略すくらい気が短いのに、なんでメソッド定義時にはわざわざselfみたいなPython臭いの入力しないとだめなんですか?めんどいんですけど
- 601 名前:デフォルトの名無しさん mailto:sage [2024/04/10(水) 17:30:31.18 ID:Fk7YBwaR.net]
- メソッドをそうでない普通の関数と区別するためにはなんらかのマークは要るじゃろ。
- 602 名前:デフォルトの名無しさん mailto:sage [2024/04/10(水) 17:38:51.91 ID:t7JkSWKp.net]
- self/ mut self/&self/&mut selfの区別もいるしな
self自体これ以上短くしてもよくわからん単語になるしまぁ妥当では
- 603 名前:デフォルトの名無しさん mailto:sage [2024/04/10(水) 17:52:25.08 ID:5Js//1cu.net]
- C++ の ref-qualifier とか無理のある文法だもんな。
そこに書くんか!? という変な驚きがある。 引数の一種ということにしたほうがかなり単純でよい。 実際、 C++ でも C++23 から this を明示的な引数に取れる文法が追加された。 (deducing this)
- 604 名前:デフォルトの名無しさん [2024/04/10(水) 17:58:48.34 ID:Q64PiueS.net]
- RustでPython実装すりゃ良いんじゃね
- 605 名前:デフォルトの名無しさん mailto:sage [2024/04/10(水) 18:34:01.75 ID:3h5gXXiJ.net]
- >>602
普通に全部ダサいんだよなあ 何とかならなかったのかとならなかったのかとならなかったのかと…
- 606 名前:デフォルトの名無しさん [2024/04/10(水) 19:34:40.80 ID:8DE+tVvz.net]
- selfより短ければ良いのか、それともC++みたいに省略できてしまってどこで定義されてるのかようわからんくなるのが好きなのか
- 607 名前:デフォルトの名無しさん mailto:sage [2024/04/10(水) 19:44:04.66 ID:y0DX5npz.net]
- ぜひとも >>605 の考える最高にイケてる構文を教えてほしい
Rustを今から変えるのは無理でも、後継言語に採用されるかもしれんし
- 608 名前:デフォルトの名無しさん mailto:sage [2024/04/10(水) 19:47:55.68 ID:IjfZ+vUr.net]
- >>605
nimの関数呼び出しルール 関数名(第一引数,第二引数...) 第一引数.関数名(第二引数...) で第一引数がself相当 が一番スマートかと。
- 609 名前:デフォルトの名無しさん mailto:sage [2024/04/10(水) 20:06:03.20 ID:AS+TZoYk.net]
- >>605
むしろ>>602はそれらの区別のためにもselfは必須と言ってるようにみえる さらに構造体などフィールド名と関数内の変数名との区別のためにもselfは欲しい 現状のRustの仕様がベストかな
- 610 名前:デフォルトの名無しさん [2024/04/10(水) 21:28:15.02 ID:8DE+tVvz.net]
- selfじゃくてthisならC++マニアも納得
- 611 名前:デフォルトの名無しさん mailto:sage [2024/04/10(水) 21:34:35.54 ID:6SjCdg5T.net]
- >>608
nimを知らないけど、Rustのassociated functionもその二種類の呼び出し方法がとれる点は同じだね Vec::push(&mut vec, 123); (&mut vec).push(123); vec.push(123); この&mutを省略できてRust便利
- 612 名前:デフォルトの名無しさん mailto:sage [2024/04/10(水) 21:37:52.75 ID:Mpv09JwO.net]
- thisはたまにselfの代理で使われてるな
Rc::into_innerとか
- 613 名前:デフォルトの名無しさん mailto:sage [2024/04/10(水) 23:19:28.12 ID:AS+TZoYk.net]
- deref後のinto_inner適用と区別のため
敢えてself使わないことでメソッド呼び出し形式をできなくして 明示的にRc::into_inner呼び出しさせるパターンだね
- 614 名前:デフォルトの名無しさん mailto:sage [2024/04/10(水) 23:45:41.84 ID:Fk7YBwaR.net]
- メソッドを呼び出すことと関数の第一引数に渡すことを同一視する構文は
LISP 用に作られたオブジェクトシステム new flavors でやってた。
- 615 名前:デフォルトの名無しさん mailto:sage [2024/04/11(木) 02:11:03.37 ID:4f6XcC0j.net]
- それは同一視というか構文が1つしかないだけでは
- 616 名前:デフォルトの名無しさん [2024/04/11(木) 02:14:15.06 ID:7FNbL3Xb.net]
- 呼び出し時には与えない引数って紛らわしくね?
- 617 名前:614 mailto:sage [2024/04/11(木) 02:45:03.24 ID:C4qhk0zm.net]
- >>615
メッセージを送る構文と関数呼出しの構文の両方があって構文糖として扱える仕組みになってたという話。 new flavors の前に flavors というのがあって、それはメッセージを送る構文しかなかったのだけど new flavors で改良 (かどうかわからんけど) された。
- 618 名前:デフォルトの名無しさん mailto:sage [2024/04/11(木) 04:57:52.23 ID:r6y9Ju0a.net]
- >>616
むしろ逆かな target.method(arg1, arg2, ...)という targetへのメソッドコールを実現するのを関数で表すと method(target, arg1, arg2, ...)とする言語が多い Rustでも同じでこのtargetをselfと書く targetは送る側から見た視点 selfは受け取った側から見た視点 各実装は受け取った側でなされるためself
- 619 名前:デフォルトの名無しさん mailto:sage [2024/04/11(木) 08:24:38.80 ID:McLA6Ner.net]
- UFCSは第一引数を1つ目だからというだけの理由で特別扱いするのが気持ち悪いんだよな
レシーバとして扱われるなら構文上も特別であってほしい
- 620 名前:デフォルトの名無しさん mailto:sage [2024/04/11(木) 08:39:59.21 ID:UjbgXeUt.net]
- >>619
何が気持ち悪いのかさっぱりわからない まず、全ては関数呼び出しになりそれ以外の方法はない、というのはいいよね? 次に、その関数呼び出しでのレシーバの渡し方は最初の引数になる、というのも自然だよね? ほとんどの言語がこの方式なのに何を気持ち悪がっているのだろう
- 621 名前:デフォルトの名無しさん mailto:sage [2024/04/11(木) 08:49:57.16 ID:azFLg2co.net]
- 言うほどほとんどの言語がこれか?
pythonは後付けでOOPぶっこんだからただの関数の引数にSelfなんだ これがPythonいまいちだなって思うところ c++も似た様な理由でstaticでthis 後発で考慮する余裕あるのにそれを引っ張ってる
- 622 名前:デフォルトの名無しさん mailto:sage [2024/04/11(木) 09:02:17.34 ID:NXydgA7G.net]
- >>621
君の感性がおかしいんじゃね? NimもZigもRustもPythonと同じ標準方式 foo(receiver, arg1, arg2, ..) または receiver.foo(arg1, arg2, ..)
- 623 名前:デフォルトの名無しさん mailto:sage [2024/04/11(木) 09:02:43.98 ID:7FNbL3Xb.net]
- >>618
なるほどちょっと納得した
- 624 名前:デフォルトの名無しさん mailto:sage [2024/04/11(木) 09:11:33.28 ID:azFLg2co.net]
- >>622
実質Pythonフォロワーを含めて言われても…
- 625 名前:デフォルトの名無しさん mailto:sage [2024/04/11(木) 09:14:09.83 ID:azFLg2co.net]
- C言語のときはOOPじゃなくてただの関数の第一引数に構造体を指定してた
それがOOP言語になって指定不要になった それがまたC言語時代に逆戻り
- 626 名前:デフォルトの名無しさん mailto:sage [2024/04/11(木) 09:15:22.73 ID:NXydgA7G.net]
- >>624
何を言ってるのかわからん 文句を言うなら望ましい代案を出してみて
- 627 名前:デフォルトの名無しさん mailto:sage [2024/04/11(木) 09:17:05.47 ID:azFLg2co.net]
- あらかじめ書いておくけどreceiver.Foo()じゃないメソッドがあるのは
receiverがNullの可能性がある場合でそう設計されてただけ
- 628 名前:デフォルトの名無しさん mailto:sage [2024/04/11(木) 09:20:43.92 ID:NXydgA7G.net]
- 代案を出せないってことはRustに言いがかりをつけてるだけだな
- 629 名前:デフォルトの名無しさん mailto:sage [2024/04/11(木) 09:24:05.56 ID:azFLg2co.net]
- 別に他のOOP言語のように関数にマークつけてこれはこのインスタンスのメソッドですよと言えばいいだけ
その表記は時間をかけて考えたらいい
- 630 名前:デフォルトの名無しさん mailto:sage [2024/04/11(木) 09:30:34.30 ID:cvuvfjXO.net]
- >>625
レシーバは必ず必要 Goでも func (receiver ReceiverType) Foo(引数…) { return receiver.xxx + receiver.yyy } と書く レシーバ指定不要という主張は理解できない
- 631 名前:デフォルトの名無しさん mailto:sage [2024/04/11(木) 09:45:56.75 ID:gYo8nOa5.net]
- レシーバの名前を自由につけられると人によってバラバラで読みづらいんだよな
selfなら必ず揃うし予約語としてシンタックスハイライトされるのもいい
- 632 名前:デフォルトの名無しさん mailto:sage [2024/04/11(木) 09:51:28.66 ID:azFLg2co.net]
- いやいやw
無知って怖いねとしか…
- 633 名前:デフォルトの名無しさん mailto:sage [2024/04/11(木) 09:52:17.20 ID:azFLg2co.net]
- >>630
- 634 名前:デフォルトの名無しさん mailto:sage [2024/04/11(木) 10:19:57.47 ID:UmgPKlgb.net]
- UFCSはフリー関数でもメソッド風に呼び出せる機能のことでRustやその他多くの言語のメソッド呼び出しとは似て非なるもの
>>619はそれを分かった上でNimについて書いてるのかもしれないけど>>620や>>622は明らかに誤解してる
- 635 名前:デフォルトの名無しさん mailto:sage [2024/04/11(木) 10:33:59.60 ID:Nlu6ipA3.net]
- >>631
そう言われるとRustの仕様がベストなのかな レシーバに名前を付けないと名前空間の分離ができなくて レシーバに名前を自由に付けられると読みづらくて
- 636 名前:デフォルトの名無しさん mailto:sage [2024/04/11(木) 11:00:57.82 ID:azFLg2co.net]
- IDころころお爺さんは明らかに話を理解できないな
- 637 名前:デフォルトの名無しさん mailto:sage [2024/04/11(木) 11:23:46.71 ID:CaCoKmZ3.net]
- Rustは小文字selfが値、大文字Selfが型を示していて使いやすいよな
型指定にSelfやSelf::Itemなど使えるだけでなく Self::CONSTANT_NAMEやSelf::function_without_self()などの呼び出しもできる Selfによって自分自身であるとわかりコードが読みやすい 型名変更の影響も受けず読みやすいメンテしやすい ダメな言語だと以下のダメなパターンがある ・Selfの代わりに型名を書かなくてはいけない言語 (自分自身だとわかりにくくメンテ性も悪い) ・Selfの代わりにself(やthis)を用いてしまう言語 (値と型の区別がつかない) ・Selfを使わずに名前空間の区別がない言語 (間違いが起きやすく自分自身だとわかりくくメンテ性が悪い)
|
![](http://yomi.mobi/qr.gif)
|