TypeScript官推最近宣布他们正在移植到 Go,速度已经提高了 10 倍之多。

作为以性能为代表的另一语言Rust,人们自然会疑惑为什么没有选Rust语言重构呢?为方便大家快速理解,我用DeepSeek用小红书的语气重新总结了下:(原文放在下方,大家可以继续往下阅读)

【技术选型大实话!Go vs Rust我站它】

家人们谁懂啊!做技术选型真的太难了当初在Go和Rust之间反复横跳,最后含泪总结出这些干货

核心结论:
Go移植TS代码真香警告!1年肝出高兼容+高性能版本 vs Rust重写可能耗3年还难用(大冤种预警.jpg)

划重点理由:
1️⃣ 移植舒适度拉满
Rust移植JS/TS就像把大象塞冰箱疯狂踩坑+写unsafe代码预警!Go却能丝滑复刻原代码结构,开发者头发保住啦♀️

2️⃣ 性能焦虑退退退
实测单核性能差不离!Go不用魔改unsafe就能打,内存管理还贼懂事(疯狂暗示内存条不用燃烧)

3️⃣ 隐藏彩蛋get
选Go还能自动屏蔽"为啥不用Rust"的灵魂拷问(懂的都懂.jpg)而且API接口照样能玩出花,根本不care互操作短板~

️暴言预警:
Rust虽强但移植JS不是它KPI啊!就像要求程序员会修电脑——专业不对口嘛!Go恰巧对上咱们的移植DNA

最后暴风夸夸:
Go的代码生成能力绝绝子!并发原语和Rust五五开,写起来还像喝奶茶一样顺滑TS代码人原地搬家不是梦~

原文声明翻译:

我们在选择 Go 时就明确知道,肯定会有人质疑我们为什么没有选择 Rust。这是一个很好的问题,因为 Rust 是一门出色的语言,如果没有其他限制,它在编写新的原生代码时是一个很强的首选。

可移植性(即能够创建一个与当前代码库算法上相似的新代码库的能力)一直是我们考虑如何实现这一目标时的关键限制。我们尝试了大量方法,试图找到一种在 Rust 中可行的表示方式来实现这种移植,但所有方法要么存在不可接受的权衡(性能、人机工程学等),要么演变成了“自己编写垃圾回收器”式的策略。有些方法几乎成功了,但往往需要大量使用不安全代码,而 Rust 中似乎没有多少基础元素的组合能够让人机工程学上轻松地将 JavaScript 代码移植过来(这样说并不令人意外——大多数语言并不优先考虑让从 JavaScript/TypeScript 移植变得容易!)。

最终,我们面临两个选择——在 Rust 中从头开始完全重写,这可能需要数年时间,并产出一个与 TypeScript 不兼容、无人能实际使用的版本;或者在 Go 中进行移植,大约一年左右就能得到一个可用的东西,在语义上高度兼容,在性能上极具竞争力。

而且,我们甚至不太清楚这么做的好处是什么(除了不必应对那么多“你们为什么没选 Rust?”的问题)。我们仍然希望有一个高度分离的 API 接口,以保持我们实现选择的开放性,因此 Go 的互操作性短板并不是特别相关。Go 拥有出色的代码生成和数据表示能力,就像 Rust 一样。Go 拥有出色的并发原语,就像 Rust 一样。单核性能也在误差范围内。虽然在 Go 中使用不安全代码可能会带来一些性能提升,但我们在不使用任何不安全原语的情况下已经获得了出色的性能和内存使用。

在我们看来,Rust 在实现其设计目标方面非常成功,但“从这个特定的 JavaScript 代码库轻松移植到 Rust”显然不是它的设计目标之一。Go 也不是,但就我们目前编写代码的方式而言,它在这方面确实表现得相当不错。

关于贡献问题,我并不是特别担心。学习如何在类型检查器中正确工作所需的努力,远比学习 Go 要多得多。

