自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

技術(shù)選型之爭:看編程泰斗給 TypeScript-7 編譯器選型 Go 的淺顯思考與疑惑

開發(fā) 前端
微軟的項目沒有刻意選擇應(yīng)用自己的技術(shù),恰恰說明其決策之純粹,是只基于技術(shù)層面的考量。 這種獨屬于技術(shù)引領(lǐng)者的、釋然放松的狀態(tài),我們恐怕無論在主觀上還是在客觀上,都需要很長時間才能體會到。

編程屆泰斗、流行編程語言 C# 和 TypeScript 主要設(shè)計者 Anders Hejlsberg 于 3 月 11 日在微軟技術(shù)博客上發(fā)布的文章[1]可謂是一石激起千層浪:“我們開源了已經(jīng)完成得差不多的 TypeScript-7 的代碼...不再使用 TypeScript 實現(xiàn),而是將其遷移到了 go 語言...性能比現(xiàn)有 tsc 快了 10 倍,無論是編譯還是在 Language Server Protocol (LSP)上”。

基于編程經(jīng)驗以及對技術(shù)社區(qū)的關(guān)注,在我的認(rèn)知里,這個消息無疑是令人震驚的,在 Hacker News comments[2]Github disscussion[3] 上的激烈討論也印證了我的觀點。

我的第一反應(yīng)是:為什么不用 Rust ?

  • Rust 幾乎已經(jīng)全面“侵入” TypeScript 和前端生態(tài)鏈,比如編譯 TS 的 SWC 、 Oxc ,打包工具 Rolldown 、 Turbopack ,代碼檢查工具 RSLint 、 deno_lint
  • 很巧的是,就在這個新聞出現(xiàn)前一天 3 月 10 日,我剛剛在茶余飯后聽了尤雨溪最新演講[4]

2025 尤雨溪最新演講:圍繞 Vite 的前端統(tǒng)一工具鏈2025 尤雨溪最新演講:圍繞 Vite 的前端統(tǒng)一工具鏈

結(jié)合我平時刷的前端帖子,仿佛一切都預(yù)示著:所有基于 JS/TS 實現(xiàn)的相對底層的工具,都將遷移到 Rust 實現(xiàn)...

但是當(dāng)我看完 A 10x faster TypeScript 這個 13 分鐘的視頻,才發(fā)現(xiàn)選擇 Go ,而不是 Rust 或 C# 的理由是十分充分的。

我這個年代的程序員(23年畢業(yè)時, Go 生態(tài)已經(jīng)相對成熟,已經(jīng)被廣泛用于生產(chǎn)環(huán)境)在學(xué)習(xí)工作中已經(jīng)有大量機會接觸到 Go :

  • MIT6.824 麻省理工的分布式系統(tǒng)公開課,作業(yè)和課程設(shè)計是基于 Go 語言的
  • 在云原生時代,你不可能接觸不到 k8s ,而實現(xiàn)一些 hook ,要會用 Go 語言
  • 相比 Java , Go 的設(shè)計更加簡單、直接、底層——

Go 天生為服務(wù)端并發(fā)而服務(wù),創(chuàng)建管理有棧協(xié)程 goroutine 極其方便

Go 的設(shè)計十分謹(jǐn)慎,不希望給程序員留出太多自我發(fā)揮的空間,從而嚴(yán)格控制了代碼質(zhì)量:強類型、用大小寫規(guī)定變量私有公有屬性、 lint 不對就不許通過編譯 etc.

Go 拋棄了 OOP 面向?qū)ο缶幊?,鼓勵使?interface

Go 甚至只允許在函數(shù)中返回 err 拋棄了 try catch 機制

Go 甚至直接用 Git 倉庫管理依賴

Go 中可以直接訪問指針,某種意義上講可以把 Go 理解為有語法糖的 C 語言,但同時 Go 是有 GC 垃圾回收機制的

Go 可以直接打包 runtime ,把自己編譯成一個很小的可執(zhí)行文件,并不需要管理生產(chǎn)環(huán)境運行時

上述特點也包含了 TypeScript 官方團隊選擇 Go 關(guān)鍵因素:

  1. 他們需要程序很快, Go 天生并發(fā)
  2. 他們需要 TypeScript 兼容各個平臺, Go 作為一個實現(xiàn)了 docker 這種 IoT 物聯(lián)網(wǎng)行業(yè)都廣泛應(yīng)用的工具的語言,其兼容性已經(jīng)得到證明
  3. 他們需要有 GC 垃圾回收機制的語言(這點后面會展開解釋)

說到這里,肯定有人會問為什么不用同樣速度快、且更加底層并且和 TypeScript 生態(tài)耦合緊密的 Rust 呢?

因為 TypeScript 決定“移植”項目,而非“重構(gòu)”項目。

如視頻中的一個截圖,已經(jīng)可以很明顯地看出原因:

go 和 ts 的代碼幾乎一樣...go 和 ts 的代碼幾乎一樣...

TypeScript 編譯器同一個函數(shù)邏輯,上圖左邊是 Go 實現(xiàn),右邊是 TypeScript 實現(xiàn),你可以發(fā)現(xiàn),他們幾乎長得一樣...這也為 TypeScript-go 的開發(fā)工作減輕了極多的負(fù)擔(dān)。

