【问题标题】:How can we use Haskell with OSRM libraries?我们如何将 Haskell 与 OSRM 库一起使用?
【发布时间】:2017-08-07 03:12:55
【问题描述】:

我们想使用 libOSRM 进行路由。目前我们正在调用它的http服务。为了获得更好的性能,我想调用它的动态库。在阅读 Haskell FFI 时,我想我可以用我的 Haskell 代码编译和链接它的源代码(而不是编译的动态库)。 1.哪种方法更好? 2. 我该如何做每一个选择?

请注意,OSRM 充满了我不知道如何导入到 haskell 的结构。 c2hsc 未安装(阴谋集团引发错误!)。另一方面,我不知道如何链接 OSRM 的整个源。

【问题讨论】:

  • 好吧,你需要编写绑定。
  • 如上所述,您需要编写绑定。至于如何做到这一点,什么是最好的等等:这些将是涵盖广泛主题的相当冗长的答案,并且可能最终仍会针对您的用例。查看 Haskell FFI 文档,SO 并不是真正适合此类问题的地方。

标签: haskell ffi osrm


【解决方案1】:

我通过 API 和 ABI 兼容的 C 包装器创建了一些 Haskell 绑定的原型:libosrmc

请随意尝试并发送拉取请求。它只暴露了 API 的一小部分,并且基于 OSRM 5.4 版;您可能需要投入一些时间。但整体架构和想法仍然适用。 Here 是 Haskell 绑定。

我建议三思而后行,以使用 Haskell 的 libosrm/FFI 方式而不是发送 HTTP 请求:如果值得麻烦,请预先进行基准测试。

【讨论】:

  • 感谢您指点该项目。我有一些问题:我们是否必须将 OSRM 包装在 C 中,然后在 Haskell 中使用它?是否可以使用动态库(so、dylib、dll)并使用 hpp 文件创建适当的结构?另一点:我想这是值得的麻烦,因为 OSRM 非常快,而且 http-tcp 开销是一个明显的负载!
  • 您需要用于 FFI 绑定的 C 包装器并拥有稳定的 ABI 和 API。我不推荐直接包装 C++ libosrm。
【解决方案2】:

你可以看看https://github.com/daniel-j-h/hosrm-qa 这个项目是 PoC-only 并且使用 HTTP OSRM API 而不是 Haskell FFI。

【讨论】:

  • 我严格要求我要使用 libosrm 和 FFI!
猜你喜欢
  • 2016-03-14
  • 2013-02-22
  • 1970-01-01
  • 1970-01-01
  • 2018-08-14
  • 1970-01-01
  • 1970-01-01
  • 2014-08-29
  • 2017-01-11
相关资源
最近更新 更多