Hacker News

Montru HN: Rev-dep - 20 fojojn pli rapida knip.dev alternativa konstruo en Go

Komentoj

12 min read Via github.com

Mewayz Team

Editorial Team

Hacker News

La Kaŝita Imposto ĉe Ĉiu Kreskanta Programaro-Teamo

Ĉiu programara projekto, kiu sufiĉe longe pluvivas, finfine alfrontas la saman trankvilan krizon: la kodbazo komencas kreski pli rapide ol la teamo povas kompreni ĝin. Funkcioj, kiujn neniu vokas, eksportaĵoj, kiuj estis kreitaj por funkcio, kiu estis ekspedita en 2022 kaj kviete malrekomendita, komponantoj, kiuj vivas sur disko sed neniam atingas retumilon. Ĉi tio ne estas malzorgemo - ĝi estas fiziko. Teamoj moviĝas rapide, postuloj ŝanĝiĝas, kaj entropio estas senĉesa. La demando ne estas ĉu via kodbazo havas senvivan kodon. La demando estas kiom ĝi kostas al vi nun.

Laŭ esplorado de la teamo de inĝenierado de produktiveco de Google, programistoj pasigas averaĝe 42% de sia koda tempo legante kaj komprenante ekzistantan kodon anstataŭ verki novajn funkciojn. Kiam tiu ekzistanta kodo inkluzivas milojn da linioj, kiuj ne plu servas por ajna celo, tiu procento kliniĝas eĉ pli alte. Por teamo de dek inĝenieroj, tio estas efike kvar plentempaj dungitoj farantaj nenion produktivan — ne ĉar ili estas maldiligentaj, sed ĉar iliaj iloj ne kongruas kun la rapideco kun kiu maljuniĝas programaro.

Jen kial nova ondo de programista ilaro konstruita sur sistemlingvoj kiel Go kaj Rust generas veran eksciton en inĝenieraj rondoj. Iloj kiel Rev-dep — inversa dependecanalizilo kiu asertas funkcii 20 fojojn pli rapide ol la populara JavaScript-bazita knip.dev — reprezentas pli ol nur pliigan plibonigon. Ili signalas fundamentan repripenson pri kiel ni instrumentigas la evoluprocezon mem.

Kion efektive faras inversa Dependa Analizo

Antaŭ ol kompreni kial rapideco tiom gravas, ĝi helpas kompreni kion dependecanalizaj iloj efektive faras. En JavaScript aŭ TypeScript projekto, ĉiu dosiero importas de aliaj dosieroj. Ĉiu funkcio, klaso aŭ konstanto, kiu estas eksportita de modulo, kreas eblan dependecon - ion, pri kio povus fidi aliaj partoj de la kodbazo. "Inversa" dependecanalizo renversas ĉi tiun perspektivon: anstataŭ demandi "de kio dependas ĉi tiu modulo", ĝi demandas "kio dependas de ĉi tiu modulo?"

Se la respondo al tiu dua demando estas "nenio", vi trovis senvivan kodon. Eksporto, kiun nenio importas, estas malŝparo. Funkcio, kiun nenio vokas, estas teknika ŝuldo kun monata interezo. Inversaj dependecaj iloj sisteme marŝas vian tutan projektan grafikon, mapas ĉiun rilaton inter moduloj kaj surfacas la nodojn, kiuj ne havas enirkonektojn. La rezulto estas preciza revizio de ĉio en via kodbazo kiu povus esti sekure forigita.

Knip.dev faras tion bone por JavaScript kaj TypeScript projektoj, kaj ĝi estas vaste respektata en la komunumo. Sed ĝi estas skribita en JavaScript, kio signifas, ke ĝi funkcias per Node.js, kio signifas, ke ĝi heredas ĉiujn unufadenajn rendimentajn limojn de Node kiam oni faras grandskalan dosiersisteman trapasadon kaj simbolan analizon. Por projekto kun 500 dosieroj, ĉi tio estas bone. Por projekto kun 50,000 dosieroj - la speco de monorepo kiu funkciigas realajn entreprenajn SaaS-produktojn - la analizo povas daŭri minutojn. Kaj minutoj, ĉe la kadenco ĉe kiu funkcias modernaj CI/KD-duktoj, estas interkonsentrompilo.

Kial Iri Ŝanĝas la Kalkulon

Go estis desegnita de la fundo por ĝuste la speco de laborkvanto, kiun postulas analizo de dependeco: rapida dosiera I/O, bonegaj samtempaj primitivuloj kaj minimuma rultempa superkosto. Kie Node.js prilaboras unu taskon samtempe sur ununura fadeno kaj dependas de revokoj kaj promesoj falsi paralelecon, Go povas generi milojn da gorutinoj kiuj vere efektivigas paralele tra ĉiuj disponeblaj CPU-kernoj. Por tasko kiu implikas legi centojn da dosieroj, analizi iliajn AST-ojn kaj konstrui grafeon de simbolrilatoj, ĉi tiu arkitektura diferenco tradukiĝas rekte en murhorloĝan rendimenton.

