看到今天群里有人讨论微软用 Go 重写 TypeScript 编译器,为什么不是用他们自家的 C#? C#在大部分 benchmark 项中性能都远超 Go, TypeScript 编译也不是在浏览器进行,不用考虑编译器体积

190 天前
 drymonfidelia
C# 性能远超 Go 来源

https://benchmarksgame-team.pages.debian.net/benchmarksgame/performance/fannkuchredux.html
以及这个网站的大部分项目

别的 benchmark 网站结果也大致相同

另外 C#和 TS 大部分类型都对应,实在找不到要用 Go 的理由
11356 次点击
所在节点    程序员
115 条回复
lesismal
189 天前
> 没说优秀=否定优秀=需要反驳,我觉得你不需要坚持这个链条去反驳任何人。

@Nugine0 通常没有出来反驳的必要,但是这种“不是因为 Go 多优秀”的实际效果就是“Go 不优秀”,让人挺无奈的
Nugine0
189 天前
@lesismal #101
唉,如果有人会因为这种说法去黑 Go ,这不是你我能改变的
lesismal
189 天前
@Nugine0 #102

文人相轻,同行相轻,编程语言里的踩踏更是如此,尤其是 Go 这种定位务实不搞花哨的。
这些都是人性,我自己飘了的时候也要乱讲、毕竟不是圣人,无所谓羞愧,对了就坚持错了就承认和改变。
人性的事情确实改变不了,但是互相喷下也没啥,不想让 Go 和 Gopher 吃哑巴亏。
Fdyo
189 天前
微软解释了:Go 语言的代码风格与 TypeScript 代码库高度相似;它不仅提供了精细的内存布局和分配控制;还通过自动垃圾回收( GC )减少了开发者对内存管理的关注,而这对于当前的代码库而言几乎没有额外的性能损耗;在批量编译的场景下,进程在完成后便会终止,GC 的影响可以忽略不计;而在非批量编译的情况下,由于许多数据结构(如 AST )在整个程序生命周期内都保持有效,团队可以基于领域知识在合适的时机触发 GC ,从而进一步降低运行时的开销。此外,Go 在处理多态树结构遍历时的优越表现,使其在保证可读性和可维护性的同时,能够更高效地执行关键任务。 具体 👉 ohh.run/j5wy
Nugine0
189 天前
@lesismal #103
把你自己的经验和成果展示出来,比什么都强。反驳别人挺浪费时间的。
lesismal
189 天前
@Nugine0
我的开源项目已经发过几次帖子了,发多了也会惹人烦,而且论坛的流量也不大了,所以就很少发了。
一些优化的点倒是可以拿来说说,但是这些点我觉得都挺平常的,比如海量连接数、协程池、内存、gc 、网络哭、rpc 性能各种优化和实现策略,以前跟很多人讨论过很多次了,github repo 的 issue 里也有不少相关的都在。
最重要的,比如 nbio 是为了解决标准库海量连接数场景的弱项、1M 连接数 1k payload echo 压测 server 内存可以控在 1G 内存、4-8c 能跑 10w+ qps ,但绝大多数人用不到,绝大多数人的场景连接数都不高、用标准库足够了,少量的人用得到的自然可以找上门来;至于 rpc ,我自己的 arpc 性能和易用性里都算是 top 了,但更多人就是喜欢 grpc 、毕竟跨语言和整体生态更强谷歌背书,而且多数人是 web 领域微服务之类的、普通 rpc 也足够用了,少有人懂更多的才会考虑用 arpc 去做更多业务类型比如游戏、IM 、推送而且顺便性能提升一大截。
我个人也没那么多精力去搞更大,为爱发电成本太高了。所以也懒得去宣传这些了,有缘的人多交流就可以了
lesismal
189 天前
@Nugine0 #106 继续

而且,很多人无脑黑 Go 的,比如看到 nbio 搞百万连接优化,想都不想就会出来喷、说官方都可以写同步代码、你非要搞个异步非阻塞库这是倒退,但其实 nbio 对标准库是基本兼容的、使用方法还是用标准库那样的方式仍然是写同步代码;
还有些人一看 nbio 名字里的 nb 就开始“国人的项目净搞噱头”,实际效用他们可不管,张嘴就是嘲讽、阴阳。

这也是为什么我看到很多黑 Go 的或者对 Go 负面影响的评价会经常站出来反驳的原因,因为自己就被他们无脑黑或者嘲讽过很多次了
catazshadow
188 天前
再次说明了现实世界是 case by case 的,没有东亚人脑子里那种王权至上引申出来的,一种东西就是永远比别的东西更好的排位概念
rocmax
188 天前
没那么复杂,因为这不是 reimplement ,只是 port 。基本上可以理解为把函数逐个翻译成 go 语言。OOP 语言需要搞一堆 class ,rust 的写法相差较大,golang 相对好翻译。
Evan you 提出 go 语言在 wasm 方面性能拉胯,他怕以后需要在浏览器内跑 ts 时会有影响。我觉得还不如用 rust 重新实现一遍以绝后患。
james122333
188 天前
@Nugine0 #90

1. 这点确实比较麻烦 但改文件也不是不行 与第三方库也容易区别
2. 这个设计好 用不到一直留着也很少看到有人清理的 即便有快捷键 不用的註解也还好
3. 指标习惯问题没什么好讲
4. 雷同上 有默认值也蛮省额外定义的
5. 本来我觉得这个很扰人 但后来发现加 tag 其实还蛮方便的 还可以忽略某些字段 golang 的 json 官方库除了效能不好其实挺好 每个结构都可以定义序列化和反序列化方法 不写 json tag 达成你要的目的是可以的
6. 这个不直觉没错 但 time 包有格式化的常数 好像也没必要查
7. golang 确实没有 enum 通常额外定义类型并且定义常数来达成类似效果 但我觉得定义结构+tag 更好
8. 应该不会有人这么做 可直接包裹匿名函数或统一处理
FalconD
188 天前
@mahaoqu 有哪个主流语言不是 nominally typed
mahaoqu
188 天前
@FalconD 结构子类型,打错了(
Ghrhrrv146
188 天前
@levelworm 仅次于 python
Ghrhrrv146
188 天前
@tt0411 你想说的是 AOT 吧
niubiman
188 天前
不知道这个有什么好讨论的, Anders Hejlsberg 已经说得很清楚了, 要是看不懂英语的话可以右键翻译一下

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

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

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

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

© 2021 V2EX