Lajme

Apple migron interpretuesin e hinting-ut të TrueType në Swift

TrueType është standardi vektor i shkronjave që përdoret gjerësisht për shfaqjen e tekstit në faqe interneti, PDF‑ra, sisteme operative dhe aplikacione. Shkronja të njohura si Helvetica, Garamond dhe Monaco bazohen në konturet e TrueType, të cilat përfshijnë një interpretues hinting‑i për të siguruar renditje të saktë në ekranet me rezolucion të ulët. Me rritjen e ekranëve me rezolucion të lartë, tipografia bëhet e bukur vetëm nga konturet, por shumë shkronja TrueType ende varen nga hinting‑i për të qenë lexueshme, prandaj mbetë e nevojshme të mbështeten.

Për shkak se analizuesit e shkronjave përpunojnë të dhëna nga burime të pa besueshme, interpretuesi i hinting-ut të TrueType përbëhet nga një sipërfaqe kritike sigurie. Për të rritur rezistencën e formatit në platformat Apple, ekipet tona e rishkruan interpretuesin nga C në Swift, një gjuhë me siguri memorie. Në versionet e planifikuara për vjeshtën 2025, interpretuesi i ri në Swift jo vetëm që ofron siguri memorie, por edhe përmirëson performancën: në mesatare, ai funksionon 13 % më shpejt se versioni i mëparshëm në C. Për ta ndihmuar komunitetin, kemi publikuar edhe kodin burimor të interpretuesit të ri në Swift.

Apple e krijoi TrueType në fund të viteve ’80 dhe e prezantoi me System 7 në 1991, duke sjellë kontroll të avancuar për zhvilluesit e shkronjave përmes një algoritmi të sofistikuar të përshtatjes në rrjetë dhe një motor hinting‑i të ndërtuar rreth një interpretuesi bytecode. Me përhapjen e internetit, TrueType u bë i integruar në PDF‑ra në 1994 dhe në faqe web në 2008, duke rritur ekspozimin ndaj shkronjave të pa besueshme dhe duke e bërë më të rëndësishëm kontrolli i sigurisë. Për të garantuar kompatibilitet binar, interpretuesi i ri duhet të prodhojë renditje piksel‑për‑piksel identike me versionin e vjetër në C, pasi ndryshimet e vogla në hinting mund të sjellin ndryshime të dukshme në pamjen e shkronjave.

Për të verifikuar saktësinë, kemi zhvilluar dy suita testesh. Së pari, një grup testesh njësie që mbulon 99,7 % të kodit për të dy implementimet. Së dyti, një fuzzer që ka reduktuar një korpus prej 10 milionë PDF‑sh në 4 200 dokumente, duke ruajtur mbulimin e kodit, dhe që përmban 25 572 shkronja me 27 milionë glifë, të cilat i kemi renderuar në katër transformime të ndryshme dhe i kemi krahasuar me interpretuesin referencë. Në fund, kemi shkruar gati katër herë më shumë rreshta testues sesa kodin e interpretuesit në Swift.

Pas kalimit të të gjitha testimeve, kemi përqendruar përpjekjet në përmirësimin e performancës. Duke përdorur kohën e renderimit të PDF‑ve si tregues kryesor, kemi kryer optimizime në katër kategori kryesore, duke përfshirë heqjen e mbingarkesave të menaxhimit të referencave automatike dhe kontrollit të ekskluzivitetit në kohë ekzekutimi. Përmes përdorimit të tipave të kopjueshëm (Copyable) dhe strukturave në vend të klasave, si dhe përmes funksionalitetit Span të futur në Swift 6.2 (me mbështetje për macOS 10.14.4 dhe iOS 12.2), kemi arritur të reduktojmë overhead‑in e dizajnit origjinal dhe të përmirësojmë ndjeshëm shpejtësinë e interpretuesit.

Ky projekt demonstron se përkthimi i një komponenti kritik nga C në Swift mund të sjellë përfitime të dukshme në siguri dhe performancë, duke ruajtur në të njëjtën kohë kompatibilitetin binar dhe cilësinë e renditjes së shkronjave.


Leave a Reply

Your email address will not be published. Required fields are marked *