字节引入Rust是否代表Java的缺点Go也没解决?

作者: 程序员_小王分类: 计算机技术 发布时间: 2023-12-19 14:19:54 浏览:53616 次

字节引入Rust是否代表Java的缺点Go也没解决?

Alkaidddd:
字节的golang技术团队自己说过这个问题……可以上掘金看下文章。 总结下来就是极端需要性能的场景,golang还是不够用。首先是gc已经说烂了,当然这方面还没有那么不可接受。 最重要的是golang做编译优化非常困难,导致需要写大量的汇编和cgo,因此最后综合考虑在极端需要性能的场景还是用rust替代了。

【回复】回复 @吴品 :人写的汇编的性能一般情况下反而不如编译型高级语言经过编译器优化后的性能
【回复】回复 @吴品 :字节的rust rpc框架volo说过这个观点,这样一个框架有一定代码量和复杂性。作为基础组件稳定性也很重要,所以综合考虑性能,安全,开发效率,现在rust是独一份的。就多线程同步问题,rust可以像golang一样用标准库的channel。而对性能要求高需要共享内存时,保证内存存在(rc)同步访问(mutex等)原子访问(atomic)标准库都有很好的支持。并且有严格检查,大部分错误编译期就能准确找出来并且提示怎么纠正。而且零成本抽象。也就是解决相同的问题,你即使用c写也就这个性能。另外现在rust的库也比较多,文档齐全,有偏官方的书,语法参考,随着语言发展及时更新。标准库本身的注释就很齐全。注释中都带有例子,并且这些例子还可以执行,还会检查注释中的例子是否有错。
【回复】回复 @吴品 :抛开开发效率谈性能和裸奔有啥区别
铁锈の福音使:
Cpp处于一个很尴尬的位置。我学Cpp的时候,碰到问题,是人不行不能怪路不平。现在有了Rust,就是怪路不平。

【回复】过于真实。写了一年rust,然后之前一直有点不太理解的modern cpp特性全都悟了,花了大约几个小时就全都过完而且知其所以然了。有时候就是得怪路不平
【回复】回复 @晚几的锅里没有鱼 :主要就是右值引用,移动语义,完美转发这一块(涉及到区分左值右值这种型别的特性)
【回复】回复 @铁锈の福音使 :还真就是得怪路不平
麻吉纪:
rust性能是和c++一个档位的,只要是同一档位就行,没必要纠结那么细致的性能差距,只需要知道拉开java一个档位,go半个档位就可以了 rust最强的是安全性,编译期就能检查几乎所有错误,也就是说,你只要会写rust,那你不用考虑优化了,而不是像c++还需要考虑优化,上下限差距很大,而rust上下限都很高,只要能写出来,没有坏代码,都是好代码,不用性能优化和考虑,管理成本是不是由编译器抹除了呢?rust式非常适合团队协作的高性能底层语言

【回复】回复 @jj254566 : rust更多的是底层能力而不是基础能力,go和java跟rust相比并不是同一类型的东西,rust也并不是要替代go和java这种高级语言,而是要代替底层语言,而这种高约束行的极高安全性的语言,我认为能很好和ai相融合,我们先用非常语义化的语言(类似python,或是伪代码)来编写程序,中间由ai转译为rust,而rust的高安全性和高约束性,会极大的保障转义难度和转义后的正确度,就像现在,不用直接操作汇编语言一样,我相信rust会是下一个替代我们现阶段汇编语言角色的存在
【回复】性能上Java和Go是同一个水平的,Java在语言本身性能是高于Go的
【回复】安全这方面前提是坚持原则,放有的人手里能全是unsafe[喜极而泣]
心若流萤:
我觉得rust更适合学习怎么写的思想。然后用其他高效率语言开发。就像之前说法,能熟练用rust的,用其他高效率语言也会注意到这些安全点。不会用的开发效率还远不及go或java。刚接触rust,编译期的顿感太大了。但他就是通过各种限制,告诉你怎么写好。

