背景:
阅读新闻
.NET或将引入类型类和扩展
[日期:2017-04-18]
来源:infoq.com
作者:Jonathan Allen ,译者 谢丽
[字体:大 中 小]
类型类是另外一项正被考虑引入.NET未来版本的特性。在提案“外观和扩展(Shapes and Extensions)”中,该特性被称为外观,它们将大幅提升.NET泛型的能力。Mads Torgersen这样描述类型类:
接口抽象的是作为类型实例的对象和值的“外观(shape)”。从根本上讲,类型类背后的思想是抽象类型本身的外观。而且,当通过类型声明引入需要的类型实现一个接口时,其他人可以在单独的代码中实现类型类。
类型类解决了一个长期存在的接口问题:它们无法处理静态函数或操作符重载。这导致了一些问题,比如,在数学库中,对于不同的数值数据类型,需要反复声明相同的函数。
Mads总结道:
一般来说,外观的声明和接口声明非常像,但它:
几乎可以定义任意类型的成员(包括静态成员)
可以通过扩展实现
可以在特定的地方像类型一样使用
最后一个限制很重要:外观不是类型。外观的主要目的是作为泛型的一种约束,限定类型参数,保证它们有正确的外观,并允许泛型声明体使用那个外观。
与外观的思想紧密相关的是一种经过改进的扩展语法。扩展结构几乎可以为类型类提供任何东西,而不只是方法扩展。考虑下面这个最简单的例子:
Int32类型已经提供了大部分内容,但它缺少zero属性。扩展可以修复这个问题:
然后,你可以像下面这样使用它:
实现
这实现起来需要一些接口和结构方面的技巧。
Shapes被翻译成了接口,每个成员(甚至是静态成员)都转换成了接口中的实例成员;
扩展被翻译成了结构,每个成员(甚至是静态成员)转换成了结构中的实例成员;
如果扩展实现了一个或多个弯管,则底层的结构实现了那些外观的底层接口。
通常,上述结构被称为“见证结构(witness struct)”。它的存在可以证明一个类遵循外观的规则。或者换句话说,该类在类型类中。
编译器会将上述AddAll方法翻译成如下代码:
然后,上述见证结构就可以用于向AddAll方法提供必要的功能。结构可以直接在类型上调用方法或者根据需要使用扩展结构。
在类和接口中实现外观
使用和我们扩展基类及实现接口一样的语法,类可以显式实现一个外观。然后,编译器会提供相应的见证结构。
也可以将接口标记为满足外观的要求。下面是一个例子:
由于IComparable和理论上的类型类之间存在一对一关系,所以我们不需要为扩展结构提供扩展体。
泛型类型
事实证明,泛型类型有他们自己的问题。和泛型方法一样,向泛型类添加外观或者类型类作为类型约束需要额外提供一个类型参数。在泛型类上,由于类型参数的数量是其名称的一部分,所以这会导致它和其它名称相同的泛型类型发生冲突。
扩展外观
扩展结构不仅可以用于实现外观,还可以扩展它们。因此,你可以向现有的外观中添加新方法、静态方法及操作符。正如扩展方法一样,语法是一样的,就像它们在底层类型上直接定义了一样。
评论
总的来说,人们对于该特性的反应不错。不过,也有一些修改请求。例如,外观目前必须显式实现。有些开发人员希望,如果特定的类或接口不需要额外扩展方法时,就由编译器隐式实现。Mads列举了这样做的一些问题:
那可能会导致,为了见证以相同的方式应用到同一类型的同一个外观而生成许多结构类型,有生成的类型过度扩散的风险。如果编译器比较聪明,每个程序集只生成一个,或许可以缓解这种情况,但我们从匿名类型了解到,这种重复数据删除技术非常困难,而且很容易出错。
如果我们允许泛型类型拥有外观约束的类型参数,那么同一个东西拥有多个见证结构会导致实例化的泛型类型具有不同的类型标识,无法互换。
人们还担心外观和扩展绑定得太紧。他们认为,那将来可能会引起混淆。
对此,Mads答复说:
合并:在我的提案里,“扩展”实际上合并了多个问题:
[……]
我觉得,对于上述服务于所有这些目的的语言机制,有太多内容需要讨论——但归根结底,它们的关系非常密切。如果有一个提案可以将它们清晰地分开,那将是非常有意义的。那也许会更加简单有效。
查看英文原文:.NET Futures: Type Classes and Extensions
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-04/142894.htm
在Elasticsearch中应用机器学习排序LTR
Log4J的Appenders配置
相关资讯
.NET
MailKit正式替换了.NET的 (今 09:11)
Microsoft规划了.NET的未来发展 (02月09日)
.NET平台上的分布式编程框架MBrace (11/23/2015 10:22:19)
.NET 诞生 15 周年 (02月14日)
为什么.NET感觉上比Java差一点 (10/02/2016 08:11:39)
.Net开发框架最终版将与Windows 10 (07/2九度快排系统 https://www.190seo.com5/2015 05:49:19)
本文评论
查看全部评论 (0)
表情:
姓名:
匿名
字数
同意评论声明
评论声明
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款
最新资讯
Log4J的Appenders配置
CentOS虚拟机和物理机共享文件夹实现
CentOS7.0下Rsync+sersync实现数据实时增量
Google Hire 首页默默推出,LinkedIn 要小
.NET或将引入类型类和扩展
2017年会是Serverless爆发之年吗?
Apache Tomcat信息泄露漏洞(CVE-2017-5651)
Trend Micro Threat Discovery Appliance命
Google gRPC 堆缓冲区溢出漏洞(CVE-2017-
Shadow Brokers 最新泄密暴露 NSA 与
背景:
阅读新闻
Google Hire 首页默默推出,LinkedIn 要小心了?
[日期:2017-04-18]
来源:瘾科技
作者:Linux
[字体:大 中 小]
Google 即将要有个新的「人力雇用」用途的网站推出,它就叫做 Google Hire(怎么不叫 GooJob)。这个已经开放首页但仍不可登入的入口网站,根据官方向我们 Engadget 所提供的说法,这是个希望帮助 G Suite 用户更有效率管理人力雇用事宜的开发中产品。而尽管部分网站猜测 Google Hire 可能会有类似 LinkedIn 的求职社交功能,甚至有隐私方面的疑虑。不过这点根据官方在信件中给予我们的回覆,这个网站将只被用于接受求职申请,并不会将相关私人信息乃至于 Google 中的使用者信息予以分享,所以现阶段理应是不太需要担心会有这方面的状况。
其实不仅 Google,就连 Facebook 近几个月也已经开始提供求职相关的功能了,由此可见各家似乎都有点想利用自己在相关领域上的优势,来挑战 LinkedIn 所开启的求职市场应用。但到底能有多少效果或者是多高的使用率,显然就还有待未来正式上线才能见真章了。
经由: Engadget, Daily Mail, Android Authority
来源: Axios
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-04/142895.htm
2017年会是Serverless爆发之年吗?
YouTube 放宽移动设备直播资格,1000 以上订阅数即可使用
相关资讯
LinkedIn Google Hire
LinkedIn 开源 Kafka Cruise (今 10:57)
俄罗斯开始屏蔽LinkedIn (11/17/2016 21:49:58)
LinkedIn开源软件项目数量已经超过 (08/08/2016 08:32:18)
搜索巨人开发招聘网站 Google Hire (04月17日)
LinkedIn Test Butler旨在改进 (08/31/2016 08:42:46)
LinkedIn的工程师详述了生产环境下 (06/22/2016 09:13:45)
本文评论
查看全部评论 (0)
表情:
姓名:
匿名
字数
同意评论声明
评论声明
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款
最新资讯
LinkedIn 开源 Kafka Cruise Control
新勒索软件“Defray”可通过Microsoft Word
排序算法之冒泡排序详解
C++多态分析
Ubuntu 16.04 安装搭建Red5流媒体服务器
Ubuntu 16.04下交叉编译ImageMagick
关于开源软件,你所不知道的那些事情
Go 1.9引入了类型别名并提升了运行时和工具
GitHub正在寻找新的CEO
发达国家与发展中国家编程语言技术的分布差