我在想Safe Haskell,我想知道我有多信任它?
我是一个编写可编程游戏的小黑客(想想Robocode),我允许其他人为自己的实体编程以相互竞争。大多数情况下,用户将在私人计算机上运行一些不受信任的程序。在运行之前可能会检查不受信任的代码。
我是多个客户使用的应用程序的程序员。我提供了一个API,以便他们可以扩展功能并鼓励我的用户分享他们的插件。用户社区规模很小,大部分时间都存在相互信任,但偶尔有人正在开展一项绝密的客户项目,任何数据泄漏都将是灾难性的。
我是...谷歌(或Facebook,雅虎等),并希望允许我的客户脚本他们的电子邮件帐户。脚本已上载并在我的服务器上运行。任何访问违规都是致命的。
答案 0 :(得分:8)
根据经验,我说安全的Haskell试图大致得到C#安全子集的位置。对于您的场景:
关于未定义的注释:在操作上,它通过抛出异常来停止函数返回值,错误函数也是如此。从表面上看,它被认为是“底层”。值。现在,即使安全的Haskell不允许未定义和错误,函数仍然无法返回,只需循环无休止。无尽的循环也是最底层的。如此安全的Haskell保证了类型和内存的安全性,但并不试图保证函数终止。当然,安全Haskell是图灵完整的,因此一般不可能证明终止。此外,由于内存不足会引发异常,因此函数可能会终止。最后,模式匹配错误抛出异常。所以安全的Haskell不能消除任何类型的底部,也可能允许显式的未定义和错误。
答案 1 :(得分:-6)
据我所知,安全的Haskell并不安全。有人可以在包中使用unsafePerformIO
并手动覆盖“不安全”因素。如果不是,那么对c程序或系统库有任何依赖性的每个包都不能被标记为安全。 (想想libgmp.so
,它几乎与每个人的Haskell基础包相关联。对于要被标记为安全的基础包,即使它使用unsafePerformIO
,也必须以某种方式明确标记为安全。 / p>