«Rust — przyszłość programowania systemowego, C — nowy assembler» — wystąpienie jednego z głównych inżynierów Intela

Na niedawno odbywającym się Szczycie Technologii Open Source (Open Source Technology Summit - OSTS) Josh Triplett, główny inżynier Intela, oznajmił, że jego firma jest zainteresowana osiągnięciem "parytetu" Rust z wciąż dominującym w dziedzinie programowania systemowego i niskopoziomowego językiem C w bliskiej przyszłości. W swoim wystąpieniu pod tytułem „Intel i Rust: przyszłość programowania systemowego” opowiedział również o historii programowania systemowego, o tym, jak C stał się językiem programowania systemowego „z wyboru”, jakie możliwości daje Rust, aby przewyższyć C oraz jak w bliskiej przyszłości może on całkowicie zastąpić C w tej dziedzinie programowania.

«Rust — przyszłość programowania systemowego, C — nowy assembler» — wystąpienie jednego z głównych inżynierów Intela

Programowanie systemowe to rozwój i zarządzanie oprogramowaniem, które służy jako platforma do tworzenia aplikacji, zapewniając 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ą w tworzeniu aplikacji, nie zagłębiając się w szczegóły tego, jak działa „sprzęt”.

Sam Triplett definiuje programowanie systemowe jako „wszystko, co nie jest aplikacją”. Obejmuje to takie rzeczy jak BIOS, programy rozruchowe, oprogramowanie układowe oraz jądra systemów operacyjnych, różne rodzaje wbudowanego niskopoziomowego kodu, a także implementacje maszyn wirtualnych. Interesujące jest to, że Triplett uważa, iż przeglądarka internetowa to również oprogramowanie systemowe, ponieważ przeglądarka od dawna stała się czymś więcej niż „tylko programem”, przekształcając się w autonomiczną „platformę dla witryn internetowych i aplikacji internetowych”.

W przeszłości większość programów systemowych, w tym BIOS, programy rozruchowe i oprogramowanie układowe, była pisana w języku assemblera. W latach 60. rozpoczęto eksperymenty nad wdrażaniem sprzętowego wsparcia dla języków wysokiego poziomu, co doprowadziło do powstania takich języków jak PL/S, BLISS, BCPL i ALGOL 68.

W latach 70. Dennis Ritchie stworzył język programowania C dla systemu operacyjnego Unix. Oparty na języku B, który nie miał nawet wsparcia dla typów, C był bogaty w potężne funkcje wysokiego poziomu, które najlepiej nadawały się do pisania systemów operacyjnych i sterowników. Kilka komponentów UNIX, w tym jego jądro, zostało ostatecznie przepisanych w C. W dalszym ciągu wiele innych programów systemowych, w tym baza danych Oracle, większość kodu źródłowego Windows oraz system operacyjny Linux, również zostało napisanych w C.

C zyskał ogromne wsparcie w tym kierunku. Ale co dokładnie skłoniło programistów do przejścia na niego? Triplett uważa, że aby zmotywować programistów do przejścia z jednego języka programowania na inny, ten ostatni przede wszystkim musi zapewnić nowe funkcje bez utraty starych możliwości.

Po pierwsze, język musi oferować "wystarczająco imponujące" nowe funkcje. "Nie może być tylko odrobinę lepszy. Musi być znacznie lepszy, aby uzasadnić wysiłki i czas inżynierów potrzebny do przejścia" - tłumaczy. W porównaniu z asemblerem C miał wiele rzeczy, które mógł zaoferować. Oferował w pewnym stopniu bezpieczne typowanie, lepszą przenośność i wydajność z konstrukcjami wysokiego poziomu oraz generował ogólnie znacznie bardziej czytelny kod.

Po drugie, język musi zapewniać wsparcie dla starych możliwości, co oznacza, że w historii przejścia na C programiści musieli być pewni, że jest on co najmniej tak funkcjonalny, jak asembler. Triplett wyjaśnia: "Nowy język nie może być tylko lepszy, musi też nie być gorszy". Oprócz tego, że C był szybszy i obsługiwał wszelkie typy danych, które mogły być używane przez asembler, miał również to, co Triplett nazwał "awaryjnym wyjściem", to znaczy wspierał w sobie wstawki kodu w języku asemblerowym.

«Rust — przyszłość programowania systemowego, C — nowy assembler» — wystąpienie jednego z głównych inżynierów Intela

