-
Notifications
You must be signed in to change notification settings - Fork 12
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
Path
の適切ではないlossyなUTF-8変換をやめる
#12
Conversation
半年前こんなことを言ったのですが、caminoの VOICEVOX/voicevox_core#217 (comment) このPRを出すときもPR自体出すべきか、どういう修正にしようか等ちょっと悩んだので、やっぱり |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
勉強になります。LGTM!
実用上はあまり問題ない(macOS 以外では xcrun
を実行する時点で panic する。かつ、macOS の文字コードは基本的に UTF-8)ものの、不用意に lossy
のメソッドを使うのは確かに良くないですね、気づきませんでした……。また、考えてみれば display
というメソッド名自体も明らかに表示用ですね。良い学びになりました。
voicevox_core の方でも「この方針で実装する」という明確な意志で実装されてきたわけではなく、問題が生じそうだと気づいた時点で場当たり的に対処してきたという認識です(なのでこのリポジトリには不統一な部分が存在した)。今後は今回の PR で指摘された点についてもっと意識的に考えていきたいと思います。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!!
少なくともlossyはやめた方が良いなと思いました。
エラーが出る箇所が変わってしまってわかりづらいので。
UTF8Pathは、そのコメントの議論を追い直した感じ「どっちでも良い」なのかなと思いました。
unwrapが増えるのと依存が1つ増えるのどちらが良いかと言われると、ぶっちゃけunwrap1つのがメンテが単純だろうな〜〜〜というのが正直な感想です・・・!
そういえばそんな議論をしていたことがありましたね……。UTF8Path に関しては、個人的にはヒホさんと同意見です。 他の理由としては、私の感覚として、むしろサードパーティのライブラリを導入する方が学習コストや認知負荷が上がる気がしたというのもあります。この辺りは個々人で感覚が異なると思うので難しいところな気がしますが、それであれば、より広く知られている API としての標準ライブラリを使う、というのも一つの選択かなと思いました。 |
考えていることを今ここで書いておきます。UTF-8の表明は別に重大な問題ではないのですが、この際なので
ただ今回の場合2.はやめてstdのみで1.をやる手があります。camino登場前は |
反応に困るであろうことを長々と書いてしましましたが、「外部ライブラリを入れる」という行為についてこの先も議論することがあるかもしれないので今表明しておくと、Rustがbatteries excludedな言語であることを考慮していいんじゃないかなという思いです。 あと無制限に依存を増やしていくことも抑えるべきだとも思っています。 caminoが有名じゃなかったり、メンテが止まっていたり、取り扱いに注意が必要だったり、変なAPIをしてたりしたら私も流石に提案してなかったと思います。また例えば「我々が欲しいものはCargoの内部API(依存ライブラリ226個 & 6週間ごとに破壊的変更)にあるからそれ使おう」とか「Rust Analyzerの内部API(週一で破壊的変更)を使おう」といったことを言われたらリターンが見合わない限り反対するでしょう。 |
なるほどです。 とりあえず、標準非標準は置いといて、そもそも依存ライブラリを増やすメリデメを書いてみました。 a. 依存ライブラリを増やすメリット
b. デメリット
ややこしいライブラリだとb-1の工数が増えたり逆にa-2のメリットが消えたり、 で、今回の場合、a-2やb-1のようなライブラリやその周辺の知識が必要なものは、それを学ぶだけで工数がかかりそうです。 レビュワー側的には、破壊的変更の頻度と、APIの安定性、あと使われ具合なんかを調べて判断って感じが良いのかなと思いました。 |
たった今思い付いたのですが、ライブラリを入れるときはこういうテンプレートを入れることを推奨するというのはどうでしょうか...? caminoこのライブラリは何
UTF-8を強制する代わりに、可能な限り どれくらい有名かcargo_metadataに採用されたのが大きく、そこから間接的にcargo pluginなどの開発ツールに広く使われています。Rust Analyzer (VSCode拡張とかの裏で動いているやつ)にも入っています。 camino単体でもそこそこ有名なツール/ライブラリに採用されているのが観測できます。 メンテされているのかはい。メンテされています。 bloatの心配はない。default featuresでは依存0。コードも2k行程度。 ❯ tokei
===============================================================================
Language Files Lines Code Comments Blanks
===============================================================================
Markdown 4 415 0 290 125
TOML 5 64 56 1 7
-------------------------------------------------------------------------------
Rust 9 2008 1558 143 307
|- Markdown 6 1528 9 1098 421
(Total) 3536 1567 1241 728
===============================================================================
Total 18 2487 1614 434 439
=============================================================================== 取り扱いに注意は要るか要らないと思います。「中身が |
全部に対して書くのお願いすると今度はプルリクが大変になっちゃうので、適宜聞く感じがいいかなとか思いました! まあこれからは、caminoくらいの知名度と薄さだと、「なぜ必要か」がわかればささっと依存OKの判断ができると思います。 |
なるほどです。同感です。 VOICEVOX COREはおそらくコードレベルの提案はほとんど来なくて、ユーザーの興味的にVOICEVOXとしての機能の提案が多いと思います。 |
まず前提として、Rustの
Path
/PathBuf
はUTF-8である保証はありません。UTF-8として扱いたくなったときは、次のどちらかを明示的に行う必要があります。'�'
に変換してUTF-8とする本PRは2.の変換をしている部分を1.の形に置き換えます。
個人的な意見としては2.はメッセージ出力のみに限定されるべきで、実際にファイル操作に使うパスの文字列加工の過程で使われるべきではないと思います。
またvoicevox_coreは一貫して1.だったと思います。このリポジトリだと混在している状態ではありますが、 #9 以前には2.の形は1箇所しか無く、残りはすべて1.の形であるように見えました。