„Rust to przyszłość programowania systemów, C to nowy asembler” – przemówienie jednego z czołowych inżynierów firmy Intel

Na niedawnym szczycie technologii Open Source (OSTS) Josha Tripletta, starszy inżynier w firmie Intel, powiedział, że jego firma jest zainteresowana osiągnięciem przez Rusta „parytetu” z językiem C, który w najbliższej przyszłości nadal dominuje w systemach i rozwoju niskiego poziomu. W swoim przemówieniu Pod tytułem „Intel i Rust: przyszłość programowania systemów” opowiedział także o historii programowania systemów, o tym, jak C stał się domyślnym językiem programowania systemów, jakie cechy Rusta dają mu przewagę nad C i jak może całkowicie zastąpić C w tej dziedzinie programowania.

„Rust to przyszłość programowania systemów, C to nowy asembler” – przemówienie jednego z czołowych inżynierów firmy Intel

Programowanie systemów to rozwój i zarządzanie oprogramowaniem, które służy jako platforma do tworzenia aplikacji aplikacyjnych, zapewniająca interakcję tych ostatnich z procesorem, pamięcią RAM, urządzeniami wejścia/wyjścia i sprzętem sieciowym. Oprogramowanie systemowe tworzy specjalną abstrakcję w postaci interfejsów, które pomagają tworzyć oprogramowanie aplikacyjne bez zagłębiania się w szczegóły działania samego sprzętu.

Sam Triplett definiuje programowanie systemów jako „wszystko, co nie jest aplikacją”. Obejmuje takie elementy, jak BIOS, oprogramowanie sprzętowe, programy ładujące i jądra systemu operacyjnego, różne typy wbudowanego kodu niskiego poziomu oraz implementacje maszyn wirtualnych. Co ciekawe, Triplett uważa, że ​​przeglądarka internetowa to także oprogramowanie systemowe, ponieważ przeglądarka już dawno stała się czymś więcej niż „tylko programem”, stając się samodzielną „platformą dla stron internetowych i aplikacji internetowych”.

W przeszłości większość programów systemowych, w tym BIOS, programy ładujące i oprogramowanie sprzętowe, była napisana w języku asemblera. W latach 1960. XX wieku zaczęto eksperymentować z zapewnieniem sprzętowej obsługi języków wysokiego poziomu, co doprowadziło do powstania takich języków, jak PL/S, BLISS, BCPL i ALGOL 68.

Następnie, w latach 1970. Dennis Ritchie stworzył język programowania C dla systemu operacyjnego Unix. Stworzony w języku programowania B, który nie obsługiwał nawet pisania, C został wypełniony potężnymi funkcjami wysokiego poziomu, które najlepiej nadawały się do pisania systemów operacyjnych i sterowników. Kilka komponentów systemu UNIX, w tym jego jądro, zostało ostatecznie przepisanych w języku C. Następnie wiele innych programów systemowych, w tym baza danych Oracle, znaczna część kodu źródłowego systemu Windows i system operacyjny Linux, również zostało napisanych w języku C.

C otrzymał ogromne wsparcie w tym kierunku. Ale co dokładnie skłoniło programistów do przejścia na to? Triplett wierzy, że aby zmotywować programistów do przejścia z jednego języka programowania na inny, ten ostatni musi najpierw zapewnić nowe funkcje bez utraty starych funkcji.

Po pierwsze, język musi oferować „w miarę imponujące” nowe funkcje. „Nie mógł być lepszy. Musi być znacznie lepiej uzasadnić wysiłek i czas inżynieryjny potrzebny do przeprowadzenia przejścia” – wyjaśnia. W porównaniu do języka asemblera, C miał wiele do zaoferowania. Obsługiwał zachowanie w pewnym stopniu bezpieczne dla typów, zapewniał lepszą przenośność i wydajność w przypadku konstrukcji wysokiego poziomu i ogólnie generował znacznie bardziej czytelny kod.

Po drugie, język musi zapewniać obsługę starych funkcji, co oznacza, że ​​w historii przejścia na C programiści musieli mieć pewność, że jest on nie mniej funkcjonalny niż język asemblera. Triplett wyjaśnia: „Nowy język nie może być po prostu lepszy, musi być także równie dobry”. Oprócz tego, że jest szybszy i obsługuje dowolny typ danych, z jakiego może korzystać język asemblera, C ma również to, co Triplett nazywa „lukiem ratunkowym” - mianowicie obsługuje wstawianie w sobie kodu języka asemblera.

„Rust to przyszłość programowania systemów, C to nowy asembler” – przemówienie jednego z czołowych inżynierów firmy Intel

Triplett uważa, że ​​C staje się teraz tym, czym był język asemblera wiele lat temu. „C jest nowym asemblerem” – deklaruje. Teraz programiści szukają nowego języka wysokiego poziomu, który nie tylko rozwiąże problemy narosłe w C, których nie da się już naprawić, ale także zaoferuje nowe, ekscytujące funkcje. Taki język musi być na tyle przekonujący, aby programiści przeszli na niego, musi być bezpieczny, zapewniać automatyczne zarządzanie pamięcią i wiele więcej.

