開源的 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 的能力。
原文連結
https://www.zdnet.com/article/typescript-creator-how-the-programming-language-beat-microsofts-open-source-fears/
作者:ZDNet
譯者:王強
策劃:李俊辰
連結:TypeScript之父:JS不是競爭對手,曾在懼怕開源的微軟文化中艱難求生
來源:微信公眾號 | 前端之巔