Async Digital / Iris
Tu mewn i Iris

Pan fo dolen ddwfn yn pwyntio at ddim

Bodolaeth

Enw yw URL, a gall enw fyw’n hwy na’r peth y mae’n ei enwi. Gall dolen gyrraedd am lwybr nad yw fersiwn newydd o’r ap yn ei ddiffinio mwyach, URL y mae ei gyrchfan yn gwrthod ei ddynodydd, neu sgrin nad oes dim yn aros amdani. Nid yw Iris yn trin hynny fel gwall i’w ddal ar ôl y ffaith. Mae’n gwneud “a yw’r gyrchfan yno?” yn un chwiliad sy’n dychwelyd gwerth dewisol, fel bod absenoldeb yn werth cyffredin y mae’n rhaid i’r cod ei drin, ac fel bod dolen at ddim yn stopio’n lân yn lle agor sgrin wag.

Crynodeb

Addewid am gyrchfan yw pob dolen ddwfn, wedi’i gwneud gan bwy bynnag a ysgrifennodd yr URL a’i chadw, neu beidio, gan yr ap sy’n ei derbyn. Rhwng y ddau mae bwlch: efallai nad yw’r peth a enwir yn bodoli. Mae’r rhan fwyaf o apiau’n darganfod hyn yn hwyr, hanner ffordd i mewn i wthiad, ac mae’r defnyddiwr yn glanio ar sgrin fanylion wag neu droellwr nad yw byth yn datrys.

Mae Iris yn cau’r bwlch trwy wrthod gadael i absenoldeb fod yn ymhlyg. Mae’r chwiliadau a all ddod yn wag yn dychwelyd gwerth dewisol (Optional), nid gwerth noeth, ac mae’r system deipiau’n gwneud i bob galwr wynebu’r achos gwag wrth un gât. Mae’r darn hwn yn esbonio’r patrwm, yr un chwiliad sy’n ei ymgorffori (handoff(for:) y gofrestr drosglwyddo, sy’n dychwelyd Handoff?), a pham mae’r warant yn dal hyd yn oed wrth i’r ap dyfu.


Y broblem

Enw na all y gyrchfan ei gadw bob amser

Mae dolen ddwfn yn enwi cyrchfan. Caiff yr enw ei fathu mewn un lle (dalen rannu, hysbysiad, Shortcut wedi’i gadw, prawf, asiant) a’i anrhydeddu mewn lle arall (yr ap sy’n rhedeg), ac mae amser yn mynd heibio rhyngddynt. Erbyn i’r ddolen gael ei hagor, efallai bod y sgwrs y mae’n pwyntio ati wedi mynd, efallai bod y dynodydd yn hen, neu efallai bod yr URL yn enwi llwybr y mae fersiwn newydd wedi’i ollwng. Honiad am y byd yw’r enw, ac nid oes rhaid i’r byd gytuno.

Y ffordd anniogel o ateb yr honiad hwnnw yw ei goelio. Dad-lapio’r chwiliad yn orfodol, cymryd yn ganiataol bod y rhes yno, gwthio’r sgrin, a darllen y cofnod sydd ei angen arni ar ôl i chi gyrraedd eisoes. Pan fydd y cofnod ar goll, mae’r methiant yn ymddangos yn hwyr ac yn wael: sgrin fanylion heb ddim ynddi, dalen dros restr wag, neu chwalfa ar y dad-lapio gorfodol. Fe weithiodd y ddolen yn dechnegol. Dim ond agor ar ddim a wnaeth.

Nid y broblem yw bod cyrchfannau’n mynd ar goll. Byddant bob amser. Y broblem yw bod absenoldeb yn cael ei ddarganfod yn rhy hwyr i’w drin yn osgeiddig. Y datrysiad yw symud y gwiriad i’r blaen a’i wneud yn amhosibl ei hepgor. Mae Iris yn gwneud hynny gydag un syniad a ddefnyddir ym mhobman y gall chwiliad ddod yn wag: mae’r chwiliad yn dychwelyd gwerth dewisol, a’r gwerth dewisol yw’r gât.


Mecanwaith

Absenoldeb yw gwerth, nid damwain

Yr enghraifft gliriaf yw’r gofrestr drosglwyddo. Mae Iris yn cadw storfa fach o drosglwyddiadau sy’n aros (y mecanwaith sy’n rhoi llwyth tâl URL i’r golwg sydd ar fin ymddangos) wedi’u mynegeio yn ôl llwybr. Geiriadur yw’r gofrestr, ac mae gofyn iddi am drosglwyddiad llwybr yn dychwelyd gwerth dewisol: Handoff pan fydd un wedi’i gofrestru, nil pan nad oes un. Un dull yn union sy’n ateb y cwestiwn, ac mae ei fath dychwelyd, Handoff?, yn cario’r ddau ateb posibl yn agored.

Am fod yr ateb yn werth dewisol ac nid yn werth noeth, ni all unrhyw alwr ei ddefnyddio heb benderfynu’n gyntaf beth i’w wneud pan fo’n wag. Mae galwyr y gofrestr ei hun yn dangos y siâp: maent yn rhwymo’r canlyniad gyda if let, yn cymryd y gangen bresennol pan fo trosglwyddiad yn aros, ac yn syrthio i gangen ddiffiniedig pan nad oes un. Nid eithriad a deflir o rywle dwfn yw’r achos gwag. Yr hanner arall o werth y mae’r galwr eisoes yn ei ddal ydyw, ac ni fydd Swift yn gadael iddo gyrraedd y trosglwyddiad nes ei fod wedi gwahanu’r ddau.

