Hacker News

Паказаць HN: Rev-dep – у 20 разоў хутчэйшая альтэрнатыўная зборка knip.dev у Go

Каментарыі

2 min read Via github.com

Mewayz Team

Editorial Team

Hacker News

Схаваны падатак на кожную расце каманду праграмнага забеспячэння

Кожны праграмны праект, які выжывае дастаткова доўга, у рэшце рэшт сутыкаецца з такім жа ціхім крызісам: кодавая база пачынае расці хутчэй, чым гэта можа зразумець каманда. Функцыі, якія ніхто не выклікае, экспарт, які быў створаны для функцыі, якая была адпраўлена ў 2022 годзе і ціха састарэла, кампаненты, якія жывуць на дыску, але ніколі не трапляюць у браўзер. Гэта не неахайнасць — гэта фізіка. Каманды рухаюцца хутка, патрабаванні мяняюцца, а энтрапія няўмольная. Пытанне не ў тым, ці ёсць у вашай кодавай базе мёртвы код. Пытанне ў тым, колькі гэта каштуе вам зараз.

Згодна з даследаваннем інжынернай каманды Google па прадукцыйнасці, распрацоўшчыкі трацяць у сярэднім 42% часу кадавання на чытанне і разуменне існуючага кода, а не на напісанне новых функцый. Калі існуючы код уключае тысячы радкоў, якія больш не служаць ніякай мэты, гэты працэнт перакосаў яшчэ вышэй. Для каманды з дзесяці інжынераў гэта фактычна чатыры штатныя супрацоўнікі, якія не робяць нічога прадуктыўнага — не таму, што яны лянівыя, а таму, што іх інструменты не паспяваюць за хуткасцю, з якой старэе праграмнае забеспячэнне.

Вось чаму новая хваля інструментаў для распрацоўшчыкаў, створаных на такіх сістэмных мовах, як Go і Rust, выклікае сапраўднае хваляванне ў інжынерных колах. Такія інструменты, як Rev-dep — аналізатар зваротных залежнасцей, які, як сцвярджаецца, працуе ў 20 разоў хутчэй, чым папулярны knip.dev на аснове JavaScript, — прадстаўляюць больш, чым проста паступовае паляпшэнне. They signal a fundamental rethinking of how we instrument the development process itself.

Што насамрэч робіць зваротны аналіз залежнасцей

Перш чым зразумець, чаму хуткасць так важная, варта зразумець, што насамрэч робяць інструменты аналізу залежнасцей. У праекце JavaScript або TypeScript кожны файл імпартуецца з іншых файлаў. Кожная функцыя, клас або канстанта, якія экспартуюцца з модуля, ствараюць патэнцыйную залежнасць — тое, на што могуць абапірацца іншыя часткі кодавай базы. "Зваротны" аналіз залежнасцей пераварочвае гэтую перспектыву: замест пытання "ад чаго залежыць гэты модуль", ён пытаецца "ад чаго залежыць гэты модуль?"

Калі адказ на другое пытанне "нічога", вы знайшлі мёртвы код. Экспарт, які нічога не імпартуе, - гэта марнатраўства. A function that nothing calls is technical debt with a monthly interest rate. Інструменты адваротных залежнасцей сістэматычна праглядаюць увесь графік вашага праекта, адлюстроўваюць усе адносіны паміж модулямі і выяўляюць вузлы, якія не маюць уваходных злучэнняў. Вынік - дакладны аўдыт усяго ў вашай кодавай базе, што можна бяспечна выдаліць.

Knip.dev робіць гэта добра для праектаў JavaScript і TypeScript, і яго шырока паважаюць у супольнасці. Але ён напісаны на JavaScript, што азначае, што ён працуе на Node.js, што азначае, што ён успадкоўвае ўсе аднаструменныя абмежаванні прадукцыйнасці Node пры выкананні шырокамаштабнага абыходу файлавай сістэмы і аналізу сімвалаў. Для праекта з 500 файламі гэта нармальна. For a project with 50,000 files — the kind of monorepo that powers real enterprise SaaS products — the analysis can take minutes. І хвіліны, з якой частатой працуюць сучасныя канвееры CI/CD, парушаюць здзелку.

