Umów rozmowę z ekspertem i poznaj temat głębiej.

Rust vs C++: którą technologię wybrać?

10 sty 20238 min czytania

Michał Pruciak

Michał to doświadczony Business Development Manager. Najbardziej interesuje go styk technologii medycznych z najnowszymi rozwiązaniami. Po pracy ogląda dobre filmy albo rusza na szlak.

Rust vs C++: Which Technology Should You Choose?

Języki Rust i C++ mają duże znaczenie w rozwoju IoT: obu używa się tam, gdzie najbardziej liczą się bezpośrednie połączenie z konfiguracją sprzętu, szybkość działania oraz niskopoziomowy dostęp do pamięci i kontrolerów. Chodzi konkretnie o warstwę urządzeń i aplikacji IoT, programowanie systemowe (sterowniki, jądra systemów operacyjnych, kontrolery itd.), programowanie narzędzi desktopowych, tworzenie gier 3D i wiele innych obszarów. Sprawdźmy najważniejsze pola porównania, żeby przekonać się, który z tych dwóch będzie najlepszym wyborem do Twojego projektu!

Czym jest C++?

 

C++ to „staroszkolny” obiektowy język programowania stworzony przez Bjarne’a Stroustrupa w 1985 roku. Rozwinął koncepcję języka C, stając się tak zwanym „C z klasami”, co kilka dekad temu było rozwiązaniem wręcz rewolucyjnym. C++ zaprojektowano jako naprawdę potężne narzędzie do programowania systemowego: dosłownie większość produktów Microsoftu powstała w różnych edycjach Visual C++ (albo po prostu C++), w tym „epickie” pakiety oprogramowania, takie jak Windows 95, 98, ME, 200 i XP. Ponieważ jest to język obiektowy, C++ zapewnia określoną strukturę kodu, umożliwia ponowne wykorzystanie modułów kodu i jest ceniony za szybkie działanie. Co więcej, to język wielozadaniowy, więc zbudujesz w nim bardzo szeroką gamę produktów: od oprogramowania działającego przy ograniczonych zasobach i prostych aplikacji z graficznym interfejsem po zaawansowaną grafikę 3D, gry desktopowe i rozbudowane pakiety biznesowe. С++ jest ceniony przez programistów za szerokie możliwości, a także wydajność i elastyczność.

Czym jest Rust?

 

Rust to język programowania poziomu systemowego, stworzony przez Mozillę w 2010 roku, którego celem jest wyższa wydajność i lepszy poziom bezpieczeństwa w porównaniu z C++. Konkretnie: zaprojektowano go tak, żeby radził sobie z problemami, z którymi C++ nigdy nie radził sobie dobrze — nieefektywnością w obszarze pamięci i programowaniem współbieżnym. Pod względem składni Rust jest dość bliski C++, ale okazał się bardziej „lubiany” (w istocie wybierano go „najbardziej lubianym językiem” przez pięć lat z rzędu), co oznacza, że jest wygodniejszy i bardziej wszechstronny od innych, więc bardzo wielu programistów sięgnęło po niego w swoich projektach zamiast po C++. 

 

Użyto go do zbudowania przeglądarki Mozilla Firefox i zapewnia bezpieczniejszy sposób zarządzania pamięcią bez metod odśmiecania. Uchodzi za język niskopoziomowy, bo daje szczegółowe możliwości kontroli, zwłaszcza ręczne zarządzanie pamięcią. Rust produkuje też możliwie najmniejszy plik binarny i kompiluje się błyskawicznie, z minimalnym narzutem. 

 

10 najbardziej lubianych technologii wśród programistów

Dlaczego warto je porównać?

Ze względu na podobną składnię i lepsze podejście do obsługi pamięci oraz błędów Rust jest dziś uważany za alternatywę dla C++, a członkowie społeczności programistów uważnie ważą argumenty za i przeciw przejściu z C++ na Rusta albo z powrotem. Oba języki mają wspólne pola rywalizacji: web, gry i UI. Zanim ostatecznie zdecydujesz, który z nich wybrać do najnowszych projektów, przyjrzyjmy się kilku czynnikom i wnioskom z porównania Rust vs. C++.     

Rust vs. C++: jakość i szybkość kodowania

C++ jest językiem dynamicznie typowanym, więc brakuje w nim mechanizmów zapobiegających błędom w kodzie i wychwytujących problemy przed kompilacją całego programu. Rust jest znany jako język statycznie typowany z wieloma dodatkowymi usprawnieniami i dlatego jego proces walidacji kodu jest znacznie bardziej rygorystyczny niż w C++. Rust bardzo uważnie podchodzi do jakości i bezpieczeństwa kodu, co jest jedną z jego głównych przewag nad C++ i powodem, dla którego wielu programistów po niego sięga. 

 

