Rust 它凭啥这么难?学习路线这么陡峭。。。。

2021-03-19 09:22:41 +08:00
 nickyang897897
21949 次点击
所在节点    Rust
102 条回复
fffang
2021-03-19 11:45:50 +08:00
这个 V2EX 的 markdown 闹哪样?
chinvo
2021-03-19 11:47:56 +08:00
用过 C++ 的都说好.

Rust 确实不是用来解决"互联网工程"相关的工业级问题的, 相比能快速开撸大工程 (CRUD, 笑) 的 PHP .Net Java, 缺少"工业级"轮子. 相比 Go Python 缺乏亲民性. 在简单用用的情况下相比 C/C++ 又太过复杂.

但是如果深度使用过 C/C++, 总有一个内存管理的坑等着你, 这时候再用 Rust, 会发现它简直是"世界之光". 只要能编译,根本不怕跑飞.

前段时间的同类讨论 /t/757796
chinvo
2021-03-19 11:49:03 +08:00
@fffang #40 回复不支持 md. 贴图直接贴链接就好, 第三方客户端 /浏览器扩展都能自动加载.

我隐约记得以前 v2 官方支持几个图床链接的自动加载了, 后来好像是把支持砍了???
xarthur
2021-03-19 11:58:22 +08:00
Scala 也不好理解啊(逃
说正经的。我最近在把 Rust 的语法过了一下,大部分的概念没什么特别新奇的(包括 trial ),主要还是内存管理部分比较新奇,乍一看上挺难的,实际上手写感觉还行(也可能我没接触比较大的项目)
我写 Rust 目前遇到最大的问题是不知道写什么,大部分项目不需要 Rust 这种 zero-cost abstractions (大部分项目也不延时敏感、内存敏感)。而如果单论语法 Rust 的语法其实在一堆现代语言里算不错(相比 Go 就好多了),但是不是最好的( Rust 各种符号用的太多了,乍一眼看上去会很复杂,个人观点)。
想来想去,Rust 可能对于我来说适合写一些关于网络编程的小工具。
Justin13
2021-03-19 12:14:44 +08:00
确实,我最近得空也在看 Rust 。有好的设计,也有让我很难受的地方,具体的有
1. 可以通过不写分号来返回表达式的值,这可太隐晦了,可读性直接拉到底。
2. lifetime 各种意义上的反人类,特别是那个语法,最烦的就是这种依附于特殊字符的语法了,代码堆到最后,那是人看的?
比如下面这个函数声明
fn longer<'a>(s1: &'a str, s2: &'a str) -> &'a str {
直接把我劝退,这还是没加泛型呢。。。
3. 没有三元运算符,本来还没什么,搜了一下把我看乐了,反对的原因多是,可读性差,有 if else 一种写法就够了,写这些的人怎么不看看那恶心的无分号返回值呢。

这语言我是不喜欢,但是它的设计思路很有意义,把内存管理,变量生命期等痛点从运行时提前到编译时,但是带来的限制就是写起来束手束脚,并且额外的信息量得由程序员给出,这可太痛苦了。

我比较倾向于 dependent type,让语言和编译器本身支持更高级的类型识别,从而真正解放程序员。
chenqh
2021-03-19 12:19:14 +08:00
@cmdOptionKana 但是 rust 能编译成 2 进制呀
gggxxxx
2021-03-19 12:38:03 +08:00
我始终有个观点就是,这个时代来说,c++和 rust 这种语言是非常糟糕的语言。
就跟汽车发展一样,最早是手动挡,对驾驶员操作要求蛮高的,还得略懂一些汽车机械原理。
然后自动挡取代手动挡,用过都说好。什么费油不费油都是穷人思维,工具就是拿来用的,用不重要开销换便利才是对的思维。
再然后就是自动驾驶,人以后只需要乘车就是。

编程语言朝着接近自然语言和超多辅助语法糖发展才是正道,但是偏扁现在的风气又有点反古,什么追求运行效率人人喊的朗朗上口......现在的计算机硬件算力早就过剩了好么,程序慢点又怎么了?换来的是易用啊。。。。
当然我相信绝大多数程序员的思维跟手动挡车爱好者一样的,自己亲手解决一个已经有现成解决方案的问题,会非常有快感的......
cmdOptionKana
2021-03-19 12:40:27 +08:00
@chenqh kotlin 也能编译成二进制 https://kotlinlang.org/docs/native-overview.html

另外,Go 有 GC 也能编译成二进制。C#好像也可以或者有计划,这个我不太确定。
SuperMild
2021-03-19 12:45:22 +08:00
@gggxxxx 不是,你想想浏览器的渲染引擎,linux/Mac/Win 这些系统的底层,还有量化交易要求的超低 IO 延时,还有数据库,复杂的 office 文档,科幻电影场景渲染……慢了真的可以忍受吗?
daysv
2021-03-19 13:13:33 +08:00
@gggxxxx "计算机硬件算力早就过剩了" 这句话我认为永远都是错误的
zomco
2021-03-19 13:15:38 +08:00
@gggxxxx 低功耗场景还是要靠这些糟糕的语言
ICU
2021-03-19 13:16:59 +08:00
@missdeer 你看的这个 Up 主,是不是叫软件工艺师(手动狗头)
missdeer
2021-03-19 13:22:11 +08:00
@ICU 确实是。。。20 楼那个链接。。
iold
2021-03-19 13:24:42 +08:00
@missdeer #4 大家好 我是杨旭
Jirajine
2021-03-19 13:26:30 +08:00
@Justin13 lifetime 就是一种泛型啊,你在函数签名上声明了一个泛型'a,并提供给引用类型。
类似于这样:
fn longer<T>(s1:Ref<T,String>,s2:Ref<T,String>)->Ref<T,String>
Justin13
2021-03-19 13:34:51 +08:00
@Jirajine 但是还有得 lifetime 的类型泛型啊,我说的是这个
Justin13
2021-03-19 13:37:26 +08:00
@Jirajine 但是还有非 lifetime 的类型泛型啊,我说的是这个

打错,得->非
ppphp
2021-03-19 13:39:35 +08:00
我写个链表题搞了快三天了,心态是完全爆炸的
pancl
2021-03-19 13:43:11 +08:00
rust 降低语法复杂的话,还可以扩大适用范围
Jirajine
2021-03-19 13:44:59 +08:00
@Justin13 那就再加啊,生命周期就是通过泛型实现的,func<'a,'b,C,D> 凡是'开头的都是生命周期的泛型参数,其他的都是普通的泛型参数。
除了命名方式不一样,别的没有区别。

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

https://www.v2ex.com/t/763062

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

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

© 2021 V2EX