我正在实现一个DSL,它将生成Java类和方法。
由于语言的性质,它将分为运行时和生成的库,运行时将对其进行操作。
我有两个选项来实现这个库,我想知道这两个是否是一个已知的更好的实践。
通常,生成的代码不会预先加载。生成的类将根据需要通过Reflection加载,并使用单独的类加载器来允许由JVM确定的类卸载。反射将直接在生成的代码中的索引中对字符串文字进行操作,以消除对密集内省的需要。
选项1:我的语言代码阻止所有映射到类。这意味着生成大量类(其中许多将是内部类)来实现嵌套作用域。外部类将根据需要通过运行时的反射进行实例化,然后直接构造和使用内部类。
选项2:我的顶级语言构造映射到容器类,这些容器类将根据需要通过运行时的反射进行实例化。嵌套构造将映射到这些容器类中的方法,这些方法将通过运行时的反射来调用。
所以,主要问题是 - 如果存在显着差异,效果会更好吗?
为了实际考虑,我们可能正在考虑近似
之间的比较