Programming languages 最适合“依赖类型”的语言;“真实世界”;编程?

Programming languages 最适合“依赖类型”的语言;“真实世界”;编程?,programming-languages,dependent-type,Programming Languages,Dependent Type,哪些依赖类型的编程语言可用于实际应用程序开发 我认为以下几点很重要: 文件 示例程序 标准图书馆 或者至少是一个易于使用的外部功能接口 使用该语言执行实际任务的人组成的社区 工具支架 我建议,因为它与Haskell具有调用兼容性。因此,它可能是具有最好库的依赖类型语言。尽管文档和教程有点平淡无奇,而且工具支持也不太好。老实说,大多数依赖类型的语言目前还没有完全开发出来 如果您使用的是您的语言应该具有的稍微较弱的需求,那么有两个维护良好的选项:Scala和Haskell。我想,通过使用GADT,

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

我认为以下几点很重要:

  • 文件
  • 示例程序
  • 标准图书馆
  • 或者至少是一个易于使用的外部功能接口
  • 使用该语言执行实际任务的人组成的社区
  • 工具支架
    • 我建议,因为它与Haskell具有调用兼容性。因此,它可能是具有最好库的依赖类型语言。尽管文档和教程有点平淡无奇,而且工具支持也不太好。老实说,大多数依赖类型的语言目前还没有完全开发出来

      如果您使用的是您的语言应该具有的稍微较弱的需求,那么有两个维护良好的选项:Scala和Haskell。我想,通过使用GADT,您可以获得依赖类型的大部分好处,并且可以保持类型检查的可判定性


      Scala和Haskell都有大型的文档库,一个工作工具链,以及FFI(分别到Java和C)。两者都有社区使用它们来解决现实世界中的问题,比如和Agda不是设计成通用编程语言的。ATS是一种独立类型的语言,专为低级编程而设计,尽管它比Agda稍逊色一些。Idris是一种新兴的独立类型语言,专为性能应用程序级程序设计。

      公认的答案包含错误信息。Agda中的类型检查是可确定的,除非您关闭正性/终止性/全局检查。此外,无限进程在Agda中是可编程的,正如IO进程在Haskell中是可编程的:唯一的限制是,在类型检查过程中执行无限进程时,不能无限期地展开。你可以在Agda中实现一个图灵机模拟器:你不能撒谎说它保证会终止或者说服typechecker以一种无限制的方式运行它

      然而,我确实同意,当涉及到“真实世界”编程时,依赖类型语言仍处于实验阶段。我们还不能支持重载开发,但我们可以在那些着眼于未来的人中保持一个重要的爱好,就像过去的函数式语言一样

      正如Twey所建议的,Idris是最接近于依赖于类型的“真实世界”语言的候选语言。它比Agda更专注于完成工作。我建议Agda作为更好的工具来掌握独立类型编程背后的思想,但Idris是更实用的选择


      我很高兴地说,值得考虑将Haskell的最新版本作为本次讨论的候选版本。自GHC 7.4以来,Haskell已经开始支持类型级数据的有用概念,并且至少通过单例技术(尽管这是一个难题),我们可以根据运行时值(通过使它们依赖于约束为相等的运行时值的静态变量)来实现类型。因此,在试验依赖类型的早期阶段,Haskell是一种真正的“真实世界”语言。

      可能更适合程序员。stackexchange.com…任何一种都可以使用。你需要为你的问题提供更多的上下文。图灵完整性呢?这也是一项要求吗?另外,当你说“现实世界的任务”时,你的意思是“开发应用程序”——而不是“证明定理”,对吗?@jzd:我应该提供什么样的“上下文”?@sepp2k:我的问题包含了“应用程序开发”这个词;)我已经使用scala一段时间了,但我没有使用GADTs。它们如何与依赖类型相关?GADT是依赖类型和常规参数化类型之间的一个有用的中间步骤。与大多数类型系统相比,您可以获得更强的类型,并且不再像依赖类型那样拥有图灵完整(不可判定)的类型系统。拥有不可判定的类型系统有点问题,因为类型检查有一个无限循环的小机会。因此,除非您知道您将需要依赖类型的额外类型信息,否则最好在GADT停止。因为它们允许您在仍然可判定的情况下做比大多数类型系统更酷的事情。作为参考,OCaml现在还支持GADT。谢谢您的回答。Haskell的能力有多大?在这方面,它听起来可以和Scala相媲美。我对Scala的了解还不足以进行这种比较。然而,Haskell正在以相当快的速度向依赖类型的方向移动。种类多态性(如GHC 7.6中所述)可以有效地处理通过自动将类型提升到种类级别而创建的所有新种类。我打赌Haskell会在这方面领先于Scala,但我很高兴被证明是错的。呃,嗯,让我补充一下,我的ICFP2012演讲的发展是一个逐渐变得更加依赖打字的练习。Haskell可以很容易地进入第四部分,但是第五部分的内容太多了。另请参见,以获取可能的示例。