如果使用 Rust ,考慮到 Rust 的設(shè)計哲學(xué),則不得不進行重構(gòu)。

實際上,在我翻之前收藏的知乎帖子時,才發(fā)現(xiàn)基于 Rust 實現(xiàn) swc 工具的作者,前些日子也宣布了決定從 Rust 轉(zhuǎn)向 Go 。

https://www.zhihu.com/question/513453040/answer/2393678735https://www.zhihu.com/question/513453040/answer/2393678735

這其中的核心論點都是:并不是 Rust 不好,而是 Go 很方便。

另一個觀點是,為什么不用 C# 呢?要知道 TypeScript 和 C# 都是微軟設(shè)計并主導(dǎo)發(fā)展的技術(shù),而 Go 則是對家 Google 的產(chǎn)品。尤其是 Anders Hejlsberg 還有 “TypeScript 和 C# 之父”的美名,“親爹”都不喜歡“親兒子”了嗎?

這里我總結(jié)一些觀點:

  1. C# 和 Java / Python 類似,需要先轉(zhuǎn)為字節(jié)碼,運行在運行時上
  2. 但是 C# 也可以 Native AOT 作為二進制執(zhí)行呀?很簡單,正是由于 C# 什么都能做,導(dǎo)致其 Native AOT 并不如 Go 那般久經(jīng)沙場考驗,這里還可以搬出 docker 的例子...
  3. C# 主打 OOP 風(fēng)格,與 TypeScript 項目本身的設(shè)計不一致,還是那句話:要移植而非重構(gòu)

此外, Hejlsberg 老人家已經(jīng)很久沒有管理過 C# 的發(fā)展了——現(xiàn)在的 C# 可以說和 C++ 一樣都是編程語言中的龐然巨獸,怪物般的存在。你可以用他們寫出風(fēng)格特異甚至詭異的代碼。但是這本身是一柄雙刃劍,太強大以至于難以駕馭。

https://zhuanlan.zhihu.com/p/368304027https://zhuanlan.zhihu.com/p/368304027

上述文章惡意并不強(并不是抨擊 Go ,而是抨擊無腦吹捧的風(fēng)氣),其實可以說明 C# 在性能實現(xiàn)層面是高于 Go 的——但是 Go 的性能可能差一點點,而上手開發(fā)以及維護難度好了很多。

微軟的項目沒有刻意選擇應(yīng)用自己的技術(shù),恰恰說明其決策之純粹,是只基于技術(shù)層面的考量。 這種獨屬于技術(shù)引領(lǐng)者的、釋然放松的狀態(tài),我們恐怕無論在主觀上還是在客觀上,都需要很長時間才能體會到。

所以從這里,我們可以總結(jié)出哪些經(jīng)驗?

  1. 開發(fā)成本是最需要考量的因素,這其中包括但不限于:技術(shù)選型的難度、開發(fā)路線是否曲折、生態(tài)是否良好、是否已經(jīng)被實際證明可用、是否好找到幫手
  2. 遠離編程語言飯圈,沒有一門語言值得被神化,客觀看待網(wǎng)絡(luò)觀點

同時,我也有一個小小疑問:Go 的 err 和類型系統(tǒng)在我看來是十分簡陋的,它能適配有“類型體操藝術(shù)家”之名的 TypeScript 嗎?答案一定就在整個 Repo 里。

參考資料

[1]在微軟技術(shù)博客上發(fā)布的文章: https://devblogs.microsoft.com/TypeScript/TypeScript-native-port/

[2]Hacker News comments: https://news.ycombinator.com/item?id=43332830

[3]Github disscussion: https://github.com/microsoft/TypeScript-go/discussions/411

[4]尤雨溪最新演講: https://www.bilibili.com/video/BV1WERGYDEix

責(zé)任編輯:武曉燕 來源: Piper蛋窩
相關(guān)推薦

2016-10-21 15:58:51

容器容器技術(shù)Docker

2013-09-04 14:55:01

Web AppNative App技術(shù)

2022-06-08 13:25:51

數(shù)據(jù)

2023-04-11 08:02:26

單測技術(shù)JUnit框架

2023-09-15 14:37:55

2022-09-22 09:54:56

技術(shù)選型

2024-07-25 08:52:13

2020-10-13 18:25:33

技術(shù)流程云計算

2020-09-27 14:55:27

程序員技能開發(fā)者

2023-11-13 08:37:33

消息中間件分布式架構(gòu)

2020-06-17 15:44:47

技術(shù)研發(fā)架構(gòu)

2020-02-24 20:45:33

控制器技術(shù)選型技巧

2013-12-30 11:21:31

Go編譯器

2016-11-15 14:18:09

神策分析大數(shù)據(jù)數(shù)據(jù)分析

2013-10-28 13:48:10

技術(shù)選型

2012-02-13 16:00:35

內(nèi)網(wǎng)安全技術(shù)選型安全產(chǎn)品

2016-12-22 13:32:04

服務(wù)化框架JSF解密

2022-08-19 14:06:56

前端架構(gòu)技術(shù)

2021-01-18 05:20:52

數(shù)倉hive架構(gòu)

2023-11-03 09:05:53

點贊
收藏

51CTO技術(shù)棧公眾號