2.5 リリース延期

まずは、期待していた皆さんにごめんなさい。AquaSKK 2.5 のリリースを延期しました。次回リリース時期はまだ未定ですが、11 月末〜12 月の頭ぐらいになると思います。

aquaskk-dev メーリングリストにも書いたのですが、延期の理由は以下の 2 点になります。

  • 不具合がちょろちょろ出ているのでその修正
  • 抽象辞書クラスのインタフェースを変更

不具合のほうはいくつか直してありますが、抽象辞書クラスのインタフェース変更はまだこれからです。ユーザー辞書関連の改善に着手する前に、今のうちから基礎を固めておこうというのが狙いです。

現在は抽象辞書クラス Dictionary が一つだけで、SKK 辞書やことえり辞書などの具象クラスは全て、このクラスを継承しています。Dictionary クラスの設計はモノリシックになっていて、全ての辞書クラスが実装すべき「送りあり/送りなし見出し語の検索」と、ユーザー辞書クラスだけで実装すべき「見出し語の補完」や「単語登録/削除」、「辞書の保存」などが同居しています。これらは全て純粋仮想関数で、派生クラスには実装責任が伴うわけです。

こういった構造がまだ頭に入っていなかった頃、SKKDictionary のコードを見てかなり混乱したのを覚えています。SKK-JISYO.L に対しても単語登録や辞書の保存ができる実装になっているからです。「それって危険じゃないの?」と、不安になりました。

そこで今回は、抽象辞書クラスを二つに分離する予定です。共有辞書のインタフェースを定義する Dictionary と、ユーザー辞書のインタフェースを定義する UserDictionary です。UserDictionary は Dictionary を継承します。これによって双方のインタフェースが明確になります。辞書の「使い手」は、これらの辞書の違いを意識する必要が出てきますが、それは今もやっていることだし、そもそも意識すべきものなので大きな問題にはなりません。

ということで大分良くなってきましたが、悩みが一つ。辞書を初期化する共通のインタフェース定義が決まらないのです。コンストラクタで定義するか、初期化メソッドで定義するか、引数はどうするか。メソッドにするなら一つか複数か、純粋仮想関数かどうか。

単純なファイルベースの辞書なら、パスを引数にした初期化メソッドがあれば十分ですが、リモートサーバー用の Proxy 辞書や、電卓機能を持つ動的な辞書を実装する時には、ちょっと困ったことになってしまいます。それならいっそのこと、抽象クラスでは何も定義しないほうが良いかも知れません。初期化はそれぞれの辞書クラスに任せるけど、デストラクタではちゃんと後始末してね、という緩やかなルールにするか...

うー、悩む。