国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

基于 Rust 的 linter 工具速度很快,但有嚴(yán)重缺陷...

開(kāi)發(fā) 前端
基于 Rust 的 linters 是無(wú)法完全取代 ESLint 的。雖然性能優(yōu)勢(shì)明顯,但也存在一個(gè)明顯的缺陷:類(lèi)型檢查的 linting 功能缺失。

2023 年 Web 工具的一大趨勢(shì)是使用 Rust 重寫(xiě)現(xiàn)有工具。Rust 是一種出色的編程語(yǔ)言,能生成運(yùn)行速度驚人的二進(jìn)制文件,且與其它 Web 工具的互操作性極佳,這得益于 WebAssembly 的幫助。swc 和 Turbopack 等工具的速度提升為快速開(kāi)發(fā)體驗(yàn)帶來(lái)了巨大變革。

Biome、deno lint、Oxc 和 RSLint 等項(xiàng)目都有一個(gè)用 Rust 編寫(xiě)的 JavaScript/TypeScript 代碼檢查器。對(duì)于那些對(duì)開(kāi)發(fā)工具速度緩慢感到不滿的開(kāi)發(fā)人員來(lái)說(shuō),以Rust(本機(jī)代碼)速度運(yùn)行代碼檢查器,而非JavaScript(JIT腳本)速度,無(wú)疑是很有吸引力的。Prettier 甚至為 Biome 提供了 20,000 美元的獎(jiǎng)金,以表彰其實(shí)現(xiàn)了與 Prettier 格式部分的 >95% 兼容性!

然而,基于 Rust 的 linters 是無(wú)法完全取代 ESLint 的。雖然性能優(yōu)勢(shì)明顯,但也存在一個(gè)明顯的缺陷:類(lèi)型檢查的 linting 功能缺失。

回顧:類(lèi)型檢查的 Linting

傳統(tǒng)上,像 ESLint 這樣的 lint 工具一次只能檢查一個(gè)源代碼文件。這使得它們運(yùn)行速度較快,理論上可以進(jìn)行緩存和并行處理。

typescript-eslint 引入了使用類(lèi)型信息的 linting 概念。通過(guò)調(diào)用 TypeScript 的類(lèi)型檢查 API,lint 規(guī)則可以根據(jù)項(xiàng)目中的其他文件提供的類(lèi)型信息,對(duì)代碼做出更加明智的決策。

類(lèi)型檢查的 lint 規(guī)則可能比傳統(tǒng)的 lint 規(guī)則功能更強(qiáng)大。例如:

  • @typescript-eslint/await-thenable :禁止在非 Promise 值上使用不必要的 await 調(diào)用。
  • @typescript-eslint/no-floating-promises :可以提醒是否創(chuàng)建了一個(gè) Promise 但忘記安全地處理它。
  • @typescript-eslint/no-for-in-array :用于標(biāo)記對(duì)數(shù)組的不安全的 for...in 迭代(不是 for...of)。

這些規(guī)則只有在能夠使用類(lèi)型信息來(lái)確定何時(shí)報(bào)告問(wèn)題時(shí)才有實(shí)際用處。沒(méi)有類(lèi)型信息,它們將無(wú)法理解從另一個(gè)模塊導(dǎo)入的值的類(lèi)型。

類(lèi)型檢查的 Linting 性能

類(lèi)型檢查的 linting 相比傳統(tǒng) linting 存在的主要劣勢(shì)在于性能。這是因?yàn)轭?lèi)型化的 lint 規(guī)則需要調(diào)用 TypeScript 等 API 來(lái)獲取類(lèi)型信息,通常需要讀取所有文件以確定哪些文件會(huì)影響其他文件的類(lèi)型。因此,類(lèi)型檢查的 linting 性能通常會(huì)低于對(duì)整個(gè)項(xiàng)目運(yùn)行 TypeScript 的性能。

