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