484|7

2813

帖子

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

回复
举报

7130

帖子

18

TA的资源

五彩晶圆(中级)

谢谢分享,期待后续!

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

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


回复

6647

帖子

9

TA的资源

版主

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

回复

674

帖子

1

TA的资源

纯净的硅(高级)

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

此帖出自编程基础论坛

点评

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

回复

2813

帖子

4

TA的资源

五彩晶圆(中级)

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

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

此帖出自编程基础论坛

点评

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

回复

674

帖子

1

TA的资源

纯净的硅(高级)

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

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

此帖出自编程基础论坛

回复

3

帖子

0

TA的资源

一粒金砂(初级)

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

点评

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

回复

2813

帖子

4

TA的资源

五彩晶圆(中级)

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

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

此帖出自编程基础论坛

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

猜你喜欢
随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
傲飞电子AVRM16开发板调试

呵呵,很高兴能得到这块傲飞电子的AVRM16开发板。开发板大小很小,很精致呀。一拿到手就爱得不得了呀。因为元件问题我这里没有焊 ...

【TI原创】LM3S使用笔记之I2C总线(一)

STM32的IIC实在太难用了,一个很简单的东西,ST的人把它弄得很复杂,不得不说STM32的IIC很鸡肋。首先请大家不要吃惊,本文没有发 ...

[MSP430 学习笔记] 晶体振荡器的负载电容

最近有童靴在问如何确定MSP430的晶体负载电容,一般来讲,大家都是在用一些经验值,对其原理也不是特别清楚。 有兴趣的同学可以看 ...

我的MSP430作品

智能探测车制作 今年的省赛结束了,在几个月的备战中,自己取得了丰硕的成果,在这次竞赛中,新的MSP430无疑给了我更多的灵 ...

Altera SoC体验之旅+Enpirion Altera SoC电源系统

Altera SoC demo板上的电源系统,采用的Enpirion整套方案; 从19VDC转换到5V节点电压后,下面吧bulk电路都是采用的altera自己 ...

视频无线传输的实现方式

通过无线方式在显示端显示图像,从技术层面来说,目前有两种途径予以解决。   第一种方式为传送视频数据。它的工作方式是, ...

RFID天线接头分类

目前手头上用到的RFID天线接口主要分为两类:SMA内罗内针 和 IPEX接头 455955 455956

MDK里*.axf文件是干嘛的

490850请问高手,keil里这个*.axf文件有什么用?谢谢

CC2xxx的输出/输入阻抗值具体是多少?

本帖最后由 Jacktang 于 2020-10-4 15:55 编辑 对于单端输出/输入,我们可以视为 50 Ohm。对于双端差分端口,如 CC253x 和 CC ...

为BL808制作一个圣诞主题

今天是圣诞节,虽然咱不过洋人的节日,但至少在博流BL808上做一个圣诞主题是没有问题的。闲话少提,先找一张圣诞主题的图片,裁 ...

关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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