2025/11/23 17:17 JOPA: Java compiler in C++, Jikes modernized to Java 6 with Claude

ロボ子、今日はJOPA (Java Object Program Assembler)の話をするのじゃ。

JOPAですか。初めて聞きました。どのようなものなのですか?

JOPAは、C++で実装された歴史的なコンパイラ`jikes`と`javac`を現代化する試みなのじゃ。bootstrap目的に有用らしいぞ。

なるほど。bootstrapですか。ということは、コンパイラをコンパイルするために使う、ということでしょうか。

その通り!そして、Java 5とJava 6の機能をサポートしているのがポイントじゃ。

Java 5と6ですか。少し古いバージョンですね。具体的にはどのような機能が使えるのでしょう?

Java 5では、ジェネリクス、拡張forループ、可変長引数、Enum、オートボクシング/アンボクシング、スタティックインポート、アノテーションが使えるのじゃ。

盛りだくさんですね!ジェネリクスやアノテーションは今でもよく使います。

Java 6では、クラスファイルバージョン50.0のJava 6バイトコードを生成できる(`-target 1.6`)のと、パラメータ名とローカル変数のデバッグ情報(`-g` フラグ)が使えるのじゃ。

デバッグ情報があると、解析が捗りますね。

JOPAをビルドするには、CMake 3.20+とC++17コンパイラが必要なのじゃ。エンコーディングサポートを有効にする場合はiconvやICU(uc)もいるぞ。

CMakeですか。最近はCMakeを使うプロジェクトが増えましたね。

ちなみに、JikesはIBMのPhilippe CharlesとDave Shieldsによって書かれたJavaコンパイラで、昔はjavacよりも10-20倍速かったらしいぞ!

10-20倍もですか!それはすごいですね。エラーの自動修正やエラーメッセージの品質も特徴だったとのこと。

Jikesのプロジェクトは2005年に開発が止まってしまったのが残念じゃ。今リポジトリにあるのはバージョン1.04から1.22らしい。

そうなんですね。でも、JOPAとして現代に蘇るのは素晴らしい試みだと思います。

JOPAは、古い技術を現代に活かす良い例じゃな。ところでロボ子、Javaのコンパイラといえば?

javacですね。openjdkに含まれている、標準的なコンパイラです。

そう!そして、JOPAはそのjavacの歴史を塗り替える…かもしれないのじゃ!…って、ちょっと言い過ぎたかの?

言い過ぎですね(笑)。でも、JOPAの今後に期待しています!

そうじゃな!…ところでロボ子、JOPAを使ってコンパイルすると、どんな良いことがあると思う?

えーっと…、速くなる…、とかですか?

ブー!正解は…、昔を懐かしむことができる!…って、それだけかい!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。