Wielu programistów piszących w Rust mówi, że proces programowania jest zdecydowanie wygodniejszy dzięki dopracowanej semantyce i dobrze działającemu systemowi zapobiegania niepożądanym zachowaniom. W C++ nie jest łatwo uniknąć niezdefiniowanego zachowania, bo ten język poświęca takie mechanizmy na rzecz szybkości działania. Mimo to kodowanie zarówno w Rust, jak i w C++ bywa trudne dla początkujących, bo oba są złożonymi językami poziomu systemowego, które pozwalają poznać i kontrolować proces obliczeniowy dziejący się za kulisami.

 

Podsumowanie: Rust zdobywa tu punkt, bo pozwala łatwiej pisać kod.

Rust vs. C++: wydajność

Rust pozwala osiągnąć wyższą wydajność niż C++ dzięki lepszym standardom bezpieczeństwa, które obniżają koszt procesu wytwarzania. Na przykład dla szybszego działania C++ nie ma automatycznych narzędzi odśmiecania pamięci, co może prowadzić do wielu błędów w czasie wykonania. Jednocześnie jedną z kluczowych różnic czyniących Rusta bezpieczniejszym od C++ jest to, że wady kodu kończą się jedynie błędami kompilacji zamiast błędami w czasie wykonania. Z drugiej strony C++ potrafi osiągnąć optymalną wydajność i tworzyć wyjątkowo szybkie aplikacje przy krótszym czasie kompilacji i wykonania dzięki ogromnej bibliotece standardowej (STL), która w rękach doświadczonego inżyniera C++ nadrabia wiele braków.

 

Przy wydajnym programowaniu systemowym trzeba trzymać pamięć pod niskopoziomową kontrolą, żeby uniknąć kosztownych wycieków. W C++ ręczne zarządzanie pamięcią i wykrywanie błędów pamięci bywa zbyt zawiłe albo wymaga żmudnej pracy ręcznej, co podnosi całkowity koszt wytwarzania (choć można to rozwiązać odpowiednimi narzędziami). Rust zaprojektowano tak, żeby minimalizować takie problemy: dzięki analizie własności, sprawdzaniu pamięci w czasie kompilacji i brakowi odśmiecaczy typu „stop-the-world” Rust obsługuje kwestie pamięci i bada poprawność kodu w czasie kompilacji, a nie wykonania. 

 

Podsumowanie: Rust pozwala tworzyć bezpieczniejszy kod przy niższych kosztach wytwarzania. Żaden z tych języków nie ma jednak wyróżniających cech, których nie dałoby się odtworzyć w drugim: wszystko zależy od możliwości kompilatora, jakości kodu, logiki za nim stojącej i — koniec końców — poziomu biegłości programistów. Jeśli chcesz zobaczyć bardziej szczegółowe porównanie z mnóstwem technicznych detali, sprawdź te benchmarki C++ vs. Rust

Rust vs. C++: rozszerzalność

Jako język używany intensywnie od dekad C++ cieszy się znacznie silniejszym wsparciem i ma niezliczone frameworki oraz biblioteki. Rust przy C++ wygląda wciąż dość niedojrzale: ma niewielką bibliotekę standardową i niezbyt wiele możliwości rozszerzania funkcjonalności. Choć Rustowi mocno brakuje frameworków i rozszerzeń, dobra wiadomość jest taka, że język wciąż rozwija się w niezłym tempie, a społeczność szybko rośnie. 

 

Podsumowanie: C++ jest znacznie mocniejszy pod względem rozszerzalności. 

Rust vs. C++: funkcje

Wśród kluczowych cech Rusta można wymienić:

  • Rust pozycjonuje się jako język poziomu systemowego z użytecznymi innowacjami, takimi jak odporne na błędy, szczegółowe zarządzanie pamięcią i abstrakcje bez kosztu, które zrównują szybkość kodu niskopoziomowego z kodem korzystającym z abstrakcji.
  • Zapobieganie wyścigom danych na etapie kompilacji: Rust zapewnia lepsze zarządzanie współbieżnością dzięki systemowi własności danych.
  • Nie ma wiszących ani pustych wskaźników. 
  • Rust wychwytuje „bugi” w kodzie, zanim programiści zaczną go testować: pozwala budować programy, których poprawność kodu sprawdzana jest w czasie kompilacji.
  • Rust ma wbudowane wsparcie dla wielowątkowości.
  • Rust pozwala programistom przełączyć się na „niebezpieczny kod”, gdy trzeba poświęcić bezpieczeństwo dla wyższej wydajności, ale domyślnie trzyma się kodu bezpiecznego. W C++ z kolei niebezpieczny typ kodu to domyślny sposób pracy.

 

