Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用C++;互操作_C++_Haskell_Testing_Dsl_Soft Real Time - Fatal编程技术网

C++ 用C++;互操作

C++ 用C++;互操作,c++,haskell,testing,dsl,soft-real-time,C++,Haskell,Testing,Dsl,Soft Real Time,我正在设计一种用于测试实时嵌入式系统的简单解释语言。控制流受到严格限制,以提供关于脚本将做什么以及它们将运行多长时间的强大静态保证。例如,您只能在常量条件上分支或在固定范围上循环 在C++中有一个很大的现有代码库,它有相关的模型和IO LIB,所以这个语言必须能够调用C++。测试中的系统有严格的定时要求,所以我们不能容忍测试框架中的太多抖动。我们过去的解决方案是嵌入在C++运行时中的自定义DSL,但最终我们重新发明了太多的轮子(解析器、链接器、交互式解释器等),以实现我们需要的静态保证。p> 我

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

<>在C++中有一个很大的现有代码库,它有相关的模型和IO LIB,所以这个语言必须能够调用C++。测试中的系统有严格的定时要求,所以我们不能容忍测试框架中的太多抖动。我们过去的解决方案是嵌入在C++运行时中的自定义DSL,但最终我们重新发明了太多的轮子(解析器、链接器、交互式解释器等),以实现我们需要的静态保证。p>
强>我一直在确定如何将它嵌入到软实时C++运行时中。有什么想法吗?任何图书馆/现有项目的指针将不胜感激

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

您可以看看生成PLs的其他EDSL是如何实现的:

  • 使用免费的monad方法嵌入JS
  • 使用更多的外部DSL方法,但通过TH嵌入。这不是我的选择
< >代替生成C++代码串,拥有数据结构是很好的。不幸的是,似乎没有一个C++程序包。然而,你可以看看——也许可以扩展它或者建立你自己的。您甚至可以考虑生成C并使用这些语言提供的C到C++互操作。 我可能会劝阻您不要去看它的设计或令人信服的设计,因为它们是完全成熟的编程语言(您已经表明您倾向于避开它们)。

您可以-简而言之,您可以使用
hs_init()
启动运行时,或者使用从Haskell加载并运行Haskell源代码,或者从C++中加载预编译的Haskell代码共享库。(后者是他们在Facebook上使用代码的方式。)