結局C++とRustってどっちが良いの? 2traits
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
垢版 |
2023/04/02(日) 00:42:57.53ID:W9/nq+tL
「C++の色々配慮してめんどくさい感じは好きだけど、実務になったらメモリ安全性とか考えて今後Rustに変わっていくんかな」
「うだうだ言ってないで仕事で必要なのをやればいいんだよ、趣味なら好きなのやればいい」

っていうスレ。

前スレ: 結局C++とRustってどっちが良いの?
https://mevius.5ch.net/test/read.cgi/tech/1677286186/
0952デフォルトの名無しさん
垢版 |
2023/05/03(水) 16:55:25.45ID:CpOUjLJu
>>951
メカニズムがそもそもおかしい
それでベストプラクティスが必要になる

実際はこれという書き方のために仕組みができたはずなんだけどこれと言うものが見当たらず…
それで大勢が迷いながら試行錯誤しながら書いてる
おかしいことこの上ない
0955デフォルトの名無しさん
垢版 |
2023/05/03(水) 17:37:47.24ID:ycNdXH31
ファイルは変更のタイミングで分ければいいんじゃないか
AとBがあるとして、Aを変更するときに、Bも変更しがちなら同じファイル、
そうでないなら別のファイルてな具合にね
0956デフォルトの名無しさん
垢版 |
2023/05/03(水) 17:43:35.45ID:8i5w0ffn
>>944
モジュールの主目的は関数や型の論理的グループをまとめるためなので分け方にRust特有の事情は基本的にないよ

ファイルを別にしたら必ず別モジュールになるんだけどそれは理解してる?
0957デフォルトの名無しさん
垢版 |
2023/05/03(水) 18:01:00.42ID:QkSJi2Wv
例えば>>927の動画だとルート含めて4つのモジュールに分割してる

auth_service(ルート)
auth_service::auth_util
auth_service::auth_util::models
auth_service::database

この分け方に正解はなくてアプリの用途や開発組織の事情でいろんな分け方になりうる
それはRust以外の他言語でも全く同じ
0958デフォルトの名無しさん
垢版 |
2023/05/03(水) 18:02:29.01ID:ZUjoJdUJ
Rustが言語レベルでデザインパターンを縛っているわけでもないんだから
言語レベルでのベストプラクティスとかあるわけもなし
0959デフォルトの名無しさん
垢版 |
2023/05/03(水) 18:03:18.87ID:QkSJi2Wv
部分的に別クレートに分けるかどうかはRust特有の事情が絡んでくるけどクレート分割を考えるのはプロジェクトが大きくなってからで十分
0960デフォルトの名無しさん
垢版 |
2023/05/03(水) 18:41:43.51ID:CpOUjLJu
どうもRust勢の答えがずれてるね
ファイル分轄したいときは普通はどうしますかって問いにまともに答えていない

他の言語だと大体はファイル分轄しても同じ名前空間的なものにつっこめばそれでもう参照可能
rustは違うんだろう?
それが何でそうなったのかは考えたことがあるのかな?
それで何かコーディングするうえで有利だなと思ったことはあるのかな?
なんかもう回答のレベルが低い
0961デフォルトの名無しさん
垢版 |
2023/05/03(水) 18:44:09.53ID:Evi6pte5
>>946
>自分はとりあえずJavaみたいに1ファイルにつきpub型定義1つをベースにしてる(絶対ではない)
RustのモジュールはJavaだとクラスよりパッケージに当たるものでは?
0962デフォルトの名無しさん
垢版 |
2023/05/03(水) 18:45:33.01ID:CpOUjLJu
他の言語やってた時は1クラス1ファイルでとか言ってたくせにrustに移動したら
大きなコード書くまで考えなくてもいいとか言い出すのは変だよ

こんなレベルの低い回答はないし答えなくてもいい
識者が答えればいいんだ
0963デフォルトの名無しさん
垢版 |
2023/05/03(水) 18:48:42.23ID:5z4fSxCy
イノベーター(マニアに近い)には「なぜか売れる」という現象がある。
熱狂的に支持する層が一部にはいる、ということは恐らく事実で悪いことではないが、
それはたまたまその人達のニーズに合っていただけであり、それだけで普及には
至らない。
0964デフォルトの名無しさん
垢版 |
2023/05/03(水) 18:52:33.52ID:5z4fSxCy
何か作って売るとき、この商品は競合品に比べると総合的に見て欠点が多くて
お勧めは出来ないんだけど、一部の人にはなぜか売れて、結構評判もいい、
ということがある。
それがRustではないか。
0965デフォルトの名無しさん
垢版 |
2023/05/03(水) 19:00:10.90ID:IJcGoA2a
個人的にC++よりRust使いたいけど、結局Windows App SDKなりCUDAなりがデフォルトでRustインターフェースを提供していないので、ハイパフォーマンス&ローレイテンシなデスクトップアプリ/ゲーム開発に使うのが大変で厳しいって話はもう数年間改善されてない

