738|7

2934

帖子

4

TA的资源

五彩晶圆(中级)

楼主
 

《rust实践》rust语言类型面面观 [复制链接]

rust语言新特的语法很难让人适应,在没有全面的了解rust语法的情况下甚至连一个实用的小程序都无法编写,例如:如果比较两个数值 0.1 和1的大小都会报出错误,就如唐长老取经一般“步步挨灾,处处受难”。为什么rust会设计这么严苛的语法规则呢,其实这些语言语法特性都是针对C,C++语言经常出现或疏忽的程序问题而设计的,rust的语法特点其实质就是用来在编译时跟踪变量的,目的是使用和减少动态内存的分配管理任务。使得在编译阶段就可以发现程序的问题,尤其是内存管理方面。所以在学习时重要的是去理解语法的限制规则,不要盲目地使用已往的编程语法思路。

rust的类型和其它的语法一样,也是分简单的变量类型/标量类型(称数据类型更合适)和复合数据类型、组合数据类型(数组类型、切片类型),通常简单类型为语言语法定义的内置类型,复合类型为“用户自定义类型”。rust的简单数据类型和其它语言一样,如:无符号整数、整数、浮点数等,但是rust中的类型在数值比较时非常的严格,不同数据类型是不可以做比较的,如果需要时需要做类型的转换地,只有相同“trait”的数据类型才可以使用符号编程。在引入其它语言的类型时需要使用:#![allow(unused_variables)]这样的宏来通知编译器放宽编译限制。

元组tuple,Rust 支持元组 tuple。一种有趣的数据类型,“元组”是一种可以使用索引访问变量的复合数据类型,如下程序:

fn main() {
   let tuple:(i32,f64,u8) = (-325,4.9,22);
   println!("{:?}",tuple);
}

复合的数据类型由三种简单类型复合,访问方法:

tuple.0  // -325
tuple.1  // 4.9
tuple.2  // 22

数组,这种类型是计算机中最常用的类型,但是确和其它语言不同,rust的语言的数组有三种类型,不可变的数据列表型、切片数据类型、可变数组类型VEC,rust的数组分的类型非常的细的原因就是为了在静态时跟踪变量的作用域,所以需要仔细地进行规划。

枚举,这个和C/C++语言差不多。只是提供了一些编程地便利,match等类型。

结构体,这是最为复杂的类型,实际的概念非常的多,但是rust的宗旨是能够静态编程解决的事情不会托到动态阶段(运行时),能够放到栈(stack)内存的不会放到堆(heap)内存,rust中没有象C++ new这样的操作对象操作,rust的new其实是一个普通的函数,而不是象C++当中的那样的关键字函数(构造函数),因为C++中会把对象Object的内存分配到堆heap上,这样导致C++的复杂内存管理,出现指针悬垂、空指针等问题。

还有就是rust没有类的概念和结构体,rust中的结构体只是用来作为关联函数的索引标记,虽然形式上看上如C++一样的调用规则,但是这个函数和结构体没有任何“关系”,是真正意义上的

shap.width,shap.height

没有关系,只是一个独立的函数,而不像C++一样的面向对象语言,方法/函数是属于对象的一个指针或索引。rust只是把结构体相关的函数搞的象C++语法一样的语法糖。

再有就是trait这一概念,trait也是依附于结构体的一种类似接口的概念,但是没有具体的实例化,而是一种依附于结构体struct的类型转换相关特性。这个有点抽象的意思,这种设计的目的是设计一种类似C++语法的“继承”一样的编程概念。另一种说法就是,rust当中用来不同结构体struct类型的转换规则,虽然不是很严格,也就是类似而已。

rust中的各种类型和严格的类型检查是rust的特色,也是rust能够写出安全软件的保证,所以学习时一定不要和其它语言概念关联,只要知道rust语法的目的就可以。

 

 

 

此帖出自编程基础论坛

最新回复

推荐一些rust入门教程  详情 回复 发表于 2024-4-30 09:08
点赞 关注
 

回复
举报

7608

帖子

18

TA的资源

五彩晶圆(高级)

沙发
 

谢谢分享,期待后续!

此帖出自编程基础论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

6969

帖子

11

TA的资源

版主

板凳
 
我这几天都没有时间学习呀,看着你们进步这么快,我跟不上了。
此帖出自编程基础论坛
 
 
 

回复

1375

帖子

1

TA的资源

五彩晶圆(初级)

4
 

主要是缺少简单明了的对比说明。尤其有其他编程语言的经验,无法被重复使用

此帖出自编程基础论坛

点评

就是不要使用先前的语法规则去理解rust,如果想深入理解也可以思考一下rust为什么这么做。结合第一章内容理解rust语法的目的,而不是找相似  详情 回复 发表于 2024-4-29 09:39
 
 
 

回复

2934

帖子

4

TA的资源

五彩晶圆(中级)

5
 
hellokitty_bean 发表于 2024-4-29 09:10 主要是缺少简单明了的对比说明。尤其有其他编程语言的经验,无法被重复使用

就是不要使用先前的语法规则去理解rust,如果想深入理解也可以思考一下rust为什么这么做。结合第一章内容理解rust语法的目的,而不是找相似

此帖出自编程基础论坛

点评

嗯嗯嗯,是的。也是这么想。。。。不自觉会带入旧有的经验,就会抓狂  详情 回复 发表于 2024-4-29 15:38
 
 
 

回复

1375

帖子

1

TA的资源

五彩晶圆(初级)

6
 
bigbat 发表于 2024-4-29 09:39 就是不要使用先前的语法规则去理解rust,如果想深入理解也可以思考一下rust为什么这么做。结合第一章内容 ...

嗯嗯嗯,是的。也是这么想。。。。不自觉会带入旧有的经验,就会抓狂

此帖出自编程基础论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

7
 
推荐一些rust入门教程
此帖出自编程基础论坛

点评

如果推荐就推荐现在活动的这本《rust实践》,这本书的优点是从实践出发来学习领悟rust的语法,这本书的缺点是需要有一定的编程经验。就我个人觉得象其它语言的那种方法学习rust是很难入门的,在读这本书之前我就学习  详情 回复 发表于 2024-4-30 09:24
 
 
 

回复

2934

帖子

4

TA的资源

五彩晶圆(中级)

8
 
龙恩01 发表于 2024-4-30 09:08 推荐一些rust入门教程

如果推荐就推荐现在活动的这本《rust实践》,这本书的优点是从实践出发来学习领悟rust的语法,这本书的缺点是需要有一定的编程经验。就我个人觉得象其它语言的那种方法学习rust是很难入门的,在读这本书之前我就学习过rust但是都不得要领,虽然我是从事过多年MFC编程的上古软工。

此帖出自编程基础论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表