TypeScript 本身也在不斷優(yōu)化性能。例如,項(xiàng)目引用可以顯著幫助處理更大的項(xiàng)目。TypeScript 即將推出的獨(dú)立聲明模式看起來(lái)也可以顯著提高處理更大項(xiàng)目的性能。

但即使所有這些加速都完美地工作,類(lèi)型檢查的 linting 設(shè)計(jì)上仍然比傳統(tǒng)的 linting 慢幾個(gè)數(shù)量級(jí)。因?yàn)閺捻?xiàng)目中推斷類(lèi)型的過(guò)程本質(zhì)上比傳統(tǒng)的 lint 規(guī)則一次只查看一個(gè)文件要慢得多。

大多數(shù)情況下,當(dāng)看到類(lèi)型檢查的速度慢的項(xiàng)目時(shí),根本原因要么是 typescript-eslint 配置錯(cuò)誤,要么是 TypeScript 類(lèi)型慢。

基于 Rust 的代碼檢查工具和類(lèi)型檢查

目前還沒(méi)有基于 Rust 的代碼檢查器與 TypeScript 的類(lèi)型檢查 API 集成,這意味著基于 Rust 的代碼檢查器不能完全替代 ESLint + typescript-lint。

如果你不需要任何類(lèi)型檢查的 lint 規(guī)則,那么可以切換到基于 Rust 的 linter。但強(qiáng)烈建議你至少查看 typescript-lint 中推薦的類(lèi)型檢查規(guī)則,以了解缺少什么。

甚至可以同時(shí)運(yùn)行這兩種工具:首先使用原生速度的 linter 快速反饋,然后僅使用 typescript-eslint 查看包含類(lèi)型信息的規(guī)則。這個(gè)想法得到了多個(gè)原生速度 linter 維護(hù)者的支持:

  • Biome 的 Emanuele 認(rèn)為雙重 linting 是一種合理的策略。
  • Oxc 的公告將 oxlint 描述為在 ESLint 過(guò)慢時(shí)的增強(qiáng)工具,而不是完全替代品。

這種互補(bǔ)而非取代的愿望部分源于這兩種 lint 工具在運(yùn)作方式上的重大結(jié)構(gòu)性差異。原生速度的 lint 工具尚未在其 lint 規(guī)則中實(shí)現(xiàn)類(lèi)型檢查。下面來(lái)深入探討這一奇怪的功能差距。

集成類(lèi)型檢查的 Linting 和基于 Rust 的 Linting

目前,TypeScript 的核心功能是為 TypeScript 編譯器和語(yǔ)言服務(wù)提供支持的代碼,它是唯一能夠?yàn)?TypeScript 代碼提供可靠類(lèi)型檢查的組件。由于TypeScript是用TypeScript編寫(xiě)的,因此其類(lèi)型檢查以JavaScript的速度運(yùn)行。

為了實(shí)現(xiàn)與 TypeScript 的類(lèi)型檢查的集成,基于Rust的代碼檢查器面臨幾個(gè)選擇:

  • 承受性能損失,調(diào)用TypeScript的JavaScript速度類(lèi)型檢查API。
  • 使用原生速度語(yǔ)言重新實(shí)現(xiàn)TypeScript的API。
  • 將 TypeScript 的 API 提升到原生速度。

此外,基于 Rust 的 linter 不允許在 JavaScript 中編寫(xiě)自定義 lint 規(guī)則。雖然這對(duì)大多數(shù) JavaScript 生態(tài)系統(tǒng)來(lái)說(shuō)是一個(gè)貢獻(xiàn)障礙,但這與本文的重點(diǎn)是兩個(gè)獨(dú)立的問(wèn)題。

因此,將基于 Rust 的代碼檢查器與 TypeScript 的類(lèi)型檢查集成在一起有不同的選項(xiàng)。

降低 JavaScript 速度

選擇這種性能影響方案可能會(huì)使基于 Rust 的 linter 速度降低到幾乎與 ESLint 無(wú)明顯性能優(yōu)勢(shì)的程度。