コミュニティ的にはWebview使う方向に行ってたりして方向性かみ合わないし

いやWin32とDirectX叩けるだろって言われたらそうなんだけど、そこから実用レベルまで個人で環境やライブラリを叩き上げるのは現実的ではないと思ってる

この辺の話はどうよ
0966デフォルトの名無しさん
垢版 |
2023/05/03(水) 19:08:54.73ID:CpOUjLJu
rust使ってても1ファイルで完結するようなものしか作ってないのかな?
それとも一個モジュール作ってそこに全部入れて膨大なソースをスクロールさせてるのか?
0967デフォルトの名無しさん
垢版 |
2023/05/03(水) 19:13:03.51ID:ycNdXH31
ファイルの分け方は言語論というより開発論だよな
この話は終わりでいいかと
0969デフォルトの名無しさん
垢版 |
2023/05/03(水) 19:18:34.10ID:KMrNo7SY
>>961
Rustのモジュールは階層化して親子関係を作れるからJavaのパッケージよりちょっと柔軟かな
必要ならもう1つ上の階層のモジュールをJavaのパッケージに対応させればいいし
自分がファイルを分けてるのは単純に編集しやすいから
0970デフォルトの名無しさん
垢版 |
2023/05/03(水) 19:30:08.58ID:CpOUjLJu
Rustでは実用上有意義なファイル分轄は難しいので1ファイルにしてくださいと言うことでいいのか?
それも特殊な例じゃなくて本当によくあるケースレベルで分割は難しいってこと?
0971デフォルトの名無しさん
垢版 |
2023/05/03(水) 19:32:28.01ID:5z4fSxCy
「Rustのここはおかしいんじゃないか」と言った時、「いやいや、それは現実的
には問題ない、それより○○が素晴らしいから何の問題もない」
という受け答えをよく目にするが、それはまさにその人の「ニーズ」に
たまたま合っている、ということであり、イノベーター理論が語るところ
であろう。イノベーターはあらゆることでマニアやオタク、ということではなく、
たまたま、その商品に対してだけはニーズに合っていた、と言われている。
0972デフォルトの名無しさん
垢版 |
2023/05/03(水) 19:39:09.58ID:CZOik0F4
何かしらのフレームワーク使ってるならそこに分ける方針とかだいたい書いてんじゃねーの
そういうのが無いならご自由にどうぞ
別に分け方を間違えたからって困ることは無い
0973デフォルトの名無しさん
垢版 |
2023/05/03(水) 20:14:37.30ID:CpOUjLJu
それは言いがかりだ!Rustはすばらいぃいいいいと言う人が出て来ないんだけど
自分のような初級三軍質問者の愚問には答えられないんだろうか?
0974デフォルトの名無しさん
垢版 |
2023/05/03(水) 21:54:10.72ID:FqNPXkOF
プラクティスがわからないんじゃなくて
結局メカニズムがよく理解出来ませんって話みたいね

ファイルを分けたときに分けたファイルをどうやって使えばいいか分からないってことでいいのかな?
0975デフォルトの名無しさん
垢版 |
2023/05/03(水) 23:29:24.40ID:ZZCdQXOG
>>960
Rustはファイル分割の自由度が高く簡単に分割することが可能
分割するか否かは自分やプロジェクトの方針次第
最初はmain.rs一つから始めて進行とともに分割していく方針でも構わない

名前空間としてはファイル名がそのままモジュール名となる
その同名ディレクトリを作ればその下のファイルがサブモジュールになる
いずれもmod foo;と書くだけで使えるようになる
あとはfoo::TypeNameやfoo::boo::func_nameで自由に使える
長くて面倒ならuse foo::boo::func_name;すればfunc_nameで使える

ただしモジュール側ではモジュール外で使えるようにpub宣言が必要
逆に言えばpub宣言しなければモジュール内にプライベートにできる
pub宣言はpub(crate)やpub(super)など公開範囲の制限も可能

