可点击的符号BK本页官方RFC文档「此页面上的Internet official官方RFC文件」
其他符号🗑️很大程度上已弃用' 18最低版本要求🚧需要留下生锈(或不完整)🛑故意错误的示例或陷阱🝖略微深度,很少使用或高级🔥有卓越的效用?缺少好的链接或解释💬自以为是
Fira Code Ligatures(.. =,=>)夜间模式💡如果您是新生锈,或者如果您想尝试以下内容:
您好世界优势编制了与C / C ++的性能相同,以及出色的内存和能效。
可以避免在C / C ++中存在的所有安全问题的70%,以及大多数内存问题。
现代化工具:货物(建造正常工作),Clippy(300+代码质量棉绒),生锈(简易工具箱MGMT)。
缺点无正式语言规范,可以防止某些域名(航空,医疗,......)的合法用途。
安装第一步意见💬 - 如果您从未见过或使用任何生锈,请在继续之前访问上述一个链接可能很好; 下一章可能会感到别的话。 定义枚举的变体; 可以是单元 - a,tuple-b()和struct-like c {}。 将y移动到X,如果t未复制,则为y,std和复制y。 1绑定变量BK EX REF在堆栈上实现同步代码。 在Async {}代码中,它们成为Async' s状态机,可能驻留在堆上。 2技术上可变的和不可变的是错误的。 不变的结合或共享参考可以仍包含细胞STD,提供内部变形性。 创建结构{}或使用' ed enum e :: s {}与字段x设置为y。 创建结构s(t)或使用' ed enum e :: s()使用字段.0设置为x。 数组类型的未指定长度,即切片。 ex std ref can' t live in stack。 *
如果x不是类型的一部分,则指ef的命名现场访问权限可能会尝试DEREF 共享借用BK EX STD(例如,此问题的地址,LEN,VTABLE,...为0x1234)。 Won' t工作🛑如果* r不是副本,那么将移动和留空的地方。 特殊情况🔗用于框,也可以搬出框'如果它是n' t副本。 T是Supertrait Ref R的子系统。在它可以拆除之前,任何S必须拆除R. 仅在异步内部工作。 产量流动直到未来的STD或Stream X准备就绪。 ref' 18 与x.f()相同。 除非ich copy for x {},否则只能调用一次。
与x.f()相同,如果x imagr t,i.e.,x.f()找到t如果范围内的方法。 宣布依赖外部箱子BK Ref🗑️; 只需使用:: b in' 18。 匹配表达式的模式匹配武器。 这些武器的左侧也可以在让表达中找到。 相同,但是w。 一生。 如果T有寿命,则必须履行R,必须持续' a。 相同的; 是esp。 不是意思t将🛑live'静态,只有它可以。 X的特征泛型可以有多个IMLACT t for s(每个x)。 在特质t {}中,只有在已知的类型上可访问f iclack r.
1支持框中的多行。只要牢记调试↓(例如,dbg!(x)和println!(" {:?}" x)可能会将它们呈现为\ n,而显示↓(例如,println!( " {}" x))渲染它们。
RUST支持大多数运算符(+,*,%,=,==,...),包括重载。 STD由于它们在Rust中行为不同,我们不会在这里列出它们。
不是运行时,也没有任何运行时开销,但是是一个计算模型抽象,
*人们可能错误地假设他们应该直接生锈的CPU,更正确的对应物。
在假设您的CPU将在编写B时,您需要通过文档(!)需要积极证明,
违反奴役机'合同,优化器使您的CPU完全做出了其他 - 未定义的行为。 ↓
如果有什么工作和#34;应该在现在考虑它'你想到它,它可能是由于其中一个。
意见💬 - 上面的功能将使您的生活更轻松,但可能会妨碍您的理解。如果任何(类型相关的)操作感到不一致,可能值得重新审视此列表。
U8 U16 F32 BOOL CHAR原始类型文件字符串构建器复合类型VEC< t> vec< t> vec< t> '一个t&'一个t'一个t& mut'一个t& mut'一个t& mut' a t [t; n] [t; n] [t; n]型构造函数Vec< t> vec< t> f< t>(){} drop(){}函数pi dbg!其他⌾复制⌾deref型TGT; ⌾从< t> ⌾从< t> ⌾从< t>在上游箱中定义的特征物品。 ⌾序列化⌾运输⌾展示装置⌾从< u8>外国特质。对于本地类型。字符串⌾序列化本地特质。外国类型。字符串⌾从< u8> 🛑非法,外国特质f。类型。字符串⌾从< port>例外:合法如果使用的类型。端口⌾从< u8> ⌾来自< u16> multi。拆开。参数不同的特质。容器⌾deref tgt = u8; ⌾DEREF TGT = F32; 🛑非法ich。具有不同参数的特质。 T T⌾展示毯子锯片。任何类型的特质。你的箱子。漫步在您的应用程序中的类型,特征和实现的丛林中散步。
类型&特征U8字符串设备U8& U8& mut U8 [U8; 1]字符串是,0!= 0(在数学意义上)涉及类型!在语言中,操作==(0 U8,0 U16)只是' T定义为防止快乐的小事。
1铸造和胁迫从一个集合(例如,U8)转换为另一个(例如,U8)的值(例如,U16),可能添加CPU指令;与亚型不同,这意味着暗示类型,并且子类型是相同集合的一部分(例如,U8为U16的子类型和0_U8与0_U16相同),其中这样的转换将纯粹是编译时间检查。 Forr不使用亚型常规类型(0_U8确实不同于0_U16),而是用于生命周期的排序。 🔗
2安全性不仅仅是物理概念(例如,&& u8' t被赋予& u128),也是'历史表明这种转换会导致编程错误'
u8 iclich {...} string iclim {...} port iclich {...}被认为是什么' s认为相关的是更哲学,而不是技术,没有(良好的品味)会阻止一个U8 :: play_sound()来自发生。
⌾复制⌾克隆⌾大小⌾展示特征展示{//必须根据文件实施。 fn as_hex() - >细绳; //由特质作家提供。 fn print_hex(){}}
⌾复制⌾大小U8 isclant {...}⌾尺寸⌾克隆⌾拷贝设备iclact {...}⌾运输口iclich {...}大小⌾克隆⌾展示👩🦰⌾ey🧔静脉🧔⌾⌾⌾静脉.Att()👩🦰⌾吃🧔静脉👩🦰/🧔静脉+⌾eat🎅venison.eat()鲍勃创造鹿肉和决定不落户(他可能甚至不知道吃)。
//圣诞老人需要进口`鹿肉(鹿肉)以创建它,进口`为特质方法。使用食物::鹿肉;使用任务::吃; // Ho Ho Hovenison :: New(" rudolph&#34 ;)。吃();
*为了防止两个人实施吃不同的锈症限制,即艾丽斯或鲍勃的选择;也就是说,鹿肉的紫离食可能只是在鹿肉的箱子或吃的箱子里发生。有关详细信息,请参阅连贯性。 ?
Generics Vec< u8> vec< char> vec< u8>是类型"字节矢量&#34 ;; vec< char>是类型"字符&#34的矢量,但是什么是vec&lt ;?
VEC<> vec< t> [t; 128]& t& mut t s< t> T"类型&#34的变量名;用户插入某些定义的东西,Vec< f32>,s< ......
// s<>是具有参数t的型构造函数;用户可以为T.Struct S< t&gt提供任何混凝土类型。 {x:t} //内部'混凝土'代码必须为t.fn f()给出现有类型{设x:s< f32> = s :: new(0_f32);}
[t; n] s< const n>让X:[U8; 4]; //#34; 4字节数组"让Y:[F32; 16] //#34; 16个浮点数的数组" //`MyArray`是需要混凝土类型`T`和//混凝土的类型构造函数使用`n`构建特定类型。标记MyArray< t,const n:mult n:myize> {数据:[t; n],}
🧔num< t> →🎅num< u8> num< f32> num< cmplx> U8⌾绝对⌾暗⌾mul端口⌾克隆⌾showhex如果t可以是任何类型,我们如何推理(写入代码)的原因,用于这种num< t&gt ;?
//类型只能为某些`T`构建// t,如果// t是`absolute`成员列表列表的一部分。结构num< t>其中t:绝对{...}
我们在这里添加绑定到结构。在实践中,它' s更好地添加了相应的iclocts的绑定,请参阅稍后的本节。
U8⌾绝对⌾昏暗⌾mul f32⌾绝对⌾mul char cmplx⌾绝对⌾暗⌾mul⌾dirname⌾twod car⌾dirname在实践中,每个+ x除了绑定的符合条件类型的空间。
ichsl lt; t> s< t>其中t:绝对+ dim + mul {fn f(& self,x:t){...};}
你可以想到这样的iclip< t> ... {}代码作为抽象实施行为系列。最值得注意的是,它们允许3个RD派对透明地实现实现,与型构造函数的型号如何实现类型:
//如果编译器遇到这一点,它将// - 检查`0`和`x`符合`// - 创建两个新版本的`f`,一个用于`char`的成员要求U32` .// - 基于"家庭实施"提供.F(0_u32); s.f(' x');
//如果该类型已经实现了托出Jimpl< t&gt,则该类型也可以实现任何类型的序列化。序列化为t:tohex {...}
→左表中的任何内容,可以基于以下配方(iclip)→
如果刚刚实现另一个接口,它们可以以模块化方式为外国类型功能提供简洁的方式。
高级概念🝖端口⌾从< u8> ⌾来自< u16>端口⌾DEREF类型U8;结果,参数i(输入)和O(用于输出)只是该特征的更多列和#39; s列表:
ichl来自< u8>对于U16 {} iclilc< u16>对于u32 {} iched deref for port {类型o = u8; } islichederf for string {type o = str; }
使用3个输入(Self总是一个)和2个输出,它保持(Self,I1,I2)=> (o1,o2)
👩🦰⌾A< i> 🧔汽车👩🦰/🧔轿车⌾a< i> 🎅汽车.A(0_U8)CAR.A(0_F32)👩🦰⌾B型o; 🧔汽车👩🦰/🧔轿车⌾b t = u8; 🎅car.b(0_u8)CAR.B(0_F32)特征A< i> {}特征b {o o; } //实现者将(x,u32)添加到a.impl a< u32>对于x {} //实现者添加了家庭iclip。 (x,...)到a,用户可以materialze.impl< t>一个< t>对于Y {} //实现者必须决定添加到B.impl B的特定条目(x,o)for x {type o = u32; }
⌾音频→⌾音频< i> ⌾音频型; ⌾音频< i> o;特质音频{Fn Play(& self,卷:f32);}} illicon for mp3 {...} iclich音频for ogg {...} mp3.play(0_f32);
👩🦰⌾音频→🧔mp3⌾音频ogg⌾音频特征音频< i> {Fn Play(& self,卷:i);} islich音频< f32>用于MP3 {...} iclanc音频< u8>用于MP3 {...} iclanc音频<混音器>对于mp3 {...} impl< t>音频< t>对于ogg其中t:headsetControl {...} mp3play(0_f32); mp3.play(混音器);
👩🦰👩🦰音频< i> →🧔mp3⌾音频< f32> ⌾音频< u8> ⌾音频<混合> OGG⌾音频< t> ......其中t是headsetctrl。特质音频{o型; fn play(& self,struct:self :: o);} ill iclic audio for mp3 {type o = f32; } islich音频for ogg {type o = mixer; mp3.play(0_f32); ogg.play(混音器);
👩🦰👩🦰音频o; →🧔mp3⌾音频o = f32; OGG⌾音频o =混音器;用户不需要,或者不应该有能力影响特定自我的定制。
如您所见,术语输入或输出不(必然)与I或O是否已输入或输出到实际功能有关!
特质音频< i> {o o; FN Play(&自我,卷:i) - >自我:: o;}} islich音频< u8>对于mp3 {o = digitaldevice; } iclich音频< f32>对于mp3 {o = smalicDevice; } isc< t>音频< t>对于ogg {o o = genericdevice; mp3.play(0_u8).flip_bits(); mp3.play(0_f32).rewind_tape();
👩🦰👩🦰音频< i> o; →🧔mp3⌾音频< u8> o = DD; ⌾音频< f32> o =广告; OGG⌾音频< t> o = gd; s< t> →S< u8> s< char> S< str>但是,存在不可见的默认绑定T:Size,所以S s< t> →S< u8> s< char> S< str> s< 39; a> ''' mut u8寿命act * lise类型参数:意思是你可以' t只分配s< a> a> a>可变期望S< B≫ (例外:"亚型"寿命的关系,例如,'' b)。 s< 39; a> →s<> auto> s<'静态> //`' a是免费参数这里(用户可以通过任何特定的生命周期)struct s s str;' a> {x:''一个u32} //在非通用代码中,'静态是我们可以在这里明确放入的唯一可行的寿命。A:s< 39;静态&gt ;; / /或者,在非通用代码中,我们可以(通常必须)省略' a并具有rust确定//右值' a自动。b:s; *有微妙的差异,例如,您可以创建一个类型U32的显式实例0,但除了&#39之外;静态您可以' t真正创建了一生,例如"第80行 - 100",编译器会为您做到这一点。 🔗 自我和todo的注意事项:多样性似乎有缺陷,好像是s< a>是s<'静态和gt;像s< t>是s< u32>然后'静态是一种类型;但那么什么'是那种类型的价值? 与平台上的Ptr相同。无符号类型符号类型浮动类型🝖s e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f *浮点类型遵循IEEE 754-2008依赖于平台的平台。 任何UTF-8标量。 ...... U T F - 8 ...未指定的时间很少只能看到,但是作为& str而不是。基础使用但并非总是如此。给定表情符号是两个字符(参见编码),可以举办C. 1 1有趣的事实,由于零宽的大家(⨝)用户认为是角色的东西可以获得更加不可预测的东西:👨👩👧实际上是5个字符👨⨝👩⨝👧,渲染引擎是自由的根据他们的能力,将它们融合为一个,或分别为三个。它可以持有任意文本,每个C具有可变长度,并且很难索引。 Encoding🝖4900 00 00 00 00 00 00 00 6 27 27 27 00 00 20 00 00 00 00 00 52 00 00 00 75 00 00 00 73 00 73 00 73 00 49 00 00 00 00 20 00 00 00 00 00 6 27 00 00 0F FE 01 00 20 00 00 00 00 00 00 00 00 52 00 00 00 75 00 ... 1结果然后收集到数组并传输到字节。 2在十六进制中给出的值,x86。 3注意具有Unicode Code Point(U + 2764)的△❤在CHAR内表示为64 27 00 00,但是在STR中被编码为E2 9D A4的UTF-8。 4还观察到emoji红色心脏❤️,是❤和u + fe0f变化选择器的组合,因此t的炭数量较高。 💬对于似乎是浏览器错误的漏洞和边缘在脚注3和4中渲染心脏,尽管能够在S和T中正确地区分它们。 基本类型用户可定义。实际的布局裁判受代表性;参考填充可以存在。 T尺寸↓T也许DST↓t t ... n次固定n个元素阵列。 ... t t t ...未指定的时间切片类型的未知 - 许多元素。既不大小(也没有携带LEN信息),并且大多数往往都像&amp一样生活在参考背后; [t]。 ↓零大小↓Ab c或b a c a c,除非强制表示表示(例如,通过#[Repre(C)]),键入未指定的布局。 B C或COUL C↦B编译器也可以添加填充。另请注意,具有完全相同字段的两个类型A(x,y)和b(x,y)仍然可以具有不同的布局;从不传输()没有表示保证。 标签A独占或标签B异或标签C安全保留A或B或C,也称为'标记的Union',但是编译器可以省略标记。不安全或B不安全或C可以不合适的重新解释存储器。结果可能是未定义的。参考文献提供对其他内存的安全访问,原始指针不安全访问。相应的差异类型是相同的。 PTR 2/4/8 META 2/4/8 | T必须针对T的一些有效T,并且任何此类目标必须至少存在至少' a。 PTR 2/4/8 Meta 2/4/8没有保证。许多引用和指针类型可以携带额外的字段,指针元数据。 stdit可以是目标的元素或字节长度,或指向vtable的指针。与meta的指针称为脂肪,否则薄。 PTR 2/4/8 | T NO META为大小的目标。 (指针很薄)。 PTR 2/4/8 LEN 2/4/8 | T如果T是DST结构,例如S {x:[U8]}元字段LEN是DYN的长度。大小的内容。 PTR 2/4/8 LEN 2/4/8 | ... t ...常规切片参考(即切片类型的参考类型[t])↑经常被视为& [t] if'一个特别的。 PTR 2/4/8 LEN 2/4/8 | ...... u t f-8 ...字符串切片参考(即字符串类型str的引用类型),Meta Len为字节长度。 PTR 2/4/8 PTR 2/4/8 | T | Meta指向VTable,其中* Drop :: Drop(),*特征:: f(),...是指向他们各自的iclip for T. ad-hoc函数的指针,其中包含自动托管的数据块捕获闭包的refentevironment。 。例如: Y Z匿名闭合型C1 PTR 2/4/8 PTR 2/4/8匿名闭合型C2 | y | Z也产生匿名FN,例如F C1(C1,X)或F C2(& C2,X)。细节取决于基于捕获类型的属性支持FNONCE,FNMUT,FN ...。 Rust' s标准库将上述原始类型与特殊语义中的有用类型相结合,例如: T魔术类型允许锯齿化变形性。 T允许T' s移进。 ......