Sytuacja kobiet w IT w 2024 roku
20.08.20203 min
Bulldogjob

Bulldogjob

Eksperymenty z Rustem w Chromium

Zespół pracujący nad Chromium rozważa wykorzystanie Rusta w ich bazie kodu, która jest z kolei zdominowana przez C++.

Eksperymenty z Rustem w Chromium

Zespół Chromium - czyli otwartej przeglądarki internetowej, która jest podstawą Chrome, czy Edge - sprawdza, czy Rust może mieć większy udział w ich bazie kodu, która jest zdominowana przez C++. Zespół Chromium zaznacza, że C++ nadal będzie głównym językiem, w którym powstaje projekt, jednak od dłuższego czasu rozważane jest użycie innych języków, które stawiają na bezpieczeństwo pamięci. Dlatego właśnie Rust jest tu brany pod uwagę.

W dokumentacji dotyczącej interoperacyjności C++ oraz Rusta, programiści pracujący nad Google Chrome przyznali, że cały czas eksperymentują z tym drugim językiem. Twierdzą oni również, że w najbliższej przyszłości jakiekolwiek użycie Rusta będzie musiało być dopasowane do C++. Stwarza to nowe wyzwania. Na drodze mogą pojawić się przeszkody dotyczące interoperacyjności Rusta i C++, z którymi nikt wcześniej się nie spotkał. 

Inżynierowie Google’a już od jakiegoś czasu eksperymentują z Rustem, ale nigdy jeszcze do tej pory nie wyrazili aprobaty dla jego użycia. Rust został tylko wspomniany przy Chromium w kontekście bezpieczeństwa pamięci. Jednak rezultaty drobnych eksperymentów były na tyle obiecujące, że temat znowu się pojawił.

Pozostaje tylko kwestia tego, jak sprawić, żeby te dwa języki się ze sobą dogadały, biorąc pod uwagę fakt, że bardzo się między sobą różnią. Biorąc też pod uwagę to, że Chromium potrzebuje stabilności i bezpieczeństwa na najwyższym poziomie.

Zanim Rust trafi do kodu Chromium

Wspomniana już dokumentacja dotycząca interoperacyjności C++ i Rusta wymienia warunki, które muszą zostać spełnione, zanim kod w Rust trafi do Chromium.

Po pierwsze kod w Rust nie może używać słowa kluczowego unsafe, gdyż przez jego użycie traci się największą zaletę Rust — a więc bezpieczeństwo pamięci. Kod w Rust musi umieć wywoływać API wystawione w C++. Jest to absolutnie konieczne, by wchodzić w interakcję z podstawowymi funkcjami przeglądarki. Rust musi też wykorzystywać dane i typy z C++. Ręczne tworzenie i obsługa takich powiązań może być jednak zbyt żmudna.

Tu z pomocą może przyjść biblioteka cxx, która pozwala na łączenie wywołań Rust i C++ przez bezpieczne FFI. Biblioteka została stworzona w styczniu przez Davida Tolnay, programistę Rusta. Z ponad 1700 API Chromium biblioteka ta potrafi obsłużyć nieco ponad 1000, co wydaje się dobrym startem. Jednak pozostaje jeszcze sporo pracy, zanim Rust będzie w stanie wywoływać wszystkie istotne API przeglądarki.

Jeżeli powyższe warunki zostaną spełnione będzie można zacząć wykorzystywać Rust w Chromium i czerpać z tego korzyści. Kompilator Rusta wyłapuje potencjalne problemy związane z dostępem do pamięci i już na tym poziomie gwarantuje, że użycie pamięci będzie bezpieczne również w czasie uruchomienia. Rust jest, na przykład, dosyć rygorystyczny, jeśli chodzi o przekazywanie wskaźników. 

Kod C++, z którym Rust wchodzi w interakcje, nie daje powyższych gwarancji. Dlatego rolą cxx byłaby tutaj pomoc obu językom w wymianie informacji w bezpieczny i dobrze zdefiniowany sposób. 

Inne projekty i Rust

Od wydania pierwszej stabilnej wersji Rusta minęło już 5 lat, a język ten zyskuje coraz większą popularność. Zespół Fuchsia, czyli ludzie pracujący nad systemem operacyjnym obecnie rozwijanym przez Google, już w marcu zadeklarowali, że Rust może zostać użyty w większości w kodzie platformy Fuchsia. Co więcej, Linux również chce mieć u siebie Rusta.

Chromium byłoby kolejną przeglądarką, do której trafia kod napisany w Rust. W Firefox od 2017 roku obsługą CSS zajmuje się Stylo — silnik CSS napisany właśnie w Rust.

Warto jeszcze wspomnieć, że Rust sam w sobie wygrywa w wielu konkursach popularności i coraz większa liczba programistów jest zainteresowana wykorzystaniem tego języka w swoich projektach. Być może na fali wzrostu popularności Rust zagości w większej ilości projektów - zarówno open source, jak i komercyjnych.

<p>Loading...</p>