-
Notifications
You must be signed in to change notification settings - Fork 120
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
glob importの取り扱いについて考える #467
Comments
統一は賛成です! どっちに統一するかですよね。 プログラミングの一般的な観点から言うと、*でインポートは便利だけどインポート順序で読み込まれる関数が変わるなどの危険もあるだろうなぁと思ってます。 であれば、何か問題が起きるまでは*に統一するのも良さそうに思います…! |
まあ非推奨ってことはなく、局所的に使う分にはむしろ一般的なんですが、qwertyさんスタイルレベルのはそんなに無い気がするのでそれでissueにすべきか今まで悩んでました。
Rustだとその場合「どっちかを名指ししてインポートしろ」というようなコンパイルエラーになったような...? ただしこういう場合は use a::S;
use b::*; // 中に`S`が入っている どっちかというと、有り得るデメリットとしてはリーダビリティの低下かと思ってます。 |
なるほどです。 難しい判断ですが、特に指標がないのであれば前に習うのが丸いのかなと思いました!! |
この件、最近考えていることがあります。
mod a {
use std::marker::PhantomData;
type _A = PhantomData<()>;
mod b {
use std::marker::PhantomData;
use super::*;
type _B = _A;
type _C = PhantomData<()>;
}
} 既にこのリポジトリにそういうのがあったような記憶があります。 名前空間をフラットにすると考えるならdependencyの まあこういうわけで、 |
なのでAPIなどが全部固まって開発が完了したあとに、1つ1つのimportに切り替えるのが良いのかなと。 (あと、 |
これは本当に重視したいところですね...なんとかしてバザール型にしたいという思いがあります。
とかもそれを願ってのものでした。 |
内容
このようなワイルドカードインポートについて、やっているところ(主にqwertyさん)と避けているところ(主に私)が混在しているため、どちらかに統一します。
voicevox_core/crates/voicevox_core/src/engine/mod.rs
Line 9 in 44c4582
以前の議論は#135 (comment)という認識です。
Rustでは名前空間を何でもかんでもフラットにするような文化はそんなになく、別に止められているわけではないけど積極的に推進されてもいないはずです(ただし「外」から見える名前空間をフラットにするために子モジュール下から親モジュール下にre-exportされるといったことはよく行われます)。そのため私が書いた部分はqwertyさんのスタイルから外れた書き方をしていました。
ただこのスレッドで書かれている通り、このスタイルは別にアンチパターン認定されているわけではありませんし、SuitCaseさんも同意しています。そのため#466とは逆に私が書いた部分をqwertyさんに合わせるのが丸いのかなと思っています。Rustの
use
は結構柔軟によしなに可視性を解決してくれるので、コードを読む分はともかく書く分には支障は出ないかと思います。Rustのモジュールを詳細に理解する(5) 可視性 - 簡潔なQ (「可視性と
use
」を参照のこと)Pros 良くなる点
Cons 悪くなる点
実現方法
VOICEVOXのバージョン
N/A
OSの種類/ディストリ/バージョン
その他
The text was updated successfully, but these errors were encountered: