發(fā)布于:2020-12-24 16:12:36
0
81
0
在2020年開發(fā)者調(diào)查結(jié)果中,最受關(guān)注的統(tǒng)計(jì)數(shù)據(jù)之一是最受歡迎的語(yǔ)言。正如幾年來(lái)一樣,Rust是第一名。但是排在第二位的是TypeScript,這是JavaScript的一種強(qiáng)類型超集,略微勝過(guò)Python。我們想了解TypeScript為何如此受歡迎,因此我們聯(lián)系了Microsoft TypeScript語(yǔ)言的主要工程負(fù)責(zé)人Ryan Cavanaugh。他足夠慷慨地坐下來(lái)回答我們的問(wèn)題。事不宜遲,以下是我們的對(duì)話,為清晰起見(jiàn),我們對(duì)其進(jìn)行了輕松編輯。
問(wèn):您在TypeScript團(tuán)隊(duì)工作了多久了?
答:我是在2012年2月首次發(fā)布TypeScript團(tuán)隊(duì)大約六個(gè)月之前就加入這個(gè)團(tuán)隊(duì)的。所以,我已經(jīng)從事了大約八年的時(shí)間。
問(wèn):有趣,所以很接近開始。您還記得為什么團(tuán)隊(duì)想出TypeScript,為什么要發(fā)布類似的東西嗎?
答:當(dāng)我加入團(tuán)隊(duì)時(shí),Microsoft的很多人都想以我們所謂的“應(yīng)用程序規(guī)模”開發(fā)JavaScript。 TFS和Office等團(tuán)隊(duì)希望構(gòu)建大型JavaScript應(yīng)用程序。這些人中的許多人都熟悉靜態(tài)類型的語(yǔ)言,例如C ++,C#,Java等。他們希望使靜態(tài)類型可用于概念可伸縮性和工具。
微軟的語(yǔ)言專家研究了這種情況,并說(shuō),很好,我們可以嘗試像人們以前一樣編寫一種新的語(yǔ)言。有像Script#這樣的項(xiàng)目,它使用C Sharp并將其轉(zhuǎn)換為JavaScript,或者像CoffeeScript這樣的語(yǔ)言,如果JavaScript具有不同的語(yǔ)法該怎么辦?但是他們決定只是采用JavaScript并在其上添加靜態(tài)類型。
當(dāng)時(shí),JavaScript經(jīng)歷了增長(zhǎng)的復(fù)興,在相當(dāng)長(zhǎng)的時(shí)間內(nèi),他們第一次在語(yǔ)言中再次添加了功能。人們想使用這些很酷的新功能,例如箭頭功能和類,并且他們不想等待所有瀏覽器都采用它們。他們希望能夠立即使用這些功能。我認(rèn)為這是TypeScript預(yù)先提供的三件事:用于查找錯(cuò)誤的靜態(tài)類型,利用該靜態(tài)類型信息進(jìn)行工具開發(fā)以及提供今天明天的JavaScript功能。
問(wèn):您是否發(fā)現(xiàn)收養(yǎng)點(diǎn)沒(méi)有回報(bào)?人們會(huì)遇到什么東西嗎,哦,是的,我們現(xiàn)在正在使用TypeScript?
答:哦,絕對(duì)是Google宣布他們將在Angular中使用TypeScript。現(xiàn)在有點(diǎn)浪費(fèi)時(shí)間了。但是,如果您查看TypeScript的圖形,則實(shí)際上任何圖形(GitHub星圖,下載,拉取請(qǐng)求)都可以看到Angular公告發(fā)布的確切時(shí)間。圖就改變了。它永遠(yuǎn)不會(huì)回頭。您再也看不到曲線上的小彎,因?yàn)榍€一直在前進(jìn)。那是一個(gè)真正的拐點(diǎn)。而且我認(rèn)為有趣的是,當(dāng)時(shí)人們認(rèn)為TypeScript只是Angular人們使用的東西,而沒(méi)有太多其他用途。事實(shí)并非如此。顯然,我們?cè)贏ngular開發(fā)人員中仍然很受歡迎。但這對(duì)我們來(lái)說(shuō)是一個(gè)真正的動(dòng)力建設(shè)者。
問(wèn):在我們最近的開發(fā)者調(diào)查中,TypeScript是排名第二高的最受歡迎的語(yǔ)言。您為什么認(rèn)為人們?nèi)绱讼矚g它?
嗯?因?yàn)樘昧耍?/span>
問(wèn):我認(rèn)為我們需要一個(gè)可以客觀辯護(hù)的答案。
答:從根本上講,JavaScript作為一種語(yǔ)言而受到了不好的說(shuō)唱,但是使用它確實(shí)很有趣。它有時(shí)使您變得更有活力,有時(shí)使您變得更有目的地。這只是一種很棒的功能語(yǔ)言。但是缺少靜態(tài)類型檢查確實(shí)會(huì)限制人們編寫可以確信在運(yùn)行之前可以正常工作的東西的能力。
TypeScript支持JavaScript的最后一個(gè)粗略優(yōu)勢(shì),并為您提供了真正有趣的操作并且可以在任何地方運(yùn)行。我認(rèn)為,如果TypeScript是基于一種不太通用的語(yǔ)言或一種不太有趣的語(yǔ)言構(gòu)建的語(yǔ)言,那么我認(rèn)為它不會(huì)那么成功。確實(shí)取得了很大的進(jìn)步,并使它變得更好。
問(wèn):似乎靜態(tài)鍵入現(xiàn)在有點(diǎn)片刻。我已經(jīng)看到了很多關(guān)于贊賞Rust中的鴨子輸入和Python中的提示的評(píng)論。您為什么認(rèn)為靜態(tài)輸入現(xiàn)在如此流行?
答:我認(rèn)為是因?yàn)槿藗冊(cè)噲D在沒(méi)有大型應(yīng)用程序的情況下構(gòu)建大型應(yīng)用程序,并看到它有多痛苦。我的意思是,F(xiàn)acebook上的Hack也在發(fā)生同樣的事情,他們?cè)赑HP中添加類型。因此,我認(rèn)為人們已經(jīng)意識(shí)到,您可以很容易地編寫一個(gè)沒(méi)有靜態(tài)類型的小程序,但是您很快就會(huì)遇到一個(gè)門檻,如果沒(méi)有它,事情就會(huì)變得太痛苦了。當(dāng)您嘗試維護(hù)它們并猜測(cè)鍵入內(nèi)容時(shí),很難推理。
我認(rèn)為我最喜歡的事情是互聯(lián)網(wǎng)上的人們?cè)谡f(shuō):‘我在TypeScript中進(jìn)行了巨大的重構(gòu),重構(gòu)了三個(gè)小時(shí)。然后我運(yùn)行我的代碼,它第一次起作用了?!褂脛?dòng)態(tài)語(yǔ)言,這將永遠(yuǎn)不會(huì)發(fā)生。當(dāng)類型檢查器說(shuō)您完成時(shí),有一個(gè)非常令人滿意的元素要完成。那可能只有百分之八十五的準(zhǔn)確率。但這比零好得多。這是一種更好的開發(fā)方式,尤其是在這樣的大型重構(gòu)過(guò)程中。
問(wèn):我見(jiàn)過(guò)一些反對(duì)靜態(tài)打字的人。您是否認(rèn)為可以進(jìn)行動(dòng)態(tài)鍵入?
答:我是這樣認(rèn)為的。我的意思是,那里的編程世界很大。我不認(rèn)為您不喜歡靜態(tài)類型是不對(duì)的。我認(rèn)為這是個(gè)人喜好。當(dāng)然,有些程序會(huì)妨礙您進(jìn)行靜態(tài)類型輸入。這對(duì)我們來(lái)說(shuō)很重要;我們還提供了JavaScript工具,但我們?nèi)匀徽J(rèn)為JavaScript是一種完全有效的開發(fā)方式。我只想對(duì)人們說(shuō),如果靜態(tài)類型不適合您,那么對(duì)于您的編程風(fēng)格或您正在處理的問(wèn)題,只需跳過(guò)它即可。沒(méi)關(guān)系。沒(méi)關(guān)系。我不會(huì)生氣。如果有人可以得到三萬(wàn)行的應(yīng)用程序而無(wú)需使用靜態(tài)類型就可以完成工作,那么我會(huì)印象深刻。這似乎真的很困難。但是對(duì)那些使它起作用的人表示敬意。
Python也是如此。很少有人能使用Python類型注釋,但是Python非常受歡迎。我認(rèn)為數(shù)據(jù)是不言而喻的—我認(rèn)為Python在調(diào)查中排名第三(編者注:是,但僅次于頭發(fā))。我向您保證,這些Python開發(fā)人員中只有很小一部分具有靜態(tài)類型。無(wú)論您的問(wèn)題領(lǐng)域是什么,這都可能是最適合您的。
問(wèn):我知道我們即將迎來(lái)Java 25周年。 JavaScript也已經(jīng)存在了一段時(shí)間?,F(xiàn)在,是TypeScript。從過(guò)去的離線工作到網(wǎng)絡(luò)工作再到移動(dòng)工作,過(guò)去十年來(lái)我們看到的趨勢(shì)是什么,這些趨勢(shì)使JavaScript和現(xiàn)在的TypeScript成為理想的工具?
這是您是否要調(diào)試或加載引用.js文件的生產(chǎn)HTML的問(wèn)題。在此過(guò)程中,我們實(shí)際上在哪里獲取.ts文件?永不說(shuō)永不。但是對(duì)我來(lái)說(shuō),這是一種不久的將來(lái)。 Deno完全是自己的事情,因?yàn)樗幸粋€(gè)新的運(yùn)行時(shí)。因此,這種情況對(duì)我來(lái)說(shuō)更有意義,至少是在您第一次運(yùn)行腳本時(shí)進(jìn)行類型檢查,并確保您具有一些兼容的環(huán)境。
問(wèn):Microsoft團(tuán)隊(duì)現(xiàn)在的狀態(tài)是什么?自您加入以來(lái),它增長(zhǎng)了多少?它有多大?
答:在我們一直致力于這一工作的整個(gè)過(guò)程中,我們有四到八名核心編譯器工程師,一到兩個(gè)PM,以及四到零的專用測(cè)試人員。這一直很穩(wěn)定。最近,我們有意識(shí)地?cái)U(kuò)大了團(tuán)隊(duì)。
過(guò)去,我們有一個(gè)核心的編譯器團(tuán)隊(duì),然后有另一個(gè)團(tuán)隊(duì)在Visual Studio方面工作,因?yàn)榧傻较馰isual Studio這樣的大型產(chǎn)品中確實(shí)需要大量工作。但是VS方面的一些體系結(jié)構(gòu)改進(jìn)釋放了那里的一些工程師力量。因此,我們正在召集該團(tuán)隊(duì)來(lái)幫助我們進(jìn)行重構(gòu)和“轉(zhuǎn)到定義”之類的工作??傮w上團(tuán)隊(duì)規(guī)模相同,除了現(xiàn)在我們將有更多的人在GitHub回購(gòu)中看到的核心編譯器服務(wù)上工作。
問(wèn):您能否給我一些關(guān)于Microsoft之外的觀點(diǎn),您在哪里看到有人幫助您以不同的方式構(gòu)建它?我們討論了Deno及其對(duì)TypeScript的作用。您在哪里看到其他人在幫助建立這個(gè)生態(tài)系統(tǒng)?
我們完全依賴生態(tài)系統(tǒng)來(lái)制造在集成環(huán)境中工作的產(chǎn)品。因此,無(wú)論是webpack還是ts-loader之類的插件,還是我們?nèi)绾问褂脜R總或Parcel,還是…為捆綁程序命名,對(duì)不對(duì)?這一切都非常復(fù)雜。
我們的人員配備不足以讓我們完全擁有這種經(jīng)驗(yàn)。而且我們不想。社區(qū)應(yīng)該推動(dòng)將TypeScript納入更大的構(gòu)建過(guò)程以及整個(gè)更大的生態(tài)系統(tǒng)的方式。隨著JavaScript構(gòu)建管道的擴(kuò)展和變得越來(lái)越復(fù)雜,我們看到人們?cè)诩泳o并提供該功能。這可能是TypeScript和`create-react-app`,或者是TypeScript如何與Vue集成。我們只想確保自己正在構(gòu)建僅知道如何構(gòu)建的東西,然后幫助其他人獲得只有他們知道如何構(gòu)建的東西。幾個(gè)里程碑之前,我們專門與ts-loader人員合作,以期獲得良好的項(xiàng)目參考實(shí)現(xiàn)。
JavaScript生態(tài)系統(tǒng)中的事物數(shù)量在不斷增長(zhǎng)。我們只是希望擴(kuò)大社區(qū)以在所有這些情況下支持TypeScript,而不是擴(kuò)大團(tuán)隊(duì)。我們還一直在研究如何更聰明地將外部貢獻(xiàn)納入TypeScript。我們看到的主要挑戰(zhàn)是,向TypeScript代碼庫(kù)添加功能實(shí)際上很容易,而修復(fù)錯(cuò)誤則非常困難。人們添加功能比修復(fù)bug更加興奮,因?yàn)樗苡腥?。誰(shuí)能責(zé)怪他們?弄清楚我們能做些什么,并鼓勵(lì)人們?cè)谖覀冃枰鄮椭氖虑樯蠋椭覀儯@將是社區(qū)的挑戰(zhàn)。我不會(huì)出去說(shuō)我需要免費(fèi)工作。人們可以使用這里提供的任何東西來(lái)開源。那很棒。但這是我愿意做得更多的事情。
作者介紹
熱門博客推薦