首页 > 其他 > 详细

rust

时间:2020-08-19 15:21:31      阅读:67      评论:0      收藏:0      [点我收藏+]

五种我认为值得掌握的现代编程语言:

  • C: Unix/Linux/基础库 等一大波老牌开源基础库和平台开发
  • JavaScript:浏览器/NodeJS后端/各种App内的Web开发,代表的是Web平台
  • Python:代表的是一大堆AI工具支持的脚本环境
  • Go:代表的是一部分的后端开发
  • Rust:代表的是替代了C++的大规模底层开发,Rust的开发能力覆盖了C++,但是又没有C++那一堆问题,拥有新的表达力和生命周期控制,并且它对Web平台是对接的。

我刻意剔除了三种语言:

  • Java
  • C++
  • C#

你认同么?我认同,并且我认为学校教了C语言之后,应该直接教Rust,而不要教C++了。学校教Java和C#也不能培养出优秀的有计算机学科特质的程序员,我们没办法面面俱到,只求有独到之处。

Rust 开发环境配置

  • 安装:TODO

Rust的生命周期管理

Linuar Type: https://en.wikipedia.org/wiki/Substructural_type_system

Linear types corresponds to linear logic and ensures that objects are used exactly once, allowing the system to safely deallocate an object after its use.

Rust 里的OO编程

To many people, polymorphism is synonymous with inheritance. But it’s actually a more general concept that refers to code that can work with data of multiple types. For inheritance, those types are generally subclasses.
Rust instead uses generics to abstract over different possible types and trait bounds to impose constraints on what those types must provide. This is sometimes called bounded parametric polymorphism.

其中,传统OO里多态是运行时多态,常规的实现是通过继承来达成的:Inheritance as a Type System and as Code Sharing ,但是继承共享代码一般会导致两种问题:

  • 父类不匹配子类的行为
  • 子类不匹配父类的行为
  • 共享了过多的数据和行为,导致了紧耦合

从C++的模版编程+Concept概念开始,泛型+萃取这种编译期,通过两种不同的抽象维度来实现多态,叫做:bounded parametric polymorphism.

  • 泛型( generic ):抽象不同类型
  • 萃取 ( trait ): 约束了泛型应该提供的能力

Rust在OO编程上的选择,采用的正是完备的编译期OO+多态设计:

  • 通过struct抽象数据,语法是 struct Data{}
  • 通过为struct 提供实现抽象行为,语法是impl Data{ fn method(){} }
  • 通过是否公开数据和行为来控制封装细节:
    • pub struct Data{ pub no: u32}
    • impl Data{ pub fn new()->Data{Data{no:0}}
  • 通过泛型抽象不同类型:fn test<T>(t:T){}
  • 通过trait抽象类型必须拥有的能力:
    * trait Echo{ fn echo();}
    * impl Echo for Data{ fn echo(){}}
    * fn test<T>(t:T) where T:Echo {}

// TODO: 拷贝行为

Rust 容器和函数式编程

Rust 的类型设计

Rust 模式匹配

Rust 错误处理

Rust 多线程编程

  • 引用计数

Rust 异步编程

https://book.async.rs/introduction.html

在当前Executor里发起一个异步任务

use std::task;
task::spawn(async move {

});

在一个线程里发起异步任务

use std::thread;
thread::spawn(move ||{
  task::block_on(async { {

  });
})

Rust 日志组件

Rust 应用开发

Rust 工具链

参考资料

[1] 给Java/C#/C++程序员的Rust介绍,这种教程风格是我最喜欢的,通过Diff,Step By Step引入概念设计上的不同:https://fasterthanli.me/articles/i-am-a-java-csharp-c-or-cplusplus-dev-time-to-do-some-rust
[2] 作者学习Rust遇到的一个个怪(阻挠,Frustrat),但是作者一步步打怪升级,把概念吃的很透彻:https://fasterthanli.me/articles/frustrated-its-not-you-its-rust

rust

原文:https://www.cnblogs.com/math/p/rust.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!