V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
drymonfidelia
V2EX  ›  程序员

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

  •  
  •   drymonfidelia · 86 天前 · 10084 次点击
    这是一个创建于 86 天前的主题,其中的信息可能已经有所发展或是发生改变。
    C# 性能远超 Go 来源

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

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

    另外 C#和 TS 大部分类型都对应,实在找不到要用 Go 的理由
    115 条回复    2025-03-14 17:05:47 +08:00
    1  2  
    lesismal
        101
    lesismal  
       85 天前
    > 没说优秀=否定优秀=需要反驳,我觉得你不需要坚持这个链条去反驳任何人。

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

    文人相轻,同行相轻,编程语言里的踩踏更是如此,尤其是 Go 这种定位务实不搞花哨的。
    这些都是人性,我自己飘了的时候也要乱讲、毕竟不是圣人,无所谓羞愧,对了就坚持错了就承认和改变。
    人性的事情确实改变不了,但是互相喷下也没啥,不想让 Go 和 Gopher 吃哑巴亏。
    Fdyo
        104
    Fdyo  
       85 天前
    微软解释了:Go 语言的代码风格与 TypeScript 代码库高度相似;它不仅提供了精细的内存布局和分配控制;还通过自动垃圾回收( GC )减少了开发者对内存管理的关注,而这对于当前的代码库而言几乎没有额外的性能损耗;在批量编译的场景下,进程在完成后便会终止,GC 的影响可以忽略不计;而在非批量编译的情况下,由于许多数据结构(如 AST )在整个程序生命周期内都保持有效,团队可以基于领域知识在合适的时机触发 GC ,从而进一步降低运行时的开销。此外,Go 在处理多态树结构遍历时的优越表现,使其在保证可读性和可维护性的同时,能够更高效地执行关键任务。 具体 👉 ohh.run/j5wy
    Nugine0
        105
    Nugine0  
       85 天前
    @lesismal #103
    把你自己的经验和成果展示出来,比什么都强。反驳别人挺浪费时间的。
    lesismal
        106
    lesismal  
       85 天前
    @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
        107
    lesismal  
       85 天前
    @Nugine0 #106 继续

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

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

    1. 这点确实比较麻烦 但改文件也不是不行 与第三方库也容易区别
    2. 这个设计好 用不到一直留着也很少看到有人清理的 即便有快捷键 不用的註解也还好
    3. 指标习惯问题没什么好讲
    4. 雷同上 有默认值也蛮省额外定义的
    5. 本来我觉得这个很扰人 但后来发现加 tag 其实还蛮方便的 还可以忽略某些字段 golang 的 json 官方库除了效能不好其实挺好 每个结构都可以定义序列化和反序列化方法 不写 json tag 达成你要的目的是可以的
    6. 这个不直觉没错 但 time 包有格式化的常数 好像也没必要查
    7. golang 确实没有 enum 通常额外定义类型并且定义常数来达成类似效果 但我觉得定义结构+tag 更好
    8. 应该不会有人这么做 可直接包裹匿名函数或统一处理
    FalconD
        111
    FalconD  
       85 天前 via Android
    @mahaoqu 有哪个主流语言不是 nominally typed
    mahaoqu
        112
    mahaoqu  
       85 天前
    @FalconD 结构子类型,打错了(
    Ghrhrrv146
        113
    Ghrhrrv146  
       85 天前
    @levelworm 仅次于 python
    Ghrhrrv146
        114
    Ghrhrrv146  
       85 天前
    @tt0411 你想说的是 AOT 吧
    niubiman
        115
    niubiman  
       84 天前
    不知道这个有什么好讨论的, Anders Hejlsberg 已经说得很清楚了, 要是看不懂英语的话可以右键翻译一下
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2882 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 03:55 · PVG 11:55 · LAX 20:55 · JFK 23:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.