以原生速度重新實(shí)現(xiàn) TypeScript

對(duì)于 TypeScript 用戶(hù)來(lái)說(shuō),以原生速度重新實(shí)現(xiàn) TypeScript 是一個(gè)極具吸引力的前景,而不僅僅是對(duì)于 linter。目前已有三個(gè)重要的嘗試:

  • Ezno:一種類(lèi)似于 TypeScript 的新語(yǔ)言,增加了依賴(lài)類(lèi)型等特性。
  • stc:一個(gè)可以替代 TypeScript 類(lèi)型檢查的 Rust 編寫(xiě)項(xiàng)目。
  • TypeRunner:一個(gè)較早的嘗試,使用 C++ 編寫(xiě),但已不再積極開(kāi)發(fā)。

需要注意的是,以新語(yǔ)言重新實(shí)現(xiàn) TypeScript 是一項(xiàng)艱巨的任務(wù)。TypeScript 的類(lèi)型推理需要處理泛型類(lèi)型、協(xié)變、逆變等復(fù)雜邊緣情況,這是一項(xiàng)極具挑戰(zhàn)性的任務(wù)。這些項(xiàng)目目前都處于非常早期的階段,可能需要很長(zhǎng)時(shí)間才能準(zhǔn)備投產(chǎn)。

那是否可以通過(guò)縮小項(xiàng)目的范圍,只實(shí)現(xiàn)TypeScript的類(lèi)型推理部分,從而降低這一選項(xiàng)的復(fù)雜性呢?對(duì)于 linters 來(lái)說(shuō),一個(gè)簡(jiǎn)化版的TypeScript,跳過(guò)源代碼轉(zhuǎn)換、類(lèi)型檢查可分配性錯(cuò)誤等部分,只專(zhuān)注于編程類(lèi)型檢查API,或許更為實(shí)用。例如,Oxc 項(xiàng)目已經(jīng)成功地實(shí)現(xiàn)了一個(gè) TypeScript 類(lèi)型推理的簡(jiǎn)化版,僅用幾千行Rust代碼就完成了這一任務(wù)。

然而,我們必須正視TypeScript背后有一個(gè)強(qiáng)大的開(kāi)發(fā)團(tuán)隊(duì)和社區(qū)支持的現(xiàn)實(shí)。TypeScript團(tuán)隊(duì)由專(zhuān)業(yè)的編程語(yǔ)言專(zhuān)家組成,并且持續(xù)從社區(qū)中獲得貢獻(xiàn)。對(duì)于任何嘗試重新實(shí)現(xiàn)TypeScript的項(xiàng)目來(lái)說(shuō),跟上TypeScript的更新步伐是一項(xiàng)幾乎不可能完成的任務(wù)。盡管Ezno和stc等項(xiàng)目展現(xiàn)了令人印象深刻的成果,但它們作為獨(dú)立項(xiàng)目的長(zhǎng)期可行性仍然充滿了不確定性。

將 TypeScript 的 API 提升到原生速度

為了提高TypeScript的性能,一個(gè)更具可行性的長(zhǎng)期方案是優(yōu)化其類(lèi)型檢查器的運(yùn)行速度。目前有幾種可能的解決方案:

  • 將TypeScript的類(lèi)型檢查器轉(zhuǎn)換為更高效的編程語(yǔ)言,如Go或Rust。這可以通過(guò)編寫(xiě)一個(gè)轉(zhuǎn)換工具來(lái)實(shí)現(xiàn),將TypeScript源代碼轉(zhuǎn)換為這些更快的語(yǔ)言。
  • 對(duì)TypeScript進(jìn)行預(yù)編譯和優(yōu)化,類(lèi)似于將其轉(zhuǎn)換為二進(jìn)制格式。這種方法可以在編譯時(shí)對(duì)代碼進(jìn)行優(yōu)化,以提高運(yùn)行時(shí)的性能。
  • 利用Node.js的用戶(hù)快照技術(shù)來(lái)優(yōu)化啟動(dòng)時(shí)間。通過(guò)在啟動(dòng)時(shí)預(yù)先優(yōu)化代碼,可以加快冷啟動(dòng)編譯器的速度。
  • AssemblyScript和Static TypeScript是另外兩個(gè)有趣的探索方向,它們通過(guò)使用TypeScript的子集或修改版本來(lái)關(guān)注低級(jí)性能。

