依赖类型语言最适合"真实世界"编程?

Kim*_*bel 12 programming-languages dependent-type

哪些依赖类型的编程语言可用于实际应用程序开发?

这些是我认为重要的一些要点:

  • 文件
  • 示例程序
  • 标准库
  • 或至少一个易于使用的外国功能界面
  • 一个使用该语言进行现实世界任务的人群
  • 工具支持

pig*_*ker 17

接受的答案包含错误信息.除非你关闭积极性/终止/宇宙检查,否则Agda中的Typechecking是可判定的.此外,无限进程在Agda中是可编程的,正如IO进程在Haskell中可编程一样:唯一的限制是无限进程在类型检查过程中执行时无法无限展开.你可以在Agda中实现一个图灵机模拟器:你无法说谎它保证终止或说服typechecker以无限制的方式运行它.

但是,我确实认为,在涉及"真实世界"编程时,依赖类型语言仍处于试验阶段.我们还不能支持重型开发,但我们可以在那些关注未来的人中保持一种重要的爱好,而不像过去的功能语言.

正如Twey所建议的那样,伊德里斯是最接近"真实世界"依赖类型语言的候选人.与Agda相比,它更专注于完成工作.我推荐Agda作为更好的工具来掌握依赖类型编程背后的想法,但Idris是更实用的选择.

我很高兴地说,值得考虑最近发布的Haskell作为本次讨论的候选人.从GHC 7.4开始,Haskell开始支持一个有用的类型级数据概念,并且至少使用单例技术(虽然这是一个kludge),我们可以根据运行时值确实有类型(通过使它们依赖于静态变量)约束到相等的运行时间值).因此,在试验依赖类型的早期阶段,Haskell是一种真正的"现实世界"语言.


kei*_*ter 6

我建议Agda,因为它调用了与Haskell的兼容性.因此,它可能是具有最佳库的依赖类型语言.虽然文档和教程有点乏味,但工具支持也不是很好.说实话,大多数依赖类型的语言目前还没有完全发展.

如果你的需求稍微弱一点,你的语言应该有GADT,那么有两个维护得很好的选项:Scala和Haskell.恕我直言,你可以通过使用GADT获得依赖类型的大部分好处,并且你可以保持类型判断可以启动.

Scala和Haskell都有大量的文档库,工作工具链以及FFI(分别用于Java和C).两者都有社区使用它们来解决现实问题,如解析Web 开发.


Twe*_*wey 6

Agda并非旨在成为通用编程语言.ATS是一种依赖类型的语言,专为低级编程而设计,虽然它不如Agda优雅.Idris是一种依赖类型的语言,专为高性能应用程序级别的程序而设计.