凪瀬 Blog
Programming SHOT BAR

目次

Blog 利用状況
  • 投稿数 - 260
  • 記事 - 0
  • コメント - 46952
  • トラックバック - 192
ニュース
広告
  • Java開発者募集中
  • 経歴不問
  • 腕に自信のある方
  • 富山市内
  • (株)凪瀬アーキテクツ
アクセサリ
  • あわせて読みたい
凪瀬悠輝(なぎせ ゆうき)
  • Java技術者
  • お茶好き。カクテル好き。
  • 所属は(株)凪瀬アーキテクツ
  • Twitter:@nagise

書庫

日記カテゴリ

 

コメントアウトの稿で差分を一望したいという話題が出ていたので、どうやって実現するかを考えて見ました。

Subversionリポジトリからデータを得る

JavaからSubversionリポジトリをいじる場合、SVNKitを用います。これはかつてJavaSVNと呼ばれていたライブラリですね。

もうひとつの選択肢としてJavaHLというのがあるようなのですが、どうも実態が掴みにくい。公式ページはどこだ…?
試して見たという人を探していたら 気の向くままに・・・ というblogが見つかりました。参考になるかも。

差分を取得する

diffなどのツールで差分比較を行う際のアルゴリズムとしてはE.W.Myers氏の論文が有名なようです。

ViViの作者がこのアルゴリズムについて 解説 しています。エディットグラフを作成し最短経路を探すということらしいですが、冗長になるのでこちらでの解説は割愛。

応用

解説では1文字単位での比較を行っていますが、ソースの場合は1行というブロックでの比較を行えばよいでしょう。
より先駆的な試みとしては構文解析木の比較なんて面白いんじゃないかと思います。

以前、私のエントリのコメント欄で構文解析木の話題が挙がったことがありますが、コンパイル前のソースではなく、プログラミング言語として解析した後の形を比較することで、表記のブレを無視してアルゴリズムに手が加わった場所だけを拾い出す比較ツールが作れそうですね。

もしくはJavaの逆コンパイラである javap を用いて、バイトコードでの比較なども面白いかもしれません。バイトコードの相違位置からソースの行数を割り出して比較対象として表示するような感じでしょうか。

そういえば資料をあさっているときに面白いものをみつけた。
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200407/04070008.txt
これは…

投稿日時 : 2007年10月18日 14:28
コメント
タイトル
名前
Url
コメント