rb_enc_mbclen()

鬼車のmbc_enc_len()が文字列の終了位置を引数にもっていない理由は09/01の日記で説明しました。
そしてこの話は、ruby-dev:31651で、Ruby 1.9のrb_enc_mbclen()のインターフェースに、文字列の終了位置が引数にないという指摘が発端です。松本氏は、ruby-dev:31653の中で、その理由を鬼車に合わせたためとしています。

しかし、これはおかしな話です。
指摘された時点では、rb_enc_mbclen()の定義は以下のようになっていました。

#define rb_enc_mbclen(p,enc)   ONIGENC_MBC_ENC_LEN(enc, (UChar*)p)

実際に終了位置をチェックする実装は保留するにしても、インターフェースだけなら

#define rb_enc_mbclen(p,end,enc)   ONIGENC_MBC_ENC_LEN(enc, (UChar*)p)

と引数を追加するだけで済みます。これができない訳はありません。
もし松本氏が指摘を受ける前から問題を認識していたのであれば、最初からそのように実装していた筈です。
そうしておかないと、rb_enc_mbclen()を呼び出している箇所全てを後で変更することになる上に、ismbchar(), mbclen()もrb_enc_mbclen()を使って定義しているので、これらの呼び出し箇所も全て変更です。これらの関数は、Ruby本体の中だけでなく拡張ライブラリの中からも呼ばれています。

  1. 松本氏はrb_enc_mbclen()のインターフェースが不適切であるという指摘に対して、何故、その原因を私に責任転嫁したのでしょうか?
  2. rb_enc_mbclen()のインターフェースが不適切になっている本当の理由は何でしょうか?

コメントは終わりにして頂きたいと書いたばかりなので、御自身の日記の中でも構いませんから答えてください。