我正在设计一种用于测试实时嵌入式系统的简单解释型语言。控制流受到严格限制,以提供关于脚本将做什么以及它们将运行多长时间的强大静态保证。例如,您只能在常量条件上分支或在固定范围内循环。
C++ 中现有大量代码库以及相关模型和 IO 库,因此这种语言必须能够调用 C++。被测系统有严格的时序要求,所以我们不能容忍测试框架中有太多的抖动。我们过去的解决方案是在 C++ 运行时中嵌入自定义 DSL,但我们最终重新发明了太多轮子(解析器、linter、交互式解释器等)来实现我们需要的静态保证。
Haskell 制作具有这些保证的嵌入式 DSL 的工具对我来说极具吸引力,但我一直在决定如何将它嵌入软实时 C++ 运行时。有任何想法吗?非常感谢指向任何库/现有项目的指针!
最佳答案
听起来阻力最小的路径是生成 C++ 的 EDSL。这样,您就不必担心软实时和 GHC RTS 之间可能存在的不匹配。
您可能会查看其他生成 PL 的 EDSL 是如何实现的:
与其生成 C++ 代码字符串,不如拥有一个数据结构。不幸的是,似乎没有适用于 C++ 的包。但是,您可以看一下 language-c - 也许扩展它或构建你自己的。您甚至可以考虑生成 C 并使用这些语言提供的 C 到 C++ 互操作。
我可能会劝阻您不要查看 Cryptol 的设计或 Cogent,因为它们是完全成熟的编程语言(您已表示您倾向于避开)。
关于c++ - 使用 C++ 互操作在 Haskell 中构建简单的 DSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39399162/