rust 大抵是病了,它担心大家太容易掌握了

37 天前
 5261

举个例子

闭包

fn  add_one_v1   (x: u32) -> u32 { x + 1 }
let add_one_v2 = |x: u32| -> u32 { x + 1 };
let add_one_v3 = |x|             { x + 1 };
let add_one_v4 = |x|               x + 1  ;

初看确实好理解,也能掌握,就算再加上

immutable 、mutable 、move 也能理解

但是再 加上边界 、FnOnce 、Fnmut 这些就给我整不会了,干懵逼了

impl<T> Option<T> {
    pub fn unwrap_or_else<F>(self, f: F) -> T
    where
        F: FnOnce() -> T
    {
        match self {
            Some(x) => x,
            None => f(),
        }
    }
}

我只想说 rust 是所有语言中把符号运用到极致的语言!

继续苟着看下去!

7945 次点击
所在节点    Rust
74 条回复
PTLin
37 天前
Fn 系列 trait 初学者难以掌握,大概就是因为不知道 Fn 系列闭包编译器的具体展开形式才不理解一些报错。
InkStone
37 天前
除了涉及所有权语义的东西以外,都是其他语言有的东西吧。闭包和闭包类型、可省略类型和括号、泛型和泛型约束。

要说符号运用到极致还是去看 Scala 吧,Rust 比 Scala 简单多了。
FreeWong
37 天前
真的需要一个内存安全的语言,但是觉得不应该是 rust
5261
37 天前
@InkStone Scala 之前没深入学习过、不太清楚! 我自己是 Java 开发、Rust 作为第二语言学习!看第一遍的时候真是让我头皮发麻,现在回个头看第二遍的时候压力稍微小些,可能没有实际编码的原因或者用的少原因,感觉 Rust 的符号编程真是比 Java 复杂多了
w568w
37 天前
Rust 的语法特性属于两头卡,工业界的人一看到 Trait 、Bound 、Variance 这些头都大了:啥啥啥,这都写的啥;学术界的人还觉得 Rust 得多练练,一个 Higher rank trait bounds for closure 到现在都没写出来: https://github.com/rust-lang/rust/issues/97362

@FreeWong 「内存安全」的语言,从 Java 开始基本就都是了。
chenxuuu
37 天前
对于被 c/cpp 语言摧残过的人来说很好理解这些设计的原因,对于每天用带 GC 语言的程序员来说就不太好理解了
我学的比较杂,感觉还好,因为 rust 语法真的不算是最奇葩的
InkStone
37 天前
@5261 其实可能是因为 Java 太简单了。Java 应该是常用语言里最简单的一个,其它常用语言都比 Java 复杂。
jellen
37 天前
所以我选了 swift
i979491586
37 天前
@jellen Swift 也得了这病,越来月复杂。
chenjau
37 天前
感觉这种破玩意的读者应该是机器, 而不是人类
565656
37 天前
windows 现在有些组件已经慢慢用 rust 在重构了,linux 哪边听说 c 和 rust 还打得不可开交
Leviathann
37 天前
Fn FnOnce FnMut 是就是考虑参数 ownership 下的闭包
type bound 不就是 T extends 吗
kotlin 一样也可以写 fun <T> test(a: T) where T : Number
5261
37 天前
@chenxuuu 可能我大部分时间都在用 Java 开发、其他语言用的少! Python 以前还学过、用过,Go 也了解过没实战经验、这几年才开始陆续接触一些其他语言!

大部分时候都是因为没有实际编码经验或者工作环境的原因导致很多新学的语言都这么荒废了!也怪自己没有坚持!
cmdOptionKana
37 天前
rust 是用来取代 c/cpp 的。

在语言层面,C 是最简单的,那为什么还要发明 cpp 和 rust ?因为语言简单,需求却不简单,用最简单的语言去实现最复杂的需求,能把人搞疯,因此才需要极度复杂的 cpp 。

简而言之,如果你嫌弃 rust 复杂,那去使用 cpp ,也半斤八两,还是复杂到爆。

但大多数情况,用 rust 是杀鸡用屠龙刀,你说屠龙刀不好用,废话,用来杀鸡当然不好用。
5261
37 天前
@Leviathann
嗯 Fn FnOnce FnMut 看完后感觉就像 参数类型是闭包

type bound 是很好理解的!

学 Rust 语法的时候 ,我都是对照着 Java ,看它和 Java 哪种类似,这样学起来没那么累
wupeaking
37 天前
emm 是有点复杂, 而且很多教程也没讲得明白, 我都是把闭包当场被编译器自动构建的的结构体,至于里面对上下文变量是拥有,还是借用就根据实际情况分析。这样去理解 Fn,FnOnce,Fnmut 的话,反正能解释的通。

个人觉得这个语言挺难火起来的,我反正是学了 2 遍才入门,学到第 3 遍的时候才能自己独立用自己的想法实现链表,树这些常见的数据结构。
securityCoding
37 天前
@InkStone #2 scala 可没有那么多花里胡哨的符号
securityCoding
37 天前
日常项目需要维护 python,java,scala,c++,go 项目 ,最爽的就是 go 能让我心情愉悦那种
openmynet
37 天前
@5261 你对照着 java 来看,自然会觉得复杂,如果你一开始是写 js 的,而且还是 es5 的版本,在还没有没有 ts 来写一些复杂的 js 应用时,会发现 rs 的类型系统的和生命周期机制是真香。不用担心未知的内存泄露把浏览器卡到爆炸,不用担心某些变量的值莫名其妙的被修改了,甚至在调用某些插件时,明明已经进行释放操作了,内存占用还是没降下来。
从我的角度上看,rs 是比 ts 进化的更彻底的 js 。另外 js 和 rs 是同一个作者,所有在 rs 身上有一部分 js 的身影。
virusdefender
37 天前
我年初开始写,写了一年 rust 了,我的看法是:只看教程确实很复杂,但是如果你有一个实际的项目上手去写,很快就会理解为何要这样了,写一些常见的工程的话,很多复杂的概念和语法很少用到,暂时不懂也没问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/1100616

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX