gpt4 book ai didi

c++ - 使用 C++ 互操作在 Haskell 中构建简单的 DSL

转载 作者:行者123 更新时间:2023-11-30 03:38:42 29 4
gpt4 key购买 nike

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

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

Haskell 制作具有这些保证的嵌入式 DSL 的工具对我来说极具吸引力,但我一直在决定如何将它嵌入软实时 C++ 运行时。有任何想法吗?非常感谢指向任何库/现有项目的指针!

最佳答案

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

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

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

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

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

关于c++ - 使用 C++ 互操作在 Haskell 中构建简单的 DSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39399162/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com