【问题标题】:Is it possible to use JetBrains MPS, or part of it, inside another application as JIT Compiler/Translator?是否可以在另一个应用程序中使用 JetBrains MPS 或其中的一部分作为 JIT 编译器/翻译器?
【发布时间】:2015-08-25 04:15:21
【问题描述】:

JetBrains MPS 是否提供可在其他应用程序中使用的 JIT 编译器? 我们有一个带有脚本语言的遗留应用程序。因为我们的客户很难使用这种脚本语言,所以我们想为他们提供一种新的 DSL。

所以问题是:我们可以使用 Jetbrains MPS 来设计我们的 DSL,然后在用户在我们的软件中编写脚本之后使用 MPS JITCompiler/Translator 将其转换为 Java 或其他任何内容吗?

【问题讨论】:

  • “自带”-->“自带”?所以你想 a) 设计一个替代 DSL,b) 大概将遗留 DSL 转换为替代 DSL?
  • 好吧,我的意思是“自己的”。是的,我想要一个替换的 DSL,将旧脚本转换为新的 DSL,用户需要动态执行新的 DSL。
  • 您只需运行旧的 DSL 引擎即可获得等价物,而无需编写翻译器。为什么这是一个必要的步骤?
  • 好吧,我们完全交换了应用程序,可能还有下面的脚本引擎,所以旧的脚本需要转换成新的形式。对不起,我忘了提。

标签: dsl mps


【解决方案1】:

如果您的意思是 JITCompiler/Translator,让您的 DSL 从中生成 Java,然后运行已编译的 Java 代码,是的,这是可能的。但这将是一个额外的转换步骤,例如:编写代码 -> 生成/编译 -> 运行(生成的 jar)。

如果您的意思是在不先执行转换步骤的情况下解释模型,那么答案是,不是开箱即用。到目前为止,我们已经为 MPS 构建了一个解释器框架,并用它构建了两个解释器。一个用于 Java,一个用于 C。尽管重点不在于那里的性能。我们将它用于公式或 REPL 之类的小计算。它目前正在进行中,但工作得很好。您可以查看 here 的口译员并找到更多信息以及在哪里查看。作为一个中期项目,我们可能希望将此解释器定义与Graal 编译器集成,这将更像是一个 JITCompiler,而不仅仅是一个解释器。

【讨论】:

  • 感谢 Kolja,口译员听起来很有希望。我们需要这样的东西。用户是机械工程师,通常对编程一无所知,所以我们想为他提供一个以机械工程为领域的 DSL,为我们的齿轮系统计算工具编写脚本。旧脚本需要转换为新的 DSL,新脚本应该从我们的应用程序内部进行解释/转换/编译(它们应该是用户需要使用其他工具而不是我们的工具),如果可能,用户应该能够调试它。 JetBrains MPS 能做到吗?
  • 是的,通常可以使用 MPS 进行调试。我们已经成功地将 gdb 与 MPS 集成以调试生成的 C。我们的实现还允许在 DSL 的抽象级别上进行调试。目前,我们也在进行一些积极的研究,以便能够在 all 中间抽象级别上进行调试。在这种情况下,您需要进行多步转换。解释器最近得到了一些基本的调试支持,但还处于早期阶段。
猜你喜欢
  • 1970-01-01
  • 2017-05-07
  • 2019-09-18
  • 2019-01-16
  • 2013-10-13
  • 1970-01-01
  • 1970-01-01
  • 2020-10-12
  • 1970-01-01
相关资源
最近更新 更多