programmatūra · 5 min · 19.07.2026

Swift 6.4 saplūdina NSURL un CFURL vienā Swift implementācijā — URL parsēšana līdz 4x ātrāka bez koda izmaiņām

Swift 6.4, kas šobrīd pieejams beta versijā kopā ar Xcode 27, apvieno divas vecās URL apstrādes implementācijas — NSURL un CFURL — vienā Swift kodā. Pēc jaunināšanas URL parsēšana strādā līdz četrreiz ātrāk, un šo ātrumu iegūst bez nevienas koda rindas maiņas.

Apple versiju prezentēja WWDC 2026 sesijā «What’s new in Swift», un jauninājumus apkopoja Swift.org un InfoQ. Izmaiņas skar ne tikai ātrumu, bet arī concurrency modeli, sadarbību ar C un testēšanu.

Kāpēc URL parsēšana paātrinājās

Līdz šim Foundation URL apstrādi balstīja divas atsevišķas implementācijas, mantotas no Objective-C laikiem — NSURL un CFURL. Tās strādāja paralēli un dublēja daļu darba. Swift 6.4 tās aizstāj ar vienu Swift implementāciju. InfoQ raksta par līdz 4x ātrāku parsēšanu.

Ieguvums attiecas uz jebkuru kodu, kas daudz strādā ar URL vai bināriem datiem — tīkla klientiem, maršrutēšanu, failu ceļu apstrādi. Izstrādātājam nekas nav jāmaina: pietiek pārkompilēt ar jauno rīkkopu.

Divu implementāciju apvienošana atrisina arī vecu problēmu ar uzvedības atšķirībām. NSURL un CFURL dažkārt vienu un to pašu adresi parsēja nedaudz citādi, un kods, kas jauca abus, varēja saņemt pretrunīgus rezultātus. Ar vienu Swift implementāciju šī neskaidrība pazūd.

«Ja tavs kods daudz strādā ar URL vai bināriem datiem, tas ir bezmaksas ātruma ieguvums, ko saņem, vienkārši jauninot,» raksta byteiota.

weak let un ~Sendable

Swift 6.4 aizpilda vienu concurrency modeļa robu. Agrāk klasi, kas satur weak var lauku, nevarēja atzīmēt kā Sendable, jo mainīgs lauks lauza garantijas — nācās izmantot @unchecked Sendable un atbildību uzņemties pašam. Jaunais weak let deklarē vāju atsauci, ko nevar pārrakstīt, tāpēc kompilators klasi pieņem kā Sendable bez izņēmumiem.

Otrs jaunums ir ~Sendable — marķieris tipiem, kuriem nevajadzētu atbilst Sendable. Tas ļauj skaidri pateikt, ka tips paredzēts tikai vienam pavedienam, nevis paļauties uz to, ka kāds nejauši to nepārsūtīs starp uzdevumiem.

Abas izmaiņas turpina virzienu, ko Swift iesāka ar 6.0 stingro concurrency pārbaudi: kompilators uzņemas arvien vairāk datu sacīkšu novēršanas, un izstrādātājam retāk jāapiet pārbaudes ar rokām rakstītām garantijām. Jo mazāk koda paļaujas uz @unchecked Sendable, jo vairāk kļūdu izķer kompilēšanas laikā.

@C atver Swift kodu C valodai

Jaunais @C atribūts ļauj Swift funkciju atklāt C valodai, līdzīgi kā @objc to dara Objective-C sadarbībā. Atšķirība ir tā, ka @C nesaista kodu ar Objective-C izpildlaiku un darbojas arī uz platformām bez tā, piemēram, Linux un serveros.

Kompilators pārbauda, vai funkcijas tipi vispār ir izsakāmi C valodā. Atbalstīti veselie skaitļi, rādītāji, importētas C struktūras un enum ar raw-value tipu. Ja parametrs neatbilst, kods nekompilējas, nevis lūst izpildes laikā.

Praksē tas noder Swift bibliotēkām, ko vēlas izsaukt no C, C++ vai citām valodām, kuras prot C ABI. Serveru un iegultajā izstrādē, kur Objective-C nav pieejams, @objc līdz šim nedarbojās; @C aizpilda šo robu.

Sīkākas valodas izmaiņas

defer bloki tagad var izpildīt asinhronu kodu ar await. Līdz šim iztīrīšanas darbs pēc funkcijas bija sinhrons, tāpēc, piemēram, datubāzes savienojuma vai faila deskriptora asinhrono aizvēršanu nācās kārtot manuāli katrā izejas punktā. Tagad šo darbu var likt vienā defer blokā, un tas nostrādā neatkarīgi no tā, kā funkcija beidzas — arī tad, ja tiek mesta kļūda.

Mainījās arī inicializatoru ģenerēšana. Ja struct satur gan private, gan internal laukus, kompilators tagad rada divus inicializatorus — vienu ar internal laukiem un privātu inicializatoru, kas aptver visus laukus. Agrāk šādā gadījumā automātiskā inicializatora nebija vispār.

Brīdinājumu vadībai pievienots @diagnose atribūts. Ar to var apklusināt novecošanas brīdinājumu, pacelt brīdinājumu līdz kļūdai vai pazemināt nākotnes kļūdu līdz brīdinājumam — katrai funkcijai atsevišķi, nevis visam projektam uzreiz.

Platformu pārbaudes kļūst īsākas ar anyAppleOS identifikatoru. Rindiņa @available(anyAppleOS 27, *) aizstāj atkārtotu macOS, iOS un visionOS versiju uzskaitījumu.

XCTest un Swift Testing sāk sadarboties

Divi Apple testēšanas ietvari līdz šim dzīvoja atsevišķi. Swift 6.4 tos savieno: XCTest apgalvojumu kļūmes tagad parādās kā problēmas Swift Testing pārskatā, un Swift Testing API strādā XCTest iekšienē. Starp ietvariem konstatētās problēmas pēc noklusējuma ir brīdinājumi, bet Xcode iestatījumos tos var pacelt līdz testa kļūmēm.

Tas atvieglo pakāpenisku pāreju no XCTest uz jaunāko Swift Testing — komanda var pārrakstīt testus pa daļām, nezaudējot pārskatu par kļūmēm.

Beta versija ir pieejama kopā ar Xcode 27. Galīgais laidiens sekos pēc beta perioda, un jaunumu lielākā daļa strādā bez koda izmaiņām esošajos projektos.

Avoti

komentārisaruna

Komentāri

Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.

Pievieno komentāru

Tavs e-pasts netiks publicēts. Obligātie lauki atzīmēti.

vēl no programmatūrasaistītie