Javaのメソッドコード長制限とLLへの影響

Javaには、1つのメソッドのコード長が65535バイトを超えられないという制限があり、64KB以上のメソッドを含むコードはコンパイルエラーになります。

ということは、JVM上で動くLLにも、この制限が課される可能性があるわけです。

例えば以下のコード、Pythonでは実行可能ですが、Jythonではエラーを吐きます。

i = 0
i = i + 1
i = i + 1
i = i + 1
... (100000回繰り返し)
print i

Groovyでも、以下のコードはコンパイル不能です。

def i = 0
i++
i++
i++
... (100000回繰り返し)
println i

そんな巨大なメソッドを手動で書くことはあり得ないんですが、LLのコードを自動生成するケースでは問題になるなと思いました。というか、実際に問題になった。巨大なデータをハッシュマップに代入してごにょごにょするGroovyコードを自動生成してたら、見事にこの制限に引っ掛かりました。

どうしてJavaは、今どきこんな仕様のままなんだろう。何かの歴史的経緯を引きずってるのかな?