Aktywne Wpisy
WielkiNos +96
Wiedzieliście, że są ludzie wyrzucający książki na śmietnik? Bo ja nie wiedziałam. Dla mnie to niewyobrażalne.
#ksiazki #gdansk #bekazpodludzi
#ksiazki #gdansk #bekazpodludzi
Tortcebulowy +220
Skopiuj link
Skopiuj linkWykop.pl
#programowanie #naukaprogramowania #cplusplus #cpp #informatyka #rustlang
RAII efektywnie jest wymaszane w języku Rust i tam jest dużo sprawdzania wbudowanego w kompilator
Nie da się w pełni sprawdzić czegoś, co dzieje się w runtimie. Można jedynie posłużyć się sanitizerami, albo jakimś valgrindem.
@OskarDw: Google twierdzi inaczej i ma na to dość mocne dowody. Generalnie w C++ możesz łatwo strzelić UB nawet używając zwykłych typów z STLa. Nie trzeba nawet do tego wskaźników ani zarządzania pamięcią.
@Goglez: Niedostatecznie ekspresywny system typów w C++, który nie rozumie pojęcia czasu życia wartości. Musiałbyś robić analizę całego programu a to z kolei nie jest możliwe ze względu na specyficzny sposób budowania projektowe C++ gdzie pliki są kompilowane osobno.
@Goglez: nie powiedziałbym że to problem, raczej cechą gdzie pamiecią zarządza programista, co też ma wiele zalet.
Jeśli chcesz żeby pamięć zwalniała się sama możesz to zrobić - choćby licząc referencje. Natomiast oczywiście wymaga to pewnej higieny pisząc kod, bo w C++ zawsze możesz sobie zapamiętać wskaźnik
@OskarDw:
Google zaobserwował duży spadek liczby błędów w nowym kodzie odkąd zmienił C++ na Rust jako główny język rozwoju Androida:
https://security.googleblog.com/2022/12/memory-safe-languages-in-android-13.html?m=1
Microsoft doszedł wcześniej do podobnych wniosków: https://visualstudiomagazine.com/articles/2019/07/18/microsoft-eyes-rust.aspx?m=1
70% dziur bezpieczeństwa to błędy zarządzania pamięcią.
Mechanizmy bezpieczeństwa w C++ są dość mocno prowizoryczne i niczego nie gwarantują. Np. taka prosta różnica - const correctness. W C++ jak masz const referencję to wcale nie ma gwarancji
@Krolik: ten sam google w swoich projektach nie wdraża nowych rozwiązań z c++ (i nie mówię tu o świeżynkach), bo chcą zachować kompatybilność ze starym kodem. Widocznie wolą od nowa przepisywać do rusta niż uwspółcześnić starszy kod,.
@Goglez: i
https://www.mend.io/most-secure-programming-languages/
@zetisdead: Gwoli ścisłości - GC jest opcjonalne - istnieją crate'y które implementują tracing GC. GC się przydaje w implementacjach struktur lockless. Tylko że takie GC jest lokalne dla struktury danych i dzięki temu nie ma wad globalnego GC - nie powoduje pauz, nie ma też tak dużego narzutu pamięciowego.
Problem w tym,
To jest prawda, Rust jest bezpieczniejszy, ale to o czym wspominasz to są drobnostki. Wyprodukowanie kodu, który zmienia const referencje to jest dość trudne zadanie, zgaduję, że łatwiej coś popsuć w sekcji "unsafe" w Rust.
@OskarDw: A kto powiedział, że mam zmieniać const referencję? Wystarczy zmienić ten sam obiekt używając innej referencji, która nie jest const. Jest to sytuacja bardzo łatwa do uzyskania przez przypadek, w dużym projekcie, składającym się z wielu komponentów. Const nie mówi o tym, że obiekt się nie zmieni. Const mówi o tym, że jedynie Ty nie możesz zmienić obiektu. Niestety