在我们的遗留系统中,我们编写了自己的虚拟机来在运行时执行我们的内部 DSL。内部 VM 旨在仅运行我们的内部 DSL。我们正在重写我们的遗留应用程序。我们正在考虑的想法之一是将我们的内部 DSL 转换为外部 DSL(C# 或 Java)并利用他们的 VM。
何时为我们的内部 DSL 编写我们自己的 VM 与何时转换为外部 DSL 并在该 VM 上运行,并没有明确的指导方针。
在我们的遗留系统中,我们编写了自己的虚拟机来在运行时执行我们的内部 DSL。内部 VM 旨在仅运行我们的内部 DSL。我们正在重写我们的遗留应用程序。我们正在考虑的想法之一是将我们的内部 DSL 转换为外部 DSL(C# 或 Java)并利用他们的 VM。
何时为我们的内部 DSL 编写我们自己的 VM 与何时转换为外部 DSL 并在该 VM 上运行,并没有明确的指导方针。
内部 DSL/VM 与外部 DSL/VM 决策与所有构建与购买与下载决策相同。对于所有软件,这些指南都很明确且相同。
为什么要支持您自己的 VM,而其他人会为您支持 Java 或 Python?
这里有一些明确的指导方针。请注意,这些是所有软件的相同准则。
您继续维护自己的软件是否更便宜。在这种情况下,DSL和VM?
你自己的 DSL 和 VM 是否比 Java 或 Python 更好?通过“更好”,您必须填写质量因素的任意组合:更快、更小、更可靠、更好的功能、更少的资源使用、更可审计、更安全等。
不要被 DSL 和 VM 所迷惑。没什么特别的;它只是更多的软件。
这绝对不是反模式。与内部 DSL 相比,外部 DSL 具有许多优势。在您的情况下,独立于宿主语言或实现平台就是其中之一。其他好处是更好的语法灵活性、使用模型驱动方法(如模型转换、模型查看等)的可能性。