La 20x-rapideco pretendita de Rev-dep ne estas magia — tio okazas kiam vi kongruas la ĝustan lingvon al la ĝusta problemo. La kompilita naturo de Go ankaŭ signifas neniun JIT-varmpunon. De malvarma komenco ĝis kompleta analizo, Go-binaro funkcias ĉe preskaŭ-pinta rendimento. La praktika implico estas, ke analizo, kiu daŭris 90 sekundojn en Nod-bazita ilo, povas kompletigi en malpli ol 5 sekundoj en bone efektivigita Go-ekvivalento. Tio estas la diferenco inter kontrolo, kiun programistoj preterlasas ĉar ĝi "daŭras eterne" kaj unu kiu funkcias en ĉiu komitaĵo sen ke iu rimarku la superkozon.

"La plej bona programilo estas tiu, kiu foriĝas. Se via analiza serio aldonas tri minutojn al ĉiu CI-dukto, programistoj trovos manierojn preterlasi ĝin. Rapideco ne estas agrabla — ĝi estas la antaŭkondiĉo por adopto."

La Komerca Kazo por Kodbaza Higieno

Malviva kodo ne estas nur problemo pri estetika programisto — ĝi havas konkretajn komercajn sekvojn, kiuj kuniĝas kun la tempo. Konsideru kiom ŝvelintaj kodbazoj efektive kostas organizojn:

  • Pli longaj konstrutempoj kiuj malrapidigas deplojajn duktojn kaj reduktas la nombron da eldonoj kiujn teamo povas sekure sendi semajne
  • Pli alta kogna ŝarĝo por enŝipiĝaj inĝenieroj, kiuj devas pasigi semajnojn distingi aktivajn ŝablonojn de forlasitaj
  • Plialtigitaj pakaĵgrandoj kiuj difektas aplikaĵon, precipe en TTT-aplikoj kie ĉiu kilobajto influas ŝarĝtempojn kaj konvertajn indicojn
  • Sekurecsurfaco-vastigo — malviva kodo, kiu ankoraŭ enhavas dependecojn, ankoraŭ estas vektoro por vundeblecoj en tiuj pakaĵoj
  • Testsuit bloat kie testoj por forigita funkcieco daŭre funkcias, konsumas CI minutojn, kaj foje malsukcesas en konfuzaj manieroj
  • Malveraj kompleksecsignaloj kiuj malfaciligas arkitekturajn decidojn ĉar ne klaras kio estas ŝarĝa kaj kio estas spura

Studo de 2023 de la grupo DevOps Research and Assessment (DORA) trovis, ke teamoj kun fortaj kodkvalitaj praktikoj - inkluzive de regula forigo de malviva kodo - sendis 2,4 fojojn pli ofte kaj havis 7 fojojn pli malaltajn ŝanĝprocentojn ol teamoj kiuj lasis teknikan ŝuldon akumuliĝi. La korelacio ne estas hazarda. Puraj kodbazoj estas pli facile rezoneblaj, pli facile testeblaj kaj pli facile ŝanĝeblaj sekure.

Por entreprenoj konstruantaj sur platformoj kiel Mewayz — kiu funkciigas 138,000 uzantojn tra 207 apartaj komercaj moduloj, kiuj iras de CRM kaj salajro-etato ĝis flotadministrado kaj ligi-en-bio-iloj - kodbaza sano multobligis interesojn. Kiam via platformo ampleksas tiom da funkciaj domajnoj, la integriga surfaco inter moduloj estas enorma. Neuzataj eksportaĵoj en kernmodulo povas krei malverajn atendojn por dependaj moduloj, ekigi nenecesajn rebildigojn en la UI-tavolo kaj malfaciligi la dependecan grafeon en manieroj kiuj riskas estontajn ŝanĝojn.

Integrigi Dependan Analizon en Modernajn Disvolvajn Laborfluojn

La vera potenco de rapida ilaro kiel Rev-dep ne estas la unufoja purigado, kiun ĝi ebligas — ĝi estas la kapablo fari kontinuan analizon kiel parto de via normala disvolva ciklo. Kiam morta kodo-skanado daŭras 4 sekundojn anstataŭ 4 minutojn, vi povas aldoni ĝin al viaj antaŭ-engaĝigaj hokoj. Kiam necesas 4 sekundoj anstataŭ 4 minutoj, via CI-dukto povas malsukcesi tiran peton kiu enkondukas novajn neuzatajn eksportaĵojn anstataŭ lasi ilin amasiĝi silente.

