Canonical chce automatycznie przepisywać kod z C na Rust. Ubuntu finansuje ambitny projekt


Canonical chce automatycznie przepisywać kod z C na Rust. Ubuntu finansuje ambitny projekt

Canonical, firma stojąca za Ubuntu, finansuje prace nad narzędziem, które może znacząco ułatwić migrację ogromnych projektów programistycznych z języka C do Rusta. Projekt realizowany przez Uniwersytet w Bristolu ma wykorzystać klasyczną analizę kodu oraz uczenie maszynowe.

Nie chodzi przy tym o stworzenie kolejnego prostego konwertera. Badacze chcą przygotować narzędzie zdolne do pracy z dużymi repozytoriami zawierającymi setki tysięcy linii kodu. Taka możliwość może zainteresować twórców systemów operacyjnych, sterowników i innych projektów, których ręczne przepisywanie zajęłoby lata.

Canonical inwestuje w tłumacz C -> Rust

Canonical zadeklarował finansowanie projektu prowadzonego przez Uniwersytet w Bristolu przez trzy lata. Firma nie podała jednak kwoty przeznaczonej na rozwój narzędzia ani nie zagwarantowała, że w tym czasie prace zostaną zakończone. Pomysł wynika z bardzo konkretnego problemu. Przepisywanie dużego projektu z C do Rusta ręcznie jest niezwykle czasochłonne. Programiści muszą przy tym zachować istniejącą funkcjonalność, poprawki bezpieczeństwa, optymalizacje oraz zależności pomiędzy poszczególnymi elementami kodu.

Dotychczasowe automatyczne konwertery również nie rozwiązują tego problemu. Według zespołu pracującego nad projektem często generują kod, który nie wykorzystuje prawidłowo mechanizmów Rusta i wymaga później dużej ilości ręcznej pracy. Nowe narzędzie ma podejść do zadania znacznie bardziej kompleksowo.

Dlaczego C ustępuje miejsca Rustowi?

C powstał w 1972 roku i przez dekady stał się jednym z fundamentów współczesnej informatyki. W tym języku napisano ogromne ilości kodu wykorzystywanego w systemach operacyjnych, sterownikach, urządzeniach wbudowanych i infrastrukturze serwerowej.

Problemem jest między innymi ręczne zarządzanie pamięcią. Programista musi sam pilnować przydzielania i zwalniania zasobów. Błędy w tym obszarze mogą prowadzić do wycieków pamięci, przepełnień bufora i innych podatności. Rust został zaprojektowany z dużo większym naciskiem na bezpieczeństwo pamięci. Kompilator potrafi wykrywać wiele klas błędów już podczas tworzenia programu. Dla dużych, wieloletnich projektów jest to szczególnie istotne, ponieważ utrzymanie starego kodu C może stawać się coraz trudniejsze.

Nie oznacza to jednak, że świat komputerów może po prostu porzucić C. W ogromnych projektach znajduje się zbyt dużo istniejącego kodu, aby opłacało się pisać wszystko od początku. Dlatego automatyczna migracja może być znacznie atrakcyjniejsza niż całkowita przebudowa oprogramowania.

Sztuczna inteligencja ma pomóc w tłumaczeniu ogromnych repozytoriów

Projekt z Bristolu ma łączyć tradycyjne techniki analizy i weryfikacji programu z uczeniem maszynowym. Kod będzie dzielony na mniejsze fragmenty, które następnie zostaną tłumaczone na Rusta. Największym wyzwaniem pozostaje zachowanie zależności oraz informacji potrzebnych do prawidłowego działania całego programu. Samo zamienienie składni C na składnię Rusta nie wystarczy. Wygenerowany kod musi zachowywać logikę oryginalnego projektu, a jednocześnie korzystać z mechanizmów bezpieczeństwa oferowanych przez Rusta.

Modele uczenia maszynowego mają być trenowane na istniejących projektach, które wcześniej zostały przepisane z C na Rust. Twórcy chcą w ten sposób wykorzystać przykłady pokazujące, jak doświadczeni programiści rozwiązują problemy pojawiające się podczas migracji. To właśnie ten element może odróżnić projekt od zwykłego translatora kodu. Zamiast mechanicznej zamiany instrukcji narzędzie ma próbować rozumieć strukturę programu i zachowywać jego zależności.

Kod wygenerowany przez maszynę będzie dodatkowo sprawdzany

Samo tłumaczenie nie będzie końcem procesu. Badacze planują stworzenie osobnego systemu weryfikacji wygenerowanego kodu. Ma on wykorzystywać między innymi fuzzing oraz techniki formalnej weryfikacji. Dzięki temu możliwe będzie szukanie błędów w programie powstałym po migracji i porównywanie jego zachowania z oryginalną wersją.

To szczególnie ważne przy dużych projektach infrastrukturalnych. Automatyczne przepisanie setek tysięcy linii kodu może zaoszczędzić ogromną ilość pracy, ale pojedynczy błąd w krytycznym komponencie potrafi mieć znacznie poważniejsze konsekwencje niż zwykła usterka aplikacji.

Linux już otworzył drzwi dla Rusta

Rust od kilku lat coraz mocniej zaznacza swoją obecność w świecie systemów operacyjnych. Jego obsługa została dodana do jądra Linuksa, a kolejne projekty wykorzystują go przy tworzeniu nowych komponentów. Microsoft również prowadzi migrację części infrastruktury w stronę Rusta. Jednocześnie ogromne ilości istniejącego oprogramowania nadal pozostają napisane w C lub C++.

Dlatego pomysł Canonical ma potencjał wykraczający poza samo Ubuntu. Jeśli automatyczny translator rzeczywiście poradzi sobie z dużymi i skomplikowanymi repozytoriami, może stać się narzędziem przydatnym wszędzie tam, gdzie koszt ręcznej migracji jest obecnie zbyt wysoki. Na razie projekt znajduje się jednak na etapie badań. Nie wiadomo jeszcze, kiedy narzędzie osiągnie formę pozwalającą na wykorzystanie go przy produkcyjnym oprogramowaniu. Sama decyzja Canonical pokazuje jednak, że przechodzenie z niemal półwiecznego C na Rusta przestaje być wyłącznie eksperymentem entuzjastów nowego języka.

Spodobało Ci się? Podziel się ze znajomymi!

Pokaż / Dodaj komentarze do:

Canonical chce automatycznie przepisywać kod z C na Rust. Ubuntu finansuje ambitny projekt
 0