﻿Jython スクリプトの不具合についてのメモ。
                                                                2008.09.22 JOJO

L2J 本家 rev2349 でコミットされた

  jython.jar         v2.2.1
  jython-engine.jar  改造版

には、漢字処理（ユニコード処理）に不具合があるので、
別のものに差し替えています。

  jython.jar v2969  OK     ← L2J r1436 でコミットされたもの。
  jython.jar v2.2.1 ダメ！ ← L2J r2349 でコミットされたもの。
  jython.jar v2.2   OK     ← JOJO が差し替えたもの。2.2.1 より１つ古い。

また、jython-engine.jar を最新版に差し替えました。
jython-engine.jar とは、java から jython 言語を使うための橋渡しの役目をする
ライブラリなのですが、L2J 本家では、不具合のある jython.jar を無理やり使うために
改造して配布しているようなのです。

L2J で稼動実績のある v2969 に戻してもいいのですが、
今回は、もうちょっと新しい v2.2 にしてみました。
もし、なんか調子が悪いと思ったら、v2969 に戻してみてください。

まとめ：
----------------- + ------ + ------ + ------ + ------
             ＼   | L2J_JP | L2J    | L2J    | JOJO  
ファイル名     ＼ | r1057  | r1436  | r2349  |       
----------------- + ------ + ------ + ------ + ------
jython.jar        | v2969  | v2969  | v2.2.1 |  v2.2 
jython-engine.jar |  *1    |   *1   |   *2   |  v223 
----------------- + ------ + ------ + ------ + ------
           日本語 |   ○   |   ○   |   ×   |   ○  
----------------- + ------ + ------ + ------ + ------

  *1 ヴァージョン不明だが、sun microsystems 正規の jython-engine.jar
  *2 不具合 jython.jar を無理やり使うために改造された jython-engine.jar


------------------------------------------------------------------------------
今回調べたこと：

Jython 2.2 リリース直後に日本語処理（ユニコード処理）に不具合があり
急遽リリースしたのが 2.2.1 だということらしいですが、
2.2.1 のソースを見ると、あきらかに、こっちの方がバグっているのがわかります。

問題の箇所は、java 本体から渡されたスクリプト文字列をバイト配列に変換する際、
java では非推奨命令 getByte(*,*,*,*) を使用しています。
eclipse で開けば《取り消し線》が出るのでスグわかります。

org.python.core.PyString (eclipse 上の jadclipse で)

    public static byte[] to_bytes(String s)
    {
        int i = s.length();
        byte abyte0[] = new byte[i];
        s.getBytes(0, i, abyte0, 0);
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~
        return abyte0;
    }

　JDK の説明：
　　public void getBytes(int srcBegin,
　　                     int srcEnd,
　　                     byte[] dst,
　　                     int dstBegin)
　　推奨されていません。 このメソッドでは、文字からバイトへの変換が正しく行われ
　　ません。JDK 1.1 では、文字からバイトへの変換には、プラットフォームのデフォ
　　ルト文字セットを使用する getBytes() メソッドの使用が推奨されます。

Jython（Python）の作者は Sun Microsystems に就職したらしいです。
2.2.1 のバグは、そのまま放置状態で、現在は 2.5 の開発にとりかかっています。


Jython 2.2 についての引用
｜　http://www.okisoft.co.jp/esc/python/iron-python-intro.html
｜　Python & IronPython 入門
｜　　　　　　　　　　　　　　　　　　　　　　　　　　　2006.10/23 - 2008.6/13
｜　Python の Java 環境への移植として Jython http://www.jython.org がある。当初
｜　は第２の Python 実装として有望視され，Java VM 上のインタープリタとしてもト
｜　ップクラスの性能を誇った。去年およそ５年半ぶりに新バージョン Jython 2.2 が
｜　リリースされたが，満を持しての，というよりはむしろ長年放置していた作業に区
｜　切りをつけた，という性格のリリースである。 Jython 2.2 は，長い停滞期に入っ
｜　た当時，現行版だった Python 2.2 に相当する仕様を持つ一種の生きた化石である。
｜　現在のバージョンは，Jython 2.2 のリリース直後に発見された (漢字など非 ASCII
｜　文字をコンソール入力できない等の) バグを改修した 2.2.1。ただし，Java VM 上
｜　のインタープリタとしては今なお強力で高速な部類である。

2.2 のバグは、L2J を使う限り、問題なさそうである・・・？

[EOF]