💡 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 →

Ĉi tiu ŝanĝo de "kvaronjara puriga evento" al "kontinua kvalita pordego" estas analoga al kio okazis kiam linters fariĝis sufiĉe rapidaj por funkcii per ĉiu klavopremo en IDE. Antaŭ ol ESLint funkciis en reala tempo, kodstilo estis devigita per periodaj kodrecenzoj. Poste, ĝi fariĝis ĉirkaŭa - parto de la sugestaj bukloprogramistoj spertaj dum verkado de kodo, ne poste. Rapida dependecanalizo povas krei la saman ĉirkaŭan kvalitan premon ĉirkaŭ malviva kodo.

Agordo de ĉi tiu laborfluo kutime implikas tri komponantojn:

  1. Baza analizo: Rulu la ilon kontraŭ via nuna kodbazo por kompreni la skalon de ekzistanta malviva kodo. Ne provu ripari ĉion samtempe — triu laŭ modulo kaj prioritatu laŭ risko.
  2. CI-devigo: Aldonu la analizon al via dukto kun sojlo — malsukcesu ĉe iuj ĵus enkondukitaj neuzataj eksportaĵoj, sed ne malsukcesu ĉe ekzistantaj ĝis vi purigos ilin.
  3. Planitaj purigadospuroj: Uzu la eliron de la ilo por gvidi regulajn purigajn laborojn, spurante malvivajn kodkalkulojn kiel teaman sano-metriko laŭlonge de la tempo.

Kio estas la Go Tooling Renesancaj Signaloj por SaaS-Konstruistoj

Rev-dep estas parto de pli larĝa ŝablono en programista ilaro: alt-efikecaj alternativoj al establitaj JavaScript-iloj, konstruitaj en Go aŭ Rust, aperas en ĉiu kategorio. Biome anstataŭigis ESLint kaj Prettier por multaj teamoj. Turbopack kaj Rspack manĝas la tagmanĝon de Webpack. Bulko defias Node.js mem. La komuna fadeno estas, ke ĉi tiuj iloj ne nur ofertas pliigan plibonigon — ili ofertas paŝ-funkciajn plibonigojn, kiuj ŝanĝas tion, kio estas praktika.

Por SaaS-kompanioj konstruantaj kompleksajn, multmodulajn produktojn, ĉi tiu ilara renesanco havas rektajn implicojn por inĝenieristiko-rapideco. La 207-modula arkitekturo de Mewayz - ampleksanta ĉion de HR kaj salajro-etato ĝis rezervaj sistemoj kaj analizaj paneloj - reprezentas ĝuste la specon de granda, interligita kodbazo kie rapida, preciza dependecanalizo iĝas funkcie kritika. Kiam ŝanĝo al komuna utilmodulo povus teorie trapasi dekojn da funkciomoduloj, havi preskaŭ tujan videblecon en la realan dependecan grafeon ne estas nur oportuna — ĝi estas la speco de infrastrukturo kiu malhelpas multekostajn produktadajn incidentojn.

La kapablo respondi "kio efektive uzas ĉi tiun funkcion" en malpli ol kvin sekundoj anstataŭ kvin minutoj ŝanĝas kiel inĝenieroj faras decidojn. Ĝi malaltigas la koston de esploro, kio signifas, ke inĝenieroj esploras pli ofte, kio signifas, ke ili faras pli bonajn decidojn. Ĉi tio estas la kunmetita profito de investo en rapida ilaro, kiu ofte estas preteratentita kiam organizoj pensas pri elspezo pri produktiveco de programistoj.

Igi Dead Code Elimination Parto de Via Inĝenieristiko Kulturo

Teknologio sole ne konstruas purajn kodbazojn — kulturo faras. Iloj kiel Rev-dep disponigas la kapablon, sed transformi tiun kapablon en konsekvencan praktikon postulas organizan engaĝiĝon. La plej efikaj teamoj traktas mortkodajn metrikojn same kiel ili traktas testan priraportadon: kiel videblan, spuritan indikilon de kodbaza sano, kiu estas reviziita en inĝenieristikaj renkontiĝoj kaj enkalkulita en sprintplanadon.

Kelkaj specifaj kulturaj praktikoj, kiuj bone funkcias, inkluzivas indiki "kodforigajn tagojn" — periodajn eventojn, kie la eksplicita celo estas forigi kodon prefere ol aldoni ĝin. Netlify fame ludis ĉi tion per funkciado de gvidtabuloj spurantaj retajn liniojn forigitajn. Stripe skribis publike pri ilia praktiko trakti kodforigon kiel bonegan inĝenieran kontribuon, egalvaloran al ĉeflaboro. La pensŝanĝo postulata estas rekoni, ke la plej bona kodo estas kodo, kiu ne ekzistas: ĉiu linio, kiun vi ne skribas, estas linio, kiun vi neniam devas konservi, testi, sencimigi aŭ klarigi al nova dungito.

