TypeScript之父:JS不是競爭對手,曾在懼怕開源的微軟文化中艱難求生

開源的 TypeScript 也曾在微軟內部遭到抵制,但如今 TypeScript 已經成爲 Web 應用構建的主流語言。

微軟的開源編程語言 TypeScript 是 JavaScript 的一種帶有類型系統的變體,到今年 12 月已經有 10 年曆史了。

如今,它已成長爲開發人員構建可在瀏覽器中運行的應用時常用的語言。但時間倒退回 2010 年,彼時的 Type Script 卻需要在依舊懼怕開源的微軟公司文化中找到自己的出路。

TypeScript 的共同創始人之一,來自丹麥的微軟軟件工程師和技術研究員 Anders Hejlsberg 向 ZDNet 講述了 2010 年的那一段歷史。當時微軟的首席執行官史蒂夫·鮑爾默領導的團隊決定,開源戰略是唯一可以贏得 JavaScript 開發人員支持的制勝法寶。

鮑爾默在 2001 年曾說過“開源就是一種癌症,Linux 是一種毒瘤”,稱其威脅到了微軟的所有知識產權。直到 2010 年,開源對於微軟的高層管理人員來說仍然是一個棘手的問題。

Hejlsberg 說:“Linux 被視爲對 Windows 的威脅,可事實證明,它恰恰相反。”

鮑爾默於 2014 年 8 月辭去首席執行官一職。如今,在微軟首席執行官薩蒂亞·納德拉的領導下,公司已經將業務重心轉向了雲計算,並熱情地擁抱了開源社區,還收購了開源代碼存儲庫 GitHub。

微軟的其他主要開源項目包括流行的代碼編輯器 Visual Studio Code(VSCode)、.NET Code 和 TypeScript。TypeScript 是 JavaScript 的超集,帶有類型系統,代碼可編譯爲 JavaScript。

自 2012 年正式發佈以來,TypeScript 已成爲瀏覽器應用程序前端開發的主導語言之一,Slack、Airbnb 以及微軟自己都採用了 TypeScript,微軟還用 TypeScript 構建了 VS Code。這種語言現在與 Java、JavaScript 和 Python 一道,在十大編程語言中佔有一席之地。

但回到 2010 年,Hejlsberg 知道在微軟的雷蒙德總部推銷開源 TypeScript 的想法可能會是一個艱鉅的挑戰。隨着這種編程語言迎來十週年紀念日,他回憶起微軟彼時是如何看待開源代碼的。

“聖誕節就是我們的 10 週年紀念。”Hejlsberg 告訴 ZDNet,“TypeScript 一開始實際上只是一個想法,看看我們是否可以在 JavaScript 方面做得更好”。

“我們構建了一些原型,然後將它們整合在一起。但是很明顯,我們要吸引 JavaScript 社區的唯一方法就是開源。但在那時的微軟討論這個話題的氛圍和今天是大相徑庭的。”

Hejlsberg 的 TypeScript 團隊當時的處境並不好,他們需要扭轉高層的偏見,高層的那些人對 Hejlsberg 所做的事情有強烈的牴觸情緒。雖然 Hejlsberg 沒有提及任何當初反對 TypeScript 的高管的名字,但 Hejlsberg 指出, 當時在鮑爾默的領導下,微軟對開源有着“非常矛盾”的態度,而且有一種“恐懼”心理。

Hejlsberg 說:“我們知道這是我們必須做的事情,但是我們沒有這方面的經驗。”

可是隨着 TypeScript 的逐漸成熟,加上開源在微軟主營業務從 Windows 到雲的轉變過程中獲得了認可,該公司在 2014 年通過 GitHub 上的一個公共存儲庫將 TypeScript 轉型爲“開放式開發”模式。使用 GitHub,意味着 TypeScript 和 JavaScript 的開發社區可以影響這種編程語言的未來發展。

由於採用了這種全新的方法,他的團隊現在與他們的客戶,也就是使用 JavaScript 或 TypeScript 的開發人員之間實現了“零距離”。

Hejlsberg 解釋說:“從技術意義上講,開源是指你向人們提供你的源代碼並放棄你的知識產權,這就是技術上的開源。但接下來是開放式開發,你實際上是在公開地完成整個開發過程。自 2014 年 TypeScript 移至 GitHub 以來,我們一直在這樣做。”

GitHub 在 2018 年被微軟以 75 億美元的價格收購,如今由約 20 位微軟工程師組成的 TypeScript 團隊的所有日常工作都在 GitHub 上完成,從而做到了“與客戶保持從未有過的親密關係”。

Hejlsberg 曾在 Borland 任職,自 1996 年以來一直在微軟工作,負責構建 Turbo Pascal 編譯器。在微軟,他還是 C# 的首席架構師。

Hejlsberg 說,在遷移到 GitHub 之前,TypeScript 用戶會在開發者大會上提交錯誤或需求請求,但他的團隊往往需要一年的時間來交付新功能,結果經常會錯過時機。

爲什麼要創建 TypeScript?

TypeScript 是在微軟和 Web 走在重要路口的有趣關頭誕生的。由於 Internet Explorer 的市場份額被谷歌 Chrome 攫取,微軟在 2015 年使用開源 Chakra JavaScript 引擎打造了全新的 Edge 瀏覽器。但是到了這個時候,專注於 Web 標準,具備功能強大的 V8 JavaScript 引擎的谷歌 Chrome 顯然已經贏得了瀏覽器大戰。

