哪个 依赖类型 编程语言可用于现实世界应用程序开发?

这些是一些观点,我认为很重要:

  • 文档
  • 示例程序
  • 标准库
  • 或至少易于使用的外国功能接口
  • 一个使用该语言进行现实世界任务的人社区
  • 工具支持
有帮助吗?

解决方案

我会建议 Agda, ,因为它具有与Haskell的兼容性。因此,它可能是带有最佳库的相关语言。文档和教程有点平淡,工具支持也不是太好了。老实说,目前大多数依赖类型的语言尚未完全完善。

如果您按照您的语言应该有稍弱的需求 加德, ,有两个非常良好的选择:Scala和Haskell。恕我直言,您可以通过使用GADT获得依赖类型的大部分好处,并且您可以不断地进行启动。

Scala和Haskell都有大且文献良好的库,一个工作的工具链以及FFI(分别为Java和C)。两者都有社区使用它们来解决现实世界中的问题,例如 解析网络 发展。

其他提示

公认的答案包含错误信息。除非您关闭阳性/终止/宇宙检查,否则在AGDA中的Typechecking是可以决定的。此外,无限过程是在AGDA中编程的,就像IO流程在Haskell中可以编程一样:唯一的限制是执行时无限期地展开无限的过程 在打字过程中. 。您可以在AGDA中实现Turing Machine模拟器:您只是不能说谎言可以保证终止或说服Typechecker以无限的方式运行它。

但是,我同意,在“现实世界”编程方面,依赖类型的语言仍处于实验阶段。我们还不能支持重型发展,但是我们可以在那些关注未来的人中维持重要的爱好,就像过去的功能性语言一样。

正如Twey所建议的那样,伊德里斯(Idris)是最接近“现实世界”的候选人。比AGDA更专注于完成工作。我建议AGDA是更好地掌握依赖类型编程的想法的更好的工具,但是IDRIS是更实用的选择。

我很高兴地说,值得考虑将Haskell的最新发行作为本讨论中的候选人。自GHC 7.4以来,Haskell已开始支持类型级别数据的有用概念,至少有了 辛格尔顿 技术(虽然是kludge),我们确实可以根据运行时值(通过使它们取决于静态变量约束到相等的运行时值)。因此,在尝试依赖类型的早期阶段,Haskell是一种真正的“现实世界”语言。

AGDA并非被设计为通用编程语言。 ATS是一种专为低级编程而设计的依赖性的语言,尽管它比AGDA优雅。 IDRIS是一种专为性能应用程序级程序设计的相关语言。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top