ttf-վերլուծիչ TrueType/OpenType տառատեսակների վերլուծության գրադարան է։
Նոր տարբերակն ունի փոփոխական տառատեսակների ամբողջական աջակցություն
(փոփոխական տառատեսակներ) և C API-ն, ինչի արդյունքում ես որոշեցի այն գովազդել լոռում։
Մինչեւ վերջերս, եթե կարիք կար աշխատել TrueType տառատեսակներով, ապա կար ուղիղ երկու տարբերակ՝ FreeType եւ stb_truetype։ Առաջինը հսկայական կոմբայն է, երկրորդը աջակցում է բավականին փոքր թվով գործառույթներ:
ttf-վերլուծիչը ինչ-որ տեղ մեջտեղում է: Այն աջակցում է բոլոր նույն TrueType աղյուսակները (TrueType ձևաչափը բաղկացած է բազմաթիվ առանձին երկուական աղյուսակներից), ինչպես FreeType-ը, բայց ինքնին չի նկարում հոլովակները:
Միևնույն ժամանակ, ttf-վերլուծիչը պարունակում է շատ այլ նշանակալի տարբերություններ.
- ttf-parser-ը գրված է Rust-ով` առանց անապահով օգտագործման: FreeType-ը և stb_truetype-ը գրված են C-ով:
- ttf-վերլուծիչը միակ հիշողության անվտանգ իրականացումն է: Պատահական հիշողություն կարդալը հնարավոր չէ: FreeType-ում խոցելիությունները մշտապես շտկվում են, իսկ stb_truetype-ը, սկզբունքորեն, նախատեսված չէ կամայական տառատեսակներ կարդալու համար:
- ttf-parser-ը միակ թեման անվտանգ իրականացումն է: Վերլուծման բոլոր մեթոդները մշտական են: Միակ բացառությունը փոփոխական տառատեսակների համար կոորդինատների կարգավորումն է, սակայն այս ֆունկցիան կրկին մուտք է գործում: FreeType-ը հիմնականում մեկ թելերով է: stb_truetype - reentrant (կարող եք օգտագործել առանձին պատճեններ տարբեր թեմաներում, բայց ոչ շատերից մեկը):
- ttf-վերլուծիչը միակ իրականացումն է, որը չի օգտագործում կույտային հատկացումներ: Սա թույլ է տալիս արագացնել վերլուծությունը և խուսափել OOM-ի հետ կապված խնդիրներից:
- Նաև ստուգվում են գրեթե բոլոր թվաբանական գործողությունները և թվային տեսակների փոխարկումները (այդ թվում՝ ստատիկ):
- Վատագույն դեպքում գրադարանը կարող է բացառություն գցել: Այս դեպքում, C API-ում, բացառությունները կբռնվեն, և ֆունկցիան կվերադարձնի սխալ, բայց չի խափանվի:
Եվ չնայած անվտանգության բոլոր երաշխիքներին, ttf-parser-ը նաև ամենաարագ իրականացումն է: Օրինակ, CFF2-ի վերլուծությունը 3.5 անգամ ավելի արագ է, քան FreeType-ը: Միևնույն ժամանակ, glyf-ի վերլուծությունը 10%-ով ավելի դանդաղ է, քան stb_truetype-ում, բայց դա պայմանավորված է նրանով, որ այն չի աջակցում փոփոխական տառատեսակներ, որոնց իրականացումը պահանջում է լրացուցիչ պահեստավորում: տեղեկատվություն։ Մանրամասները՝ մեջ առաջնային.
Source: linux.org.ru