Чаму Go змяняе разлік

Go быў распрацаваны з нуля менавіта для такой працоўнай нагрузкі, якой патрабуе аналіз залежнасцей: хуткі файлавы ўвод-вывад, цудоўныя прымітывы паралельнага выканання і мінімальныя выдаткі падчас выканання. Там, дзе Node.js апрацоўвае адну задачу за раз у адным патоку і абапіраецца на зваротныя выклікі і абяцае падрабіць паралелізм, Go можа спарадзіць тысячы goroutines, якія сапраўды выконваюцца паралельна на ўсіх даступных ядрах ЦП. Для задачы, якая ўключае ў сябе чытанне сотняў файлаў, разбор іх AST і пабудову графіка ўзаемасувязі сімвалаў, гэтая архітэктурная розніца непасрэдна ператвараецца ў прадукцыйнасць насценнага гадзінніка.

20-кратнае паскарэнне, заяўленае Rev-dep, не з'яўляецца магіяй — гэта тое, што адбываецца, калі правільная мова падыходзіць да патрэбнай праблемы. Скампіляваны характар ​​Go таксама азначае адсутнасць штрафу за размінку JIT. Ад халоднага запуску да поўнага аналізу двайковы файл Go працуе з амаль пікавай прадукцыйнасцю. Практычнае значэнне заключаецца ў тым, што аналіз, які заняў 90 секунд у інструменце на аснове Node, можа завяршыцца менш чым за 5 секунд у добра рэалізаваным эквіваленце Go. Гэта розніца паміж праверкай, якую распрацоўшчыкі прапускаюць, таму што яна "займае вечнасць", і той, якая выконваецца пры кожным фіксацыі, не заўважаючы дадатковых выдаткаў.

<цытата>

"Лепшы інструмент распрацоўніка - гэта той, які не перашкаджае. Калі ваш пакет аналізу дадае тры хвіліны да кожнага канвеера CI, распрацоўшчыкі знойдуць спосабы прапусціць гэта. Хуткасць - гэта не прыемна мець - гэта неабходная ўмова для прыняцця."

Гігіена кодавай базы

Мёртвы код - гэта не проста эстэтычная праблема распрацоўшчыка - гэта мае канкрэтныя наступствы для бізнесу, якія з часам узмацняюцца. Падумайце, колькі насамрэч каштуе арганізацыям разадзьмутая кодавая база:

  • Больш працяглы час зборкі, які запавольвае канвееры разгортвання і памяншае колькасць выпускаў, якія каманда можа бяспечна пастаўляць у тыдзень
  • Павышаная кагнітыўная нагрузка для інжынераў па адаптацыі, якія павінны марнаваць тыдні на тое, каб адрозніць актыўныя шаблоны ад пакінутых
  • Павялічаныя памеры пакетаў, якія пагаршаюць прадукцыйнасць прыкладанняў, асабліва ў вэб-праграмах, дзе кожны кілабайт уплывае на час загрузкі і каэфіцыент канверсіі
  • Пашырэнне паверхні бяспекі — мёртвы код, які па-ранейшаму змяшчае залежнасці, па-ранейшаму з'яўляецца пераносчыкам уразлівасцяў у гэтых пакетах
  • Набор тэстаў, калі тэсты для выдаленых функцыянальных магчымасцей працягваюць працаваць, займаюць хвіліны CI і час ад часу церпяць няўдачу ў незразумелым выглядзе
  • Ілжывыя сігналы аб складанасці, якія ўскладняюць прыняцце архітэктурных рашэнняў, таму што незразумела, што з'яўляецца апорным, а што рудыментарным

Даследаванне, праведзенае ў 2023 г. групай DevOps Research and Assessment (DORA), паказала, што каманды з моцнай практыкай якасці кода — у тым ліку рэгулярнае выдаленне мёртвага кода — адпраўлялі ў 2,4 разы часцей і мелі ў 7 разоў меншы ўзровень няўдач пры змене, чым каманды, якія дазваляюць назапашваць тэхнічную запазычанасць. Карэляцыя не выпадковая. Чыстыя кодавыя базы лягчэй разважаць, прасцей тэставаць і лягчэй бяспечна змяняць.