Por produktaj kompanioj administranta kompleksajn komercajn operaciojn, la paralelo ekster inĝenieristiko estas same instrua. La sama disciplino, kiu igas kodbazojn pli sanaj - regulaj revizioj, klara proprieto, forigo de aferoj kiujn neniu uzas - ankaŭ faras komercajn procezojn pli sanaj. Platformoj kiel Mewayz estas konstruitaj ĝuste por doni al entreprenoj tian operacian klarecon: unuigita vido pri kiuj iloj estas uzataj, kiuj laborfluoj generas valoron, kaj kie organiza pezo amasiĝas. Ĉu vi kontrolas neuzatajn programajn eksportaĵojn aŭ neuzatajn komercajn procezojn, la subesta disciplino estas identa.

La iloj plirapidiĝas, la sugestoj pli streĉiĝas, kaj la teamoj kiuj investas en kodbaza higiena infrastrukturo hodiaŭ konstruas kunmetitan avantaĝon, kiu pagos dividendojn dum jaroj. Rev-dep kaj ĝia kohorto de Go-funkciigitaj programiloj ne estas nur interesaj komparnormoj - ili estas la infrastruktura tavolo kiu ebligas daŭrigeblan programaran rapidecon. Kaj en mondo kie rapideco de ripeto estas la ĉefa konkurenciva avantaĝo por programaraj entreprenoj, tio ne estas ekstercentra zorgo. Estas la tuta ludo.

Oftaj Demandoj

Kio igas Rev-dep pli rapida ol knip.dev?

Rev-dep estas konstruita en Go, kompilita sistemlingvo optimumigita por samtempeco kaj kruda ekzekutrapideco, dum knip.dev funkcias per Node.js. Ĉi tiu arkitektura diferenco permesas al Rev-dep analizi dependecaj grafikaĵoj kaj detekti mortan kodon ĝis 20 fojojn pli rapide. Por grandaj monorepos aŭ kompleksaj kodbazoj - kiel la 207-modula arkitekturo funkciiganta la komercan OS de Mewayz ĉe app.mewayz.com - tiu rendimento breĉo tradukiĝas en reala tempo ŝparita dum ĉiu CI-funkciado.

Kiom da malviva kodo amasiĝas tipa kreskanta projekto?

Studoj kaj anekdotaj raportoj de inĝenieraj teamoj sugestas, ke maturaj kodbazoj povas porti ie ajn de 10% ĝis 35% neuzata aŭ neatingebla kodo. La problemo kunmetiĝas dum teamoj skalas - funkcioj estas malrekomenditaj, APIoj ŝanĝiĝas kaj moduloj estas forlasitaj sen purigado. Platformoj kiel Mewayz, kiu plifirmigas pli ol 207 komercajn modulojn en ununuran operaciumon de 19 USD/monato, multe dependas de sistema detektado de malvivaj kodoj por konservi la kodbazon svelta kaj bontenebla.

Ĉu Rev-dep taŭgas por teamoj, kiuj ne uzas JavaScript aŭ TypeScript?

Rev-dep estas nuntempe koncentrita sur JavaScript kaj TypeScript-ekosistemoj, igante ĝin rekta alternativo al knip.dev por tiuj medioj. Subteno por pliaj lingvoj povas pligrandigi dum la projekto maturiĝas. Se via teamo konstruas ret-bazitajn produktojn aŭ SaaS ilojn - simile al kiel Mewayz liveras sian plenan komercan OS ĉe app.mewayz.com - kaj via stako estas peza JS/TS, Rev-dep bone taksas kiel parto de via programista ilĉeno hodiaŭ.

Ĉu mi povas integri Rev-dep al mia ekzistanta CI/KD-dukto?

Jes. Rev-dep estas desegnita kiel CLI-ilo, faciligante fali en ajnan CI/KD-dukton kune kun viaj ekzistantaj farantaj kaj testaj paŝoj. Ĝia rapideca avantaĝo estas precipe valora en aŭtomatigitaj duktoj kie pli rapidaj sugestaj bukloj reduktas programistajn atendtempojn. Ĉu vi prizorgas sveltan startentreprenon aŭ administras plenfunkcian platformon kiel la komerca OS de 19 USD/mo de Mewayz, integri malfunkcian kodan analizon en via dukto helpas devigi kodbazan higienon ĉe ĉiu kunfando.