相关主题
{{discussion.title}}
最牛社区
首页
新主题
新回复
热门
注册
登录
看到今天群里有人讨论微软用 Go 重写 TypeScript 编译器,为什么不是用他们自家的 C#? C#在大部分 benchmark 项中性能都远超 Go, TypeScript 编译也不是在浏览器进行,不用考虑编译器体积
{{ getUsernameByUid(6605) }}
发布{{ getTimeInfo('2025-03-12 14:59:32') }}
#0
{{ getUsernameByUid(6605) }}
发布{{ getTimeInfo('2025-03-12 14:59:32') }}
#0
C# 性能远超 Go 来源
https://benchmarksgame-team.pages.debian.net/benchmarksgame/performance/fannkuchredux.html
以及这个网站的大部分项目
别的 benchmark 网站结果也大致相同
另外 C#和 TS 大部分类型都对应,实在找不到要用 Go 的理由
{{ getUsernameByUid(6630) }}
发布{{ getTimeInfo('2025-03-12 15:04:20') }}
#1
{{ getUsernameByUid(6630) }}
发布{{ getTimeInfo('2025-03-12 15:04:20') }}
#1
go 可移植性好
{{ getUsernameByUid(6605) }}
发布{{ getTimeInfo('2025-03-12 15:06:06') }}
#2
{{ getUsernameByUid(6605) }}
发布{{ getTimeInfo('2025-03-12 15:06:06') }}
#2
C#也能跨平台,虽然现在.NET Core 跨平台还是有些莫名其妙的问题,有的情况会内存泄漏,但已经可以上生产了
{{ getUsernameByUid(6453) }}
发布{{ getTimeInfo('2025-03-12 15:08:22') }}
#3
{{ getUsernameByUid(6453) }}
发布{{ getTimeInfo('2025-03-12 15:08:22') }}
#3
https://github.com/microsoft/typescript-go/discussions/411
{{ getUsernameByUid(6605) }}
发布{{ getTimeInfo('2025-03-12 15:10:51') }}
#4
{{ getUsernameByUid(6605) }}
发布{{ getTimeInfo('2025-03-12 15:10:51') }}
#4
我看过这个讨论串了,只提了 a bit of a vote of no confidence in C# 没有提具体的原因
{{ getUsernameByUid(6485) }}
发布{{ getTimeInfo('2025-03-12 15:11:48') }}
#5
{{ getUsernameByUid(6485) }}
发布{{ getTimeInfo('2025-03-12 15:11:48') }}
#5
他说了,C#更面向对象,js/ts 跟 go 更接近,更好 1:1 移植
{{ getUsernameByUid(5851) }}
发布{{ getTimeInfo('2025-03-12 15:13:32') }}
#6
{{ getUsernameByUid(5851) }}
发布{{ getTimeInfo('2025-03-12 15:13:32') }}
#6
https://github.com/microsoft/typescript-go/discussions/411#discussioncomment-12464695
已经有很多讨论了,这是一个相对官方的回复
{{ getUsernameByUid(5851) }}
发布{{ getTimeInfo('2025-03-12 15:13:56') }}
#7
{{ getUsernameByUid(5851) }}
发布{{ getTimeInfo('2025-03-12 15:13:56') }}
#7
具体原因楼层我已经发了
{{ getUsernameByUid(6453) }}
发布{{ getTimeInfo('2025-03-12 15:14:55') }}
#8
{{ getUsernameByUid(6453) }}
发布{{ getTimeInfo('2025-03-12 15:14:55') }}
#8
#4
{{ getUsernameByUid(64) }}
发布{{ getTimeInfo('2025-03-12 15:18:55') }}
#9
{{ getUsernameByUid(64) }}
发布{{ getTimeInfo('2025-03-12 15:18:55') }}
#9
如果用 c#便宜 ts ,以后装 react/vue with ts 是不是 npm 还得先装个.net runtime 。
这一下.net 的使用量就上来了,今年编程语言榜第一的就是 c# + .net 了(乐
{{ getUsernameByUid(228) }}
发布{{ getTimeInfo('2025-03-12 15:20:30') }}
#10
{{ getUsernameByUid(228) }}
发布{{ getTimeInfo('2025-03-12 15:20:30') }}
#10
C# 设计上是字节码优先的,虽然有 AOT 但是缺少实战检验,而且最初也不是为这类场景设计的,有些环境会有问题。
Go 的代码组织方式和现有的代码更相近(函数 + 数据结构,非 OOP ),方便一比一翻译。
{{ getUsernameByUid(6605) }}
发布{{ getTimeInfo('2025-03-12 15:20:47') }}
#11
{{ getUsernameByUid(6605) }}
发布{{ getTimeInfo('2025-03-12 15:20:47') }}
#11
我挺希望这样,现在 C#的跨平台 UI 框架没一个完善的,如果微软能让 C#上 Rank #1 我觉得这个问题能被改善
{{ getUsernameByUid(8097) }}
发布{{ getTimeInfo('2025-03-12 15:21:29') }}
#12
{{ getUsernameByUid(8097) }}
发布{{ getTimeInfo('2025-03-12 15:21:29') }}
#12
人家明确说了是移植,不是重写。单就这一点来说,C#是面向对象的,就不合适。
{{ getUsernameByUid(6605) }}
发布{{ getTimeInfo('2025-03-12 15:23:25') }}
#13
{{ getUsernameByUid(6605) }}
发布{{ getTimeInfo('2025-03-12 15:23:25') }}
#13
如果单纯是这个原因的话,面向对象的语言也可以不使用和对象相关的特性
{{ getUsernameByUid(64) }}
发布{{ getTimeInfo('2025-03-12 15:25:24') }}
#14
{{ getUsernameByUid(64) }}
发布{{ getTimeInfo('2025-03-12 15:25:24') }}
#14
别闹,现在 node_modules 已经够地狱了,.net 再拖家带口住进来,nodejs 就不能要了
{{ getUsernameByUid(6380) }}
发布{{ getTimeInfo('2025-03-12 15:33:59') }}
#15
{{ getUsernameByUid(6380) }}
发布{{ getTimeInfo('2025-03-12 15:33:59') }}
#15
现在 C#也可以 AOT ,所以这个不是问题
{{ getUsernameByUid(58) }}
发布{{ getTimeInfo('2025-03-12 15:41:44') }}
#16
{{ getUsernameByUid(58) }}
发布{{ getTimeInfo('2025-03-12 15:41:44') }}
#16
他们是 port ,不是 rewrite 。用 Go 可以很简单的按文件翻译,代码长差不多。
如果用 C#,为了高性能,就要大量使用 Span<T>和 Memory<T> ,那 port 工作量就太大了。C#的优势,模式匹配和异常处理,不擦除的泛型等等,都完全用不到,aot 编译耗时比 Go 长很多倍,得不偿失。
{{ getUsernameByUid(2645) }}
发布{{ getTimeInfo('2025-03-12 15:42:42') }}
#17
{{ getUsernameByUid(2645) }}
发布{{ getTimeInfo('2025-03-12 15:42:42') }}
#17
因为 LOGO 都是蓝色的
{{ getUsernameByUid(5995) }}
发布{{ getTimeInfo('2025-03-12 15:43:51') }}
#18
{{ getUsernameByUid(5995) }}
发布{{ getTimeInfo('2025-03-12 15:43:51') }}
#18
我才知道有的语言编译器是不自举的
{{ getUsernameByUid(7021) }}
发布{{ getTimeInfo('2025-03-12 16:17:44') }}
#19
{{ getUsernameByUid(7021) }}
发布{{ getTimeInfo('2025-03-12 16:17:44') }}
#19
看到过好多次说 C#比 Go 好的了,希望这个事情让你门清醒。。。
BTW ,这事情里的函数式不是通常说的函数式编程
函数式太多花活、隐藏机制、性能浪费,不是什么好玩意
OO 太多累赘、啥都得 class 、顶层设计难以预计未来、难以高效应对快速变化,不如面向过程更加通用
Go 很务实,有的人认为他平庸,简洁、甚至 N 倍性能提升都进不了这些认为 Go 平庸的人的“法眼”,反过来还要喷“大道至简”,我无法对这些人的智力水平作出评价,因为我不想贬低别人但也更不想撒谎。
{{ getUsernameByUid(post.updatedByUid) }}
编辑于 {{ getTimeInfo(post.UpdatedAt) }}
{{ getUsernameByUid(post.uid) }}
发布于 {{ getTimeInfo(post.CreatedAt) }}
# {{post.num}}
{{ getUsernameByUid(post.updatedByUid) }}
编辑于 {{ getTimeInfo(post.UpdatedAt) }}
{{ getUsernameByUid(post.uid) }}
发布于 {{ getTimeInfo(post.CreatedAt) }}
# {{post.num}}
{{ getUsernameByPostNum(post.mentionNum) }}
登录回复
#{{nav.post.anchor}}
{{ alert.text }}
关闭