V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tonsonxu
V2EX  ›  程序员

Golang 还是 Rust?

  •  
  •   tonsonxu · 2015-06-09 22:25:49 +08:00 · 17182 次点击
    这是一个创建于 3459 天前的主题,其中的信息可能已经有所发展或是发生改变。
    对C++不再有激情,服务器开发或者说后端,Golang还是Rust更有可能壮大起来?
    70 条回复    2015-06-13 20:32:45 +08:00
    lilydjwg
        1
    lilydjwg  
       2015-06-09 22:32:18 +08:00
    Go 和 Rust 的领域不太一样的。你的目标是什么?
    tonsonxu
        2
    tonsonxu  
    OP
       2015-06-09 22:32:35 +08:00
    这一上来,就被move到程序员节点了。。。
    tonsonxu
        3
    tonsonxu  
    OP
       2015-06-09 22:34:59 +08:00
    @lilydjwg 目标是linux服务端高并发和内核引擎(偏算法)。暂时还不想碰客户端、业务流程等。
    immjun
        4
    immjun  
       2015-06-09 22:38:41 +08:00
    @tonsonxu 楼主你应该没听说过 Nim .
    lilydjwg
        5
    lilydjwg  
       2015-06-09 22:40:14 +08:00
    @immjun 还没发正式版。

    @tonsonxu 算法 Rust 应该更快。对正确性的要求呢?对内存管理的要求呢?
    tonsonxu
        6
    tonsonxu  
    OP
       2015-06-09 22:47:21 +08:00
    @immjun 刚去搜了下,说Nim的目标是效率和优雅,这个很诱人啊。不过还没到1.0 :)
    lightening
        7
    lightening  
       2015-06-09 22:55:18 +08:00
    说实话我觉得 Swift 开源的话,对他俩威胁还挺大。他们两家执行力都比 Apple 差了好多。
    tonsonxu
        8
    tonsonxu  
    OP
       2015-06-09 22:59:32 +08:00
    @lilydjwg 最看重的是效率,但我觉得C++写起来好啰嗦,我没法做到有效率地开发。。。所以想找个替代品,哪怕做不到C++那种运行速度,只要不是差太远就好。
    ibigbug
        9
    ibigbug  
       2015-06-09 23:35:48 +08:00
    我个人觉得,对于 Golang 和 Rust,Google 大法好。
    1oscar
        10
    1oscar  
       2015-06-09 23:53:59 +08:00
    @lightening 已经开源了
    lilydjwg
        11
    lilydjwg  
       2015-06-09 23:59:12 +08:00
    @tonsonxu 要速度的话就选 Rust 吧,和 C++ 的速度相当(有时快点,有些慢点)。不过 Rust 的类型转换会比较多,错误处理会让你多写不少字(带来的结果是:没有错误被不小心忽略掉没处理)。

    @lightening 不要忘记了 KHTML 的遭遇。而且现在开源也太晚了,又没有(让我看到)什么特别的优势。

    @1oscar 已经开源了吗?在哪里?
    ShiningRay
        12
    ShiningRay  
       2015-06-10 00:05:39 +08:00
    Rust的社区还没起来吧?连个 Web 框架都没有
    chengzhoukun
        13
    chengzhoukun  
       2015-06-10 00:08:14 +08:00 via Android
    @lightening rust有同步开发的浏览器项目servo啊,苹果的东西不捆绑到iOS上也没啥优势
    WildCat
        14
    WildCat  
       2015-06-10 00:11:14 +08:00 via iPhone
    Swift 如果能在服务端火,我觉得 ARC 这个原因少不了。
    1oscar
        15
    1oscar  
       2015-06-10 00:27:11 +08:00
    @lilydjwg 今天开源的,看到新闻了,具体地址: 我不能剥夺你获取知识的能力
    df4VW
        16
    df4VW  
       2015-06-10 00:30:54 +08:00
    @ibigbug Google大法哪里好了。。
    ChiangDi
        17
    ChiangDi  
       2015-06-10 00:54:07 +08:00
    @1oscar 新闻是说计划开源,但是还没开呢 你是指这个吧 http://www.apple.com/live/2015-june-event/9d2ad033-d197-4009-96a7-2a97fd044cb7
    wezzard
        18
    wezzard  
       2015-06-10 01:00:28 +08:00
    Swift
    lightening
        19
    lightening  
       2015-06-10 01:32:10 +08:00 via iPhone
    @lilydjwg 优势就是苹果会费力花钱去推动。他有钱有人,开发新 feature 和各种 library 快啊。
    clino
        20
    clino  
       2015-06-10 06:44:26 +08:00 via Android
    我挺看好 go的,rust 还不了解
    zeayes
        21
    zeayes  
       2015-06-10 07:41:10 +08:00
    @lightening 感觉苹果不会花费太多的资源去推动swift在服务端的发展,swift开源是一种取悦开发者的姿态,而且swift相比现有的服务端语言没有特别明显的优势。
    lilydjwg
        22
    lilydjwg  
       2015-06-10 07:41:26 +08:00
    @1oscar 是你根本找不到吧。新闻只说苹果要把 Swift 开源,没说已经开源了。

    @lightening 但是不一定是你所需要的。

    @df4VW 据说跟 Google 其它一些开源项目一样不太友好: http://blog.csdn.net/liigo/article/details/23699459
    lilydjwg
        23
    lilydjwg  
       2015-06-10 07:43:20 +08:00
    @ShiningRay 社区早有了啊,光 Rust 本身的贡献者都有一千多人了呢。crates.io 上的库也有两千多了。没起来的是整个生态环境:还处于大量缺库阶段。
    codejsm
        24
    codejsm  
       2015-06-10 08:59:47 +08:00
    都系统学习下,你就有答案。golang比较符合我的口味,rust也很强,两个语言定位不一样。
    nicai000
        25
    nicai000  
       2015-06-10 09:07:06 +08:00
    C程序员Go, C++程序员Rust
    guotie
        26
    guotie  
       2015-06-10 09:09:16 +08:00
    golang相对简单一些。
    antspeed
        27
    antspeed  
       2015-06-10 09:41:25 +08:00
    golang是google几个大佬领军推出的,还不算google的产品吧,dart才是,不过dart现在前途不明,之前还说要替代js, 现在最新消息也不打算替代js, 方向变更为服务端开发,以及可能会成为安卓的一个基础运行框架? 用dart开发了几个服务程序,不过没有正式使用,个人很喜欢这个语言,pub使用也方便,只是相关的库有点少,希望dart越来越好吧。
    clino
        28
    clino  
       2015-06-10 09:44:38 +08:00
    @lilydjwg 该博主还有一篇鼓吹rust的 http://blog.csdn.net/liigo/article/details/45757123
    看起来挺有意思
    njutree
        29
    njutree  
       2015-06-10 09:57:06 +08:00
    @clino 强行凑够10点也是醉了
    warlock
        30
    warlock  
       2015-06-10 10:03:18 +08:00
    @clino 你的头像和该博主好像啊....
    clino
        31
    clino  
       2015-06-10 10:17:41 +08:00
    @njutree 第2和第10重了哈

    @warlock 汗...我本人也能留成大胡子
    Bingwa
        32
    Bingwa  
       2015-06-10 10:36:04 +08:00
    erlang大法好,配合lua写逻辑
    laotaitai
        33
    laotaitai  
       2015-06-10 10:38:23 +08:00
    我觉得题主的语气有点虚, 我认为题主只有用C++敲了许多"Hello Wold"的水平. 所以, 散了吧. 术语也用得虚, 比如"linux服务端高并发和内核引擎".
    cbsw
        34
    cbsw  
       2015-06-10 10:53:38 +08:00
    有人与你有同样的疑问,看看那个vote最高的回复,相信你会收获比较大
    http://www.reddit.com/r/golang/comments/394vzq/the_state_of_go_in_market_and_its_future/
    cbsw
        35
    cbsw  
       2015-06-10 10:57:14 +08:00
    @lilydjwg 小狐狸是依云吗
    jiazhoulvke
        36
    jiazhoulvke  
       2015-06-10 11:08:02 +08:00
    “人生苦短,说Go就Go”
    lilydjwg
        37
    lilydjwg  
       2015-06-10 11:39:48 +08:00
    @nicai000 可我只会 C 根本不怎么会 C++ 却挺喜欢 Rust 呢。Haskell 程序员大概只能选 Rust ;-)

    @cbsw 是呀。那帖子里竟然看到了百度。他们也 Go 了么。

    不过我很不同意 Go 易学这点。它的语法有很多令我困惑的不一致。
    evolighting
        38
    evolighting  
       2015-06-10 11:53:06 +08:00
    @df4VW 毕竟“人类希望”
    就算真的很烂那也是有个性的烂,反正google粉丝这么多,不缺人洗白;
    rust只要不乱搞,从设计目标看来我倒是觉得更好,go只是看起来更酷~~~然而少了些踏实的感觉....
    canesten
        39
    canesten  
       2015-06-10 12:00:01 +08:00
    golang不适合以计算为主的场景,更适合以IO为主的场景。
    剩下的楼主自己斟酌自己的场景偏那一种。
    chaucerling
        40
    chaucerling  
       2015-06-10 12:01:09 +08:00
    rust is current, nim is the next
    googollee
        41
    googollee  
       2015-06-10 12:03:30 +08:00   ❤️ 4
    只要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
        42
    JQ  
       2015-06-10 12:05:31 +08:00
    2个都学,体会差异比较靠谱。
    googollee
        43
    googollee  
       2015-06-10 12:12:43 +08:00
    如果楼主目标是linux服务端高并发和内核引擎(偏算法),这两个其实是两个领域。

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

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

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

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

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

    复杂
    Feiox
        58
    Feiox  
       2015-06-10 19:16:55 +08:00
    会不会有那么一天,大神们一怒,Linux not only by C ~
    heroicYang
        59
    heroicYang  
       2015-06-10 19:37:20 +08:00
    ensonmj
        60
    ensonmj  
       2015-06-10 21:04:11 +08:00
    没啥说的,要找工作,c++ or java
    lilydjwg
        61
    lilydjwg  
       2015-06-10 21:35:14 +08:00
    @yuelang85 你如果问我,得到的答案会是——实用。
    lilydjwg
        62
    lilydjwg  
       2015-06-10 21:37:55 +08:00
    @hooluupog 其实我很疑惑,如果 C++ 和 Rust 相似的话,那么为什么 C++ 程序员会倾向于 Rust 呢?C++ 用得很不爽么?
    coetzee
        63
    coetzee  
       2015-06-10 21:40:26 +08:00
    个人浅见:偏向工程化的话就Go,偏向学术化的就Rust,前景的话Swift,另外我认为一个语言具有至少要有一个可以值得放大很多倍的优点,即使有软肋也无妨,JavaScript,Java都是优点和缺点很明显的语言,但是优点确实是顺应时代发展大势
    coetzee
        64
    coetzee  
       2015-06-10 21:43:23 +08:00
    仅就C++来看,一直在进化,其实还是很不错的,很多新语言翻来覆去这么几套东西来回作为卖点来宣传,要么就是学术化太重
    hooluupog
        65
    hooluupog  
       2015-06-10 22:25:37 +08:00
    @lilydjwg 不好说。我觉得c++程序员是所有程序员里面宗教化最严重的,所以c++程序员会不会倒戈向rust,需要时间来验证。
    clino
        66
    clino  
       2015-06-10 22:37:25 +08:00
    @yuelang85 rust具体什么地方复杂?
    yuelang85
        67
    yuelang85  
       2015-06-11 10:39:40 +08:00
    @clino 语法和特性比较多吧
    ShiningRay
        68
    ShiningRay  
       2015-06-11 18:18:15 +08:00
    @heroicYang 哦,看来我 out 了,好久没看了
    kran
        69
    kran  
       2015-06-11 21:32:02 +08:00
    小马过河,都试试吧,一天时间足够你做出选择了。
    clino
        70
    clino  
       2015-06-13 20:32:45 +08:00 via Android
    我觉得go比较大的问题应该就是gc了,不过这个在不太讲究实时性能的场合可以忽略,如果讲究实时性能则可以针对优化到一定的程度,非常讲究的情况还是不太适合的
    其他的go还是挺对我个人的胃口的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1031 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 22:16 · PVG 06:16 · LAX 14:16 · JFK 17:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.