這些方案都面臨一定的挑戰(zhàn),需要投入時(shí)間和資源進(jìn)行開(kāi)發(fā)。然而,通過(guò)持續(xù)優(yōu)化和改進(jìn),可以逐步提高TypeScript的性能,使其更加適應(yīng)快速發(fā)展的開(kāi)發(fā)需求。

雖然可以通過(guò)各種方法來(lái)加速TypeScript的運(yùn)行,但其實(shí)TypeScript本身的架構(gòu)是阻礙性能提升的主要因素。它的代碼基于一種假設(shè),即運(yùn)行時(shí)環(huán)境將提供內(nèi)置的垃圾回收、可變對(duì)象等功能,而這些功能往往會(huì)帶來(lái)性能上的損耗。

為了真正提高TypeScript的性能,我們可能需要重新設(shè)計(jì)其架構(gòu),使其更加適應(yīng)高性能場(chǎng)景:

  • 隔離聲明模式:這可能是最直接的方法,通過(guò)將類(lèi)型聲明與實(shí)際代碼隔離,可以減少編譯時(shí)的計(jì)算量,從而提高運(yùn)行速度。
  • 優(yōu)化全局類(lèi)型擴(kuò)展:為了更好地支持并行化,我們需要限制全局類(lèi)型擴(kuò)展的使用,以減少潛在的性能瓶頸。
  • 改進(jìn)檢查器運(yùn)行方式:通過(guò)改變TypeScript檢查器的運(yùn)行方式,可以避免一些不必要的性能損耗,進(jìn)一步提高運(yùn)行速度。

然而,任何對(duì)TypeScript結(jié)構(gòu)的重大更改都可能導(dǎo)致其API的重大變化,并可能引入新的問(wèn)題。目前看來(lái),除了可能在2024年推出的隔離聲明模式外,其他的大規(guī)模改動(dòng)短期內(nèi)不太可能實(shí)現(xiàn)。

TypeScript 集成 Linting

另一個(gè)策略是將 linting 集成到現(xiàn)有的 TypeScript 語(yǔ)言服務(wù)器基礎(chǔ)架構(gòu)中。TypeScript 語(yǔ)言服務(wù)插件允許添加工具作為 TypeScript 編輯體驗(yàn)的一部分運(yùn)行。

可以看到過(guò)兩次嘗試:

  • Quramy/typescript-??-language-service:ESLint 的通用 TypeScript 語(yǔ)言服務(wù)插件
  • johnsoncodehk/typescript-linter:基于 TypeScript 語(yǔ)言服務(wù)器構(gòu)建的代碼檢查器的重新實(shí)現(xiàn)

兩者似乎都有希望。為了與現(xiàn)有規(guī)則兼容,在短期內(nèi)將 ESLint 作為 TypeScript 語(yǔ)言服務(wù)插件運(yùn)行是更可行的。無(wú)論哪種方式,在不落后于其他語(yǔ)言的情況下,如何使 TypeScript 體驗(yàn)變得更好,尤其是考慮到 ESLint 打算擁抱其他 Web 語(yǔ)言,這將是一個(gè)關(guān)鍵挑戰(zhàn)。

小結(jié)

基于 Rust 的 JavaScript/TypeScript 代碼檢查器,如 Biome、deno lint、Oxc 和 RSLint,都是非常快速的項(xiàng)目。但與 ESLint + typescript-ndrings 的類(lèi)型檢查代碼規(guī)則相比,這種速度存在嚴(yán)重的功能差距。在決定使用哪個(gè)工具時(shí),你應(yīng)該了解這些權(quán)衡。Biome 和 oxlint 都表示在一定程度上建議先運(yùn)行一個(gè)更快的原生速度代碼檢查器,而不是運(yùn)行基于類(lèi)型的 typescript-lint。

