将内部 DSL 转换为外部 DSL 是反模式吗?
在我们的遗留系统中,我们编写了自己的 VM 来在运行时执行我们的内部 DSL。 内部 VM 设计为仅运行我们的内部 DSL。 我们正在重写我们的遗留应用程序。 我们正在考虑的想法之一是将内部 DSL 转换为外部 DSL(C# 或 Java)并利用它们的 VM。
何时为内部 DSL 编写我们自己的 VM,以及何时转换为外部 DSL 并在该 VM 上运行,没有明确的指导方针。
In our legacy system, we wrote our own VM to execute our internal DSL at run time. The in-house VM was designed to run our internal DSL only. We are in the process of rewriting our legacy application. One of the idea we are considering is, to transform our internal DSL to external DSL (C# or Java) and take advantage of their VM.
There are no clear guide lines when to write our own VM for our intenral DSL vs. transforming to external DSL and running it that VM.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
内部 DSL/VM 与外部 DSL/VM 决策与所有构建、购买与下载决策相同。 该指南对于所有软件来说都是清晰且相同的。
当其他人为您支持 Java 或 Python 时,为什么还要支持您自己的 VM?
这里有一些明确的指导方针。 请注意,这些对于所有软件都是相同的准则。
继续维护自己的软件对您来说是否更便宜? 在这种情况下,DSL 和 VM?
您自己的 DSL 和 VM 比 Java 或 Python 更好吗? 通过“更好”,您必须填写质量因素的任意组合:更快、更小、更可靠、更好的功能、更少的资源使用、更可审计、更安全等。
不要与 DSL 和 VM 混淆。 没什么特别的; 这只是更多的软件。
The internal DSL/VM vs. external DSL/VM decision is the same as all build vs. buy vs. download decisions. The guidelines are clear and the same for all software.
Why support your own VM, when someone else will support Java or Python for you?
Here's some clear guidelines. Note that these are the same guidelines for all software.
Is it cheaper for you to continue to maintain your own software. In this case, DSL and VM?
Is your own DSL and VM better than Java or Python? By "better", you must fill in any combination of quality factors: faster, smaller, more reliable, better features, less resource use, more auditable, more secure, etc.
Don't be confused by DSL and VM. It's nothing special; it's just more software.
这绝对不是一种反模式。 与内部 DSL 相比,外部 DSL 有许多优点。 在您的情况下,独立于宿主语言或实现平台就是其中之一。 其他好处是更好的语法灵活性、使用模型驱动方法(如模型转换、模型查看等)的可能性。
It is definitely not an anti-pattern. External DSLs have many advantages compared to the internal ones. Independence from the host language or implementation platform in your case is one of them. Other benefits are better syntax flexibility, possibility to use model driven approches like model transformations, model viewing and others.