haskell - 对 Haskell FFI 的反馈

标签 haskell f# ffi

关闭。这个问题需要更多 focused .它目前不接受答案。












想改进这个问题?更新问题,使其仅关注一个问题 editing this post .


8年前关闭。







Improve this question




我是函数式编程的新手(主要是 C++/C# 程序员),我即将开始一个新项目。没有严格的截止日期,此时对可以使用哪些技术没有任何限制。

该项目的核心是解析(相对)较大的 CSV 文件并填充 Excel 和 Word 模板。我正在考虑两种方法,Qt/C++ - Haskell 进行 CSV 解析、计算等,以及 C# for UI 和 F# 做繁重的工作。我想从 C++/Haskell 开始,因为它更具挑战性。

我主要关心的是 FFI 和 Haskell 中的状态。
Haskell FFI 在传递大型结构数组和 C 回调方面有多强大?
我是否使用 State monad 在函数调用到 Haskell DLL 之间将大数据集保留在内存中?我是 Haskell 的新手 :)

最佳答案

How robust is Haskell FFI for passing large arrays of structures?



一切都必须在语言障碍处进行编码/解码。使大型数据结构对一种语言或另一种语言不透明是很常见的。也就是说,如果有一个大型 C 数据结构,只需在 Haskell-land 中保留一个指向它的指针并导入执行您需要的操作的 C 函数;同样,如果有一个大的 Haskell 数据结构,则公开将其转换为 C-land 的 Haskell 函数。

How robust is Haskell FFI for C callbacks?



将 Haskell 闭包转换为 C 风格的函数指针很容易也很常见。

Do I use the State monad to retain the large data set in memory between the function calls into the Haskell DLL?



这在很大程度上取决于您设计的 API。在许多情况下(例如大多数 UI 库)这并不可行,因为主循环是在 C 中,而不是在 Haskell 中;一个使用 IORef或类似的。

也就是说:如果这是您的第一个 Haskell 项目,我强烈建议您避免手动进行 FFI 工作,尤其是尝试通过 FFI 混合 Haskell 和 C++。有很多困难的东西需要习惯,而无需将其混入其中。如果您打算将它用于唯一的事情是 UI,那么请利用其他人的辛勤工作:Haskell 绑定(bind)到 Hackage 上可用的最大 UI 工具包。

关于haskell - 对 Haskell FFI 的反馈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21411530/

相关文章:

haskell - 在数据类型中链接 Haskell 函数

F#:将顶级函数转换为成员方法的优点?

c# - 如何在 C# 中复制 F# 区分的联合类型?

rust - 如何将指向自身的指针传递给 C++ 以便它可以执行回调?

c - 如何在不泄漏内存的情况下将 Rust 结构和方法实现为 C 中的 Vec?

haskell - haskell 模式下的 emacs haskell-unicode-input-method 将 unicode 转换回 ascii

multithreading - 如果与 `putChar` > 1 秒一起使用,Haskell 的 `threadDelay` 不会打印任何内容

f# - 结果与不同类型绑定(bind)?

haskell - 为什么 sleep 不起作用?

haskell - Haskell 中的多项式