クラス階層

Scheme側のデータ型もjava.lang.Objectを継承している。つまり、Scheme Nativeな要素は実装上、同時にJava Nativeなオブジェクトである。この場合、

  1. Scheme Nativeな要素をJavaの継承ツリー上では例外事項として扱い、Java Nativeなオブジェクトとしては扱わない。
  2. Java Nativeなものとして扱うオブジェクトを陽には扱わず、Java NativeなオブジェクトをラップしたScheme Nativeな関数として扱う。

といった実装が考えられる。*1
ここでは速度と柔軟性のトレードオフが争点になる。まあ、"javassistでcompile?"とか自分で書いてしまったことだし、柔軟性を選ぶことにしよう。

SchemeElement(仮)<--+---Atom(仮)<------色々
                    |
                    +---Pair(仮)
                    |
                    +---Procedure(仮)<------JavaObject(仮)

*1:全部を巨大なbyte/int配列上に置くというのは無し。