„Każdy język, który chce być lepszy od C, musi oferować znacznie więcej niż tylko ochronę przed przepełnieniem bufora, jeśli naprawdę ma być atrakcyjną alternatywą. Programiści są zainteresowani użytecznością i wydajnością, pisząc kod, który jest zrozumiały i wykonuje więcej pracy w mniejszej liczbie wierszy. Należy również poruszyć kwestie bezpieczeństwa. Łatwość obsługi i wydajność idą w parze. Im mniej kodu musisz napisać, aby coś osiągnąć, tym mniejsza szansa na popełnienie błędów, związanych z bezpieczeństwem lub nie” – wyjaśnia Triplett.

Porównanie Rusta i C

W 2006 roku Graydon Hoare, pracownik Mozilli, zaczął pisać Rust jako osobisty projekt. W 2009 roku Mozilla zaczęła sponsorować rozwój Rusta na własne potrzeby, a także powiększyła zespół w celu dalszego rozwoju języka.

Jednym z powodów zainteresowania Mozilli nowym językiem jest fakt, że Firefox został napisany w ponad 4 milionach linii kodu C++ i miał sporo krytycznych luk w zabezpieczeniach. Rust został zbudowany z myślą o bezpieczeństwie i współbieżności, co czyni go idealnym wyborem do przepisania wielu komponentów Firefoksa w ramach projektu Quantum, mającego na celu całkowite przeprojektowanie architektury przeglądarki. Mozilla używa także Rusta do opracowania Servo, silnika renderującego HTML, który ostatecznie zastąpi obecny silnik renderujący Firefoksa. Wiele innych firm zaczęło używać Rusta w swoich projektach, w tym Microsoft, Google, Facebook, Amazon, Dropbox, Fastly, Chef, Baidu i wiele innych.

Rust rozwiązuje jeden z najważniejszych problemów języka C. Oferuje automatyczne zarządzanie pamięcią, dzięki czemu programiści nie muszą ręcznie przydzielać, a następnie zwalniać jej dla każdego obiektu w aplikacji. Tym, co odróżnia Rusta od innych współczesnych języków, jest to, że nie posiada modułu zbierającego elementy bezużyteczne, który automatycznie usuwa nieużywane obiekty z pamięci, ani środowiska wykonawczego wymaganego do jego działania, takiego jak Java Runtime Environment for Java. Zamiast tego Rust ma koncepcje własności, pożyczania, referencji i czasu życia. „Rust ma system deklarowania wywołań obiektu w celu wskazania, czy właściciel go używa, czy tylko pożycza. Jeśli po prostu pożyczysz obiekt, kompilator będzie to śledził i upewniał się, że oryginał pozostanie na swoim miejscu, dopóki będziesz się do niego odwoływać. Rust zadba również o to, aby obiekt został usunięty z pamięci natychmiast po zakończeniu jego użycia, umieszczając odpowiednie wywołanie w kodzie w czasie kompilacji, bez dodatkowego czasu” – mówi Triplett.

Brak natywnego środowiska uruchomieniowego można również uznać za pozytywną cechę Rusta. Triplett uważa, że ​​języki, w których działa, są trudne w użyciu jako narzędzia programowania systemowego. Jak wyjaśnia: „Musisz zainicjować to środowisko wykonawcze, zanim będziesz mógł wywołać jakikolwiek kod, musisz użyć tego środowiska wykonawczego do wywołania funkcji, a samo środowisko wykonawcze może w nieoczekiwanym momencie uruchomić za Twoimi plecami dodatkowy kod”.

Rust stara się także zapewnić bezpieczne programowanie równoległe. Te same funkcje, które zapewniają bezpieczeństwo pamięci, śledzą takie rzeczy, jak na przykład to, który wątek jest właścicielem danego obiektu i które obiekty można przekazywać między wątkami, a które wymagają blokady.

Wszystkie te cechy sprawiają, że Rust jest na tyle atrakcyjny, że programiści wybierają go jako nowe narzędzie do programowania systemów. Jednak pod względem obliczeń równoległych Rust wciąż pozostaje nieco w tyle za C.

Triplett zamierza stworzyć specjalną grupę roboczą, która skupi się na wprowadzeniu niezbędnych funkcjonalności do Rusta, tak aby mógł on w pełni dorównać, przewyższyć i zastąpić C w zakresie programowania systemów. W wątek na Reddiciew poświęconym swojemu wystąpieniu powiedział, że „grupa parytetowa FFI/C jest w trakcie tworzenia i jeszcze nie rozpoczęła prac”, na razie jest gotowy odpowiedzieć na wszelkie pytania, a w przyszłości na pewno opublikuje najbliższe plany za rozwój Rusta w ramach swojej inicjatywy skierowanej do wszystkich zainteresowanych.

Można założyć, że grupa FFI/C Parity skupi się przede wszystkim na usprawnieniu obsługi wielowątkowości w Rust, wprowadzeniu obsługi formatu zmiennoprzecinkowego BFLOAT16, który pojawił się w nowych procesorach Intel Xeon Scalable, a także stabilizacji montażu wstawki kodowe.



Źródło: 3dnews.ru

Dodaj komentarz