为什么Rust编程语言被认为对自闭症谱系人士特别友好?
摘要:在程序员圈子里,Rust常常以学习路线陡峭而闻名。就我自己的个人理解来说,之所以说它“学习路线陡峭”,很大程度上都来源于以下三点: Rust有很多语法糖,而且官方把这些语法糖给设置成了默认的最佳实现的语法,还写进了教程。最经典的就是for循
在程序员圈子里,Rust常常以学习路线陡峭而闻名。就我自己的个人理解来说,之所以说它“学习路线陡峭”,很大程度上都来源于以下三点:
Rust有很多语法糖,而且官方把这些语法糖给设置成了默认的最佳实现的语法,还写进了教程。最经典的就是for循环语句。Rust的for循环公式如下所示:
for 变量 in 变量{
结构体语句;
}
看着和别的编程语言没啥区别,对吧?但实际上,去掉官方的语法糖,for循环语句的完整代码是这样的——
for 变量 in 变量.into_iter(){
结构体语句;
}
.into_iter()其实是一个迭代器。在for循环语句这个例子中,你可以理解为将C/C++里面的手动for循环(for(i=1;i<=数字;i++))给自动化了。.into_iter()的其他使用场景的例子:
let nums = vec![1, 2, 3]; //创建了“一箱苹果”,赋值给nums
// 不需要管👇和👇是什么,想象成“给苹果换个箱子”就行了
let sum: i32 = nums.into_iter().map(|x| x + 1).sum();
// 👆连苹果带箱子都是我的了,拿来吧你!
println!("{:?}", nums);
// 👆报错!nums 已经被 .into_iter() move(移动)给 sum 了,箱子空了。
这个例子就引入了第二个学习路线陡峭的原因——
所有权和借用。
这大概是Rust初学者和Rust编译器搏斗的头等原因。就比如👆这个案例,如果你是学其他编程语言的,恐怕根本无法理解“为什么nums赋值给sum之后,nums就不可用了”。其实背后的原因很好理解,只是其他编程语言太宠开发者了。想象你有一支🖊,这支🖊在所有权上属于你,但是你把🖊借给了我,那么使用权就在我手里了。别的编程语言是先把🖊复制一份,再借给我,于是在程序员眼里,“先复制一份再借出去”就成了天经地义的事情。可是Rust为了内存安全,则把事情的真相赤裸裸地显示了出来。“显式展示”,确实也是Rust的设计哲学。在Rust中,就连变量的类型和长短都必须展示出来,哪怕程序员不写,rust-anylazer这个IDE插件也会自动推算出来。没有插件,编译器在做边界检查的时候也会做的。在C/C++中,整型就是整型;可是在Rust中,整型也分无符号的u8、u16、u32、u64和有符号的i8、i16、i32、i64。
第三个原因:
生命周期。
生命周期说白了就是作用域,它决定了一个变量能够存活到什么地方。它难就难在它是一个十分抽象的概念,它甚至不如代码那样可以显示在屏幕上被人眼看见,而且极易和上面的所有权和借用混淆。说实话,我到现在都没有完全理解生命周期这个概念。我只记住了两个关于生命周期的知识点:
带有'符号意味着这个变量可以活到程序结束;
{}内的变量出了这个范围就死。对应的,在这个范围内就一直活着。
既然Rust的学习路径如此陡峭,那为什么Rust依然是对自闭症谱系人士最友好的编程语言呢?在此之前,我们首先需要知道什么是自闭症,自闭症有哪些症状。在这里我找了一个科研领域的AI服务,搜索语料全是国内外的论文,输出结果保证权威。这是它给我的结果:
自闭症谱系障碍(Autism Spectrum Disorder, ASD)是一种起病于早期发育阶段的神经发育障碍,其症状主要体现在两大核心维度,并常伴有多种共病表现。
核心症状
一、社交沟通与社会交往障碍
这是ASD最具标志性的特征。