基于 Rust 的 linter 最終可能會(huì)以原生速度代碼獲得類(lèi)型檢查 linting 的好處。但要實(shí)現(xiàn)這一點(diǎn)還有很長(zhǎng)的路要走。

責(zé)任編輯:姜華 來(lái)源: 前端充電寶
相關(guān)推薦

2020-11-09 14:17:13

Rust編碼語(yǔ)言

2023-09-06 00:09:42

2015-12-25 16:49:52

2012-01-13 16:11:44

2016-03-02 17:55:03

app用戶(hù)加載

2024-12-17 14:29:57

2022-05-30 08:14:48

編譯器Go語(yǔ)言

2024-03-11 15:47:11

RustPython代碼

2009-02-02 10:39:16

2021-08-07 09:35:18

Starlink網(wǎng)速寬帶

2025-06-10 02:33:00

RustPython庫(kù)代碼

2023-06-12 08:00:48

Napi-rsRust 前端工具

2023-12-18 08:52:15

RustOxlint工具

2013-11-14 09:39:32

2020-06-17 16:38:22

Rust業(yè)務(wù)架構(gòu)

2024-11-04 14:13:19

2024-09-09 16:25:09

2024-03-11 00:07:00

VueRustGo

2013-12-17 16:50:46

Windows更新XP

2021-03-14 22:34:05

