Golang 还是 Rust?

2015-06-09 22:25:49 +08:00
 tonsonxu
对C++不再有激情,服务器开发或者说后端,Golang还是Rust更有可能壮大起来?
17000 次点击
所在节点    程序员
70 条回复
googollee
2015-06-10 12:03:30 +08:00
只要Rust和Swift不在语言层面加入对并发的支持,Go就不会受到本质威胁。如果一门语言不从一开始引入并发,等库多起来再想引入,基本上会被各种库直接阻塞住。这也是为什么Python早就有异步库,但依然被Node.js发展起来的原因。

Go的缺点是在语法上没追求,类型系统(相对于现代语言)过于简单。Javascript的类型系统叫简陋,Rust是复杂。Swift到是比较合适。

不知道Go 2.0版会不会改进类型系统,1.0肯定没戏了,稳定GC和调度器是当前最大的任务。

另外,说Go比Rust慢的,Computer Language Benchmarks Game上看,两者速度差不多。 http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=go&lang2=rust
JQ
2015-06-10 12:05:31 +08:00
2个都学,体会差异比较靠谱。
googollee
2015-06-10 12:12:43 +08:00
如果楼主目标是linux服务端高并发和内核引擎(偏算法),这两个其实是两个领域。

服务器端高并发,目前一个趋势是少陷核,极端如Google这种已经抛弃内核TCP栈,直接从UDP搞起。这个领域,是Go最初的设计目标,个人认为,也是Go有希望挤掉Java和C++的领域。

内核引擎,别想了,C和汇编。别的语言,等内核里真的有人用了再学不迟。
hooluupog
2015-06-10 12:14:52 +08:00
Go符合我的口味,所以我选了Go,就这么简单。至于为什么符合口味,要自己试过才知道(我经常用它写一些命令行下的小工具,以及爬虫之类的,很趁手性能也符合要求)。

因为这个语言没有什么牛逼炫酷的语法特性来唬人(主要是来自于FP语言的那一坨理论),所以没法吹牛逼,只能说:你自己去试试吧,看看是不是你的菜。
chingli
2015-06-10 12:20:18 +08:00
服务器端Go更成熟一点,偏重工程应用,并发支持好,但要看你是否能适应其稍显怪异(个性化)的语法。Rust不了解,好多人喜欢,应该更底层也更复杂一点,各方面比较均衡,最终运行速度应该快于Go。但考虑到Go对并发的良好支持,服务器端运行Go是不会慢的。
njutree
2015-06-10 13:21:12 +08:00
复杂的东西适合当玩具去研究把玩,简单的东西才是真正实用。研究把玩目的就学rust好了,项目应用看需要go更好。很多说go不好用的都没有用go构建过几万行的大项目,只是当玩具玩而已,而go语言的设计就注定它不是一个好玩的玩具,因为它太简单了,一个特性尽量统一用一个方法去实现。完全不像其它语言,有无穷无尽的语法糖和高级用法;以至于你很难知道你写的每个语句是不是最优雅的。这样的语言光语法就够人玩上好久了。然而在工程实践上并没有什么暖用~
kofj
2015-06-10 13:37:19 +08:00
写内核的话需要C啊,我没听说过Go能做内核开发的。目前正在用Go做开发。
clino
2015-06-10 15:09:37 +08:00
@googollee "这也是为什么Python早就有异步库,但依然被Node.js发展起来的原因。 "
node.js从语言上说就是javascript,可是javascript在语言层面上也木有并发啊...
即使python语言上支持并发,一样有很多人不想用python的
clino
2015-06-10 15:13:13 +08:00
@kofj 你看上面 liigo 的一篇blog里说 rust可以取代C
go应该是取代不了的
hooluupog
2015-06-10 15:32:47 +08:00
@clino 谁也别想取代C。
guotie
2015-06-10 15:36:29 +08:00
c是不可能被取代的
googollee
2015-06-10 16:41:53 +08:00
@clino Node.js在语言层面的并发,可以理解成runtime中libuv这一套东西,以及基于此之上的stdlib。这一部分是对Javascript语言的扩展。
lilydjwg
2015-06-10 17:08:25 +08:00
@googollee Rust 的类型系统还是比较简单的,相对于 Haskell 而言。

从你给出的测试,我只看到了 Go 的代码量少,但是内存占用多。

另外你把协程和并发搞混了。不支持并发的语言很少见了吧,支持多线程就可以并发了,支持多进程的也能,只是不方便。当然 Go 的优势是协程,很轻量。而 Rust 在这方面的优势是,「不作死就不会死」:只要不去欺骗编译器,那么写出来的多线程程序就是安全、没有 race condition 的——当然,如果你有那个能力写出来……
lilydjwg
2015-06-10 17:12:08 +08:00
@clino @hooluupog @guotie liigo 的意思应该是,如果某个程序你原本打算用 C 写的,现在也可以用 Rust 来写(而且会更舒适)。并不是说把已有的软件用 Rust 编写的取代。
semicircle21
2015-06-10 17:26:04 +08:00
@nicai000
C程序员Go, C++程序员Rust +1
hooluupog
2015-06-10 18:53:39 +08:00
@semicircle21 用c写的最终还是会用c写的,再说c和rust就不是一个口味。rust明显就是奔着c++去的。
yuelang85
2015-06-10 19:10:02 +08:00
每问一个人rust如何,回答都是两个字:

复杂
Feiox
2015-06-10 19:16:55 +08:00
会不会有那么一天,大神们一怒,Linux not only by C ~
heroicYang
2015-06-10 19:37:20 +08:00
ensonmj
2015-06-10 21:04:11 +08:00
没啥说的,要找工作,c++ or java

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

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

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

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

© 2021 V2EX