Для прадпрыемстваў, якія працуюць на такіх платформах, як Mewayz — якая абслугоўвае 138 000 карыстальнікаў праз 207 розных бізнес-модуляў, пачынаючы ад CRM і разліку заработнай платы і заканчваючы кіраваннем аўтапаркам і інструментамі спасылкі ў біяграфіі — стан кодавай базы ў разы павялічваецца. Калі ваша платформа ахоплівае столькі функцыянальных даменаў, паверхня інтэграцыі паміж модулямі велізарная. Нявыкарыстаны экспарт у асноўным модулі можа стварыць памылковыя чаканні для залежных модуляў, выклікаць непатрэбныя паўторныя візуалізацыі на ўзроўні карыстальніцкага інтэрфейсу і ўскладніць графік залежнасцей такім чынам, што зрабіць будучыя змены рызыкоўнымі.

Інтэграцыя аналізу залежнасцей у сучасныя працоўныя працэсы распрацоўкі

Сапраўдная моц такіх хуткіх інструментаў, як Rev-dep, заключаецца не ў аднаразовай ачыстцы, а ў магчымасці бесперапыннага аналізу ў рамках звычайнага цыкла распрацоўкі. Калі мёртвае сканаванне кода займае 4 секунды замест 4 хвілін, вы можаце дадаць яго ў свае хукі перад фіксацыяй. Калі гэта займае 4 секунды замест 4 хвілін, ваш канвеер CI можа не выканаць запыт на выцягванне, які ўводзіць новыя нявыкарыстаныя экспарты, а не дазваляе ім бясшумна назапашвацца.

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →

Гэты пераход ад "штоквартальнай ачысткі" да "бесперапыннага кантролю якасці" аналагічны таму, што адбылося, калі лінтэры сталі дастаткова хуткімі, каб запускацца пры кожным націску клавішы ў IDE. Да таго, як ESLint працаваў у рэжыме рэальнага часу, стыль кода забяспечваўся перыядычнымі праверкамі кода. Пасля гэта стала эмбіентам — частка зваротнай сувязі, якую распрацоўшчыкі адчувалі падчас напісання кода, а не пасля. Хуткі аналіз залежнасцей можа стварыць такі ж ціск на якасць асяроддзя вакол мёртвага кода.

Наладжванне гэтага працоўнага працэсу звычайна ўключае тры кампаненты:

  1. Базавы аналіз: запусціце інструмент супраць вашай бягучай кодавай базы, каб зразумець маштаб існуючага мёртвага кода. Не спрабуйце выправіць усё адразу — сартуйце па модулях і вызначайце прыярытэты па рызыцы.
  2. Прымусовае выкананне CI: дадайце аналіз у свой канвеер з парогавым значэннем — не выконвайце любы нядаўна ўведзены нявыкарыстаны экспарт, але не выконвайце збой існуючых, пакуль вы іх не ачысціце.
  3. Запланаваныя спрынты па ачыстцы: выкарыстоўвайце вынікі інструмента, каб накіроўваць рэгулярныя работы па ачыстцы, адсочваючы колькасць мёртвых кодаў у якасці паказчыка здароўя каманды з цягам часу.

Што сігналізуе Go Tooling Renaissance для распрацоўшчыкаў SaaS

Rev-dep з'яўляецца часткай больш шырокага шаблону інструментаў распрацоўшчыка: высокапрадукцыйныя альтэрнатывы вядомым інструментам JavaScript, створаным у Go або Rust, з'яўляюцца ў кожнай катэгорыі. Biome замяніў ESLint і Prettier для многіх каманд. Turbopack і Rspack ядуць абед Webpack. Bun кідае выклік самому Node.js. Агульным з'яўляецца тое, што гэтыя інструменты не проста прапануюць паступовыя паляпшэнні — яны прапануюць пакрокавыя паляпшэнні функцый, якія змяняюць практычнае.

