如果您有可能拥有一个同时使用Haskell和C++的应用程序.你会让Haskell管理什么层,你会让C++管理哪些层?
有没有人做过这样的联想,(当然)?
(Haskell站点告诉它非常简单,因为Haskell有一个模式,可以通过gcc在C中编译)
起初我认为我会将所有I/O操作保留在C++层中.以及GUI管理.
这是一个非常模糊的问题,但是当我计划学习Haskell时,我正在考虑将一些工作委托给Haskell代码(我在实际编写中学习),并且我想选择一些我将看到Haskell好处的部分.
Gre*_*con 26
Haskell的好处是它允许您使用的强大抽象.你不是在考虑一个零和零,地址和寄存器,而是计算和类型属性和延续.
C++的好处是可以在必要时对其进行优化.你不是在考虑高尚的monad,箭头,部分应用和组合纯函数:使用C++,你可以直接使用裸机!
这两个陈述之间存在紧张关系.唐纳德克努特在他的论文"结构化编程与go to陈述"中写道
我已经感觉很长一段时间了,编程才能很大程度上取决于从微观到宏观视角切换的能力,即能够流畅地改变抽象层次.
知道如何使用Haskell和C++以及如何以及何时将它们很好地结合起来将解决各种问题.
我写的最后一个使用FFI的大项目涉及使用用C编写的内部雷达建模库.重新实现它本来是愚蠢的,并且表达应用程序其余部分的高级逻辑将是一个痛苦.我在Haskell中保留了它的"大脑"并在需要时调用了C库.
你想做这个练习,所以我建议采用相同的方法:在Haskell中编写智能.束缚Haskell作为C++的奴隶可能最终会让你感到沮丧,或者让你感觉好像浪费了你的时间.使用每种语言的优势所在.
Ale*_* C. 11
这是我看到的东西:
因此,假设我精通Haskell,C,C++和Python,这就是我编写应用程序的方法:
这个答案更像是一个故事,而不是一个全面的答案,但我在计算语言学中使用了Haskell,Python和C++的混合,以及我没有写过的几个C和Java工具.我发现最简单的方法是将所有内容作为一个单独的进程运行,使用Python作为粘合代码来启动Haskell,C++和Java程序.
C++是一个相当简单,紧凑的循环,用于计算特征出现次数.基本上它所做的只是数学和简单的I/O. 我实际上通过让Python胶水代码写出一个充满#defines和重新编译的标题来控制选项.有点hacky,但它确实有效.
Haskell是所有中间处理:从我使用的各种C和Java解析器中获取复杂输出,过滤无关数据,并将C++代码所期望的简单格式转换为它.然后我将C++输出转换为LaTeX标记(以及其他格式).
这是一个你希望Python强大的领域,但我发现Haskell使复杂结构的操作更容易; Python可能更适合简单的行到线转换,但我正在切片和切割解析树,我发现在用Python编写代码时忘记了输入和输出类型.
由于我使用Haskell就像一个结构更为结构化的脚本语言,我最终编写了一些文件I/O实用程序,但除此之外,用于树和列表操作的内置库已经足够了.
总而言之,如果你遇到类似我的问题,我建议C++用于内存受限,速度关键部分,Haskell用于高级转换,Python用于运行它.
我从来没有混合使用这两种语言,但你的方法对我来说有点颠倒.Haskell更适合高级操作,而C++可以进行优化,对于紧密循环和其他性能关键代码最有利.
Haskell最大的好处之一是将IO封装到monad中.只要这个IO不是时间关键的,我就没有理由在C++中做到这一点.
对于GUI部分,您可能是对的.有大量的Haskell GUI库,但C++具有强大的工具,如QtCreator,可以简化繁琐的繁琐任务.
| 归档时间: |
|
| 查看次数: |
12315 次 |
| 最近记录: |