Исключения скрыты в дебрях кода, и по сигнатуре функции не понятно, возможна там ошибка или нет. noexcept с этим особо не помогает... В расте же функция возвращает `Result<T, E>` — ты обязан обработать ошибку, через `.unwrap`, `match`, или `?`
Есть. В расте нет (в safe коде). То же знаковое целочисленное переполнение, которое в си/плюсминус является UB, в расте нормально обрабатывается (в debug проверка, в release wrapping), при этом можно явно указать какое поведение тебя интересует: `checked`, `wrapping`, `overflowing`, `saturating`. Покажи мне такое в Си++
В C++20 добавили концепты (по сути трейты из раста, только убого реализованные), рейнжи (итераторы из раста), модули (серьезно, 30 лет не могли сделать нормальную систему модулей вместо препроцессорных костылей, раст же изначально проектировался с модулями) и много других жизненно необходимых фич, если отбрасывать их ущербность. Теперь покажи кто в продакшене на C++20 перешел? там дай бог C++11 и переписывать никто не собирается, язык стал другим
А на расте что, нельзя? Чем это он принципиально отличается от си++? тот же системный язык, только с гарантиями. Вон даже ось пишут, или модули для ядра.
Ну например, инициализировать переменную можно 18 различными способами.. те же выражения бывают в 5 вариантах: rvalues, lvalues, xvalues, glvalues, и prvalues... а шаблонную наркоманию порой вообще невозможно прочесть, особенно когда дело доходит до ошибок компиляции.