27

我正在寻找一种安全运行任意 Haskell 代码(或拒绝运行不安全代码)的方法。

一定有:

  • 模块/功能白名单
  • 执行超时
  • 内存使用限制

我希望看到的功能:

  • 杀死线程的能力
  • 将模块编译为本机代码
  • 缓存编译代码
  • 同时运行多个解释器
  • 编译器错误的复杂数据类型(在字符串中插入简单消息)

有了这种功能,就有可能实现一个能够运行任意 Haskell 代码的浏览器插件,这就是我的想法。

编辑:我有两个答案,都很好。谢谢!可悲的是,似乎没有现成的库,只有一个类似的程序。这是一个有用的资源。无论如何,我想我会等待 7.2.1 发布并尝试在我自己的程序中使用 SafeHaskell。

4

2 回答 2

31

我们已经在lambdabot中这样做了大约 8 年,它支持:

  • 受控命名空间
  • 操作系统强制超时
  • 本机代码模块
  • 缓存
  • 并发交互顶层
  • 自定义错误消息返回。

这一系列规则记录在案,请参阅:

lambdabot 中采用的安全方法启发了Safe Haskell语言扩展工作。


有关在 Haskell 中动态扩展已编译的 Haskell 应用程序的方法,请参阅两篇论文:

于 2011-05-12T03:22:27.143 回答
26

GHC 7.2.1 可能会有一个名为SafeHaskell的新工具,它涵盖了你想要的一些东西。SafeHaskell 确保类型安全(因此类似的东西unsafePerformIO被取缔),并建立了信任机制,因此可以信任具有安全 API 但使用不安全特性实现的库。它专为运行不受信任的代码而设计。

对于其他实际方面(超时等),唐说的 lambdabot 将是一个很好的地方。

于 2011-05-12T06:20:28.320 回答