Для кампаній SaaS, якія ствараюць складаныя шматмодульныя прадукты, гэты рэнесанс інструментаў мае непасрэдны ўплыў на хуткасць распрацоўкі. 207-модульная архітэктура Mewayz, якая ахоплівае ўсё: ад аддзела кадраў і заработнай платы да сістэм браніравання і аналітычных панэляў, уяўляе сабой менавіта тую вялікую, узаемазвязаную кодавую базу, дзе хуткі і дакладны аналіз залежнасцей становіцца крытычна важным. Калі змены ў агульным службовым модулі тэарэтычна могуць паўплываць на дзясяткі функцыйных модуляў, практычна імгненная бачнасць фактычнага графіка залежнасцей не проста зручная — гэта такая інфраструктура, якая прадухіляе дарагія вытворчыя інцыдэнты.

Магчымасць адказаць на пытанне "што насамрэч выкарыстоўвае гэтую функцыю" менш чым за пяць секунд, а не за пяць хвілін, змяняе тое, як інжынеры прымаюць рашэнні. Гэта зніжае кошт расследавання, што азначае, што інжынеры часцей праводзяць расследаванне і прымаюць лепшыя рашэнні. Гэта сукупная рэнтабельнасць інвестыцый у хуткія інструменты, якую часта не ўлічваюць, калі арганізацыі думаюць аб выдатках на прадукцыйнасць распрацоўшчыкаў.

Зрабіць ліквідацыю мёртвага кода часткай вашай інжынернай культуры

Адна толькі тэхналогія не стварае чыстыя кодавыя базы — гэта робіць культура. Такія інструменты, як Rev-dep, забяспечваюць такую ​​магчымасць, але ператварэнне гэтай магчымасці ў паслядоўную практыку патрабуе арганізацыйнай прыхільнасці. Найбольш эфектыўныя каманды абыходзяцца з паказчыкамі мёртвага кода гэтак жа, як і з ахопам тэстаў: як з бачным, адсочваным індыкатарам стану кодавай базы, які разглядаецца на інжынерных сустрэчах і ўлічваецца пры планаванні спрынту.

Некаторыя спецыфічныя культурныя практыкі, якія добра працуюць, ўключаюць прызначэнне «дзён выдалення кода» — перыядычных мерапрыемстваў, відавочнай мэтай якіх з'яўляецца выдаленне кода, а не яго даданне. Netlify славута гейміфікаваў гэта, запускаючы табліцы лідэраў, якія адсочваюць выдаленыя радкі сеткі. Stripe публічна напісалі пра сваю практыку разглядаць выдаленне кода як першакласны інжынерны ўклад, роўны па каштоўнасці працы над асаблівасцямі. Неабходная змена мыслення заключаецца ў прызнанні таго, што лепшы код - гэта код, якога не існуе: кожны радок, які вы не пішаце, - гэта радок, які вам ніколі не трэба падтрымліваць, тэставаць, адладжваць або тлумачыць новаму найму.

Для прадуктовых кампаній, якія кіруюць складанымі бізнес-аперацыямі, паралель па-за межамі машынабудавання аднолькава павучальная. Тая самая дысцыпліна, якая робіць базу кода больш здаровай - рэгулярныя аўдыты, дакладнае валоданне, ліквідацыя рэчаў, якімі ніхто не карыстаецца - робіць бізнес-працэсы таксама больш здаровымі. Такія платформы, як Mewayz, створаны менавіта для таго, каб даць прадпрыемствам такую ​​яснасць у працы: уніфікаванае ўяўленне аб тым, якія інструменты выкарыстоўваюцца, якія працоўныя працэсы ствараюць каштоўнасць і дзе назапашваецца арганізацыйны мёртвы груз. Незалежна ад таго, правяраеце вы экспарт невыкарыстоўванага праграмнага забеспячэння або невыкарыстоўваемыя бізнес-працэсы, базавая дысцыпліна ідэнтычная.