Najważniejsze cechy C++ to: 

 

  • C++ również oferuje abstrakcje bez kosztu.
  • Jeśli masz jakiś problem, najprawdopodobniej znajdziesz mnóstwo bibliotek C++ albo gotowych fragmentów kodu od innych użytkowników, którzy już go rozwiązali.
  • Z kilku powodów nie uchodzi za w pełni obiektowy (podobnie jak Rust).
  • C++ nie jest językiem bezpiecznym pamięciowo — w imię swojej wydajności. 
  • Wiodące narzędzie w branży gier: powstało w nim mnóstwo legendarnych albo po prostu bardzo popularnych gier. Najlepszym rozwiązaniem do tworzenia gier jest słynny Unreal Engine.
  • C++ oferuje dynamiczną alokację pamięci: pozwala na wskaźniki, więc pamięć można przydzielać dynamicznie.

Rust vs. C++: społeczność i dostępność specjalistów

 

Pod koniec 2020 roku C++ używało około 5,5 mln programistów. W tym samym czasie społeczność Rusta była pięć razy mniejsza: poniżej 1,5 mln programistów. Wnioski są oczywiste: mniejsze wsparcie dla Rusta i trudniejsze zadanie dla rekrutera, który chce zatrudnić porządnego programistę Rusta. Więcej znajdziesz w statystykach Rusta na ich blogu. Istnieje ogromna liczba pytań i odpowiedzi o C++ na Stack Overflow (ponad 700 tys.), podczas gdy Rust ma tylko ponad 20 tys.. Oznacza to, że użytkownicy Rusta wciąż muszą rozwiązywać mnóstwo problemów samodzielnie, bez mocnego wsparcia społeczności, co przy niektórych typach projektów może wydłużyć czas realizacji i podnieść koszty. 

 

Podsumowanie: C++ jest tu pewnym zwycięzcą.  

Rust vs. C++: koszt wytwarzania

Wygląda na to, że programiści Rusta mogą liczyć na wyższe zarobki w USA (i na świecie też): mają średnio 90 tys. dolarów a spora część zarabia ponad 100 tys. dolarów rocznie. Jednocześnie programiści C++ mają w swoim segmencie większą konkurencję, bo ich średnie wynagrodzenie to około 70 tys. dolarów rocznie. Najwyższe stawki na obu stanowiskach sięgają w USA 120 tys. dolarów i więcej. Na innych kontynentach wynagrodzenia bywają dużo niższe, w tym w krajach Europy Wschodniej (Polska, Rumunia, Ukraina itd.). 

 

Podsumowanie: Zatrudnienie dobrego programisty Rusta wydaje się droższe, bo jest ich mniej niż programistów C++. Chyba że rozwiązaniem będzie outsourcing prac za granicę.

 

Rust vs. C++: zalety i wady

Oto krótka lista najważniejszych punktów dla każdego z języków, żeby domknąć obraz porównania C++ vs Rust. 

Mocne strony języka Rust: 

  • Podejście bezpieczne pamięciowo, zapobiegające wyciekom pamięci.
  • Kontrola składni bezpieczna typowo.
  • Brak problemu „wyścigu danych” dzięki zarządzaniu współbieżnością.
  • Programy kompiluje się w trybie „ahead-of-time”. 
  • Wykorzystuje i promuje abstrakcje bez kosztu.
  • Brak zasobożernych „odśmiecaczy”, brak kompilatora JIT, brak maszyny wirtualnej.
  • Minimalny runtime i zużycie pamięci.
  • Bardzo dobre narzędzie do zarządzania zależnościami.
  • Pomocne komunikaty błędów kompilatora z jasnymi i wykonalnymi wskazówkami.  

Słabe strony języka Rust: 

  • Bardzo często dostaje się błędy przy kompilacji kodu. 
  • Choć mniej czasu spędzisz na debugowaniu, prawdopodobnie więcej poświęcisz na zmagania z kompilatorem, próbując przepchnąć przez niego swój kod.
  • Mniej wsparcia, bibliotek i frameworków z powodu mniejszej społeczności. 
  • Ograniczona dostępność specjalistów. 

Mocne strony języka C++: 

  • Bardzo pomocna społeczność i dobrze rozwinięty ekosystem: biblioteki, konferencje, dokumentacja itd.
  • Duże biblioteki standardowe i mnóstwo dodatków (choć nie wszystkie biblioteki zewnętrzne są dobre i łatwe w użyciu).
  • Pod pewnymi względami C++ jest bardziej elastyczny.
  • W C++ programiści mogą mocniej kontrolować zasoby systemowe, sprzęt i pamięć.

