关于 rust 前景大家是什么样的一个态度

2016-06-12 18:53:43 +08:00
 SlipStupig
最近接触了一下 rust 觉得 rust 很不错,但是似乎国内根本没有公司用 rust 去做项目,大家对 rust 是什么态度呢?
26185 次点击
所在节点    程序员
57 条回复
liyuan462
2016-06-12 22:25:30 +08:00
talk is cheap , show me the code. 已经用 Rust 实现了[Rust 中文社区]( http://rust-lang-cn.org/),源码在 https://github.com/liyuan462/rust_lang_cn ,个人总结如下:

1. Rust 从 1.0 版后就比较稳定了,标准库 API 可以大胆用。

2. Rust 的 pattern 和 macro 相当强大和灵活。

3. Rust 的难点在于 ownership 和 lifetime 。

4. 入门难,但入门后你会越来越爱它。
SlipStupig
2016-06-12 22:36:44 +08:00
@wuxqing c/c++难度一点不小但是依然很流行啊
Librazy
2016-06-12 22:39:39 +08:00
作为 Rust primer 的贡献者之一,表示 Rust 语言的设计上确实独有一番见解,如 borrow checker 、基于 Option type 的错误处理和强大而安全的宏……这些设计可以确保程序的健壮性、便于开发和维护。
Rust 很好的结合的多种编程泛型,虽然一开始面对 Rust 的各种概念会有一些迷惘,但用久了就会发现这些问题在其他的编程语言里也需要想明白, rust 只不过帮你多加了一层检查。
要想深入了解,可以看看 Rust primer https://wayslog.gitbooks.io/rustprimer/content/
mathgl
2016-06-12 22:46:40 +08:00
@SlipStupig 惯性是很难克服的。
raincious
2016-06-12 23:24:46 +08:00
在学,但是同时也在观望,还没开始正式用来写项目。

我觉得 Rust 想要流行还是需要更大的跨平台标准库,能让用户用它的标准库就能完成大部分工作,甚至比如开一台 HTTP 服务器,而不用去用 crates 。

Golang 的自带电池很大,所以如果你们看 Golang 的 Web 框架,它们自然而然的使用了一个相对标准的接口,不但降低了入门 /迁移难度,而且由于 Golang 的 HTTP 库是官方统一维护的,所以如果有 Bug 会很快被修复(特别像是加密之类的更需要如此)。

Rust 的策略貌似是使用 crate ,让用户来完善这个语言的库,而自己则潜心去完成 std 下面和语言本身关系更密切的东西(比如 collection 之类)。但风险是会出现很多参差不齐的库,这些库的接口不一定遵循一个标准,甚至安全性都不一定能保证。

这是目前我认为 Rust 和 Golang 相比,好的地方:
1 、建立 struct 实例(不知道是不是应该这么称呼)的时候,你需要初始化这个 sturct 所定义的所有的值。这样就强制用户建立一个初始化函数来初始化这个 struct 。而在 Golang 里,你可以在不进行初始化值的前提下建立一个 struct ,而那样的话会漏掉部分需要初始化的变量,比如

package teststruct
type Test struct {
private map[string]string
}

func (t Test) test() string {
return t.private["test"]
}

package main
t := Test{} // 你可以这样建立一个 struct 的“实例”。用一个 package 内的函数来初始化对 package 的用户来说“可选”的
t.test() // 出错: map 需要初始化

2 、没有 GC ,这样速度快多了,而且能更准确的控制数据消失的过程( Life Time )。
3 、有多态,棒棒棒。


这是我觉得同 Golang 相比不好的地方:
1 、符号太多了,&'!*~等等。&'static str 这是啥。
2 、 API 还是有变动,比如之前有~str ,现在删了,变成了 String 。
3 、个人并不是非常喜欢 trait 的设定
4 、 use 和 mod 比较令人糊涂
c4pt0r
2016-06-12 23:35:13 +08:00
> 但是似乎国内根本没有公司用 rust 去做项目

btw, 我们在用 Rust 开发核心的分布式存储系统,我们是 PingCAP ,我们在招聘,如果对 Rust 感兴趣的朋友,可以一起聊聊,我的邮箱是: huang at pingcap.com
yangff
2016-06-12 23:36:31 +08:00
@htfy96 +1
airqj
2016-06-12 23:57:15 +08:00
@c4pt0r 黄东旭 大大?大牛先膜拜一下
airqj
2016-06-12 23:58:25 +08:00
rust 有很多借鉴 scala 的地方 感觉不错
正打算有时间折腾一下用来开发嵌入式应用
tioover
2016-06-13 00:05:48 +08:00
@raincious 谢谢你的评论。

标准库的事情我个人觉得标准库能提供一些基础可靠的功能就好了,这是口味问题而已。对喜欢大标准库的人来说 Rust 的标准库确实不讨人喜欢。

符号太多看起来眼花缭乱这确实是 Rust 的缺点,我随手写一个
fn<'a, T> foober(&'a foo) -> &'a Bar where T: !Foobar
昏了吧,虽然习惯了不难懂但是却是会吓跑新手,老手也有不变的地方。

