三足鼎立 hdu

我经常争辩说,语言,库或框架的良好设计并不是要在解决方案中尽可能多地包含功能,而是要发现一小部分相互关联的功能,以相互促进。 也就是说,我们希望最大化解决方案的功能/表达能力,同时最小化表面积。 此外,我经常愿意为了优雅而牺牲一些灵活性 。 我认为,优雅的解决方案更易于学习,更令人愉悦且易于抽象。

考虑到这一点,我想考虑一下语言设计师至少已经研究了二十年的问题:如何将子类型多态参数多态 (泛型)结合起来。 这是任何带有静态类型的面向对象语言都面临的核心问题。 最近的语言已经逐渐接近令人满意的解决方案,但是我想提出,如果听起来不太自私,则锡兰提供了迄今为止最令人满意的解决方案。

我们的吉祥物是Trompon大象,因为大象有四只脚,如果一只脚失踪了,它会掉下来。 锡兰的字体系统就是这样! (是的,这是一个平衡面。)

类型系统的四个分支是:

  • 申报地点差异
  • 临时联合和交叉点类型
  • 基于主体类型的类型推断
  • 协变细化和主体实例继承

如果我们要去除这四个特征中的任何一个,突然的东西,Just Works根本就不再起作用了,或者即使我们能够使它起作用,结果也会变得更加复杂,并涉及推理程序员难以复制。

考虑下面这行非常简单的代码:

value animals = ArrayList { Cat(), Dog(), Person() };

推断的animals类型为ArrayList<Cat|Dog|Person>

  • 如果我们要删除声明位置的协方差,则不能将animals分配给List<Animal>
  • 如果要删除联合和交集类型,则推断类型实参的过程将是模棱两可的,并且会更加复杂。 (在语言规范的两页伪代码中定义了锡兰的类型自变量推断算法,这听起来很像,直到您意识到该算法在其他语言中是有问题和未充分说明的,并且该算法的实际实现并不多更长)。
  • 如果要取消类型推断或主体类型,则需要在此代码行中明确写下一些不感兴趣的类型。

除去这些特征中的任何一个,我们剩下的是三足大象 。

主体实例化继承是Ceylon的一种隐藏功能,尽管我们在容器类型的整个设计过程中都广泛使用它,但我们并没有太多讨论。 例如,它可以说List<Element>Ranged<List<Element>>Sequence<Element>List<Element>&Ranged<Sequence<Element>&gt 。 主体实例化继承与声明站点协方差以及临时联合/交叉点类型的结合非常好。 考虑以下代码:

List<String>|Integer[] ranged = ... ;
value span = ranged.span(0,max);

在此, span的推断类型为List<String>|Integer[] 。 那不是很好吗? 所述typechecker已推断的主超类型实例化 RangedList<String>|Integer[]是类型Ranged<List<String>|Integer[]>并且从而确定用于完美返回类型span()

如果我们要删除声明站点协方差,主体实例继承或联合类型中的任何一种,那么这种推理将不再成立。 大象会掉在他的屁股上。

参考: 在 锡兰团队博客博客上,我们JCG合作伙伴加文·金(Gavin King)的三足大象 。

翻译自: https://www.javacodegeeks.com/2013/12/on-three-legged-elephants.html

三足鼎立 hdu

