Javaのメソッドコード長制限とLLへの影響
Javaには、1つのメソッドのコード長が65535バイトを超えられないという制限があり、64KB以上のメソッドを含むコードはコンパイルエラーになります。
ということは、JVM上で動くLLにも、この制限が課される可能性があるわけです。
例えば以下のコード、Pythonでは実行可能ですが、Jythonではエラーを吐きます。
i = 0 i = i + 1 i = i + 1 i = i + 1 ... (100000回繰り返し) print i
def i = 0 i++ i++ i++ ... (100000回繰り返し) println i
そんな巨大なメソッドを手動で書くことはあり得ないんですが、LLのコードを自動生成するケースでは問題になるなと思いました。というか、実際に問題になった。巨大なデータをハッシュマップに代入してごにょごにょするGroovyコードを自動生成してたら、見事にこの制限に引っ掛かりました。
どうしてJavaは、今どきこんな仕様のままなんだろう。何かの歴史的経緯を引きずってるのかな?