ttf-parser 0.5 - նոր գրադարան TrueType տառատեսակների հետ աշխատելու համար

ttf-վերլուծիչ TrueType/OpenType տառատեսակների վերլուծության գրադարան է։
Նոր տարբերակն ունի փոփոխական տառատեսակների ամբողջական աջակցություն
(փոփոխական տառատեսակներ) և C API-ն, ինչի արդյունքում ես որոշեցի այն գովազդել լոռում։

Մինչեւ վերջերս, եթե կարիք կար աշխատել TrueType տառատեսակներով, ապա կար ուղիղ երկու տարբերակ՝ FreeType եւ stb_truetype։ Առաջինը հսկայական կոմբայն է, երկրորդը աջակցում է բավականին փոքր թվով գործառույթներ:

ttf-վերլուծիչը ինչ-որ տեղ մեջտեղում է: Այն աջակցում է բոլոր նույն TrueType աղյուսակները (TrueType ձևաչափը բաղկացած է բազմաթիվ առանձին երկուական աղյուսակներից), ինչպես FreeType-ը, բայց ինքնին չի նկարում հոլովակները:

Միևնույն ժամանակ, ttf-վերլուծիչը պարունակում է շատ այլ նշանակալի տարբերություններ.

  1. ttf-parser-ը գրված է Rust-ով` առանց անապահով օգտագործման: FreeType-ը և stb_truetype-ը գրված են C-ով:
  2. ttf-վերլուծիչը միակ հիշողության անվտանգ իրականացումն է: Պատահական հիշողություն կարդալը հնարավոր չէ: FreeType-ում խոցելիությունները մշտապես շտկվում են, իսկ stb_truetype-ը, սկզբունքորեն, նախատեսված չէ կամայական տառատեսակներ կարդալու համար:
  3. ttf-parser-ը միակ թեման անվտանգ իրականացումն է: Վերլուծման բոլոր մեթոդները մշտական ​​են: Միակ բացառությունը փոփոխական տառատեսակների համար կոորդինատների կարգավորումն է, սակայն այս ֆունկցիան կրկին մուտք է գործում: FreeType-ը հիմնականում մեկ թելերով է: stb_truetype - reentrant (կարող եք օգտագործել առանձին պատճեններ տարբեր թեմաներում, բայց ոչ շատերից մեկը):
  4. ttf-վերլուծիչը միակ իրականացումն է, որը չի օգտագործում կույտային հատկացումներ: Սա թույլ է տալիս արագացնել վերլուծությունը և խուսափել OOM-ի հետ կապված խնդիրներից:
  5. Նաև ստուգվում են գրեթե բոլոր թվաբանական գործողությունները և թվային տեսակների փոխարկումները (այդ թվում՝ ստատիկ):
  6. Վատագույն դեպքում գրադարանը կարող է բացառություն գցել: Այս դեպքում, C API-ում, բացառությունները կբռնվեն, և ֆունկցիան կվերադարձնի սխալ, բայց չի խափանվի:

Եվ չնայած անվտանգության բոլոր երաշխիքներին, ttf-parser-ը նաև ամենաարագ իրականացումն է: Օրինակ, CFF2-ի վերլուծությունը 3.5 անգամ ավելի արագ է, քան FreeType-ը: Միևնույն ժամանակ, glyf-ի վերլուծությունը 10%-ով ավելի դանդաղ է, քան stb_truetype-ում, բայց դա պայմանավորված է նրանով, որ այն չի աջակցում փոփոխական տառատեսակներ, որոնց իրականացումը պահանջում է լրացուցիչ պահեստավորում: տեղեկատվություն։ Մանրամասները՝ մեջ առաջնային.

Source: linux.org.ru

Добавить комментарий