Słabe strony języka C++: 

  • C++ podaje nieporęczne komunikaty o błędach albo po prostu przyjmuje kod takim, jaki jest, na etapie kompilacji, pozwalając programowi wywrócić się w czasie wykonania.
  • C++ jest dość trudny w użyciu bez dobrego powodu: ma ogromną liczbę szczegółów, wyjątków, reguł itd.

 

Podsumowanie: trudno wskazać tu jednego zwycięzcę, bo C++ i Rust są dość podobne pod względem możliwości. Największą wadą Rusta jest jednak ograniczona społeczność i niedobór oprogramowania pomocniczego. 

Do czego nadaje się C++? 

C++ jest masowo wykorzystywany przy tworzeniu gier, aplikacji IoT, urządzeń IoT i aplikacji desktopowych, a znacznie rzadziej w obszarach web, chmury i mobile. Jak wspominaliśmy, C++ ma wiele różnych frameworków, bibliotek i zestawów narzędzi (część open source, część płatna), dzięki czemu jest dostępny dla wielu branż i zastosowań. Wystarczy powiedzieć, że powstały w nim systemy operacyjne Windows. W branży gier współpracuje z frameworkiem Unity i Unreal Engine. 

 

Konkretne produkty napisane w C++ to tysiące popularnych gier, w tym Civilization IV, Half-Life 2, Doom 3 itd. (można je wymieniać bez końca), oraz popularne pakiety oprogramowania, takie jak Adobe Photoshop i Illustrator, Microsoft Office, wewnętrzne algorytmy przetwarzania wideo YouTube’a i wiele innych. 

Do czego nadaje się Rust?

Rust jest wykorzystywany głównie w AR/VR, aplikacjach IoT i programowaniu sprzętu. Ponieważ jest językiem niskopoziomowym pozwalającym na wysokopoziomowe abstrakcje, świetnie sprawdza się tam, gdzie trzeba znaleźć równowagę między funkcjami wysokiego i niskiego poziomu. Dzięki dostępowi do pamięci i sprzętu Rust dobrze radzi sobie w rozwiązaniach wbudowanych i opartych na urządzeniach. Doskonale nadaje się do pisania oprogramowania niskopoziomowego: jąder systemów operacyjnych, narzędzi systemowych i sterowników mikrokontrolerów. Te technicznie głębokie warstwy architektury obliczeniowej „doceniają” podstawowe typy, funkcje i wielokrotnego użytku kod bibliotek Rusta. Wśród przykładów systemów operacyjnych napisanych w Rust wymieńmy Redox, RustOS, QuiltOS, BlogOS, intermezzOS, Tefflin itd.  Mozilla Firefox używa go w swoim silniku Servo, a inne duże marki, w tym Microsoft czy Google, wykorzystują go w wybranych komponentach swoich bardzo wydajnych systemów.


Rust vs C++

Na koniec

Jak widzisz, oba języki mają mnóstwo niuansów do rozważenia. W wyścigu C++ vs Rust nie ma jednego zwycięzcy. Jeśli wciąż nie masz pewności, którego języka użyć w swoim projekcie (a to normalne, jeśli sam nie jesteś programistą), koniecznie odbądź krótką rozmowę z naszymi doświadczonymi konsultantami. 

 

Chętnie dowiemy się więcej o Twoim pomyśle lub produkcie i zaproponujemy kompletne rozwiązanie, w tym pomoc naszych wewnętrznych programistów C++ i Rust o najwyższym poziomie biegłości, w rozsądnej cenie. Zrobimy, co w naszej mocy, żeby nie tylko dobrać właściwy stos technologii, ale też pomóc Ci osiągnąć najlepszą zgodność z najwyższymi standardami branżowymi!

 

Frame 26

Michał Pruciak

Michał Pruciak doradza liderom firm technologicznych. Zna się na rozwoju biznesu i lubi łączyć technologie medyczne z najnowszymi rozwiązaniami. Myśli strategicznie i potrafi krytycznie spojrzeć na problem. Po pracy ogląda filmy i chodzi po górach, bo ruch pomaga mu zachować równowagę.

Zobacz wszystkie wpisy autora

Szukasz programistów, którzy zbudują Twój kolejny produkt?

Ula
Justyn
Pawel
Marcin

Elastyczne rozwiązania w zatrudnianiu i outsourcingu IT.

Dowiedz się więcej
Frame 2-1
Porozmawiaj z autorem artykułu
Zamiast tylko czytać, zapytaj eksperta. Umów rozmowę i dowiedz się, jak to wygląda w praktyce.
Umów konsultację