三足鼎立 hdu_在三足大象上相关推荐

  1. 你想三年后过上什么样的生活?

    这文是转的,但写得挺好,个人奋斗的故事总是很有趣,这位还是一位女程序员,也是转行学习编程,挺好的,编程能让人立起腰杆子! 我在北京这几年(一) 2015年 4月6号我买了张硬座来北京面试实习,面试时提 ...

  2. 无论是cisco还是华三的书上对于子网划分有个问题需要解释

    无论是cisco还是华三的书上对于子网划分有个问题,例如:如果子网为有五位 ,则可以划分为30个子网.在实际中却不是这样的 子网位五位,可以划分为32个子网.那为什么这么写,难道是出书的人写错了,其实 ...

  3. 关于云计算存储虚拟化技术三个层次上的实现

    关于云计算存储虚拟化技术三个层次上的实现 随着企业的成长,业务和应用不断增加,IT 系统规模日益庞大,带来高能耗.数据中心空间紧张.IT 系统总体拥有成本过高等问题;而现有服务器.存储系统等设备又没有 ...

  4. 推荐三款 Mac 上的理财神器 iCompta、Rublik、UctoX

    推荐三款 Mac 上的理财神器 iCompta.Rublik.UctoX 今天推荐三款理财神器,像个人的话可以使用 iCompta(个人财务管理)一款软件就好了,但有些朋友可能有关注汇率的需求,可以使 ...

  5. Java服务器部署基于OpenCV的C++图像处理项目(三)图片上传并返回处理图

    Java服务器部署基于OpenCV的C++图像处理项目(三)图片上传并返回处理图 1.上传图片并返回灰度图功能 由于使用的springboot开发,直接写一个upload接口供图片上传,以下是spri ...

  6. 苏教版三年计算机教案,2021苏教版三年级信息技术上学期教学计划

    信息技术是一门讲究操作性和实践性的课程,所以应注重培养孩子的动手操作实践能力,达到手脑并用,同步发展.三年级信息技术教师制定好计划,才能助教学各项工作的顺利有序地开展.下面是学习啦小编带来关于2021 ...

  7. 有3箱水果,一箱是苹果,一箱是橘子,一箱是两种水果的混装,三个箱子上都贴了标签,但所有的标签都贴错了 现在你只拿出一个水果来判断3个箱字里的情况

    文章目录 前言 一.题目条件:很明显就是三个箱子并且三个标签都是错误的!!! 二.在贴着苹果+橘子的箱子里拿出一个水果(注意该箱子标签错误),所以假设拿出来苹果,该箱子就是苹果.而标记者橘子的箱子既不 ...

  8. (面试智力题)有3箱水果,一箱是苹果,一箱是橘子,一箱是两种水果的混装,三个箱子上都贴了标签,但所有的标签都贴错了 现在你只拿出一个水果来判断3个箱字里的情况

    问题重述: 有3箱水果,一箱是苹果,一箱是橘子,一箱是两种水果的混装,三个箱子上都贴了标签,但所有的标签都贴错了 现在你只拿出一个水果来判断3个箱字里的情况 思路: 假设,正确的箱子标签为: A:苹果 ...

  9. 海奥华预言--第三章 地球上的第一个人

    当我们在Haatis,就是以前描述过的那个休息室里重新坐好之后,涛就开始了她那奇怪的故事. "米歇,准确地讲,是在一百三十五万年以前,在人马座星座(Centaur)中一个叫巴卡拉梯尼(Bak ...

最新文章

  1. Spring4-JdbcDaoSupport-查询单列
  2. Android 屏幕自动旋转-Sensor属性
  3. SAP 货物移动 BAPI 的简单使用 BAPI_GOODSMVT_CREATE
  4. android apr分析,APR分析信号篇
  5. 2003文件服务器迁移2016,服务器2016设置文件共享
  6. Excel有哪些需要熟练掌握而很多人不会的技能!
  7. Java虚拟机专题之垃圾回收(读书笔记)
  8. 2017-9-5-Java 泛型
  9. webform 组合查询
  10. 沟通的重要工具——乔哈里视窗
  11. 计算机输入什么指令关机,电脑自动关机命令是什么【详细介绍】
  12. wps怎么把ppt里的字体一起保存_WPS怎样将PPT中的文字导出为Word文档?
  13. 2019亚马逊差评回复模板,老手惯用的亚马逊差评应对技巧
  14. command/cmd命令大全
  15. web前端入门到实战:简单的图片轮播
  16. mysql 错误码1236_【MySql】MySQL Replication Fatal Error 1236
  17. python+百度AI 文字转换成语音
  18. 对接第三方顺丰丰桥下单Api接口实战教程java
  19. 数据可视化BI平台选型调研报告 Superset VS Redash VS Metabase
  20. 那些看来很朴实,却很有趣,很有爱的签名

热门文章

  1. 计算机主机拆解报告,计算机主机拆装实训的报告.docx
  2. idea导入项目全部爆红问题怎么解决
  3. Java运算符优先级及结合性
  4. pageable设置size_spring – 设置JPA Pageable Object的默认页面大小
  5. 计算机进不去管理,192.168.3.1登陆页面,192.168.3.1管理页面进不去怎么办? | 192路由网...
  6. 公办大学计算机系的女生少吗,高考:女生失业率“最低”的大学专业,考上家长很开心...
  7. bxslider 使用帮助
  8. 微信推出微信小商店卖货小程序
  9. 搜狗输入法看见好看好看好看就开机后就看见8932
  10. 征途2经典版服务器双线哪个稳定,双线操控战不停 《征途2经典版》战灵分身登场...