クラス階層
Scheme側のデータ型もjava.lang.Objectを継承している。つまり、Scheme Nativeな要素は実装上、同時にJava Nativeなオブジェクトである。この場合、
- Scheme Nativeな要素をJavaの継承ツリー上では例外事項として扱い、Java Nativeなオブジェクトとしては扱わない。
- Java Nativeなものとして扱うオブジェクトを陽には扱わず、Java NativeなオブジェクトをラップしたScheme Nativeな関数として扱う。
といった実装が考えられる。*1
ここでは速度と柔軟性のトレードオフが争点になる。まあ、"javassistでcompile?"とか自分で書いてしまったことだし、柔軟性を選ぶことにしよう。
SchemeElement(仮)<--+---Atom(仮)<------色々 | +---Pair(仮) | +---Procedure(仮)<------JavaObject(仮)
*1:全部を巨大なbyte/int配列上に置くというのは無し。