以上がモジュール分割
その一部を複数のプロジェクトから使えるライブラリとして独立させたくなったらクレート分割
クレートは並列コンパイル単位にもなるので専属利用でも敢えてクレート分割することもある
他にも構文解析木を入出力とする手続きマクロを作るときも単独クレート化が必須
0976デフォルトの名無しさん
垢版 |
2023/05/04(木) 00:00:52.77ID:E2F33yJd
>>975
そこに書かれてる内容がすべてならファイル分轄の自由度は低いよね
ファイル名がモジュール名になるんなら自由度は制限される
サブモジュールの位置もフォルダ内と限定されてる
0977デフォルトの名無しさん
垢版 |
2023/05/04(木) 00:27:31.14ID:dgAQoWCg
>>965
需要が無い
Webviewで十分
0978デフォルトの名無しさん
垢版 |
2023/05/04(木) 00:31:42.11ID:BOGxwae7
>>976
Rustは自由度が高い
分割する時にはモジュール=ファイルにすぎない
一部の言語のようにモジュールの意味や位置付けや使い方を限定していない

さらにコード上(=ファイル上)はモジュールやサブモジュールにあっても公開位置付けは別にできる
例えばpub use foo::Foo;とすることでFooがfooの下にあるにも関わらず直上にあるものとして公開できる

つまりプログラミングするときは完全に自由にファイル分割やディレクトリ分割していくことが可能
それらを公開するときにその分割内部構造を見せたくないならば見せずに整理して公開することが可能
公開するときのモジュールの位置付けとコーディングするときのファイル分割の自由度それぞれが独立に存在できる
0980デフォルトの名無しさん
垢版 |
2023/05/04(木) 08:18:45.38ID:tHpAcWOx
Javaとかはその当たり結構うるさいけど他の言語ってそもそもあまりそういうのうるさくないよな。JVM系の言語はJava文化圏の中にあったりクラスファイルの仕様が言語側のモジュールの粒度を規定してしまうけど、そういうのがない言語だとどういう分け方がベストかみんな試行錯誤している期間があったり、ベストプラクティスが結局ない状態になるよな。

俺から見るとGoとかは現代の言語としてはありえないぐらい無法なディレクトリ構成がまかり通ってると思うけど、ああいうのが性に合ってる人もいる。
0981デフォルトの名無しさん
垢版 |
2023/05/04(木) 09:11:56.85ID:4+acb+xt
>>978
> 分割する時にはモジュール=ファイルにすぎない

本当にこれだけなら非常に自由度が低いなあ…
他の言語知らないのか?
0982デフォルトの名無しさん
垢版 |
2023/05/04(木) 09:18:33.73ID:4+acb+xt
1ファイルが1モジュール限定なら1960~80年代の古代の言語じゃん
ファイルの冒頭でモジュール名やプロシージャー名を指定するあれ
0983デフォルトの名無しさん
垢版 |
2023/05/04(木) 09:23:38.28ID:aSm9nQgp
>>979
ありがとう
0984デフォルトの名無しさん
垢版 |
2023/05/04(木) 09:28:14.17ID:BOGxwae7
>>981
その後に説明しているのに
説明を読まずに一部を切り取りするとは性格歪んでる

>>982
Rustはそんなことはなく自由度が高い
自由にファイル分割やディレクトリ分けをして全体を一つのモジュールとして見せることも可能
逆にファイル一つに複数のモジュールを定義することも可能
0985デフォルトの名無しさん
垢版 |
2023/05/04(木) 12:05:42.79ID:XE2Na1jR
自由度が高いからJavaのように何も考えなくてもファイル分割できる指針がなくて困ってるんでしょ

モジュール分割って疎結合高凝集になるようグルーピングしましょうという当たり前の話なんだけどたぶんやったことがないと難しいんだよ
だからどうモジュール分割すべきかなんて小難しいそうなことを考えなくてもファイルを分割できる指針を”ベストプラクティス”という名で求めてるんだと思う
モジュール分割が先にあってそれに合わせてファイル分割するのが本来の姿だから考え方が逆なんだけどね
0986デフォルトの名無しさん
垢版 |
2023/05/04(木) 12:16:56.04ID:UA4lEoz+
>>985
「公開されるモジュール仕様」に対して
「実際にプログラミングする際のファイルやディレクトリ構成」の自由度がどの程度かが焦点だろ
前者の「公開されるモジュール仕様」はプログラミング言語やその機能とは直接関係ない話でありこのスレでも対象外
後者の「実際にプログラミングする際のファイルやディレクトリ構成」の自由度が言語により異なってくる部分
Rustは最大限の自由度がある言語の一つ
0987デフォルトの名無しさん
垢版 |
2023/05/04(木) 12:27:57.50ID:BxJFarE7
Javaも
クラス大きすぎるとダメだから分けろとか
クラス多すぎるとダメだからまとめろとかパッケージ分けろとか
パッケージまたぐと絡まるから変な分け方するなとか
それなりに悩みはあったと思う