【回复】你说得很对,写完纠正了我一堆不良习惯。 然后飞速逃回python怀里哭(
【回复】回复 @橘枳橼丨沃柑丨待定 :草
伊万De乌托邦:
极端场景下go比java更难调优,而且行业经验不如java丰富,go对比java实际上只是解决了短平快的问题

【回复】go的库哪有Java多,感觉完全不如Java短平快啊
【回复】回复 @和玄同尘 :[滑稽]你试试就知道了
【回复】回复 @LiZeC :Java开发上手难度比较大,go无脑
请沿当前道路继续行驶:
sqlite纯属玩具啊,如果这个公司只有你一个开发兼运维、DBA、安全,那你爱怎么弄就怎么弄,大的工程,要考虑整个团队的成本,而不是rust相比java单体节约了多少内存

【回复】你这是互联网项目的说法,实际上sqlite有时候是当配置文件,或者客户端本地的日志文件用的
【回复】你说得对,但是sqlite是世界上普及度最高的数据库[吃瓜]
【回复】不算玩具吧,Android 框架就是用sqlite的
bwahaha:
没那么复杂。okr导向。轮子都有了就得开新的路线造轮子[吃瓜]

【回复】深表赞同 想起在字节某部门 每2月支持工具要换一一些(不是单纯版本更新,就类似本来用svn突然用git) 美其名曰啥啥特性 本质就是刷okr,做出来的东西吹的天花烂坠 就是每一个人不好用
【回复】回复 @阿星leostar :都是绩效啊
【回复】这句话说到了点上了,java体系这么成熟了,各种换语言造轮子确实看不懂
ngoer:
Go是原来搞C的那帮人搞得,Rust是原来搞C++那帮人搞得

【回复】对的 有C的影子 而且可以内嵌C代码 想想那些人还挺浪漫[脱单doge]
【回复】回复 @我表示遗憾 :哈哈哈哈大道至简
【回复】回复 @天佑帅哥_ :没有,通过大量的if else实现的
fnck_bi1ibi1i:
一般不使用 SQLite 做服务端数据库是因为,它是一个本地文件,没有网络访问功能,缺少了远程管理数据库的能力。而不是因为性能不高,SQLite 在中小型项目里面性能是够的,在过去几年里它的性能已经有了显著提升。

【回复】回复 @精神科男病人 :没人用 SQL server, 都是 postgres
【回复】公司项目用oracle,以前我用mysql,现在只能说mysql真不熟[妙啊],基本上很少考虑出现在mysql上的性能优化问题了
【回复】回复 @你我皆海棠 :是的
别看了学不会:
字节这么大,有项目使用 rust 不是很正常么...

【回复】[doge][doge][doge]因为他们基本没在大公司干过活,他们以为大家做一起开会,一拍板以后用rust,然后全公司开始用rust。实际上事情分项目,干活分团队,用rust可能就几个项目,项目里用rust可能就十几个人。字节还有 做芯片的项目,boot是用汇编写的,我也可以发个文章,字节引入汇编,预示着所有高级语言都有无法解决的问题[doge]
【回复】回复 @XellinPP :[doge]你说什么大实话
caejws25:
GC语言的性能上限都是被锁死的 再折腾也没用

账号已注销:
golang非但不能解决问题还引起了新问题

【回复】回复 @-喷气背包 :[崩坏3·终焉归始_咀嚼]啊这,就是我问gpt的问题
【回复】回复 @-喷气背包 :这个还好吧
ChironsI:
Java搞Docker部署纯纯的浪费 我现在开发的项目是Docker+内网+远程部署 部署一次需要找交付搞一次基本一个小时 有一天交付给我开了奇安信的账户 我突然一想为什么不直接去镜像里替换Jar包 本地打Jar+拷贝到服务器5分钟还不不到

【回复】选go,rust都可以,绝对不能java,不然太容易被别的大厂的人平替,要做自己的护城河[doge]
【回复】回复 @天南地北纵横四海 :业务赚钱压根就不考虑语言,你就拿node写个后端都够用.说白了就是商务不给力.技术和其他部门才要背这么大压力.管理也只看效益,不然这些人吃饱了干嘛重构项目
【回复】回复 @天南地北纵横四海 :天天输出java人才就问你怕不怕[吃瓜]
嘀嘀_--_嗒嗒:
rust对比go性能有显著提升,内存和cpu节省30%到50%不等。并且go在cpu负载超过50%之后,虽然功能依然可用,但是响应耗时显著增高,rust在高负载场景下没有耗时的显著裂化。

鱼骨0x01:
为什么不用c和c艹?国外大厂核心产品全是c系

【回复】开发慢周期长,员工离职之后很难找到人维护,一个c++项目没有一个真正的大佬打底很容易因为各种不规范导致整个项目出现雪崩,你猜他们是喜欢这个还是喜欢开发多到离谱,周期短,工资够低,好维护的java[呲牙]
【回复】为了解决程序员的不可替代性
【回复】回复 @回忆_le :软件产品要想好维护可不单单是选择个开发语言,从立项开始就要有良好的技术和管理措施,文档,审查复审等等,但是国内普遍追求短期快速,所以无论用哪种语言最后都是搞成一坨[吃瓜]
挂神也想恋爱:
之前做过西瓜直播的弹幕姬 api从最开始json+轮询get 变成protobuf+轮询get 再变成protobuf+websocket 就发现字节非常喜欢尝试改变 即使改变是破坏性的(推出新api之后旧api返回值就会开始逐渐缺失信息迫使开发者更新) 引入个新语言也是在合理范围里的[吃瓜]

【回复】回复 @天佑帅哥_ :轮询改长连接可以有效节约服务器性能 json改protobuf的话其实就没那么大的必要了 带宽和性能节约都没那么明显
【回复】可能带来的好处也是很巨大的吧
【回复】技术决策有问题,不然谁能干出跨版本升级k8s
我有四个蛋蛋:
rust编译太慢了,而且函数关键字都简化成fn了,就不能把末尾分号去掉,我是真不理解,最重要的是入门,难度高于golang和Java

【回复】Rust的花括号是表达式,当然包括函数的最外层花括号,所以不加分号的不是返回值,是当前表达式的值,和返回值是两种东西。rust为了把闭包、函数、表达式的语法统一才出现的花括号中最后一个不加分号的语句作为函数的返回值这种设计
【回复】回复 @我有四个蛋蛋 :rust的内嵌代码块是有返回值的,不是你想return就随便return的
简单煮:
go用来开发中间件还是不错的,占用系统资源少,但是用来开发业务功能,谁用谁知道[doge]。

【回复】回复 @aisa冬 :[doge]写个银行业务试试
【回复】[doge]怎么啦,字节后台99%业务代码都是go。
【回复】回复 @喵喵_97 : 你都知道没有了,为什么硬要写呢。

程序员 计算机 IT GO 编程 RUST 互联网 Java 字节跳动 字节

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!