Ffig 1 Un chwiliad, ateb dewisol. Mae handoff(for:) yn dychwelyd naill ai trosglwyddiad neu nil, ac mae’r math dychwelyd yn gwneud i’r galwr drin y ddau cyn iddo allu cyffwrdd â’r trosglwyddiad.

Mae’r un siâp yn gwarchod y drws ffrynt. Mae troi URL yn fwriad hefyd yn chwiliad sy’n dychwelyd gwerth dewisol: mae dosrannu yn dychwelyd bwriad pan fydd yr URL yn cyfateb i lwybr hysbys, a nil pan nad yw’r URL yn enwi unrhyw lwybr, neu pan fydd rheol llwybr sydd wedi paru yn gwrthod y dynodydd y mae’r URL yn ei gario. Dyma’r haen URLPathRouter rannol o dan y codec URL cyflawn: wrth y llwybrydd, nid yw URL nad yw’n enwi unrhyw lwybr yn cynhyrchu unrhyw fwriad, ac am mai dim ond bwriad sydd ganddo mewn gwirionedd y mae’r llwybrydd byth yn ei lwybro, nid oes dim i’w anfon. Nid yw’r ddolen yn hanner-agor sgrin. Mae’n datrys i ddim ac yn stopio. Gall codec a adeiledir ar ben y llwybrydd fapio’r methiant paru hwnnw i fwriad wrth gefn yn lle hynny, felly mater i’r codec, nid i’r llwybrydd, yw a yw URL na chaiff ei adnabod yn stopio yma neu’n glanio ar fwriad wrth gefn; mae y man URL-i-fwriad yn ymdrin â’r dewis hwnnw.

Nid gwall y mae’r cod yn ei ddal ar ôl y ffaith yw absenoldeb. Un o’r ddau werth yr oedd y chwiliad bob amser yn mynd i’w dychwelyd ydyw.


Pam mae’n dal

Nid yw’r gwiriad yn ddewisol i’w redeg

Mae tair nodwedd yn cadw’r gât yn onest wrth i’r ap dyfu.

Nid yw dim o hyn yn dibynnu ar gofio bod yn ofalus. Wal yw’r gwerth dewisol dychwelyd, nid arwydd. Mae yno ar y galwad gyntaf ac ar y milfed, ac mae yno ar gyfer y llwybr y bydd rhywun yn ei ychwanegu y flwyddyn nesaf heb fod wedi darllen y dudalen hon.


Cost

Mae’r gât yn ateb presenoldeb, nid ystyr

Nid oes dim yma am ddim, ac mae’n werth bod yn fanwl gywir am yr hyn nad yw’r gât yn ei wneud.

Yr hyn y mae’r gât yn ei adael i’r galwr

Mae’r chwiliad yn ateb un cwestiwn, presennol neu absennol, a dim mwy. Nid yw’n penderfynu beth ddylai absenoldeb ei olygu, oherwydd mae hynny’n dibynnu ar ble rydych chi’n gofyn. Ar gyfer y gofrestr drosglwyddo, mae nil yn golygu “nid oes dim wedi’i gofrestru eto, felly cofrestrwch un newydd a throsglwyddwch iddo.” Ar gyfer dosrannu URL, mae nil yn golygu “nid yw hwn yn enwi dim, stopiwch.” Yr un gwerth gwag, casgliadau croes.

Felly mae ystyr nil yn byw wrth safle’r alwad, nid yn y gât. Mae hynny’n fwriadol: mae’r gofrestr yn aros yn storfa fach y gellir ei hailddefnyddio sy’n gwybod am bresenoldeb a dim byd am bolisi, sef yr hyn sy’n gadael i un math wasanaethu llwybrau pentwr a llwybrau dalen heb newid. Y pris yw na allwch ddarllen ystyr absenoldeb o’r gât ei hun. Mae’n rhaid i chi ddarllen y galwr i wybod ai “dim eto” arferol neu ben marw yw canlyniad gwag.

Dyna’r fargen iawn ar gyfer isadeiledd. Byddai gât sydd hefyd yn penderfynu ystyr yn gorfod gwybod bwriad pob galwr, a byddai’n peidio â bod yn ailddefnyddiadwy y foment y byddai dau alwr eisiau pethau gwahanol o ganlyniad gwag. Cadw’r gât yn syml (presennol neu absennol, un chwiliad, gwerth dewisol gonest) yw’r hyn sy’n gadael i absenoldeb gael ei drin yn gywir ym mhob lle tra’n cael ei ddiffinio mewn un lle yn union.

Mae golwg y defnyddiwr ar yr un ffin, lle mae rheolydd wedi’i dapio a dolen allanol yn cwrdd â’r un datrysydd, yn yr astudiaeth cydraddoldeb. Mae gweddill sut mae Iris wedi’i adeiladu yn byw ar fynegai mewnol Iris, a chaiff y gallu y mae’n ei wasanaethu ei fapio ar yr hwb dolennu dwfn.