glibc 2.28: Nowości  w obsłudze języków

glibc 2.28: Nowości w obsłudze języków

Zobacz także:

Nowa wersja biblioteki glibc 2.28 została opublikowana w planowanym terminie, czyli 1 sierpnia 2018 roku. Tym razem nie ma w niej rewolucyjnych zmian w obsłudze języków. Większość to kontynuacja prac rozpoczętych i częściowo zakończonych w poprzednich wersjach.

Sortowanie alfabetyczne

Tuż po wydaniu poprzedniej wersji dokończone zostały prace nad uporządkowaniem sortowania alfabetycznego. Dotyczy to wszystkich języków, bo algorytm sortujący musi nie tylko obsługiwać zasady bieżącego języka, ale też radzić sobie ze znakami obcymi. W całości i od nowa zostały zaimportowane reguły sortowania według normy ISO 14654:2016. Sama norma ISO też ulega ewolucji, chociaż zmiany są dość mało istotne z punktu widzenia końcowych użytkowników. Dotyczą np. znaków przestankowych albo rzadko używanych liter z rzadko używanych języków.

Wewnętrznie w bibliotece glibc dodane zostały automatyczne testy sortowania w ponad 50 językach. W przyszłości pozwoli to natychmiast wykryć błędy w kodzie źródłowym.

Wyrażenia regularne

Tu zaczynają się problemy, będące konsekwencją poprawionego sortowania. Okazuje się, że wyrażenia regularne, określające zakresy, biorą pod uwagę kolejność sortowania dla danego języka. Wskutek tego na przykład:

  • Wyrażenie [a-z] obejmuje nie tylko małe litery, ale też duże, ponieważ są one sortowane alfabetycznie pomiędzy małymi (np.: a, A, b, B, …), ale nie zawiera litery Z, ponieważ jest ona sortowana po z.
  • Systemy zarządzające kodem źródłowym, które do tej pory zakładały, że nazwy wszystkich plików źródłowych zaczynają się od małych liter, czyli wyrażenie [a-z]* dopasowuje je wszystkie, oprócz Makefile, przestały działać poprawnie.
  • Wyrażenie regularne [0-9] teraz dopasowuje nie tylko cyfry od 0 do 9, ale też wszystkie symbole matematyczne, które można interpretować jako liczby, czyli np. ułamki, cyfry w indeksach górnym i dolnym, cyfry z innych alfabetów (arabskiego, indyjskich itd.).

Z wielu względów lepiej jest, jeśli wyrażenia regularne są budowane na podstawie kolejności kodów znaków w Unicode, a nie kolejności sortowania w danym języku.

Ponieważ błąd został zauważony późno, bo na początku lipca, wprowadzono szybką poprawkę, zmieniającą kolejność liter tak, aby litery duże alfabetu łacińskiego nie pojawiały się pomiędzy małymi. To jest jednak zmiana tymczasowa i będzie wycofana, jak tylko pojawi się poprawna implementacja wyrażeń regularnych.

Unicode 11

Wprowadzono pełną obsługę standardu Unicode 11. Zmiany polegają na dodaniu klasyfikacji (czyli podziału na litery, cyfry, znaki przestankowe itp.) i transliteracji nowych liter i alfabetów, a także kolejnych emotek. Oczywiście zmiany dotyczą raczej alfabetów innych, niż powszechnie używane w Europie. Pojedyncze litery dodano np. do alfabetu ormiańskiego, hebrajskiego, arabskiego, i niektórych indyjskich. Dodano cały zestaw znaków mtawruli z alfabetu gruzińskiego, pismo Hanifi (dla języka rohingya), sogdyjskie i starosogdyjskie, dogri, gondi, makasarskie, cyfry Majów, cyfry Siyaq itp. Wiele z tych nowo dodanych znaków i alfabetów nie jest współcześnie używanych.

Nowe języki

Tym razem pojawiły się tylko dwa nowe języki: dolnołużycki i jakucki. Dolnołużycki jest językiem słowiańskim, podobnym do polskiego, używanym na Łużycach Dolnych, będących częścią Niemiec, w okolicach Chociebuża (Cottbus, Chóśebuz). Niestety, jest to język silnie zagrożony wyginięciem: używa go tylko ok. 6–7 tys. osób. Język jakucki należy do rodziny turkijskiej, jest używany przez ok. 450 tys. mieszkańców Jakucji (Republiki Sacha), wchodzącej w skład Federacji Rosyjskiej. Stanowi to prawie połowę populacji tego regionu.

Co ważne, oba te języki są fleksyjne i wymagają w dacie miesiąca w dopełniaczu.

Poprawny zapis dat w językach fleksyjnych

Skoro o tym mowa, 2.28 to już druga wersja glibc, po 2.27, która obsługuje dwie formy gramatyczne nazw miesięcy. Poprzednie prace można chyba uznać za udane, a obecne zmiany sprowadzają się do wsparcia kolejnych języków, których obsługa nie została dodana w poprzednich wersjach najczęściej z braku czasu.

Rozróżnienie nazw miesięcy w mianowniku i dopełniaczu jest teraz obsługiwane w językach: asturiańskim, czeskim, gaelickim szkockim, górnołużyckim, kaszubskim, katalońskim, ormiańskim, osetyjskim, oksytańskimwalońskim. W tej chwili, wliczając dwa nowo dodane, już 19 języków używa w datach poprawnych gramatycznie form.

Okazało się, że różnice między nazwami miesięcy w mianowniku i dopełniaczu w skróconych nazwach są widoczne nie tylko w języku rosyjskim i białoruskim, w których słowo maj jest tak krótke, że nie da się go już bardziej skrócić (mianownik: май, dopełniacz: мая), ale też w greckim, i to w kilku nazwach miesięcy (np. lipiec, mianownik: Ιούλιος, dopełniacz: Ιουλίου, w skrócie odpowiednio ΙούλΙουλ).

W języku kaszubskim różnica między mianownikiem a dopełniaczem miesiąca maj okazała się być widoczna także w jego skrócie (mianownik: môj, dopełniacz: maja, w skrócie odpowiednio môjmaj), zaś tłumacze katalońscy zażyczyli sobie, aby – zgodnie zresztą z CLDR – dodać przedrostki ded’ także do skrótów. Przypomnijmy, że prośba o wprowadzenie obsługi dwóch form gramatycznych skróconych nazw miesięcy do standardu POSIX została zgłoszona ponad rok temu.

Drobne zmiany

Poprawiono nazwy dni tygodnia i miesięcy w języku aragońskim. Poprawiono skróty nazw miesięcy w języku litewskim zgodnie z aktualną implementacją w bibliotece Glib (należącą do projektu GNOME) i CLDR, co zresztą zaraz doprowadziło do tego, że testy Glib przestały poprawnie działać na starszych wersjach glibc. Pojedyncze literówki zostały poprawione w języku kaszubskimszkockim gaelickim.