Anders Hejlsberg 是这样解释为什么 TypeScript 选择了 Golang 的:
我们将 TypeScript 编译器迁移到 Go 语言的决定,体现了我们对务实工程选择的承诺。我们的核心目标是取得最佳成果,而非局限于特定编程语言。在微软,我们使用包括 C#、Go、Java、Rust、C++、TypeScript 等在内的多种编程语言,每种语言的选择都基于技术适配性和团队效率的慎重考量。事实上,迄今为止 C# 仍然是微软内部使用最广泛的语言。
将 TypeScript 编译器迁移到 Go 的决定源于特定的技术要求:需要与现有基于 JavaScript 的代码库保持结构兼容性、简化内存管理需求,以及高效处理复杂图结构运算的能力。在评估了多种语言并制作了多个原型(包括C#版本)后,Go 最终成为最优选择——它在语法树遍历方面具有卓越的工程设计,内存分配管理简单,且代码结构能完美映射现有编译器架构,显著降低了维护成本和兼容性难度。
如果这是个全新的项目,讨论方向可能完全不同。但现实情况是:我们面对的是一个凝聚了100人年投入的成熟代码库迁移。诚然,我们可以用 C# 从头重新设计编译器(事实上C#自己的编译器 Roslyn 就是用 C# 编写并实现了自举),但这次迁移并非编译器重构,而 TypeScript 到 Go 的代码转换具有更高的自动化可能和更直接的映射关系。现有代码库完全由函数和数据结构构成(无类),而 Go 语言的原生范式恰好与之完美契合,这极大简化了迁移过程。
虽然这个决策完美契合 TypeScript 项目的特定需求,但这丝毫不影响我们对 C# 和 .NET 生态的长期投入。凭借无与伦比的开发效率、强大的生态系统和卓越的可扩展性,C# 仍是微软绝大多数服务和产品的核心技术栈,支撑着关键业务系统和大量内外解决方案。现代跨平台的.NET在性能表现上同样出色,是构建可在任意操作系统和多云环境中无缝运行的云服务的理想选择。.NET 9 最新发布的性能提升正是我们持续投入的明证。
让我们直面现实:微软使用 Go 语言编写 TypeScript 编译器在数年前是不可想象的转变。但过去二十年间,我们见证了微软对开源软件的坚定承诺——始终将开发者效率和社区协作置于首位。我们的使命是让开发者摆脱内部政治或狭隘限制,自由选择最佳工具。这种"为特定任务选择正确工具"的自由度,最终将推动整个开发者社区的创新、效率提升和成果优化。面对 10 倍效率提升的成果,任何争议都显得苍白无力。
没有任何编程语言能完美适配所有场景。在微软,我们拥抱编程语言多样性带来的技术优势。我们对 C# 和 .NET 的承诺比任何时候都更坚定,将持续完善这些技术,为开发者提供当下及未来成功所需的工具。
Source
👀
还没 scale 上来,目前只有 424.5M 的checkpoint,Add watchlist~
https://arxiv.org/abs/2503.04482
https://github.com/dvruette/gidd
但是提供了 Colab ~可以试试看?
https://colab.research.google.com/drive/1Xv4RyZhXHkIpIZeMYahl_4kMthLxKdg_?usp=sharing
#BPIO 当前玩家状态指示、非当前玩家锁定卡牌列表不能敲回车提交、修后端 bug、做点小重构优化一下前端的代码逻辑
Читать полностью…发现一个用业余时间做复古游戏的开发者,坚持了很多年已经积累了很多作品,大多是免费的,但质量都非常之高。
https://locomalito.com/
其中两款游戏在 Steam 有售,值得支持:
Maldita Castilla EX: 一款致敬魔界村的横版动作游戏,手感更舒适,加入了很多不同的装备、技能、宠物,可以说是魔界村的现代重生
Super Hydorah: 致敬沙罗曼蛇的横向卷轴射击游戏,我还没玩但光看介绍已经能感受到它的品质了,准备下次打折入
#BPIO 加了轮数流转的逻辑,只能说当年我的架构思维是真的很好,非常多的事情都提前想得非常清楚,现在脑子真的钝了……
Читать полностью…https://www.phoronix.com/review/nvidia-rtx5090-llama-cpp/2
5090 能耗比不如 4090
#Rune 跑通了所有的 P2P 配对流程、给曲目标题文本加了个点击响应,按它可以直接进 Cover Wall,修了一个遗留的小 bug(播放控制栏 Cover 按下去不跳页面)、修了安卓机呼出上下文菜单后不能用返回按钮返回关掉上下文菜单的问题。
明天做按曲目 Genre 检索的功能,看着能不能把曲目去重这个功能的头给做起来,然后就得开始搞数据库同步了
现在客户端和服务器之间的握手流程是:
服务端:开启内网广播,广播信息携带所有本机所有 ipv4 地址
客户端:扫描内网设备、读取广播携带的指纹,从广播信息中选择一个速度最快且能响应的 IP,发起索权请求
服务端:如果是 Rune GUI,收到索权请求后会自动弹出授权模态框,模态框上有自己的公钥指纹,如果是 Rune Headless,需要到网站上自己点按钮调出指纹
客户端:对着服务端的指纹信息做一道选择题,确认没有被中间人攻击、对广播信息中的所有 IP 信任该自签证书、开始轮询等待服务端批准请求
服务端:处理授权请求,存储客户端公钥指纹
客户端:存储连接信息,将服务器的所有备选 IP 都存储到本地,后续连接时会选择一个连得通的 IP 连进去
ˊ_>ˋ 要死,要死,感觉每一步都对应超大一坨逻辑……
啊哈哈哈哈哈哈哈哈哈哈哈,Android 编译嵌入 Rust lib,现在它开始报 Ring 的编译错误了,哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
Читать полностью…https://github.com/microsoft/typescript-go
https://devblogs.microsoft.com/typescript/typescript-native-port/
?????
啥????
是我起猛了……?
https://fxtwitter.com/TheAppleDesign/status/1899033435160625317
Читать полностью…除 macOS 平台外,现在我从 Rune 这个软件合计拿到的入账金额是 $439.94,换算成人民币是 3,182.64
真是没多少呢 ˊ_>ˋ
Llama.cpp AI Performance with the GeForce RTX 5090 Review https://www.phoronix.com/review/nvidia-rtx5090-llama-cpp
Читать полностью…其实现在的 AI 工具都是这样吧?只是 prompt 调试得更专业一点。
https://fixupx.com/aigclink/status/1898981907762930091
BTW, 我给 Daisy UI 一些 Credit 是因为它让我看到了 topcoat 的影子,至少有点昔日的怀念。
Читать полностью…