1

我正在设计一种简单的解释语言来测试实时嵌入式系统。控制流受到严格限制,以提供关于脚本将执行什么以及它们将运行多长时间的强大静态保证。例如,您只能在恒定条件上分支或在固定范围内循环。

C++ 中存在大量现有代码库以及相关模型和 IO 库,因此这种语言必须能够调用 C++。被测系统有严格的时序要求,所以我们不能容忍测试框架中有太多的抖动。我们过去的解决方案是嵌入在 C++ 运行时中的自定义 DSL,但我们最终重新发明了太多的轮子(解析器、linter、交互式解释器等)来实现我们需要的静态保证。

Haskell 用于制作具有这些保证的嵌入式 DSL 的工具对我非常有吸引力,但我一直在确定如何将其嵌入到软实时 C++ 运行时中。有任何想法吗?指向任何库/现有项目的指针将不胜感激!

4

1 回答 1

2

听起来阻力最小的路径是生成 C++ 的 EDSL。这样,您就不必担心软实时和 GHC RTS 之间的潜在不匹配。

您可能会查看生成 PL 的其他 EDSL 是如何实现的:

  • HJScript使用免费的 monad 方法来嵌入 JS。
  • JMacro更多地使用外部 DSL 方法,但通过 TH 嵌入。不会是我的选择。

与其生成 C++ 代码字符串,不如拥有一个数据结构。不幸的是,似乎没有可用于 C++ 的包。然而,你可以看看language-c——也许扩展它或构建你自己的。您甚至可以考虑生成 C 并使用这些语言提供的 C 到 C++ 互操作。

我可能会劝阻您不要查看Cryptol或 Cogent 的设计,因为它们是成熟的编程语言(您已经表示您倾向于避开)。

于 2016-09-09T00:45:43.707 回答