Categories
程式開發

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之父:JS不是競爭對手,曾在懼怕開源的微軟文化中艱難求生 1

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

原文鏈接

TypeScript創作者:編程語言如何戰勝Microsoft的開源恐懼