TypeScript 为什么使用 Go 而不是 Rust 重写 ?官方回应来了的更多相关文章

  1. 性能提升 40 倍!我们用 Rust 重写了自己的项目

    前言 Rust 已经悄然成为了最受欢迎的编程语言之一.作为一门新兴底层系统语言,Rust 拥有着内存安全性机制.接近于 C/C++ 语言的性能优势.出色的开发者社区和体验出色的文档.工具链和IDE 等 ...

  2. 重写官方TodoList,对于初学react+redux的人来说,很有好处

    虽然官网的TodoList的例子写的很详细,但是都是一步到位,就是给你一个action,好家伙,全部都写好了,给你一个reducer,所有功能也是都写好了,但是我们这些小白怎么可能一下就消化那么多,那 ...

  3. JetBrains Fleet初体验,如何运行一个java项目

    序言 各位好啊,我是会编程的蜗牛,JetBrains 日前宣布其打造的下一代 IDE Fleet 正式推出公共预览版,现已开放下载.作为java开发者,对于JetBrains开发的全家桶可以说是印象深 ...

  4. category中重写方法?

    问:可以在category中重写方法吗? 答:代码上可以实现 在category中重写方法,但在实际开发中,不建议这样做.如果确实需要重写原有方法也建议使用子类进行重写. category是为了更方便 ...

  5. C++中重载、重写(覆盖)和隐藏的区别实例分析

    这篇文章主要介绍了C++中重载.重写(覆盖)和隐藏的区别,是C++面向对象程序设计非常重要的概念,需要的朋友可以参考下 本文实例讲述了C++中重载.重写(覆盖)和隐藏的区别,对于C++面向对象程序设计 ...

  6. c++ --> 重载、重写(覆盖)和隐藏的区别

    重载.重写(覆盖)和隐藏的区别 一.重载 重载从overload翻译过来,是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心 ...

  7. c++中重载,重写,覆盖

    1.重载 重载从overload翻译过来,是指同一可访问区内被声明的几个具有不同参数列表(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型. 相同的范围(在 ...

  8. Atitit.rust语言特性 attilax 总结

    Atitit.rust语言特性 attilax 总结 1. 创建这个新语言的目的是为了解决一个顽疾:软件的演进速度大大低于硬件的演进,软件在语言级别上无法真正利用多核计算带来的性能提升.1 2. 不会 ...

  9. Java和C++里面的重写/隐藏/覆盖

    首先,无关重载. 注:重载是同一个类的各个函数之间的.重写是父类子类之间的.Overload和Overwrite(也叫Override)的区别. 注意:Java里面区分重写(Override/Over ...

  10. C++概念分析之 重载、重写(覆盖)和隐藏的区别

    一.基本概念区别: 重载:是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型. 隐藏:是指派生类的函数屏蔽了与其 ...

随机推荐

  1. git同步远程仓库的所有分支

    git clone克隆远程仓库默认是只克隆master分支,当想把远程仓库上的所有的分支都克隆下来的话,有以下几种方法. 使用远程仓库github上的LSMLIB仓库为例.该仓库在github上一共有 ...

  2. 人工生命(AL:Artificial life)兰顿蚂蚁多版本代码html\go\php\python\java

    背景介绍 人工生命(AL:Artificial life)这一概念由美国计算机科学家.人工生命领域创始人之一克里斯托弗・盖尔・兰顿(Christopher G. Langton)提出.1986 年,兰 ...

  3. 多线程极速导出/9字段10W行只需2秒/导入导出打印组件/功能丰富简单易用

    一.功能特点 组件同时集成了导出数据到csv.xls.pdf和打印数据. 所有操作全部提供静态方法无需new,数据和属性等各种参数设置采用结构体数据,极为方便. 同时支持QTableView.QTab ...

  4. Qt编写安防视频监控系统30-GPS运动轨迹

    一.前言 此功能是一个客户定制的,主要是需要在地图上动态显示GPS的运动轨迹,有个应用场景就是一个带有监控的车子,实时在运动中,后台可以接收到经纬度信息,需要绘制对应的轨迹,相当于这些摄像机点位是动态 ...

  5. Vue cli 2.x 3.x及4.x区别

    原文链接: 1.Vue cli 2.x 3.x及4.x区别 2.vue-cli2.0/3.0/4.0创建项目的方式差异解读和vue-cli4.0打包命令和环境配置

  6. Android RNDIS gadget Windows免驱修改方案

    过程简单粗暴,拿到竞品的设备,然后使用UsbTreeView查看设备的相关描述符. 对比发现接口抽象描述符和接口描述符不一致,直接修改Linux RNDIS gadget 驱动,将驱动中有关的两个描述 ...

  7. Spring IOC实现原理,源码深度剖析!

    Spring容器高层视图 Spring 启动时读取应用程序提供的Bean配置信息,并在Spring容器中生成一份相应的Bean配置注册表,然后根据这张注册表实例化Bean,装配好Bean之间的依赖关系 ...

  8. w3cschool-HBase官方文档-3MapReduce

    HBase和MapReduce 2018-03-30 13:59 更新 HBase和MapReduce Apache MapReduce 是一个用于分析大量数据的软件框架.它由 Apache Hado ...

  9. PDCA使用指南详解(史上最强)

    PDCA循环,一个老话题了,大家都知道要这么做,但在平时的生活和工作当中,你是否真的都这样做呢? 当你发现你面对的困难重重,寸步难行时,是否反思过是因为自己一开始的方法就不正确? 本文包涵了PDCA循 ...

  10. 修改Maven仓库到国内

    修改Maven仓库到国内 Maven home directory:选择已安装的Maven目录. User settings file:根据安装Maven自动显示的配置文件settings.xml路径 ...