API 变动应该是测试版给你的印象, Rust 已经稳定了一年了 ~str 记得两年前就删了,现在 API 大多都已经固定了。

Trait 非常之棒,如果深入学习你会发现可以说是语言的灵魂,这是非常棒的特性。

use 相当于 import , mod 是声明一个子模块,区别还是蛮大的。
不过顺带一提很多人不习惯 Rust 继承 C++ 的 "::" 用来访问,现代语言都是 module.function 而不是 module::function ,这是因为很多面向对象语言把 module 映射成了 object ,而 Rust 没有这样做,为了语义的区分。
SlipStupig
2016-06-13 00:07:12 +08:00
@c4pt0r 刚接触 rust 有一种莫名的好感
Siglud
2016-06-13 00:10:58 +08:00
看了书但是却想不到应用场景,无法真正应用到实践中真的是很难提高使用水平

不过最初它的设计思想不错,语言也规范了很多东西让你很难写出烂代码,但是我还是不明白它为什么要引入裸指针这种可能会写出脏代码的东西
broadliyn
2016-06-13 01:13:01 +08:00
有什么是非 rust 不可的吗?
没有?
洗洗睡吧。。。
optional != irreplaceable
wuxqing
2016-06-13 08:15:10 +08:00
@SlipStupig
c/c++的流行是历史原因,那个时代没多少选择,然后积累了几十年
c/c++入门还是简单的,只是深入难
c 和 c++是应该分开讲的, c 入门更简单
bk201
2016-06-13 09:21:17 +08:00
如果一个语言学习曲线高,势必不能成为主流语言
ikaros
2016-06-13 09:23:09 +08:00
@raincious 你的 private 函数里面可以这样写

v, ok = t.priavte["test"]
if ok {
return v
} else {
return "default value"
}

GC 问题的话个人觉得是简化 /方便
onemoo
2016-06-13 10:30:58 +08:00
刚好看到 Andy ,一个供职于 RedHat 的内核开发者,写的他对用 rust 进行 Linux 底层 userspace 编程的看法:
http://groveronline.com/2016/06/why-rust-for-low-level-linux-programming/
总之他很看好 rust 在这领域的应用。
raincious
2016-06-13 10:56:15 +08:00
@ikaros
但是这样其实还是没有解决根本性问题,即 map 仍然没有被初始化

@tioover
感谢解释。其实存在以上某些观点有可能只是因为我还没有入门 Rust 吧。我之前大致看过 Rust Book ,但是真正开始试着写代码也就是 2 天前,所以可能还没体会到各种好处吧。 :D
ikaros
2016-06-13 11:19:58 +08:00
@raincious 你可以给 teststruct 写一个初始化方法设置初始值,然后调用一下. struct 内嵌的 map 初始化不知道其他语言有什么实现
eightqueen
2016-06-13 11:21:08 +08:00
@lecher rust 和 java 根本就没发相提并论吧,难道要用 rust 做 web servier ?

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

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

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

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

© 2021 V2EX