工具RMS應(yīng)用層
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美亚洲一区三区| 国产主播一区| 国产又粗又猛又爽又黄91精品| 欧美高清性xxxxhd | 青青草av网站| 亚洲欧美韩国综合色| 久久久久成人网| 日本午夜精品视频在线观看| 国产一区二区久久久| 亚洲三级影院| 日本黑人久久| 亚洲久久久久| 国产精品一区二区婷婷| 欧美丝袜美女中出在线| 免费高清完整在线观看| 亚洲精品视频二区| 亚洲一二av| 96久久精品| 国产精品一区二区不卡| 国产免费视频| 884aa四虎影成人精品一区| 日韩在线影院| 91精品国产色综合久久不卡蜜臀| 国模精品视频| 成人午夜影院在线观看| 国产精品嫩草99av在线| 亚洲第一导航| 成人性生交大合| 污版网站在线观看| 婷婷开心久久网| 欧美日韩99| 欧美中文字幕在线| 亚洲一区二区三区四区五区午夜| 9色porny| 日韩欧美在线视频日韩欧美在线视频| 国产在线精彩视频| 国产精品成人观看视频国产奇米| 久久精品电影| 四虎永久在线高清国产精品| 91精品国产综合久久精品app| 国产精品免费精品自在线观看| 国产69精品久久久久9999apgf | 午夜精品一区二区三区三上悠亚| 污的网站在线观看| 欧美亚洲在线播放| 国产黄色91视频| 阿v免费在线观看| 97国产成人精品视频| 免费观看日韩av| 中文天堂在线观看| 免费不卡欧美自拍视频| 久久久久国产一区二区| 中国在线观看免费国语版电影| 一区二区在线视频播放| 国产日韩免费| 中文字幕在线中文字幕二区| 久久视频精品在线| 青青草成人在线观看| 污视频网站在线| 亚洲第一视频在线观看| 日韩精品欧美成人高清一区二区| 香港伦理在线| 999视频在线免费观看| 国产女人18水真多18精品一级做| 国产在线高潮| 成人女人免费毛片| 91久久精品一区二区二区| 亚洲精品国产首次亮相| 在线精品国产欧美| 日韩激情在线观看| 黄视频在线播放| 2019亚洲日韩新视频| 99视频热这里只有精品免费| 欧美hdxxxxx| 欧美精品在线一区| 欧美日韩另类一区| 韩国亚洲精品| 欧美在线观看在线观看| 国产精品主播视频| 亚洲午夜激情av| 精品国产一区一区二区三亚瑟| 一区二区三区韩国| 久久这里只有精品99| 成人一道本在线| 久久青草伊人| 欧美h视频在线观看| 精品国产一区二区精华| 久久精品网址| 丁香花在线影院| 亚洲日本精品国产第一区| 日韩欧美国产一区二区在线播放 | 日韩伦理在线免费观看| 日韩精品福利网站| 国模无码大尺度一区二区三区| 黄色影院在线看| 亚洲精品永久www嫩草| 日韩欧美的一区二区| 亚洲综合二区| 欧美极品少妇videossex| 日韩精品一区二区三区色偷偷 | 伊人久久久久久久久久久| 国内精品自线一区二区三区视频| 黄视频网站在线观看| 午夜探花在线观看| 自拍亚洲一区欧美另类| 久久久精品国产免费观看同学| 99久久人爽人人添人人澡| 国内外成人免费在线视频| 欧美一区视频在线| 精品久久久久久国产| 欧美体内she精视频在线观看| 亚洲成人影院麻豆| 欧美日韩亚洲一区二区三区在线观看| 欧美一区二区网站| 激情深爱一区二区| a一区二区三区亚洲| www.成人69.com| 91手机在线视频| 精品88久久久久88久久久| 国产超碰在线一区| 美女视频免费精品| 九九九伊在人线综合| 欧美美乳视频网站在线观看| 日韩精品视频在线免费观看| av在线免费不卡| 亚洲精品进入| 欧美激情黑人| 丰满的少妇愉情hd高清果冻传媒 | av亚洲在线观看| 自拍视频在线免费观看| 一区二区三区四区不卡| 最新国产精品拍自在线播放| 国产精品美女久久久久久| 欧美极品一区二区三区| 77thz桃花论族在线观看| 日本黄网站免费| 成人黄色片在线| 日韩精品黄色网| **欧美大码日韩| 午夜在线a亚洲v天堂网2018| www一区二区三区| 未来日记在线观看| 亚洲成人动漫在线| 国产精品户外野外| 精品亚洲国产视频| 亚洲自拍偷拍麻豆| 激情综合亚洲精品| 日韩av免费大片| 日韩大片欧美大片| 在线播放网站| 丁香花在线影院观看在线播放| 91精品国产综合久久香蕉的用户体验| 亚洲国产精品一区二区久| 最新不卡av在线| 久久国产福利国产秒拍| 国产精品欧美三级在线观看| 国产精品第七十二页| 中文字幕中文字幕99| 日本10禁啪啪无遮挡免费一区二区| 国产精品国产精品| 国产精品亚洲视频在线观看| 国产伦理久久久| 国产精品自产拍在线观| 欧美视频一区二区在线观看| 国产在线导航| 电影亚洲精品噜噜在线观看| 浪潮色综合久久天堂| 粉嫩av一区二区| 激情欧美日韩一区二区| 欧美理论电影在线精品| 成人影院在线看| 91久久精品国产性色| 黄色网址在线免费看| 91免费看片在线| 久热精品视频在线免费观看| 欧美福利视频一区| 一区二区三区国产豹纹内裤在线 | 精品视频第一区| 久久久久久伊人| 亚洲国产天堂久久国产91| 亚洲v日本v欧美v久久精品| 成人h精品动漫一区二区三区| 国产一区美女| 欧洲在线一区| 超碰这里只有精品| 成年人黄视频在线观看| igao视频网在线视频| 国产偷人视频免费| 亚洲永久一区二区三区在线| 成人激情视频在线播放| 国外成人在线播放| 色哟哟亚洲精品一区二区| 精品欧美黑人一区二区三区| 色综合色狠狠综合色| 自拍av一区二区三区| 91原创在线视频| 国产成人午夜精品影院观看视频| 久久三级视频| 在线欧美福利| 国产在线日韩|