【问题标题】:Typecheck generated code that access dynamically loaded code in Haskell类型检查生成的代码访问 Haskell 中动态加载的代码
【发布时间】:2012-01-28 19:35:09
【问题描述】:

我需要一种快速的方法(每秒 1000 次类型检查)来对生成的 Haskell 源代码进行类型检查。

我们尝试了hint,它足够快,但它无法访问动态加载的代码,除非源代码可用,而在某些情况下我们不会拥有。也许有一些方法可以将动态加载的代码注册为包或其他东西,因为提示似乎可以访问已注册的包?

我们尝试使用 ghc api,但它似乎要求文件在磁盘上,并且所需的所有文件 IO 使其太慢。

我们可以使用haskell-src-exts来生成代码,但是我们需要进行类型检查。

【问题讨论】:

  • 也许您可以使用 GHC api 解决方案,并将所有必要的东西放在一个 ram 磁盘中?
  • 这是一个分发给最终用户的应用程序,所以我无法控制他们的系统配置。
  • 是否可以提供 GHC api 文件描述符而不是文件位置?那么避免与磁盘讨论内容就不难了(我假设你在 ram 中有)
  • 如果来自磁盘的 IO 对 GHC API 来说是个问题,那么将文件放在 ramdisk 上怎么样?我想这会有所帮助。

标签: haskell code-generation


【解决方案1】:

每秒数以千计的类型检查顺序似乎不可行 - 你是同时进行这些,我希望有一些并行性的希望?

我假设您支持完整的 GHC 类型系统?所以一个精简的类型检查器(例如THIH 是不够的)。

  • 使用 ghc-api,带有字节码,没有优化
  • 在内存中缓存所有内容
  • 如有必要,向 GHC 提交修改以确保它可以从内存缓冲区中获取 FD

【讨论】:

  • 实际上,我认为 Hint 每秒至少给我们一千个。但它不适用于目标代码,因此必须找到不同的解决方案。但是,另一种解决方案是绕过您提到的“顺序”:将所有需要的类型检查放在一个文件中,然后只进行一次类型检查。翻译错误消息可能有点棘手,但对于我们尝试的简单事情来说似乎没问题。
  • “每秒一千”——但这取决于程序——并且有些程序会导致类型检查器不终止......
猜你喜欢
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 2010-12-17
  • 2015-04-04
  • 1970-01-01
  • 2013-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多