Rust新增存在类型支持

语言 Rust

摘要

Rust 1.26版本增加“存在类型(existential type)”支持、改进后的match绑定、切片模式及一些实用的语法糖。Rust编译器也变得更快了,并且支持128位整数了。

正文

Rust 1.26版本增加“存在类型(existential type)”支持、改进后的match绑定、切片模式及一些实用的语法糖。Rust编译器也变得更快了,并且支持128位整数了。

存在类型是通过impl Trait实现的。这使得开发人员可以指定函数的返回类型,而不必指出具体是哪一种类型。例如:fn foo() -> impl Trait {

// ...

}

在上述代码中,foo被声明为一个函数,它的返回类型实现了“特型(trait)”Trait,而不是具体的类型。这和下面的声明有些类似:fn foo() -> Box {

// ...

}

不过,使用Box意味着动态分配,我们并非总是希望或需要这样,而impl Trait确保了静态分配。这种方法使foo仅能返回同样的类型。此外,impl Trait语法的胶水代码更少,如下例所示:trait Trait {

fn method(&self);

}

impl Trait for i32 {

// 在这里实现

}

impl Trait for f32 {

// 在这里实现

}

fn new_foo() -> impl Trait {

5 // 我们可以仅返回一个i32类型的值

}

fn old_foo() -> Box {

Box::new(5) as Box // 这很繁琐

}

在定义返回闭包的函数时,新的impl Trait语法就格外亮眼了,它实现了特型Fn:fn foo() -> impl Fn(i32) -> i32 {

|x| x + 1

}

impl Trait语法还可以用于替代泛型类型的声明,如下例所示,虽然在这种情况下,它定义了一个通用类型,而不是存在类型:// 之前

