Scala:蛋糕模式的延迟烘焙和运行时编译

问题描述 投票:0回答:1

蛋糕图案的一大局限性是它是静态的。我希望能够混合可能由不同编码人员完全独立编写的特征。然而,这些特征“不需要”需要经常混合。在运行主应用程序之前,用户将有一个初始化屏幕,他们可以在其中选择特征/程序集。所以我想到为什么不在用户选择模块中混合并编译选择的特征。如果编译失败,没有问题,用户只会收到一些消息 - 不兼容的程序集或其他什么。如果编译成功,则顶部 UI 模块将加载新编译的类以及程序集的预编译部分,并运行主应用程序。请注意,在运行时初始化期间可能只需要编译一两个类。其余所有代码都可以正常编译。 我对 Scala 还很陌生。

这是公认的模式吗?有支持吗?

对于相对简单的依赖情况必须使用 Guice 似乎很疯狂。 我可以在应用程序中轻松运行 Scala 编译器吗?我可以在内存中运行它并从内存中使用它的输出而不创建不必要的文件吗? 注意:虽然看起来是动态的,但这种方法将保持

100% 静态。

编辑 微软 Roslyn 项目的驱动力之一就是为 C# 和 Visual Basic 实现此类功能。但即使对于强大的微软团队来说,这似乎也是一个相当大的项目。

scala dynamic cake-pattern
1个回答
6
投票

val eval = new Eval() val myObj = eval[BaseClass]("new BaseClass extends " + traitNameList.mkString(" with "))

这将为您创建一个新对象,其中内置有您想要的所有特征。然后就出现了这是否是一个好主意的问题。  缺点:

调用 Scala 编译器并不快
  • 如果你这样做得足够多,你将超载 PermGen 空间,因为你创建的类永远不会被垃圾收集
  • 这确实更像是您想要动态语言而不是 Scala 的事情。 您可能会发现这些都可以工作的地方,但与架构的其他部分发生冲突(是的,这很模糊)。
© www.soinside.com 2019 - 2024. All rights reserved.