Har indført Swift 6 strict concurrency over C
Har indført Swift 6's complete strict concurrency uden actors og bygget bro fra en blokerende C‑hændelsesløkke til main actor gennem én producent, én forbruger og én rækkefølge — efter at have fastslået, at en opgave pr. hændelse mister den rækkefølge, grænsefladen afhænger af.
Arbejdet udført: september 2026

Foto: CodeCondo / Pixabay 
Foto: Pexels / Pixabay
strict concurrency med én rækkefølge og ingen actors
Situation. Swift 6’s fuldstændige strenge samtidighedstjek gør datakapløb til kompileringsfejl i stedet for lejlighedsvise nedbrud. Det er, når det skal indføres op mod et C‑bibliotek, at det bliver svært: kernens hændelsesløkke er et blokerende kald, der skal køre uden for hovedtråden for evigt, og de værdier, den leverer tilbage, er pointere uden nogen som helst samtidighedsgarantier. Oversætteren kan ikke ræsonnere om noget af det og vil afvise alt, indtil grænsen er beskrevet udtrykkeligt.
Opgave. Fuldstændigt tjek skulle slås til uden nogen nødudgange, hvilket betød at udforme overgangen fra en blokerende C‑løkke til hovedaktøren i stedet for at annotere sig uden om den.
Handling. Den nærliggende fremgangsmåde er en aktør pr. delsystem, og den blev forkastet på grundlag af måling og ikke smag. At starte en opgave pr. indkommende hændelse lader runtime‑miljøet planlægge dem i vilkårlig rækkefølge, og kernens hændelsesstrøm er ordnet — en besked‑ændret‑hændelse, der overhaler den besked‑oprettet‑hændelse, den henviser til, frembringer en grænseflade, der viser en redigering af noget, der endnu ikke findes. At aktører er reentrante, gør dette værre, ikke bedre, for en aktør kan suspendere midt i en metode og behandle et andet kald. Det, der erstattede den, er bevidst enkelt: én producenttråd, der ejer den blokerende løkke, én forbruger, én kø imellem dem og et enkelt hop over på hovedaktøren til sidst. Rækkefølgen bevares, fordi der er præcis én vej, og intet overhaler noget. De usikre typer, der krydser den grænse, er pakket ind i typer, hvis trådsikkerhed hævdes ved indpakningen i stedet for at blive taget for givet, og påstanden er dokumenteret med, hvorfor den holder — pointeren ejes af én tråd og kopieres, før den overdrages.
Resultat. Programmet kompilerer under fuldstændigt strengt samtidighedstjek uden undertrykkelser, og hændelsesrækkefølgen er en strukturel egenskab og ikke et håb. Prisen er, at designet er mindre parallelt, end den kunne være: alt ledes gennem én forbruger, og hvis den forbruger nogensinde bliver en flaskehals, vil rettelsen kræve, at man på ny udleder, hvilke hændelser der trygt kan omordnes, hvilket er præcis den analyse, dette undgik.
Se tilbage på En app, der åd 41 MB i sekundet, standset. Læs videre: Har skrevet en parser, der tjekker hvert FFI‑kald. Eller tag et kig på hele porteføljen.
Ét stykke af en længere fortegnelse — og det hele ligger her på sitet.
Hver post er skrevet på samme måde: situationen, opgaven, hvad vi gjorde, og hvad der ændrede sig.