“瀏覽器之戰結束了,谷歌構建了 Chrome,HTML5 也在崛起。谷歌還構建了一個非常高效的 JavaScript 引擎,JavaScript 的效率大大提高了。每個人都開始意識到,瀏覽器將成爲真正的應用的樂園。”Hejlsberg 回憶道。

那時,開發人員已開始爲瀏覽器構建龐大的 JavaScript 應用程序,並努力用 JavaScript 編寫它們,他說這種語言缺乏諸如模塊、類等關鍵功能;而且,重要的是缺乏一種通過程序中的規則來建立秩序的類型系統。

然後是開發工具,比如 VS Code 這樣的集成開發環境(IDE),它們可以提高開發人員的生產率。

“想一想我們開發工具強大能力的源泉(例如現代化的 IDE),包括 Visual Studio 或 WebStorm(來自 JetBrains)以及其他產品所擁有的的所有編程生產力特性(例如 VS Code 的 IntelliSense、代碼定義、代碼導航等等),都需要 IDE 能夠推理出你正在處理的代碼。我們都認爲這是理所當然的需求。”他說,“類型系統是你推理代碼的一種方法。它提供了在運行和部署代碼之前檢查代碼的能力。如果編程語言沒有類型,這幾乎是不可能做到的。當時,開發人員正在做很多瘋狂的事情,例如編寫 Outlook.com 這樣的大型項目。該產品曾經是用 C# 的一個變體編寫的,然後使用稱爲 Script Sharp 的工具交叉編譯到了 JavaScript 上。”

谷歌有一個類似的交叉編譯工具,稱爲 Google Web Toolkit(GWT),該工具允許其開發人員使用 Java 編寫代碼並交叉編譯爲 JavaScript。通過這種方式,谷歌獲得了成熟的開發工具鏈。他們可以獲得具有項目功能、模塊和類,以及 IntelliSense 和語句自動完成功能的 IDE,然後他們可以將 JavaScript 視爲一種指令語言。

在 TypeScript 出現之前,微軟打算將一種稱爲 Script Sharp 的工具轉變爲產品。但是 Hejlsberg 想知道這些開發人員是否願意“屈服於此來編寫 JavaScript”。那麼,爲什麼不嘗試解決 JavaScript 的實際問題呢?

Hejlsberg 說:“因爲你肯定沒法告訴人們說,用另一種語言編寫代碼可以爲 JavaScript 建立最佳的開發體驗。因此,我們開始研究如何解決這些問題,以爲 JavaScript 構建更好的工具。這的確是 TypeScript 的起源。關鍵是要向語言中添加類型系統,而且還不能影響那些讓 JavaScript 如此流行的東西。”

Hejlsberg 和他的公司決定建立一個“可擦除類型系統”,這個組件使 TypeScript 成爲 JavaScript 的超集。在編譯時,TypeScript 會刪除所有類型並將代碼還原回 JavaScript。

從某種意義上說,它是一個 type system,只存在於開發人員編程期間,在運行時就會消失。不過在運行的時候,它給你帶來的只有好處,沒有任何缺點。

TypeScript 的主要競爭對手有哪些?

根據 Hejlsberg 的說法,TypeScript 的唯一真正競爭對手是 JavaScript,因爲這兩種語言都是運行前端應用程序的必備語言,而 WebAssembly 卻模糊了原生應用程序和瀏覽器應用程序之間的界限。

他說:“但是 JavaScript 並不是真正的競爭者。它是我們的雙胞胎或是另一個自我。

這個問題實際上是:是否存在與 JavaScript / TypeScript 競爭的語言?答案是肯定的也是否定的。但是你在這些列表上看到的每種語言通常都有相似點,例如 Python 已在機器學習和 AI 領域找到了很多用例,而 SQL 被用於創建數據庫,C# 和 Java 在企業後端發光發熱。

“JavaScript 和 TypeScript 是前端的運行方式。這是瀏覽器中唯一運行的語言,除了現在的 WebAssembly 之外。因此,這是完全自然而然的親緣關係。如果要編寫 Web 應用程序,你就會用 JavaScript 或 TypeScript 編寫。”

像 JavaScript 一樣,微軟的 TypeScript 也會跟隨 ECMAScript 標準的發展步伐,並且 TypeScript 的進展速度越來越快,以迎合喜歡純 JavaScript 的開發人員。

Hejlsberg 說:“一旦功能進入 ECMAScript 標準化流程的第三階段,我們就認爲該功能已準備就緒,可以在 TypeScript 中採用,然後我們會與社區合作以合併拉取請求。”

在過去的兩年中,TypeScript 團隊改進了對 JavaScript js.doc 註釋中類型註解的支持,從而“爲那些不想使用 TypeScript 的人”帶來更適合他們的 Type Script。

“由於 TypeScript 是 JavaScript 的超集,因此你也可以將 JavaScript 視爲 TypeScript 的子集。這意味着我們整個 TypeScript 工具鏈非常樂於處理 JavaScript,並在 JavaScript 之上提供所有服務,”Hejlsberg 說。

“從某種意義上說,JavaScript 就像是沒有類型註釋的 TypeScript。因此,一種流行的 JavaScript 使用方式是,人們將類型註解放在註釋(js.doc 註釋)中,而不是直接在源代碼中使用類型註解。編譯器實際上可以從這些註釋中獲得很多信息。”

正因如此,在過去的幾年中,Heijlsberg 和他的團隊一直在增強對 js.doc 註釋的支持,並增強直接使用 JavaScript 的能力。

TypeScript 之父,圖片來源:微軟 /YouTube

原文鏈接

TypeScript creator: How the programming language beat Microsoft’s open-source fears

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章