撰稿丨千山
日前,Ruby on Rails的創(chuàng)建者David Heinemeier Hansson(DHH)宣布,將從前端工具鏈Turbo的8.0版本開(kāi)始刪除TypeScript,這一決定引起了開(kāi)發(fā)社區(qū)極大的震驚與不滿(mǎn)。
TypeScript作為廣受歡迎的語(yǔ)言,以其強(qiáng)大的類(lèi)型系統(tǒng)和優(yōu)秀的可維護(hù)性而出名。所以Turbo 8的決定受到了很多人的質(zhì)疑。很多Turbo用戶(hù)表示,這個(gè)決定不僅倉(cāng)促,而且是“不受歡迎的”。
但如果你有留意過(guò)前端工具的發(fā)展動(dòng)態(tài),也許會(huì)記得,數(shù)月前,前端框架Svelte曾宣布將在4.0版本從 TypeScript 遷移到 JavaScript JSDoc。如今,又一個(gè)前端工具選擇放棄TypeScript,這到底意味著什么?是技術(shù)的倒退,還是TypeScript的某種“不合時(shí)宜”,或者另有隱情?
圖源:X(推特)@DHH
1、TypeScript污染代碼,只是障礙?
Turbo本身并不是最受歡迎的框架之一,但近年來(lái),在Rails世界中,它和Hotwire還是受到了不少關(guān)注。
Hotwire 作為一種Web開(kāi)發(fā)的新方法,旨在編寫(xiě)全棧式Web應(yīng)用時(shí)盡可能簡(jiǎn)化Web開(kāi)發(fā)過(guò)程,減少對(duì)JavaScript的使用依賴(lài),其中Turbo是Hotwire 的核心組件之一。
借助 Turbo,可以讓服務(wù)端直接發(fā)布 HTML,這意味著所有業(yè)務(wù)邏輯都能或多或少地只用你所喜歡的編程語(yǔ)言即可實(shí)現(xiàn)。所有的邏輯都位于服務(wù)端,而瀏覽器只處理最終的 HTML。
關(guān)于為什么要放棄TypeScript?
DHH直接發(fā)文表示:“TypeScript 對(duì)我來(lái)說(shuō)只是阻礙。不僅因?yàn)樗枰@式的編譯步驟,還因?yàn)樗妙?lèi)型體操(Type Gymnastics)污染了代碼。“這讓他的開(kāi)發(fā)體驗(yàn)苦多樂(lè)少,且常常會(huì)化簡(jiǎn)為繁,徒增困擾。
簡(jiǎn)言之,對(duì)Trobo而言,TypeScript有些“麻煩”。
首先,使用TypeScript需要進(jìn)行額外的編譯步驟,而且需要配置設(shè)置,這會(huì)增加不必要的復(fù)雜性。棄用TypeScript將使Turbo 8的編譯過(guò)程更加迅速,開(kāi)發(fā)流程更為簡(jiǎn)潔。這將釋放出更多寶貴的時(shí)間和資源,用來(lái)進(jìn)行其他創(chuàng)新和改進(jìn)。
其次,類(lèi)型系統(tǒng)很棒,但類(lèi)型的引入也可能導(dǎo)致代碼變得繁復(fù)而冗長(zhǎng),讓代碼體積變過(guò)于龐大。而且有時(shí)候,某些簡(jiǎn)單的事情反而會(huì)因?yàn)轭?lèi)型相關(guān)的限制變得事倍功半。
再者,TypeScript 團(tuán)隊(duì)早就意識(shí)到無(wú)法完全替代 JavaScript,因此他們努力實(shí)現(xiàn)了兩者的完全兼容。這意味著即使不使用TypeScript,仍然可以使用 JavaScript 編寫(xiě)代碼,并且能夠使用用TypeScript編寫(xiě)的庫(kù)。
最后,放棄TypeScript并不意味著Turbo 8放棄了類(lèi)型安全和可維護(hù)性的重要性。相反,Turbo 8承諾將加大對(duì)JavaScript生態(tài)系統(tǒng)的支持,通過(guò)引入新的功能和工具,來(lái)提高代碼質(zhì)量和開(kāi)發(fā)速度。更加聚焦于JavaScript生態(tài)系統(tǒng)的發(fā)展可以讓Turbo 8能夠更專(zhuān)注于提供出色的開(kāi)發(fā)體驗(yàn)。
2、矛盾的激化:
不滿(mǎn)不僅在于更改,還在于更改的方式
微軟的Anders Hejlsberg發(fā)明了TypeScript,因?yàn)樗嘈庞脧?qiáng)類(lèi)型語(yǔ)言編寫(xiě)復(fù)雜的應(yīng)用程序會(huì)更健壯,更容易維護(hù)。TypeScript也的確取得了巨大的成功,這一語(yǔ)言在編程社區(qū)中的流行表明,許多人都贊成這一點(diǎn)。
但在DHH看來(lái),TypeScript最引以為豪的“強(qiáng)類(lèi)型”恰恰是障礙。JavaScript 是客戶(hù)端的必不可少的語(yǔ)言。雖然可以將其他語(yǔ)言編譯成JavaScript來(lái)在瀏覽器中運(yùn)行,但最終還是需要用JavaScript來(lái)實(shí)際執(zhí)行代碼。因此,在這種情況下,“能夠自由、無(wú)需任何工具和強(qiáng)類(lèi)型約束地編寫(xiě)JavaScript代碼是一件幸事”。
不過(guò),就社區(qū)的反饋來(lái)看,多數(shù)用戶(hù)都在不同程度上感到困惑和失望,而且不僅僅是因?yàn)檫@個(gè)決定本身,還因?yàn)闆Q定的方式。
一位用戶(hù)表示:“切換回JS意味著許多Hotwire生態(tài)系統(tǒng)包將被破壞。目前所有開(kāi)放的PR現(xiàn)在都已完全過(guò)時(shí)。IDE將不再像以前那樣提供自動(dòng)完成功能。”
另一位抱怨道,“倉(cāng)促做出這一重要改變,忽略了所有(我指的是所有)公開(kāi)評(píng)論……開(kāi)創(chuàng)了一個(gè)先例。Ruby on Rails也會(huì)這樣開(kāi)發(fā)嗎?這是一個(gè)人的心血來(lái)潮嗎?”
還有人直言:“大衛(wèi)單方面且未經(jīng)討論就淘汰了多個(gè)貢獻(xiàn)者的工作。這與TS無(wú)關(guān),這關(guān)乎對(duì)社區(qū)和生態(tài)系統(tǒng)的尊重?!?/p>
對(duì)于反對(duì)聲,DHH早有預(yù)見(jiàn)。他在官宣放棄TypeScript時(shí)就曾提到,“很少有程序員有興趣改變他們對(duì)類(lèi)型的看法。大多數(shù)程序員發(fā)現(xiàn)自己在職業(yè)生涯的早期就受到了TypeScript的強(qiáng)烈吸引,然后把剩下的時(shí)間花在為自己和他人合理化這一選擇之上?!?/p>
有網(wǎng)友“翻譯”了一下DHH的這段話并開(kāi)了一波嘲諷:“這段話基本上就是在說(shuō),1、程序員不會(huì)改變主意。2、因?yàn)樗麄儾粫?huì)改變主意,所以關(guān)于這個(gè)決定的爭(zhēng)論是徒勞的。3、因?yàn)闋?zhēng)論是徒勞的,所以我拒絕解決人們對(duì)這個(gè)武斷決定的擔(dān)憂。老實(shí)說(shuō),如果他只是說(shuō)‘我正在做一個(gè)武斷的決定’,而不是用冗長(zhǎng)、半生不熟的辯解來(lái)表達(dá)它,我會(huì)更能接受?!?/p>
圖源:Reddit
隨著矛盾的激化,針對(duì)少數(shù)TypeScript的激進(jìn)支持者,DHH也“硬剛”了回去,再度發(fā)文稱(chēng)之為“絕對(duì)精神錯(cuò)亂的開(kāi)源流氓行為”。
他依然堅(jiān)持己見(jiàn):“所有的愛(ài)和贊賞都獻(xiàn)給那些喜歡TypeScript的貢獻(xiàn)者。這是一場(chǎng)爭(zhēng)論,爭(zhēng)論不太可能改變?nèi)魏稳说幕玖?chǎng),所以我不會(huì)試圖這樣做?!?/p>
3、一切只是選擇:
放棄TypeScript,放過(guò)自己
爭(zhēng)論尚未休止。除了反對(duì)聲外,也有人覺(jué)得這個(gè)決定只是面向未來(lái)版本的戰(zhàn)略調(diào)整,盡管會(huì)給開(kāi)發(fā)者們帶來(lái)一些困擾,但Turbo團(tuán)隊(duì)的決策還是很有勇氣的。
就像當(dāng)初Svelte 團(tuán)隊(duì)決定放棄TypeScript,轉(zhuǎn)而使用JavaScript和JSDoc注釋來(lái)實(shí)現(xiàn)類(lèi)型安全。這種方法提供了所有類(lèi)型安全的好處,而沒(méi)有與 TypeScript 相關(guān)的缺點(diǎn)。
如今Turbo團(tuán)隊(duì)的決策到底是剛愎自用還是富有遠(yuǎn)見(jiàn)?尚需要時(shí)間的檢驗(yàn)。不過(guò),可以肯定的是,TypeScript終究只是工具,到底要不要用,好不好用,還是取決于開(kāi)發(fā)團(tuán)隊(duì)或開(kāi)發(fā)人員的特定需求和偏好。
很多開(kāi)發(fā)人員之所以選擇 TypeScript,是因?yàn)閺?qiáng)類(lèi)型可以減少錯(cuò)誤,如果你追求代碼的嚴(yán)謹(jǐn)可靠,并樂(lè)于在開(kāi)發(fā)過(guò)程里獲得更多的工具支持和類(lèi)型檢查,那么TypeScript會(huì)很趁手。但如果你和DHH一樣,對(duì)類(lèi)型限制感到痛苦,希望能更加無(wú)拘束地編寫(xiě)代碼,那么放棄TypeScript也是放過(guò)你自己。
就像React核心開(kāi)發(fā)Dan Abramov所表達(dá)的,“如果你增加TypeScript,我會(huì)為你鼓掌。如果你移除TypeScript,我(同樣)會(huì)為你鼓掌。關(guān)鍵在于是你在更改代碼,而不是那些代碼在改變你。改變意味著生活,你正生活在其中?!?/p>
圖源:X(推特)@dan_abramov
參考鏈接:
https://world.hey.com/dhh/turbo-8-is-dropping-typescript-70165c01
https://www.reddit.com/r/programming/comments/16bufc7/turbo_8_is_dropping_typescript/