-
Notifications
You must be signed in to change notification settings - Fork 167
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
ICU4Cによる文字コード検出機能を追加する #1104
ICU4Cによる文字コード検出機能を追加する #1104
Conversation
CCodeMediator.hからCESI.h依存を追い出して仲介者としての役割を果たせるようにする。
✅ Build sakura 1.0.2406 completed (commit 3d3a6dfcbe by @berryzplus) |
説明に試食版と書かれてますが merge 先が master ブランチになっています。 気になる点としてはオプショナルな実装になっているかですね。
あとメリットの説明にはICU4Cを使うことで判別精度が良くなるとかは書かれていないので、使うことが目的に見えてしまいます、手段が目的になるのはよくあることですが。PRの影響範囲には利点が少し書かれてますね。 |
意図通りです。現状では、マージしても一般の人が使うのは難しい実装になっています。
設定項目は既に飽和していると思うので、設定により無効化する機能は投入していません。
バイナリファイルを読み込ませたときの挙動をどうすべきかで迷いがあったのでメリットには書きませんでした。先頭数文字がASCIIでファイルの途中にNULバイトが含まれるようなファイル(BMPやEXEなど)を読み込ませた場合とか、現状だと テキストファイルの判別精度は上がると考えられます。 現状の実装ではサクラエディタの内部コードに変換できなかった場合は、従来通りの判別ロジックが走るようにしています。 |
Oh....
ローカルで再現しそうなビルドエラーが出ていたことに気付くなど...orz |
✅ Build sakura 1.0.2412 completed (commit 1d11416df5 by @berryzplus) |
/azp run |
Azure Pipelines successfully started running 1 pipeline(s). |
/azp run |
Azure Pipelines successfully started running 1 pipeline(s). |
/azp run |
Azure Pipelines successfully started running 1 pipeline(s). |
文字コード判定で libguess というのもあるみたいなので、巨大な ICU4C を使うより出来るだけ小規模なライブラリを取り込む方が良いように思えます。どちらも使った事無いので無責任な発言ですけど。。 |
「嫌」ですかね?w 一応世間的には、ICU4Cを使うやり方がもっともド真ん中正攻法なやり方なはずです。 PR出しといてアレですが、個人的な見解としては「他に選択肢がなくて仕方なく採用」というのがICU4Cへの評価です。可能ならば使いたくはない、でもUNICODE規格への完全対応を視野にいれるなら避けては通れない、それがICU4Cだと思っています。GitHubのプロジェクトをウォッチしてますけど、まともなDLLを作れるようになるまでにあと10年はかかりそうな気配を感じています。 で、このPRをどうするか?
「とりあえず入れちゃっても害はない」と思うので入れちゃいたい感じですが、rejectでもよいです。rejectなら前提として作った CCodeMediator のリファクタリングを切り離して別出ししたい感じですが、他のライブラリ参照系機能のベースとして参考になるソースだと思うので、PR自体はしばらく放置しとく感じにすると思います。 |
ですが、合計して 3.67 MB ぐらいでした。 文字コード判別だけならもっと規模が小さいライブラリで実現した方が良いと思いますが、追加したいならOKだと思います。 ICU4Cによる文字コード検出機能を追加、以外の変更も含まれているのでちょっと比較しなきゃいけない差分が多いのが面倒に感じますね。。 |
すんません、頂いたコメントへのレスは明日になりそうです。 |
BOMコードが間違っていたのをこっそり修正。
✅ Build sakura 1.0.2416 completed (commit 1439eee1a8 by @berryzplus) |
これなんですけど、うちのローカルビルドで生成された数字を参考で載せときます。 Release | Win32 = 30.3 MB (31,835,648 bytes) |
およ、不思議ですね…。 ちなみに自分がビルドしたのは 873e2db78070d3015a54f9d9aa81e97095cd9dba の |
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.
多分問題無いと思います。
PRの件名や説明に書かれていないリファクタリングの変更が事前に行われてるのでちょっと確認しづらいですが、まぁ問題があれば後で直せば良いと思います。
コミットハッシュ ⇒ 3b99d07581fb38a68b9a786abab0785b4e3d3749 |
あざっす。 やったこと全部書かないとレビューしてもらえない感じだとつらくなってきたので、敢えて説明を端折ってみてる部分もありました。何かあったら「なる早」で対応するのは、どうレビューしても変わらないはずなので、あまり負荷にならない範囲で端折っていきたいと思っています。 |
リファクタとそれ以外でPRを分けた方がレビューする上では良かったかもですね。 |
4年くらい前、ICU 54の頃に試したときには、Data Library Customizerという機能があって、フルビルドすると数十MBのDLLが、Base Dataのみでビルドすると0.5MB程度に抑えることができました。(最新版でCustomizerが提供されているのか、されているとすれば文字コード検出のためにはどこまでデータを削れるのか…) あと、ICU 66はまだリリースされていないので、現時点で採用するならICU 65.1ではないでしょうか。 |
文字コード検出の為だけにインストーラーのサイズが数MBも増えるのは富豪的な気がしますが、今の人の感覚では数MBなんてブロードリンク元社員の遵法精神より軽いかもしれないですね。 |
レビューありがとうございます。 具体的な課題について個別対処できそうな雰囲気になってきたので、一旦マージしてしまいます。 |
よくよく考えてみると Visual Studio 2017 のインストーラーがダウンロードするパッケージのサイズを合計すると テラバイト単位 なんですよね。そこを考えると、インターネット配布で数十MBなんてあり得ない って発想が適切なのかどうかは怪しい気がしてきます。 icu4cのバージョンアップ頻度は結構高いので、何にもしなくてもver66(未リリース)はそのうち公開されると思っています。たぶん「単一バージョンのみに対応」って方式はキッツイ感じだと思います。そこを発展させてデュアルバージョン対応にすると、他のexmoduleと乖離していくので一旦そのままにしてしまったんですが。 |
え、テラバイトって 1024GB ですよね? まぁでも最近の開発環境って数10GB消費するのも珍しくないし、そのうち10TBじゃドライブの容量が足りないとかいう時代が来るんでしょうか…。 |
ギガでしたね。 最大で40GB、ブルーレイディスク1枚にぎりぎり入るサイズだったような。 |
…4c_charsetdetector ICU4Cによる文字コード検出機能を追加する
PR の目的
ICU4Cによる文字コード検出機能を追加
カテゴリ
PR の背景
ICU
というライブラリがあります。http://site.icu-project.org/home
IBMが作ったライブラリで、ほぼすべての文明国のローカル言語を表現できる文字コードセット群をサポートしています。一応、何年も前に IBM の手を離れていて、現在は Unicode コンソーシアムが仕切りをやっているので、最新のUNICODE規格にも対応しているはずです。
c++規格がwchar_tをUNICODE規格に準拠させる対応を積極的に行わない理由。
UNICODE規格は、1プログラム言語の仕様として取り込むには複雑すぎる、らしいです。
その「複雑すぎる仕様」をコードの形に落とし込んであるのが ICU4C です。
試食版として、とりあえず動くように組み込んでみました。
最新版DLL(icuin66.dll, icudt66.dll, icuuc66.dll) はまだダウンロードできないっぽいので、動作させるには https://github.com/unicode-org/icu からソースを落としてビルドする必要があります。
PR のメリット
PR のデメリット (トレードオフとかあれば)
メリットは ICU4Cが使えるようになること なんですが、デメリットは ICU4Cを使わざるを得ないこと だったりします。
PR の影響範囲
関連チケット
#487 文字コード自動判定(UTF-8をSJISと誤認)
#989 C++の準拠規格をC++17に更新する
参考資料
Mediatorパターン