Triplet uważa, że C staje się teraz tym, czym język assemblera był wiele lat temu. „C to nowy assembler” — twierdzi. Teraz programiści poszukują nowego języka wysokiego poziomu, który nie tylko rozwiąże narastające problemy C, których naprawa jest już niemożliwa, ale także zaproponuje nowe, intrygujące możliwości. Taki język musi być wystarczająco przekonujący, aby skłonić programistów do jego przyjęcia, 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ę chce być przekonującą alternatywą. Programiści są zainteresowani łatwością użycia i wydajnością, pisaniem kodu, który nie wymaga wyjaśnień i wykonuje więcej pracy w mniejszej liczbie linii. Należy także rozwiązać problemy związane z bezpieczeństwem. Łatwość użycia i wydajność są nierozerwalnie ze sobą powiązane. Im mniej kodu musisz napisać, aby osiągnąć coś, tym mniej masz możliwości popełnienia błędów związanych z bezpieczeństwem lub innymi”, wyjaśnia Triplet.

Porównanie Rust i C

Już w 2006 roku Graydon Hoare, pracownik Mozilli, zaczął pisać Rust jako projekt osobisty. W 2009 roku Mozilla rozpoczęła finansowanie rozwoju Rust do swoich potrzeb, a także powiększyła zespół w celu dalszego rozwoju języka.

Jednym z powodów, dla których Mozilla zainteresowała się nowym językiem, jest to, że Firefox został napisany w ponad 4 milionach linii kodu C++ i miał wiele poważnych podatności. Rust został stworzony z myślą o wymaganiach dotyczących bezpieczeństwa i równoległości, co czyni go idealnym wyborem do przepisania wielu komponentów Firefoksa w ramach projektu Quantum, którego celem jest całkowita przebudowa architektury przeglądarki. Mozilla wykorzystuje również Rust do rozwoju Servo, silnika renderowania HTML, który w przyszłości zastąpi obecny silnik renderowania Firefoksa. Wiele innych firm zaczęło również korzystać z 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ą, więc programiści nie muszą ręcznie alokować i zwalniać pamięci dla każdego obiektu w aplikacji. Co odróżnia Rust od innych nowoczesnych języków, to fakt, że nie posiada on mechanizmu garbage collection, który automatycznie usuwa nieużywane obiekty z pamięci, ani środowiska uruchomieniowego potrzebnego do jego działania, jak na przykład Java Runtime Environment dla Javy. Zamiast tego Rust opiera się na koncepcjach własności, pożyczania, referencji i czasu życia. „W Rust istnieje system deklaracji wywołań obiektów, który pozwala wskazać, czy jest on używany przez właściciela, czy to tylko pożyczka. Jeśli tylko pożyczasz obiekt, kompilator będzie to śledził i zapewni, że oryginał pozostanie na miejscu, dopóki na niego wskazujesz. Rust również zadba, aby obiekt został usunięty z pamięci natychmiast po zakończeniu jego użycia, wstawiając odpowiednie wywołanie do kodu w trakcie kompilacji bez dodatkowych kosztów czasowych” — mówi Triplett.

Brak własnego środowiska uruchomieniowego można również uznać za pozytywną cechę Rust. Triplett uważa, że języki, które korzystają z takiego środowiska, są trudne do wykorzystania jako narzędzie do programowania systemowego. Jak wyjaśnia: „Musisz zainicjować to środowisko uruchomieniowe, zanim będziesz mógł wywołać jakikolwiek kod, musisz używać tego środowiska uruchomieniowego do wywoływania funkcji, a samo środowisko uruchomieniowe może uruchamiać dodatkowy kod za twoimi plecami w niespodziewanych momentach”.

Rust dąży również do zapewnienia bezpiecznego programowania równoległego. Te same funkcje, które czynią go bezpiecznym w kontekście pamięci, śledzą takie rzeczy, jak to, któremu wątkowi należy dany obiekt oraz które obiekty mogą być przekazywane między wątkami, a które wymagają blokady.

Wszystkie te funkcje sprawiają, że Rust jest na tyle przekonujący, że programiści mogą wybrać go jako nowe narzędzie do programowania systemowego. Jednak z perspektywy obliczeń równoległych Rust wciąż nieco ustępuje C.

Josh Triplett zamierza utworzyć specjalną grupę roboczą, która zajmie się wdrożeniem niezbędnych funkcji w Rust, aby mógł on całkowicie dorównać, przewyższyć i zastąpić C w dziedzinie programowania systemowego. W wątku na Reddit, poświęconym jego wystąpieniu, poinformował, że „grupa FFI/C Parity jest w trakcie tworzenia i jeszcze nie rozpoczęła pracy”, jak dotąd jest gotowy odpowiedzieć na wszelkie pytania, a w przyszłości opublikuje najbliższe plany dotyczące rozwoju Rust w ramach swojej inicjatywy dla wszystkich zainteresowanych.

Można przypuszczać, że w pierwszej kolejności grupa FFI/C Parity skoncentruje się na poprawie obsługi wielowątkowości w Rust, wprowadzeniu wsparcia dla BFLOAT16, formatu reprezentacji liczb zmiennoprzecinkowych, który pojawił się w nowych procesorach Intel Xeon Scalable, a także na stabilizacji wstawiania kodu w asemblerze.



Źródło: 3dnews.ru
Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster