Protocol,Interface,Trait,Concept,TypeClass之间的关系和区别

关系和区别是:Protocol,Interface,Trait都是子类型多态。区别在于小的语法部分。Concept和Typeclass是非常明显的绑定多态,参数多态的定义域是所有类型。Protocol,Interface,Trait,Typeclass的实际类型被接受的必要条件是:实际类型在被接受之前,都必须要与相应的Protocol,Interface,Trait,Typeclass关联。

Protocol,Interface,Trait是一个东西。都是子类型多态。只要一个类实现(或者说满足)Protocol,Interface,Trait里面的要求,就可以被接受。区别在于小的语法部分,例如Protocol可以规定的范围很广,而Interface和Trait基本上都是方法上的规定。

Concept和Typeclass是非常明显的绑定多态。和普通的参数多态不同,参数多态的定义域是所有类型,和全称量词对应,例如λ2。而绑定多态要求这个类型必须满足这样那样的条件。例如(Ord a) => a -> a -> Bool和template <Sortable T>。而且两者都可以绑定高阶类型。例如monad绑定的就是T=>T或者说*->*,而C++模板里也有template <template…>这种参数。区别在于,Typeclass只要求实现具体的方法,但是Concept对参数的要求可以很高。不仅仅是限制其中要包含哪些方法,还可以要求需要包含哪些成员,要求类型相关的性质,甚至还会要求类型是否有trivial的构造函数,移动函数是否会抛异常等等。

这几个东西相似的地方在于,它们都大多是用“规定实现哪个或哪些方法”来实现的各种多态。

这几个东西还有一个区别,就是Protocol,Interface,Trait,Typeclass的实际类型被接受的必要条件是:实际类型在被接受之前,都必须要与相应的Protocol,Interface,Trait,Typeclass关联。即impl traits和instance Eq e之类的。而Concept不用。被Concept接受的类型完全可以不知道Concept的存在。也就是说,前四个可以定制,而Concept就是单纯的绑定多态,仅仅起到一个过滤的作用。

延伸阅读:

什么是Protocol?

Protocol为进行网络中的数据交换而建立的规则、标准或约定。用于不同系统中实体间的通信。两个实体要想通信,必须有“同一种语言”,而且,对于通信内容,怎样通信和何时通信,都必须遵守一定的规定,这些规定就是协议。亦可简单地定义为:控制两实体间数据交换的一套规则。在电子通讯连接中,各个不同的层次都有自己的协议。例如,在硬件设备层次和应用程序层次的数据交换都有自己的协议。在开放式系统互连(OSI)标准模式中,每个层都有一到两种协议,发生通讯的两个终端都必须能识别和遵守协议。协议通常以工业或国际标准的形式被描述。

文章标题:Protocol,Interface,Trait,Concept,TypeClass之间的关系和区别,发布者:小编,转载请注明出处:https://worktile.com/kb/p/38841

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小编小编认证作者
上一篇 2023年2月20日 上午12:19
下一篇 2023年2月20日 上午12:21

相关推荐

  • devops工程师需要什么条件

    针对题旨“DevOps工程师需要什么条件”,1、技术熟练度、2、沟通能力、3、理解业务需求为三大核心要素。尤其值得深入探讨的是技术熟练度,该项条件不仅要求工程师精通各种DevOps工具和软件如Jenkins、Docker、Kubernetes等,更应涵盖对脚本编写(如Python、Shell)的掌握…

    2024年3月26日
    8100
  • 什么是编程软件

    编程软件是1、工具和2、环境,用于开发和维护软件应用程序或系统。开发环境(IDE)是编程软件的重要组成部分,它提供了一套综合的工具和特性,帮助开发者高效地编写、测试和调试代码。 IDE集成了多种工具,例如文本编辑器、编译器、调试器和图形用户界面设计器,使得开发者可以在一个统一的环境中完成软件开发的各…

    2024年4月25日
    700
  • 研发团队如何有效管理远程工作

    摘要:研发团队有效管理远程工作需采用一系列结构化策略,确保流程效率和产品质量。1、建立明确的沟通渠道;2、使用合适的协作工具;3、制定清晰的工作流程;4、加强项目管理;5、注重团队建设;6、实施定期的远程培训;7、确保安全和合规性;8、设定明确的目标及期望;9、维护工作和生活的平衡。建立明确的沟通渠…

    2023年11月30日
    27400
  • jira如何管理项目人效

    jira管理项目人效包括以下几点:一、需求管理;二、Sprint Planning;三、Sprint阶段;四、Sprint结束;五、发布上线。需求管理是由产品经理PO提出确定需要做的需求,然后在JIRA里自己的项目下,建立需求Issue,指派给PO。如果需求比较小,则建立需求的Issue类型选择St…

    2023年3月22日
    48700
  • 如何配置并使用版本控制工具以提高研发效能

    配置并使用版本控制工具以提高研发效能的关键步骤和实践建议:1、选择合适的版本控制工具;2、配置版本控制环境;3、创建代码仓库;4、确定代码分支策略;5、提交代码;6、合并冲突;7、进行代码审查;8、管理分支和标签;9、配置集成构建工具;10、定期备份和备份恢复;11、培训和支持;12、持续改进。配置和使用版本控制工具可以提高研发效能和团队协作能力。

    2023年11月12日
    25500
  • 军哥手记程军:我的2020,先打个60分吧

    文| babayage 编辑 |笑 笑 技术人成长之路荆棘遍布,30岁左右被手握新技术、加班凶猛的后辈冲击,转型管理成为前行的通行证;35~40岁,掌握了管理技能、薪水更低的后浪再次袭来,能否补全商业思维、从成本模型跃迁为价值创造者、战略护航者,又一次成为生死考验。 程军打造的公众号“军哥手记”,是…

    2022年3月20日
    80000
  • 什么是去中心化devops

    ### 摘要 去中心化DevOps代表了一种新兴的开发运维模式,旨在通过分布式的技术实践,增强团队自治性、提高效率与创新力。关键要素包括1、分布式团队的自主管理;2、基于微服务的技术架构;3、依托于区块链技术的数据和流程透明化。尤其是在微服务技术架构下,每个服务都设计为独立的、可在不同环境中部署和扩…

    2024年3月26日
    6300
  • vscode 为什么找git

    VSCode为什么找Git?主要出于以下几点原因:提供版本控制、编码效率提升、项目团队协作更加便捷、跨平台的项目兼容性以及丰富的拓展插件环境。这些特性使得VSCode联合Git成为了开发人员的首选环境。 其中,提供版本控制是最直接的需求。版本控制是每个软件项目开发中必不可少的一个环节,它能够帮助开发…

    2024年4月3日
    5900
  • 计划软件哪个好

    好的计划软件有:一、有道云笔记;二、滴答清单;三、讯飞语记;四、千本笔记;五、暖暖手账;六、记事本 ;七、计划表。有道云笔记是一款多平台的记录工具,可以通过文档、扫描、语音、收藏等方式进行记录。书本中的内容也可以扫描保存到软件中,以便随时随地查看。 一、有道云笔记 有道云笔记是一款多平台的记录工具,…

    2023年3月31日
    34000
  • 产品管理的环节有哪些

    产品管理的环节有:1、产品规划;2、需求管理;3、产品设计;4、产品开发与测试;5、产品验收与交付。其中,产品规划是指,产品经理在这个环节首先需要对市场和目标客户有透彻的了解,评估外在发展机会与风险。 一、产品规划 产品研发管理的名列前茅步,就是产品规划。产品经理在这个环节首先需要对市场和目标客户有…

    2023年4月17日
    61500

发表回复

登录后才能评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部