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