ただC++でも似たような悩みはあるはずだからファイル分割の仕組みの違いで戸惑いがあるのかもしれない
C/C++はソース単位でコンパイルして最後にリンカでくっつけるけど
Rustは全体を分割された1つのソースの塊とみなして一気にコンパイルする感じだから
とりあえず部品から考えるボトムアップ的なアプローチの人は引っ掛かりそう
0989デフォルトの名無しさん
垢版 |
2023/05/04(木) 12:47:28.68ID:nFTKSuN5
>>987
どういう方針でモジュールを分けるかはプロジェクトの方針やライブラリの方針でしょう
その方針に対してプログラミング言語によってはモジュール分けやファイル分けやディレクトリ分けに何らかの制限があって方針が引き摺られてしまうかどうかが重要なところでしょう
Rustはそこに制限はないから方針が言語によって引き摺られることはないでしょう
仮にどんなにファイルを分けたとしてもRustではそれとは関係なく外に対して見せずに済みますから外向けと内部構造は互いに自由度があります

>>988
外に対してどう見せるかと内部をどう分けるかを別々に決められるようになっているからその区別する意識を持たないと迷う人が出るかもしれませんね
0990デフォルトの名無しさん
垢版 |
2023/05/04(木) 13:05:47.30ID:Sq+gJjNT
>>986
Javaの1クラス/インターフェースで1ファイルという指針があれば自由度は低いけど考えなくて済むでしょ
Rustではstructの定義とimplをtraitの実装と同じモジュールに入れることもあればtraitを定義してるモジュールのほうにstructのtrait実装を含めることもある
そんなに自由だとどうしていいかわからないからもっとルール(ベストプラクティス)で縛って欲しいというのが最初の質問者の本音だと思うわけ
だとしたら君の返答は的外れじゃないかい?ってこと
0991デフォルトの名無しさん
垢版 |
2023/05/04(木) 13:23:02.85ID:JNVfsZ/B
何でそんなつまらんことで議論してるのか分からんC/C++ユーザの俺
0993デフォルトの名無しさん
垢版 |
2023/05/04(木) 13:42:19.29ID:JNVfsZ/B
モジュールの分け方なんてC/C++で完成されてると思うんだけども
後発の言語は何が便利になったのかね?
0994デフォルトの名無しさん
垢版 |
2023/05/04(木) 13:56:22.33ID:i7Oqolfe
Rustだと何かができなくて困る、ってことは何もない
Java方式でも他の方式でも何でも各自や所属先やプロジェクトの方針でやればいい
まともなプログラマーは標準ライブラリや有名クレートのソースを読むのでRustでの普通の流儀を分かっている
参考になるものが公開されているのに見ずに文句を言うバカは放置しとけ
0995デフォルトの名無しさん
垢版 |
2023/05/04(木) 14:17:24.34ID:VOb3FI4m
rustだけで見ていてはダメだな。
CとRustが混在するprojectを考えないと本当の用途は分からない
0996デフォルトの名無しさん
垢版 |
2023/05/04(木) 14:18:33.91ID:c9bfGq1+
リファレンス読む前に、概要を教わりたい派だから、ゆるい議論は役に立ってるよ
文句は言わないから
0997デフォルトの名無しさん
垢版 |
2023/05/04(木) 14:43:36.62ID:Rp6nFyYP
>>993
完成してんのにC++20でも変更するのかよw
0999デフォルトの名無しさん
垢版 |
2023/05/04(木) 14:48:32.70ID:K35qCUKZ
RustのmoduleはPythonと似てる
違うのは
Rustはmodule.rsと同じsubdirectory(./module)を造ってsubmodule.rsを入れる
module.rsにsubmoduleを描く人もいる
Pythonはsubdirectory(./module)を造って__init__.pyを描く
__init__.pyの中にsubmoduleを描く人もいるし./module/submodule.pyを描く人もいる
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 32日 14時間 6分 22秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

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