Un llinell, pedwar pecyn ar ddeg
Async Digital Ltd Caerdydd, DU
Ychwanegais The Composable Architecture at becyn Swift gwag a'i adeiladu. Arweiniodd un llinell dibyniaeth at 14 pecyn a chrynhowyd 45 modiwl Swift. Mae tua 40,000 llinell o god yn cael eu cysylltu i mewn i'r ap. Mae 140,000 arall yn cael eu crynhoi ar adeiladu llinell orchymyn glân er mwyn i'r macros redeg, ac mae 96% o'r rheini yn perthyn i ddosrannwr Swift Apple. Prynodd y pris hwnnw bethau go iawn pan oedd offer cyflwr SwiftUI yn wan a phobl yn teipio pob llinell eu hunain. Rhyddhaodd Apple Observation yn 2023, ac mae asiant yn ysgrifennu'r rhan fwyaf o'm cod patrwm bellach. Felly mae'r nodyn hwn yn gofyn beth mae pensaernïaeth trydydd parti yn dal i'w brynu, a phryd y byddwn i'n dal i dalu amdani. Mae fy ateb yn pwyso ar dri pheth: aros yn agos at yr hyn y mae Apple yn ei ryddhau, cadw llai o god, a chael gwaith dibynadwy gan asiantau drwy reolau rydych chi'n berchen arnyn nhw.
Dydw i ddim yn erbyn Point-Free. Y llynedd dadleuais yn gyhoeddus dros eu llyfrgell ddibyniaethau yn hytrach na @Environment SwiftUI. Ond mae llyfrgell y gallwch ei thynnu allan mewn prynhawn yn un penderfyniad. Mae fframwaith sy'n gosod siâp pob nodwedd yn yr ap yn benderfyniad gwahanol, a hwnnw yw testun y nodyn hwn.
Beth mae un llinell yn dod gyda hi
Doeddwn i ddim eisiau dyfynnu ffigurau rhywun arall, felly fe'u cynhyrchais fy hun. Pecyn Swift yw'r prawf, heb ddim ynddo ond dibyniaeth ar TCA 1.26.2, y fersiwn gyfredol, ac un nodwedd fach wedi ei hysgrifennu gyda @Reducer ac @ObservableState. Yna adeiladu glân.
| Beth | Nifer |
|---|---|
| Pecynnau rydych chi'n eu datgan | 1 |
| Pecynnau wedi'u datrys a'u llwytho i lawr | 14 |
| O'r rheini, gan Point-Free | 12 |
| Modiwlau Swift wedi'u crynhoi | 45 |
| Modiwlau wedi'u cysylltu i mewn i'r ap | 21 |
| Modiwlau sydd ond yn rhedeg y macros adeg adeiladu | 24 |
Llinellau o god, gan gyfrif dim ond y ffeiliau a grynhowyd go iawn. Nid yw llinellau gwag na sylwadau wedi eu cynnwys.
| Ble mae'r cod yn mynd | Llinellau cod |
|---|---|
| Wedi'u cysylltu i mewn i'r ap | 40,294 |
| ohonynt, TCA ei hun | 12,042 |
| Wedi'u crynhoi i redeg macros, byth yn cael eu cludo | 139,619 |
| ohonynt, swift-syntax | 134,165 |
| Cyfanswm wedi'i grynhoi ar adeiladu glân | 179,913 |
Mae dau beth yn sefyll allan. Dim ond 30% o'r cod a grynhowyd i mewn i'r ap yw TCA. Y pecynnau y mae'n sefyll arnynt yw'r 70% arall: llywio, casgliadau, rhannu, custom dump, case paths, clociau, a mwy. A dydy'r gost unigol fwyaf byth yn cyrraedd defnyddiwr. swift-syntax yw hi, wedi ei grynhoi er mwyn i @Reducer allu ehangu.
Adeiladau llinell orchymyn SwiftPM yw'r rhain. Wnes i ddim mesur Xcode. Gall SwiftPM ddefnyddio swift-syntax parod, ac mae hynny ymlaen yn ddiofyn. Ar gyfer 603.0.2, y fersiwn a ddatrysodd TCA, ni lwythwyd pecyn parod i lawr, felly fe'i crynhowyd o'r ffynhonnell. Pan binnais 602.0.0, fe lwythodd SwiftPM becyn parod i lawr, a chrynhowyd swift-syntax o'r ffynhonnell o hyd. Dydw i ddim wedi darganfod pam. Darllenwch y 140,000 fel cost y llinell orchymyn heb becynnau parod. Gall eich adeiladu Xcode fod yn wahanol.
Am beth roedd pobl yn talu
Os ydw i'n hepgor yr achos dros TCA, dyn gwellt yw'r nodyn hwn, felly dyma fe.
Mae TestStore yn gwneud i brawf gadarnhau pob newid cyflwr y mae gweithred yn ei achosi. Anghofiwch un a bydd y prawf yn methu. Mae hynny'n warant gryfach nag y mae'r rhan fwyaf o gyfresi profion yn ei chael. Mae pob dibyniaeth yn cael ei chyfnewid ar gyfer pob prawf drwy un mecanwaith. Mae nodweddion yn cyfuno i mewn i rieni mewn un ffordd sy'n cael ei gwirio. Ac mae tîm o 20 yn cael un ateb i "ble mae'r sgil-effaith hon yn mynd", sy'n werth llawer pan fo 20 o bobl yn gofyn.
Datrysodd boen go iawn hefyd. Cyn iOS 17, roedd ObservableObject yn ail-lunio golygfeydd nad oedden nhw wedi darllen y briodwedd a newidiodd, ac roedd gyrru llywio o gyflwr yn anodd ei gael yn iawn. Roedd gan TCA atebion i'r ddau pan nad oedd gan Apple.
Caeodd Apple y rhan fwyaf o'r bylchau
Dydy Apple erioed wedi enwi pensaernïaeth, felly wna i ddim dweud ei bod yn argymell un. Yr hyn a ddangosodd yn Discover Observation in SwiftUI yn WWDC23 yw dosbarth plaen wedi ei farcio'n @Observable y mae golygfa'n ei ddarllen yn uniongyrchol. Dim ond pan fydd priodwedd a ddarllenodd go iawn yn newid y mae golygfa'n ail-lunio. Mae pobl yn galw'r patrwm hwnnw yn model-view, neu MV.
Datrysodd hynny'r broblem ail-lunio ar lefel yr iaith. Mae modelau'n pasio i lawr drwy @Environment. Mae pentyrrau llywio yn rhwymo i gyflwr. Cyrhaeddodd Swift Testing yn 2024 gyda phrofion paramedrig a #expect. Mae'r cyfan yn dod gyda'r system weithredu neu'r offer datblygu, felly nid yw'n ychwanegu dim at graff y pecynnau na dim at adeiladu glân.
Yr hyn na ryddhaodd Apple yw unrhyw beth tebyg i TestStore. Does dim yn y platfform sy'n gorfodi prawf i gyfrif am bob newid cyflwr. Os yw'r warant honno'n bwysig i chi, dyna gerdyn cryfaf TCA o hyd.
Beth newidiodd AI, a beth na newidiodd
Rhan o apêl unrhyw fframwaith yw llai o god i'w ysgrifennu. Mae reducer, ei weithredoedd a'i brawf yn dilyn patrwm, a theipio yw patrwm. Mae asiant yn gwneud y teipio hwnnw i mi bellach, yn y naill bensaernïaeth neu'r llall, mewn eiliadau.
Anaml mai ysgrifennu oedd y rhan ddrud, serch hynny. Darllen, adolygu a dadfygio yw'r rhannau drud. Yn fy ngwaith i mae AI wedi gwneud y rheini'n rhatach hefyd, ond yn llawer llai nag y gwnaeth ysgrifennu. Mae angen person sy'n deall y cod arnyn nhw o hyd, ac maen nhw'n dal i dyfu gyda faint o god sydd i'w ddeall. Dydy fframwaith ddim yn cael gwared ar y costau hynny chwaith. Mae'n eu symud. Rwy'n darllen fy nodwedd ynghyd â rheolau'r fframwaith. Rwy'n dadfygio drwy gamu trwy reducer generig na wnes i ei ysgrifennu. Ac mae'r fframwaith yn ychwanegu cost ei hun: rwy'n uwchraddio pan fydd y gwerthwr yn rhyddhau, ar amserlen y gwerthwr.
Felly mae'r cwestiwn wedi newid. Arferai fod yn gwestiwn a oedd fframwaith yn arbed mwy o deipio nag yr oedd yn ei gostio. Mae teipio bron yn rhad ac am ddim bellach, felly'r cwestiwn yw a yw'n arbed mwy o ddarllen, adolygu a dadfygio nag y mae'n ei ychwanegu. Mae hwnnw'n brawf anoddach i'w basio gyda 40,000 llinell yn yr ap.
Y ddadl orau dros TCA yn 2026
Nid y ffaith ei fod yn gwneud cod yn gyflymach i'w ysgrifennu yw'r ddadl gryfaf dros TCA yn 2026. Mae asiant wedi dileu'r fantais honno i raddau helaeth.
Y ddadl yw bod TCA yn rhoi ffordd gyfyngedig i asiant AI weithio.
Gall asiant roi galwad rhwydwaith mewn golygfa SwiftUI, a bydd y casglwr yn ei derbyn yn ddigon bodlon. Dydy TCA ddim yn newid hynny. Yr hyn y mae'n ei gynnig yw confensiwn cryf ynghylch ble mae effeithiau'n perthyn, model reducer sy'n gwneud yr effeithiau hynny'n amlwg, system ddibyniaethau sy'n methu prawf pan fydd nodwedd yn cyrraedd dibyniaeth heb weithrediad prawf, a TestStore, y cerdyn cryfaf o §3, a all fethu pan fydd newid cyflwr yn cael ei adael heb ei gadarnhau.
Mae hynny'n bwysig am fod asiant yn dda iawn am gynhyrchu cod sy'n crynhoi heb o reidrwydd gadw'r bensaernïaeth yr oeddech chi'n ei bwriadu.
Ond does dim rhaid i'r rheiliau hynny ddod o fframwaith.
Rwy'n cytuno bod angen cyfyngiadau ar asiantau. Dydw i ddim yn cytuno bod rhaid iddyn nhw ddod gan TCA. Gellir cymhwyso'r un egwyddor ar lefel yr ystorfa: ysgrifennu'r confensiynau, yna gorfodi'r rheolau sy'n bwysig gydag offer cyffredin.
Mae'r gwahaniaeth yn bwysig. Cyngor yw rheol mewn prompt asiant. Mae ffeil gonfensiynau'n well, ond cyngor yw hi o hyd oni bai bod rhywbeth yn ei gwirio. Y patrwm defnyddiol yw rhoi'r rheol mewn rhyddiaith ac yna rhoi gwiriad annibynnol y tu ôl iddi.
Er enghraifft, tybiwch mai'r rheol yw nad yw golygfeydd yn gwneud gwaith rhwydweithio. Mae'r ffeil gonfensiynau'n esbonio'r rheol a pham mae'n bodoli. Gall rheol lint wedyn wrthod APIs rhwydweithio mewn ffeiliau golygfa, wrth ddatblygu ac yn CI. Gall yr asiant adolygu ei newidiadau ei hun yn erbyn y confensiynau hefyd, ond cyngor yw hynny. Y rheol lint yw'r gorfodi, am nad yw'n dibynnu ar i'r model gytuno â hi. Dim ond tra bo angen person i'w diffodd y mae'n dal, felly mae angen i fod dynol gymeradwyo sylw disable, neu newid i ffurfweddiad lint.
Dyma'r dull rwy'n ei ddisgrifio yn Mastering the AI Coworker, llyfr yr wyf yn ei werthu. Mae ei bennod ar hooks yn cloi ei chrynodeb ag un llinell: "A rule is real when breaking it takes deliberate effort from a human, not restraint from a model."
Mae TCA yn darparu rhai o'r cyfyngiadau hyn fel rhan o'r bensaernïaeth. Mae eu hadeiladu eich hun yn golygu cynnal eich rheolau a'ch gwiriadau eich hun. Mae hynny'n waith go iawn. Ond mae hefyd yn golygu bod y cyfyngiadau'n disgrifio eich ap chi yn hytrach na model y fframwaith o ap.
Mae un rhan na fyddwn i'n ceisio ei hail-greu: cadarnhau cyflwr yn gyflawn. Mae TestStore yn wirioneddol ddefnyddiol yma. Does dim byd yn SwiftUI na Swift Testing yn rhoi'r un warant i chi y bydd prawf yn rhoi cyfrif am bob newid cyflwr y mae gweithred yn ei achosi.
Mae cost gynnil hefyd i reiliau gan werthwr: maen nhw'n symud. Mae TCA 1.26.2 yn dal i gynnwys WithViewStore, wedi ei farcio'n anghymeradwy o blaid y dull sy'n seiliedig ar Observation a gyflwynwyd yn 1.7. Mae'r ddau batrwm mewn cod Swift cyhoeddus, felly mae asiant a hyfforddwyd arno bron yn sicr wedi gweld y ddau. Dim ond un sy'n gyfredol.
Dydw i ddim wedi mesur pa mor aml mae hynny'n cynhyrchu cod hen, felly ni wnaf honni ei fod yn digwydd. Ond mae'n dangos y cyfaddawd. Pan ddaw'r bensaernïaeth o fframwaith, mae mudo'r fframwaith yn dod yn rhan o fudo eich ap.
Ac mae TCA 1.26.2 eisoes yn cynnwys gosodiad dewisol y mae ei ddisgrifiad yn dweud wrthych am ei alluogi "to remain ready for Composable Architecture 2.0".
Nid y cwestiwn, felly, yw a yw TCA yn darparu rheiliau. Mae'n gwneud hynny.
Y cwestiwn yw a yw'r rheiliau hynny'n werth mabwysiadu pensaernïaeth, ei dibyniaethau a'i llwybr mudo ar gyfer yr ap cyfan.
Y costau nad ydynt yn crebachu
Does dim un o'r rhain yn mynd yn rhatach am fod asiant yn ysgrifennu'r cod.
- Clymu i'r offer. Mae prif faniffest TCA bellach yn gofyn am offer Swift 6.4. Mae offer hŷn yn disgyn yn ôl i ail faniffest, sef y gwerthwr yn cario'r gost honno ar eich rhan, am y tro.
- Amser adeiladu. Cymerodd adeiladu dadfygio glân ar y llinell orchymyn rhwng 42 a 47 eiliad ar fy Mac, a swift-syntax yw'r rhan fwyaf o'r cod a grynhowyd.
- Cadwyn gyflenwi. 14 ystorfa, 12 gan un cwmni. Mae un cwmni'n golygu bod y darnau'n cyd-fynd yn dda. Mae hefyd yn golygu mai blaenoriaethau un cwmni sy'n penderfynu eich map ffordd ar gyfer unrhyw beth y mae'r fframwaith yn ei gyffwrdd.
- Pobl. Mae pob datblygwr newydd yn dysgu'r fframwaith cyn gallu newid nodwedd, ac mae angen y rheolau hynny yng nghyd-destun pob asiant hefyd.
Aros yn agos at y platfform, a chadw llai o god
Pe bai lle i un ddadl yn unig yn y nodyn hwn, hon fyddai hi. Arhoswch mor agos ag y gallwch at yr hyn y mae Apple yn ei ryddhau, a chadwch gyn lleied o god ag y gallwch.
Mae pob llinell o god trydydd parti yn eich ap yn llinell na wnaethoch chi ei hysgrifennu, ac sy'n dal yn gyfrifoldeb arnoch chi pan fydd yn torri.
Edrychwch ar §1 eto gyda hynny mewn golwg. Daw Observation, @Environment a Swift Testing gan Apple, gyda'r system weithredu neu'r offer datblygu. Mae TCA yn crynhoi 40,294 llinell i mewn i'r ap cyn i chi ysgrifennu nodwedd. Mae 5,668 o'r rheini yn swift-collections, sef pecyn Apple ei hun. Mae'r 34,626 arall yn god trydydd parti y tu mewn i'ch ap, wedi ei uwchraddio ar amserlen trydydd parti. Ar lwybr y platfform mae'r rhif hwnnw'n dechrau ar sero. Alla i ddim honni bod gan ap model-view bob amser lai o'i god ei hun, am nad ydw i wedi mesur hynny.
Nid yw aros yn agos at y platfform yn golygu osgoi newid. Cyflwynodd Apple @Observable yn 2023 fel y ffordd newydd o yrru SwiftUI, a bu'n rhaid i apiau a oedd eisiau ei fanteision fudo. Dydy fframwaith ddim yn eich cysgodi rhag hynny. Mae'n ychwanegu ei fudo ei hun ar ben hynny. Bu'n rhaid i TCA amsugno Observation hefyd, ac mae un o'i 14 pecyn, swift-perception, yn bodoli i ôl-borthi offer arsylwi Apple i fersiynau hŷn o'r system weithredu. Ar lwybr y platfform mae un mudo, wedi ei ddogfennu gan y cwmni sy'n rhyddhau'r system weithredu, ac mae'n cyrraedd gyda SDK y mae'n rhaid i chi ei fabwysiadu beth bynnag.
A llai o god yw'r hyn sy'n gwneud popeth yn §4 yn rhatach. Mae teipio bron yn rhad ac am ddim. Nid yw darllen, adolygu a dadfygio, ac mae'r tri yn tyfu gyda'r cod rydych chi'n berchen arno neu'n gorfod ei ddeall. Rhagosodiad y platfform sy'n cadw'r rhif hwnnw isaf.
Pryd y byddwn i'n dal i'w dewis
Mae yna achosion lle byddwn i'n dewis TCA heddiw.
- Tîm mawr sydd angen un ffordd orfodol o wneud pethau yn fwy nag sydd arno angen graff dibyniaethau bach.
- Cronfa god TCA sy'n bodoli eisoes. Mae symud oddi ar fframwaith yn costio mwy nag unrhyw un o'r ffigurau uchod, ac nid yw "fe'i mabwysiadwyd yn 2021" yn rheswm dros adael.
- Cynnyrch lle mae profi cyflwr yn gyflawn yn ofyniad, am nad oes dim y mae Apple yn ei ryddhau yn gwneud yr hyn y mae
TestStoreyn ei wneud. - Tîm sydd eisoes yn rhugl ynddo, lle mae'r gost ddysgu wedi ei thalu.
Beth rwy'n ei wneud yn lle hynny
Mae fy apiau'n defnyddio modelau @Observable y mae golygfeydd yn eu darllen yn uniongyrchol. Mae'r rheolau'n byw mewn ffeil gonfensiynau ysgrifenedig y mae asiantau'n ei darllen cyn dechrau. Mae dau wiriad yn rhedeg y tu allan i'r model, y ddau yn harnais yr asiant yn hytrach nag yn yr ystorfa, a'r ddau ond ar olygiadau a wneir drwy offer golygu ffeiliau'r asiant. Mae SwiftLint yn trwsio'r hyn a all ym mhob ffeil Swift a olygir felly. Mae hook yn stopio i ofyn i mi cyn i olygiad o'r fath ychwanegu sylw swiftlint:disable. Nid yw'r naill na'r llall yn yr ystorfa eto, sef lle mae §5 yn rhoi'r rheol lint sy'n rhedeg yn CI, felly mae'r ddau'n wannach na'r hyn rwy'n ei ddisgrifio yno. Mae asiant adolygu yn darllen newidiadau yn erbyn y ffeil gonfensiynau hefyd, ond model yw hwnnw, felly rwy'n ei gyfrif fel cyngor. Enghraifft o wiriad y gallech ei ychwanegu yw'r rheol rhwydweithio yn §5, nid un y mae fy apiau'n ei chario heddiw.
O ran chwistrellu dibyniaethau, mae'n dibynnu ar yr ap. Mae rhai yn defnyddio @Environment gydag Observation, a ddatrysodd ran ail-lunio'r hyn y cwynais amdano yn 2025. Mae rhai yn dal i ddefnyddio llyfrgell ddibyniaethau Point-Free. Dewis maint llyfrgell yw hwnnw, ond nid yw'n rhad ac am ddim chwaith. Mae'n tynnu swift-syntax i mewn hefyd, felly ar yr apiau hynny nid yw llwybr y platfform yn dechrau ar sero.
Dylwn ddweud bod gen i fuddiant yma. Mae fy musnes yn adeiladu apiau fel hyn. Fi biau'r llyfr a ddyfynnir yn §5, ac mae ar werth. Rwyf hefyd yn cyhoeddi pecyn y gall apiau eraill ei fabwysiadu, Iris, sy'n llwybro URLau sy'n dod i mewn i lywio SwiftUI wedi'i deipio. Mae'n siapio mwy nag offeryn bach, am fod ap yn datgan un cydlynydd ar gyfer ei lywio. Ond mae'n stopio wrth lywio. Mae ap yn ei mabwysiadu ar gyfer llwybro a dolenni dwfn, ac mae ei nodweddion yn aros yn SwiftUI plaen. Mae Point-Free yn gwerthu tanysgrifiadau sy'n dysgu TCA, felly mae ganddyn nhw fuddiant hefyd. Dydy dim o'r rheini'n newid y ffigurau yn §1, y gall unrhyw un eu hatgynhyrchu gyda phecyn gwag ac adeiladu glân.
Os ydych chi'n penderfynu hyn ar gyfer ap newydd, byddwn i'n gofyn pedwar cwestiwn. Faint o bobl fydd yn newid y cod hwn? Oes angen cadarnhau pob newid cyflwr arnoch, neu ydy profi ymddygiad yn ddigon? Faint o waith uwchraddio a yrrir gan werthwr y gallwch ei amsugno mewn blwyddyn? Ac a oes gwiriadau sy'n rhedeg y tu allan i'r model y tu ôl i'ch confensiynau ysgrifenedig, o'r math a ddisgrifir yn §5? Os ydy'r ateb i'r olaf yn ie, mae gennych reiliau eisoes, ac efallai nad oes angen i chi lwytho 14 pecyn i lawr i'w cael.
Mesurwyd ar 13 Medi 2026 yn erbyn TCA 1.26.2, a ryddhawyd ar 28 Awst 2026. Pecyn yn cynnwys un reducer a dim arall, wedi ei adeiladu'n lân gyda SwiftPM ar Swift 6.2.4, macOS, arm64, dadfygio.
Mae modiwl yn cyfrif fel un wedi'i grynhoi dim ond os cynhyrchodd ffeiliau gwrthrych. Mae SwiftPM yn creu ffolderi adeiladu ar gyfer 90 targed, a byddai cyfrif y rheini wedi dyblu'r ffigur. Daw'r llinellau o restr ffynonellau'r casglwr ar gyfer pob modiwl, felly mae profion, enghreifftiau a darnau dogfennaeth wedi eu heithrio. Gwiriwyd fy nghyfrifydd llinellau yn erbyn ffeil a gyfrifwyd â llaw cyn i mi ymddiried ynddo.
Adeiladu macOS oedd hwn. Mae adeiladu iOS yn cyfnewid y modiwl llywio AppKit am yr un UIKit, felly gall nifer y modiwlau symud o un neu ddau. Nid yw wedi'i grynhoi yr un peth â wedi'i gludo. Wnes i ddim mesur faint sy'n goroesi tynnu cod marw i mewn i ddeuaidd.
Gweithiais ar hyn gydag asiant AI, a redodd yr adeiladau a gwneud y cyfrif. Fi oedd biau'r cwestiwn, a'r dewis i fesur yn hytrach na dyfynnu.