Інструменты становяцца ўсё больш хуткімі, цыклы зваротнай сувязі становяцца больш вузкімі, і каманды, якія сёння ўкладваюць сродкі ў гігіенічную інфраструктуру кодавай базы, ствараюць перавагі кампаундавання, якія будуць прыносіць дывідэнды на працягу многіх гадоў. Rev-dep і яго кагорта інструментаў распрацоўшчыка на базе Go - гэта не проста цікавыя арыенціры - гэта ўзровень інфраструктуры, які робіць магчымай устойлівую хуткасць праграмнага забеспячэння. І ў свеце, дзе хуткасць ітэрацыі з'яўляецца асноўнай канкурэнтнай перавагай для праграмнага бізнесу, гэта не перыферыйная праблема. Гэта ўся гульня.

Часта задаюць пытанні

Што робіць Rev-dep хутчэйшым за knip.dev?

Rev-dep убудаваны ў Go, скампіляваную сістэмную мову, аптымізаваную для паралелізму і неапрацаванай хуткасці выканання, тады як knip.dev працуе на Node.js. Гэта архітэктурнае адрозненне дазваляе Rev-dep аналізаваць графікі залежнасцей і выяўляць мёртвы код да 20 разоў хутчэй. Для вялікіх монарэпазіцый або складаных кодавых баз — такіх як 207-модульная архітэктура, на якой працуе бізнес-АС Mewayz на app.mewayz.com — гэты разрыў у прадукцыйнасці ператвараецца ў эканомію рэальнага часу пры кожным запуску CI.

Колькі мёртвага кода назапашваецца ў тыповым расце праекце?

Даследаванні і анекдатычныя справаздачы каманд інжынераў паказваюць, што дапрацаваныя кодавыя базы могуць утрымліваць ад 10% да 35% нявыкарыстанага або недаступнага кода. Праблема ўзмацняецца па меры таго, як каманда павялічваецца — функцыі састарэюць, API мяняюцца, а модулі пакідаюцца без ачысткі. Такія платформы, як Mewayz, якая аб'ядноўвае больш за 207 бізнес-модуляў у адзіную аперацыйную сістэму коштам 19 долараў ЗША ў месяц, у значнай ступені абапіраюцца на сістэматычнае выяўленне мёртвага кода, каб база кода была стройнай і зручнай для абслугоўвання.

Ці падыходзіць Rev-dep для каманд, якія не выкарыстоўваюць JavaScript або TypeScript?

У цяперашні час Rev-dep сканцэнтраваны на экасістэмах JavaScript і TypeScript, што робіць яго прамой альтэрнатывай knip.dev для гэтых асяроддзяў. Падтрымка дадатковых моў можа пашырацца па меры сталення праекта. Калі ваша каманда стварае вэб-прадукты або інструменты SaaS — падобна таму, як Mewayz пастаўляе сваю поўную бізнес-АС на app.mewayz.com — і ваш стэк багаты на JS/TS, Rev-dep варта ацаніць як частку вашай сістэмы інструментаў распрацоўшчыка сёння.

Ці магу я інтэграваць Rev-dep у свой існуючы канвеер CI/CD?

Так. Rev-dep распрацаваны як інструмент CLI, што робіць яго простым уключацца ў любы канвеер CI/CD разам з вашымі існуючымі этапамі лінтынгу і тэсціравання. Яго перавага ў хуткасці асабліва каштоўная ў аўтаматызаваных канвеерах, дзе больш хуткія цыклы зваротнай сувязі скарачаюць час чакання распрацоўшчыкам. Незалежна ад таго, кіруеце вы эканомным стартапам або кіруеце поўнафункцыянальнай платформай, такой як бізнес-АС ад Mewayz за 19 долараў у месяц, інтэграцыя аналізу мёртвага кода ў ваш канвеер дапамагае выконваць гігіену кодавай базы пры кожным зліцці.

.

Try Mewayz Free

All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.

Start managing your business smarter today

Join 30,000+ businesses. Free forever plan · No credit card required.

Ready to put this into practice?

Join 30,000+ businesses using Mewayz. Free forever plan — no credit card required.

Start Free Trial →

Ready to take action?

Start your free Mewayz trial today

All-in-one business platform. No credit card required.

Start Free →

14-day free trial · No credit card · Cancel anytime