fn foo(x: T) {

// 之后

fn foo(x: impl Trait) {

不管是对有经验的程序员而言,还是对Rust编程新手而言,另外一项改进都减轻了他们的工作,那就是更为智能的match绑定,它所需要的对编译器内部构件的了解少了。例如,下面的代码现在合法了:fn hello(arg: &Option) {

match arg {

Some(name) => println!("Hello {}!", name),

None => println!("I don't know who you are."),

}

}

在Rust之前的版本中,你应该需要添加一些样板文件来满足编译器的需要,即使你的匹配意图很明确:match arg {

&Some(ref name) => println!("Hello {}!", name),

&None => println!("I don't know who you are."),

}

}

谈到匹配,Rust 1.26还支持数组切片匹配,如下例所示:fn foo(s: &[u8]) {

match s {

[1, x] => "Starts with one and has 2 elements",

[a, b, c] => "Has three elements",

_ => "Everything else",

}

}

Rust 1.26还提供了两个相对较小的特性,一个是从main返回Result,一个是定义闭区间,如1..=3。

要了解Rust 1.26的所有新增特性,请查阅官方发布说明。

rust超低配置补丁_Rust新增存在类型支持相关推荐

  1. rust超低配置补丁_腐蚀rust游戏必备运行库下载_rust腐蚀启动插件下载-游迅网

    不知道怎么下载?点我 游戏介绍 <腐蚀>这款游戏有些玩家首次下载安装的时候,可能无法启动,那是因为电脑上缺少<腐蚀>游戏必备运行库,插件只有一个,玩家很快就能够下载安装吧,然后 ...

  2. 超低配置机器无盘网吧的安装方法(转)

    差机器多了使人头疼,卖了不值钱!怎么办呢!现在我有一种方法使淘汰的机器用于网吧!给一般的顾客上网使用还可以!还能赚点钱!好了言归正传! 1:服务器:当然高配置的机器最好了!双CPUP2.4,内存2GB ...

  3. gta4光影补丁_GTA4低配置优化版ENB光影补丁

    GTA4低配置版高清真实效果ENB光影补丁 V0.0815☆★ [低中端机器使用] [测试配置] AMD双核5000+ 2GB内存 256MB显卡 无抗锯齿,1280X960分辨率,模型中,水面高,其 ...

  4. 无盘系统的服务器配置高不高,为何网吧电脑配置“超低”,使用却很流畅?网吧老板说出2个原因...

    原标题:为何网吧电脑配置"超低",使用却很流畅?网吧老板说出2个原因 为何网吧电脑配置"超低",使用却很流畅?网吧老板说出2个原因 如今的网吧比起刚刚盛行那会已 ...

  5. Ubuntu16.04超低配版显卡GTX730配置pytorch-gpu+cuda9.0+cudnn

    一.前言 今天闲来无事配置了一下超低配显卡GTX730,我想都是显卡说不定也能用cuda+cudnn呢,结果上nvidia官网一查,果不其然,有我大GTX730^_^,那我的730也能用cuda 了. ...

  6. 爆改YOLOV7的detect.py制作成API接口供其他python程序调用(超低延时)

    一.前言 YOLO系列框架凭借其超高的运行流畅度和不俗的准确率,一直被广泛地应用到各个领域. 刚刚推出不久的YOLOV7在5 FPS到160 FPS范围内的速度和精度达到了新的高度,并在GPU V10 ...

  7. AI周报丨《2021年人工智能专利综合指数报告》近日发布;北大团队提出基于卷积神经网络的全光计算,超快、超低能耗

    行业动态 <2021年人工智能专利综合指数报告> 近日发布 人工智能(Artificial Intelligence,简称AI),是研究人类智能活动规律,构造具有一定智能的人工系统,国际数 ...

  8. 电脑能连蓝牙耳机吗_安卓手机延迟最低的蓝牙耳机有吗?超低延迟蓝牙耳机推荐...

    原标题:安卓手机延迟最低的蓝牙耳机有吗?超低延迟蓝牙耳机推荐 安卓手机延迟最低的蓝牙耳机有吗?超低延迟蓝牙耳机推荐 对于游戏玩家而言,游戏配乐和游戏声音是非常重要的,在游戏过程中是不希望受到外界干扰的 ...

  9. 《超低延时直播白皮书》已发布,推动直播延时降低90%以上

    点击上方"LiveVideoStack"关注我们 直播行业的蓬勃发展,推动直播技术快速演进,超低延时直播技术也应运而生. 2月22日,腾讯云携手信通院联合发布<超低延时直播白 ...

最新文章

  1. 用户界面设计十大基本原则
  2. java循环基础知识_java基础知识—循环结构
  3. freecodecamp_1000天的freeCodeCamp
  4. 机器学习之线性回归(matlab)
  5. 今天的中巴等各式车子的企业即时通讯
  6. Java中注解与反射的使用方法及场景,强行解释一波!
  7. 【Windows Phone设计与用户体验】关于移动产品的Loading用户体验的思考
  8. Oracle和MySQL语法区别
  9. 印象笔记支持Markdown语法
  10. 软件体系结构——设计模式
  11. 燃烧的远征恢复英文语音的方法
  12. 为了旅游和梁定郊大吵一次,此行贿赠喜爱的朋友!!!
  13. QP/区块链服务器被攻击了怎么办?
  14. Hadoop集群配置及运行
  15. 如何用html布天猫页面,天猫前端系列教材 (四十七)- 其他页面 - 登录页面
  16. 《A fast and elitist multiobjective genetic algorithm: NSGA-II》阅读笔记
  17. **Multisim中如何测量时序**急!急!急!急!急!
  18. 大学计算机基础与应用第四章答案,大学计算机基础试题及答案第四章
  19. 《无线网络:理解和应对互联网环境下网络互连所带来的挑战》——3.2 ZigBee...
  20. 使用Java统计某个目录下各种类型文件的数量

热门文章

  1. PDF如何在线转换成PPT呢?
  2. 基于FPGA的HDB3编译码verilog实现,结合MATLAB进行辅助验证
  3. 百分点大数据技术团队:可插拔OSS架构设计和实战经验
  4. docker -v :rw :ro
  5. 国庆七连测(一)BREAD
  6. loadruner分析时各种图的认识
  7. 无法在设置线程模式后对其加以更改
  8. 【漏洞通告】Gitlab存在多个高危漏洞
  9. 回忆数学老前辈孙元远先生
  10. google离线地图实例,加载本地地图瓦片, 支持点线面及图文标注,坐标定位,卫星、电子地图切换