作者:Liam Tung
編譯:王治治丨釋出自:思否編輯部
原文連結:https://www.zdnet.com/article...
微軟的開源程式語言 TypeScript 是 JavaScript 的一個超集,到今年 12 月就滿 10 歲了。
它已經成長為構建在瀏覽器中執行的應用程式的首選語言,但早在 2010 年,它不得不在微軟公司的文化中選擇自己的方式,當時微軟公司仍然害怕開源。
TypeScript 之父 Anders Hejlsberg 是微軟的丹麥軟體工程師和技術研究員,他在一次媒體採訪中描述了 2010 年,在微軟首席 Steve Ballmer 的領導下做出的決定 —— 開源戰略是贏得JavaScript開發人員的唯一途徑。
Ballmer 在 2001 年稱 Linux 是威脅微軟所有智慧財產權的 "癌症",而在 2010 年,微軟的開源仍然是高層管理人員的棘手問題。
"Linux被視為對Windows的威脅,而事實證明,它恰恰相反。"Hejlsberg 說。
Ballmer 於 2014 年 8 月卸任 CEO,此後他收回了這一立場,如今,在微軟 CEO 薩提亞-納德拉(Satya Nadella)的領導下,該公司專注於雲端計算並熱愛開源,還擁有開原始碼庫 GitHub。
微軟其他主要的開源專案包括流行的程式碼編輯器 Visual Studio Code(VS Code)、.NET Code 和 TypeScrip。
自 2012 年正式釋出以來,TypeScript 已經成為瀏覽器應用前端開發的重要語言,被 Slack、Airbnb 等公司採用,當然還有用 TypeScript 構建 VS Code 的微軟自己。現在,該語言與Java、JavaScript 和 Python 一樣,在十大程式語言中穩居一席之地。
但在 2010 年,Hejlsberg 知道,將 TypeScript 作為一個開源專案在微軟雷德蒙德總部推銷可能會很困難。在這一程式語言即將迎來 10 週年之際,Hejlsberg 回憶起微軟是如何以畏懼的態度看待任何開源專案的。
"到聖誕節的時候就 10 年了,TypeScript 最初真的只是一個想法,'讓我們看看我們是否可以在 JavaScript 方面做得更好'。
"我們構建了一些原型,然後將它們整合在一起。但是很明顯,我們要吸引 JavaScript 社群的唯一方法就是開源。那時的微軟進行了一次不同觀點的討論。"
Hejlsberg 的 TypeScript 團隊“實際上必須讓旗杆上的一群人對我們在這裡應該做什麼有強烈的看法”,但沒有提及任何可能反對它的高管的名字。但他指出,當時在鮑爾默(Balmer)的領導下,微軟對開源感到“非常矛盾”。Hejlsberg 說:“我們知道這是我們必須做的事情,但是我們沒有經驗。”
但是隨著 TypeScript 的成熟和開源在 Microsoft 從 Windows 到雲的轉變中獲得認可,該公司將在 2014 年通過 GitHub 上的公共儲存庫將 TypeScript 轉換為“開放開發”模型。使用 GitHub 可以使 TypeScript 和 JavaScript 開發人員社群影響其未來。
由於採用了不同的方法,他的團隊現在與使用 JavaScript 或 TypeScript 的開發人員之間的客戶“零距離”。
Hejlsberg 解釋說:“從技術意義上講,開源是指您向人們提供您的原始碼並放棄您的智慧財產權,從技術上講,這是開源的。”
“但是接下來是開放式開發,您實際上是在公開地完成整個開發過程,自 2014 年 TypeScript 移至 GitHub 以來,我們一直在這樣做。”
如今,微軟於 2018 年以 75 億美元的價格收購了 GitHub, TypeScript 團隊則由大約 20 名微軟工程師進行日常工作的地方,從而實現“與客戶保持緊密聯絡,這是我從未見過的事”。
Hejlsberg 在 Borland 任職後,自 1996 年以來一直在 Microsoft 工作,並建立了Turbo Pascal編譯器。在微軟,他還是C#的首席架構師。
Hejlsberg 說,在遷移到 GitHub 之前,TypeScrip t使用者將在開發者大會上提交錯誤或需求請求,但是他的團隊將需要一年的時間來交付通常會錯過新功能。
為什麼要建立TYPESCRIPT?
TypeScript在微軟孵化的時候,正值網路和公司的一個有趣的關頭。隨著 Internet Explorer 的份額被 Google Chrome 奪走,微軟在 2015 年推出了使用開源 Chakra JavaScript 引擎的 Edge 瀏覽器。但當時谷歌 Chrome 瀏覽器憑藉其對網路標準的關注和強大的 JavaScript 引擎 V8,已經成為瀏覽器大戰的明顯贏家。
"瀏覽器大戰結束了,谷歌已經打造出了 Chrome 瀏覽器,HTML5 也正在發生。谷歌還打造了一個非常高效的 JavaScript 引擎,JavaScript 的效率已經大大提升。每個人都開始意識到,瀏覽器將成為真正的瀏覽器。"Hejlsberg 回憶道。
Hejlsberg 說:"當時開發人員已經開始為瀏覽器構建龐大的 JavaScript 應用,並努力用 JavaScript 編寫這些應用,他說這種語言缺乏模組、類等關鍵功能,更重要的是,缺乏在程式中通過規則建立秩序的型別系統。
然後是開發者工具,比如像 VS Code 這樣的整合開發環境(IDE),它們可以用於提高開發者的生產力。
“如果您考慮到我們開發工具(例如現代 IDE)的強大功能,我們都認為這是理所當然的,例如 Visual Studio 或 WebStorm(來自 JetBrains)以及其他產品 —— 我們擁有所有的程式設計師生產力功能,例如 VSCode 的 IntelliSense,程式碼定義程式碼導航需要 IDE能夠推理出您正在處理的程式碼。”他說。
“型別系統是您推理程式碼的一種方法。它是在執行和部署程式碼之前檢查程式碼的能力。如果沒有使用某種語言的型別,這幾乎是不可能的。
"當時,開發人員正在做一些瘋狂的事情,比如編寫整個產品,比如Outlook.com,它一度是用 C# 的變體編寫的,而 C# 是用一種叫做 Script Sharp 的工具交叉編譯成 JavaScript 的。"
Google 有一個類似的交叉編譯工具,叫做 Google Web Toolkit(GWT),它允許其開發人員用 Java 編寫並交叉編譯成 JavaScript。
“他們可以得到一個真正的 IDE,具有專案功能、模組和類、IntelliSense 和語句完成,然後他們可以將 JavaScript 視為一種指令語言,"他說。
在 TypeScript 出現之前,微軟就想把一個叫 Script Sharp 的工具變成產品。但 Hejlsberg 不知道這些開發者是否願意 "彎下那麼大的腰來用 JavaScript 寫作"。那麼為什麼不嘗試用 JavaScript 解決真正的問題呢?
"因為肯定不會通過告訴人們用另一種語言編寫來為JavaScript建立最佳的開發體驗。"他說。
"所以我們開始研究我們能做什麼來解決這些問題,為 JavaScript 構建更好的工具。這就是 TypeScript 的真正起源。關鍵是在語言中新增一個型別系統,而不奪走當初讓 JavaScript 如此受歡迎的所有東西。"
Hejlsberg 和公司決定建立一個 "可擦除的型別系統" —— 這個元件使 TypeScript 成為 JavaScript 的超集。在編譯時,TypeScript 會刪除所有的型別,並將其返回給 JavaScript。
"從某種意義上說,這是一個只存在於開發者體驗期間的型別系統,但在執行時它就會消失。但在執行時,它能給你帶來所有的好處,而沒有任何的缺點。"他解釋道。
TYPESCRIPT的主要競爭對手是什麼?
根據 Hejlsberg 的說法,TypeScript 唯一真正的競爭對手是 JavaScript,因為這兩種語言現在都是執行前端應用程式的首選語言,而 WebAssembly 正在模糊本地應用程式和瀏覽器應用程式之間的界限。
"但 JavaScript 並不是真正的競爭對手,它是我們的孿生兄弟或另一個自我。"他說。
"問題實際上是,'是否有語言可以與 JavaScript 和/或 TypeScript 競爭?有,也沒有。但你在這些列表上看到的每一種語言通常都有一個親和點。就像 Python 在機器學習和 AI 中找到了一大堆用途,而 SQL 被用來建立資料庫,C# 和 Java 在企業後端很重要。
"你知道,JavaScript 和 TypeScript 是前端的執行方式。它是唯一一種在瀏覽器中執行的語言,除了現在的 WebAssembly。所以有一種完全自然的親和力。如果你要寫一個 web 應用,你就會用 JavaScript 或 TypeScript 來寫。"
像 JavaScript 一樣,Microsoft TypeScript 也跟蹤 ECMAScript 標準的發展,而且越來越多的TypeScript被開發出來,以迎合那些喜歡純JavaScript的開發者。
“一旦功能進入 ECMAScript 標準化流程的第三階段,我們就認為該功能已準備就緒,可以在 TypeScript 中採用,然後我們與社群合作以合併請求。”
在過去的兩年裡,TypeScript團隊通過改進對JavaScript js.doc註釋中型別註釋的支援,致力於“為那些不想使用TypeScript的人”構建TypeScript。
“由於 TypeScript 是 JavaScript 的超集,因此您也可以將 JavaScript 視為 TypeScript 的子集。這意味著我們整個 TypeScript 工具鏈非常樂於處理 JavaScript 並在 JavaScript 之上提供所有服務,” Hejlsberg 說。
“從某種意義上說,JavaScript 就像沒有型別註釋的 TypeScript。因此,一種流行的使用 JavaScript 的方式是,人們將型別註釋放在註釋(js.doc註釋)中,而不是直接在原始碼中使用型別註釋。編譯器實際上可以從這些註釋中獲得很多資訊。因此,在過去的幾年中,我們實際上增強了對 js.doc 註釋的支援,並增強了直接使用 JavaScript 的能力。”
2015 年 Anders Hejlsberg 第一次來中國,就參加了 SegmentFault 思否組織的線下活動。作為 TypeScript 的核心開發者,在當時的活動中他就曾表示非常感謝中國如此多的開發者能夠支援 TypeScript,另外他也表示,通過 SegmentFault 思否策劃的線下活動,看到了中國整個開發者社群非常大的熱情,也希望在之後越來越多的開發者能參與到 TypeScript 的工作中來。
擴充閱讀:
《SegmentFault 創始人祁寧對話 C# 之父 Anders Hejlsberg》
《SegmentFault 為何成為本次微軟 Ignite 大會中國區唯一社群代表?》